From 6a6d00e168e3ba0b867c777dde382060b8a46796 Mon Sep 17 00:00:00 2001 From: Han Han Date: Thu, 9 Jan 2020 16:00:07 +0800 Subject: [PATCH] conf: Add rng backend model builtin The 'builtin' rng backend model can be used as following: Signed-off-by: Han Han Reviewed-by: Michal Privoznik --- docs/formatdomain.html.in | 10 ++++++++++ docs/formatdomaincaps.html.in | 1 + docs/schemas/domaincommon.rng | 6 ++++++ src/conf/domain_audit.c | 2 ++ src/conf/domain_conf.c | 9 +++++++++ src/conf/domain_conf.h | 1 + src/qemu/qemu_command.c | 10 ++++++++++ src/qemu/qemu_domain.c | 4 ++++ 8 files changed, 43 insertions(+) diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index 4db9c292b7..c810e8a588 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -8259,6 +8259,8 @@ qemu-kvm -net nic,model=? /dev/null <source mode='bind' service='1234'/> <source mode='connect' host='1.2.3.4' service='1234'/> </backend> + <!-- OR --> + <backend model='builtin'/> </rng> </devices> ... @@ -8323,6 +8325,14 @@ qemu-kvm -net nic,model=? /dev/null for more information.

+
builtin
+
+

+ This backend uses qemu builtin random generator, which uses + getrandom() syscall as the source of entropy. + (Since 6.1.0 and QEMU 4.2) +

+
driver
diff --git a/docs/formatdomaincaps.html.in b/docs/formatdomaincaps.html.in index 6bf7a1c17a..aa4dece220 100644 --- a/docs/formatdomaincaps.html.in +++ b/docs/formatdomaincaps.html.in @@ -481,6 +481,7 @@ <enum name='backendModel'> <value>random</value> <value>egd</value> + <value>builtin</value> </enum> </rng> ... diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index 76d94b156f..9925257650 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -5683,6 +5683,12 @@ + + + builtin + + + diff --git a/src/conf/domain_audit.c b/src/conf/domain_audit.c index fdccc585fb..138f270129 100644 --- a/src/conf/domain_audit.c +++ b/src/conf/domain_audit.c @@ -227,6 +227,7 @@ virDomainAuditRNG(virDomainObjPtr vm, newsrcpath = virDomainChrSourceDefGetPath(newDef->source.chardev); break; + case VIR_DOMAIN_RNG_BACKEND_BUILTIN: case VIR_DOMAIN_RNG_BACKEND_LAST: break; } @@ -242,6 +243,7 @@ virDomainAuditRNG(virDomainObjPtr vm, oldsrcpath = virDomainChrSourceDefGetPath(oldDef->source.chardev); break; + case VIR_DOMAIN_RNG_BACKEND_BUILTIN: case VIR_DOMAIN_RNG_BACKEND_LAST: break; } diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 707d58e1a4..839ad8331f 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -1113,6 +1113,7 @@ VIR_ENUM_IMPL(virDomainRNGBackend, VIR_DOMAIN_RNG_BACKEND_LAST, "random", "egd", + "builtin", ); VIR_ENUM_IMPL(virDomainTPMModel, @@ -14792,6 +14793,7 @@ virDomainRNGDefParseXML(virDomainXMLOptionPtr xmlopt, goto error; break; + case VIR_DOMAIN_RNG_BACKEND_BUILTIN: case VIR_DOMAIN_RNG_BACKEND_LAST: break; } @@ -17851,6 +17853,7 @@ virDomainRNGFind(virDomainDefPtr def, continue; break; + case VIR_DOMAIN_RNG_BACKEND_BUILTIN: case VIR_DOMAIN_RNG_BACKEND_LAST: break; } @@ -26531,6 +26534,11 @@ virDomainRNGDefFormat(virBufferPtr buf, return -1; virBufferAdjustIndent(buf, -2); virBufferAddLit(buf, "\n"); + break; + + case VIR_DOMAIN_RNG_BACKEND_BUILTIN: + virBufferAddLit(buf, "/>\n"); + break; case VIR_DOMAIN_RNG_BACKEND_LAST: break; @@ -26562,6 +26570,7 @@ virDomainRNGDefFree(virDomainRNGDefPtr def) case VIR_DOMAIN_RNG_BACKEND_EGD: virObjectUnref(def->source.chardev); break; + case VIR_DOMAIN_RNG_BACKEND_BUILTIN: case VIR_DOMAIN_RNG_BACKEND_LAST: break; } diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 9ae8411f6c..5d736e99c0 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -2106,6 +2106,7 @@ typedef enum { typedef enum { VIR_DOMAIN_RNG_BACKEND_RANDOM, VIR_DOMAIN_RNG_BACKEND_EGD, + VIR_DOMAIN_RNG_BACKEND_BUILTIN, VIR_DOMAIN_RNG_BACKEND_LAST } virDomainRNGBackend; diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index c66b60fd21..c8322c2112 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -5594,6 +5594,12 @@ qemuBuildRNGBackendChrdevStr(virLogManagerPtr logManager, rng->info.alias, qemuCaps, cdevflags))) return -1; + break; + + case VIR_DOMAIN_RNG_BACKEND_BUILTIN: + virReportUnsupportedError(); + return -1; + break; } return 0; @@ -5644,6 +5650,10 @@ qemuBuildRNGBackendProps(virDomainRNGDefPtr rng, break; + case VIR_DOMAIN_RNG_BACKEND_BUILTIN: + virReportUnsupportedError(); + return -1; + case VIR_DOMAIN_RNG_BACKEND_LAST: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("unknown rng-random backend")); diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 4604b6c993..50b116445a 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -14807,8 +14807,10 @@ qemuDomainSetupRNG(virQEMUDriverConfigPtr cfg G_GNUC_UNUSED, case VIR_DOMAIN_RNG_BACKEND_RANDOM: if (qemuDomainCreateDevice(rng->source.file, data, false) < 0) return -1; + break; case VIR_DOMAIN_RNG_BACKEND_EGD: + case VIR_DOMAIN_RNG_BACKEND_BUILTIN: case VIR_DOMAIN_RNG_BACKEND_LAST: /* nada */ break; @@ -15788,6 +15790,7 @@ qemuDomainNamespaceSetupRNG(virDomainObjPtr vm, break; case VIR_DOMAIN_RNG_BACKEND_EGD: + case VIR_DOMAIN_RNG_BACKEND_BUILTIN: case VIR_DOMAIN_RNG_BACKEND_LAST: break; } @@ -15811,6 +15814,7 @@ qemuDomainNamespaceTeardownRNG(virDomainObjPtr vm, break; case VIR_DOMAIN_RNG_BACKEND_EGD: + case VIR_DOMAIN_RNG_BACKEND_BUILTIN: case VIR_DOMAIN_RNG_BACKEND_LAST: break; }