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;
}