[libvirt] [PATCH 0/7] Support rng backend model 'builtin'

https://bugzilla.redhat.com/show_bug.cgi?id=1785091 This rng backend is added since QEMU 4.2. It uses getrandom() syscall to generate random instread of external rng source. QEMU bug reference: https://bugzilla.redhat.com/show_bug.cgi?id=1689946 Han Han (7): qemu_capabilities: Introduce QEMU_CAPS_OBJECT_RNG_BUILTIN util: Do not assume comma after object id qemu: Implement builtin rng backend docs: Add schemas for rng backend builtin tests: Add tests fr virtio-rng backend builtin docs: Documents for virtio-rng backend builtin news: Update news for rng backend type builtin docs/formatdomain.html.in | 10 ++++++ docs/formatdomaincaps.html.in | 1 + docs/news.xml | 10 ++++++ 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_capabilities.c | 4 +++ src/qemu/qemu_capabilities.h | 1 + src/qemu/qemu_command.c | 15 +++++++++ src/qemu/qemu_domain.c | 3 ++ src/util/virqemu.c | 13 ++++---- .../domaincapsdata/qemu_4.2.0-q35.x86_64.xml | 1 + .../domaincapsdata/qemu_4.2.0-tcg.x86_64.xml | 1 + .../qemu_4.2.0-virt.aarch64.xml | 1 + tests/domaincapsdata/qemu_4.2.0.aarch64.xml | 1 + tests/domaincapsdata/qemu_4.2.0.ppc64.xml | 1 + tests/domaincapsdata/qemu_4.2.0.s390x.xml | 1 + tests/domaincapsdata/qemu_4.2.0.x86_64.xml | 1 + .../caps_4.2.0.aarch64.xml | 1 + .../qemucapabilitiesdata/caps_4.2.0.ppc64.xml | 1 + .../qemucapabilitiesdata/caps_4.2.0.s390x.xml | 1 + .../caps_4.2.0.x86_64.xml | 1 + .../qemuxml2argvdata/virtio-rng-builtin.args | 30 ++++++++++++++++++ tests/qemuxml2argvdata/virtio-rng-builtin.xml | 26 ++++++++++++++++ tests/qemuxml2argvtest.c | 3 ++ .../qemuxml2xmloutdata/virtio-rng-builtin.xml | 31 +++++++++++++++++++ tests/qemuxml2xmltest.c | 2 ++ 28 files changed, 172 insertions(+), 6 deletions(-) create mode 100644 tests/qemuxml2argvdata/virtio-rng-builtin.args create mode 100644 tests/qemuxml2argvdata/virtio-rng-builtin.xml create mode 100644 tests/qemuxml2xmloutdata/virtio-rng-builtin.xml -- 2.23.0

It is used to check if qemu is capable of rng-builtin object: -object rng-builtin,id=id This object is added since qemu-4.2.0-rc0, commit 6c4e9d48. Signed-off-by: Han Han <hhan@redhat.com> --- src/qemu/qemu_capabilities.c | 4 ++++ src/qemu/qemu_capabilities.h | 1 + 2 files changed, 5 insertions(+) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 0929fd3e..19edaa67 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -553,6 +553,7 @@ VIR_ENUM_IMPL(virQEMUCaps, "blockdev-file-dynamic-auto-read-only", "savevm-monitor-nodes", "drive-nvme", + "rng-builtin", ); @@ -1245,6 +1246,7 @@ struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[] = { { "vhost-user-vga", QEMU_CAPS_DEVICE_VHOST_USER_VGA }, { "ramfb", QEMU_CAPS_DEVICE_RAMFB }, { "max-arm-cpu", QEMU_CAPS_ARM_MAX_CPU }, + { "rng-builtin", QEMU_CAPS_OBJECT_RNG_BUILTIN }, }; static struct virQEMUCapsStringFlags virQEMUCapsDevicePropsVirtioBalloon[] = { @@ -5719,6 +5721,8 @@ virQEMUCapsFillDomainDeviceRNGCaps(virQEMUCapsPtr qemuCaps, VIR_DOMAIN_CAPS_ENUM_SET(rng->backendModel, VIR_DOMAIN_RNG_BACKEND_EGD); if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_RNG_RANDOM)) VIR_DOMAIN_CAPS_ENUM_SET(rng->backendModel, VIR_DOMAIN_RNG_BACKEND_RANDOM); + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_RNG_BUILTIN)) + VIR_DOMAIN_CAPS_ENUM_SET(rng->backendModel, VIR_DOMAIN_RNG_BACKEND_BUILTIN); } diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index 193c19fc..f25b60a2 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -534,6 +534,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */ QEMU_CAPS_BLOCK_FILE_AUTO_READONLY_DYNAMIC, /* the auto-read-only property of block backends for files is dynamic */ QEMU_CAPS_SAVEVM_MONITOR_NODES, /* 'savevm' handles monitor-owned nodes properly */ QEMU_CAPS_DRIVE_NVME, /* -drive file.driver=nvme */ + QEMU_CAPS_OBJECT_RNG_BUILTIN, /* -object rng-builtin */ QEMU_CAPS_LAST /* this must always be the last item */ } virQEMUCapsFlags; -- 2.23.0

On Wed, Jan 01, 2020 at 13:06:31 +0800, Han Han wrote:
It is used to check if qemu is capable of rng-builtin object: -object rng-builtin,id=id
This object is added since qemu-4.2.0-rc0, commit 6c4e9d48.
Signed-off-by: Han Han <hhan@redhat.com> --- src/qemu/qemu_capabilities.c | 4 ++++ src/qemu/qemu_capabilities.h | 1 + 2 files changed, 5 insertions(+)
[...]
static struct virQEMUCapsStringFlags virQEMUCapsDevicePropsVirtioBalloon[] = { @@ -5719,6 +5721,8 @@ virQEMUCapsFillDomainDeviceRNGCaps(virQEMUCapsPtr qemuCaps, VIR_DOMAIN_CAPS_ENUM_SET(rng->backendModel, VIR_DOMAIN_RNG_BACKEND_EGD); if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_RNG_RANDOM)) VIR_DOMAIN_CAPS_ENUM_SET(rng->backendModel, VIR_DOMAIN_RNG_BACKEND_RANDOM); + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_RNG_BUILTIN)) + VIR_DOMAIN_CAPS_ENUM_SET(rng->backendModel, VIR_DOMAIN_RNG_BACKEND_BUILTIN);
Fails to compile: /home/pipo/libvirt/src/qemu/qemu_capabilities.c: In function 'virQEMUCapsFillDomainDeviceRNGCaps': /home/pipo/libvirt/src/qemu/qemu_capabilities.c:5725:53: error: 'VIR_DOMAIN_RNG_BACKEND_BUILTIN' undeclared (first use in this function); did you mean 'VIR_DOMAIN_RNG_BACKEND_LAST'? 5725 | VIR_DOMAIN_CAPS_ENUM_SET(rng->backendModel, VIR_DOMAIN_RNG_BACKEND_BUILTIN); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /home/pipo/libvirt/src/conf/domain_capabilities.h:219:36: note: in definition of macro 'VIR_DOMAIN_CAPS_ENUM_SET' 219 | unsigned int __values[] = {__VA_ARGS__}; \ | ^~~~~~~~~~~ /home/pipo/libvirt/src/qemu/qemu_capabilities.c:5725:53: note: each undeclared identifier is reported only once for each function it appears in 5725 | VIR_DOMAIN_CAPS_ENUM_SET(rng->backendModel, VIR_DOMAIN_RNG_BACKEND_BUILTIN); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /home/pipo/libvirt/src/conf/domain_capabilities.h:219:36: note: in definition of macro 'VIR_DOMAIN_CAPS_ENUM_SET' 219 | unsigned int __values[] = {__VA_ARGS__}; \ | ^~~~~~~~~~~

From: Han Han <hanhanzhiyeqianke@gmail.com> For qemu object like rng-builtin, there are no properties after id property. We should always set comma after object id. Otherwise it will cause trailing comma on object: -object rng-builtin,id=ID, Signed-off-by: Han Han <hhan@redhat.com> --- src/util/virqemu.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/util/virqemu.c b/src/util/virqemu.c index f3a233af..72151e43 100644 --- a/src/util/virqemu.c +++ b/src/util/virqemu.c @@ -239,12 +239,13 @@ virQEMUBuildObjectCommandlineFromJSONInternal(virBufferPtr buf, return -1; } - virBufferAsprintf(buf, "%s,id=%s,", type, alias); - - if (props && - virQEMUBuildCommandLineJSON(props, buf, - virQEMUBuildCommandLineJSONArrayBitmap) < 0) - return -1; + virBufferAsprintf(buf, "%s,id=%s", type, alias); + if (props) { + virBufferAsprintf(buf, ","); + if (virQEMUBuildCommandLineJSON(props, buf, + virQEMUBuildCommandLineJSONArrayBitmap) < 0) + return -1; + } return 0; } -- 2.23.0

On Wed, Jan 01, 2020 at 13:06:32 +0800, Han Han wrote:
From: Han Han <hanhanzhiyeqianke@gmail.com>
For qemu object like rng-builtin, there are no properties after id property. We should always set comma after object id. Otherwise it will cause trailing comma on object: -object rng-builtin,id=ID,
Signed-off-by: Han Han <hhan@redhat.com> --- src/util/virqemu.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/src/util/virqemu.c b/src/util/virqemu.c index f3a233af..72151e43 100644 --- a/src/util/virqemu.c +++ b/src/util/virqemu.c @@ -239,12 +239,13 @@ virQEMUBuildObjectCommandlineFromJSONInternal(virBufferPtr buf, return -1; }
- virBufferAsprintf(buf, "%s,id=%s,", type, alias); - - if (props && - virQEMUBuildCommandLineJSON(props, buf, - virQEMUBuildCommandLineJSONArrayBitmap) < 0) - return -1; + virBufferAsprintf(buf, "%s,id=%s", type, alias);
Keep the newline here.
+ if (props) { + virBufferAsprintf(buf, ",");
Use vir BufferAddLit instead.
+ if (virQEMUBuildCommandLineJSON(props, buf, + virQEMUBuildCommandLineJSONArrayBitmap) < 0) + return -1; + }
return 0; } -- 2.23.0
-- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list

On Mon, Jan 6, 2020 at 5:58 PM Peter Krempa <pkrempa@redhat.com> wrote:
On Wed, Jan 01, 2020 at 13:06:32 +0800, Han Han wrote:
From: Han Han <hanhanzhiyeqianke@gmail.com>
For qemu object like rng-builtin, there are no properties after id property. We should always set comma after object id. Otherwise it will cause trailing comma on object: -object rng-builtin,id=ID,
Signed-off-by: Han Han <hhan@redhat.com> --- src/util/virqemu.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/src/util/virqemu.c b/src/util/virqemu.c index f3a233af..72151e43 100644 --- a/src/util/virqemu.c +++ b/src/util/virqemu.c @@ -239,12 +239,13 @@ virQEMUBuildObjectCommandlineFromJSONInternal(virBufferPtr buf, return -1; }
- virBufferAsprintf(buf, "%s,id=%s,", type, alias); - - if (props && - virQEMUBuildCommandLineJSON(props, buf, - virQEMUBuildCommandLineJSONArrayBitmap) < 0) - return -1; + virBufferAsprintf(buf, "%s,id=%s", type, alias);
Keep the newline here.
+ if (props) { + virBufferAsprintf(buf, ",");
Use vir BufferAddLit instead.
virBufferAsprintf is for format strings and virBufferAddLit is for const strings, right?
+ if (virQEMUBuildCommandLineJSON(props, buf, + virQEMUBuildCommandLineJSONArrayBitmap) < 0) + return -1; + }
return 0; } -- 2.23.0
-- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
-- Best regards, ----------------------------------- Han Han Quality Engineer Redhat. Email: hhan@redhat.com Phone: +861065339333

Since v4.2-rc0, QEMU introduced a builtin rng backend that uses getrandom() syscall to generate random. Add it to libvirt with the backend model 'builtin'. https://bugzilla.redhat.com/show_bug.cgi?id=1785091 Signed-off-by: Han Han <hhan@redhat.com> --- src/conf/domain_audit.c | 2 ++ src/conf/domain_conf.c | 9 +++++++++ src/conf/domain_conf.h | 1 + src/qemu/qemu_command.c | 15 +++++++++++++++ src/qemu/qemu_domain.c | 3 +++ 5 files changed, 30 insertions(+) diff --git a/src/conf/domain_audit.c b/src/conf/domain_audit.c index fdccc585..138f2701 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 afa072e1..76599806 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -1112,6 +1112,7 @@ VIR_ENUM_IMPL(virDomainRNGBackend, VIR_DOMAIN_RNG_BACKEND_LAST, "random", "egd", + "builtin", ); VIR_ENUM_IMPL(virDomainTPMModel, @@ -14821,6 +14822,7 @@ virDomainRNGDefParseXML(virDomainXMLOptionPtr xmlopt, goto error; break; + case VIR_DOMAIN_RNG_BACKEND_BUILTIN: case VIR_DOMAIN_RNG_BACKEND_LAST: break; } @@ -17764,6 +17766,7 @@ virDomainRNGFind(virDomainDefPtr def, continue; break; + case VIR_DOMAIN_RNG_BACKEND_BUILTIN: case VIR_DOMAIN_RNG_BACKEND_LAST: break; } @@ -26443,6 +26446,11 @@ virDomainRNGDefFormat(virBufferPtr buf, return -1; virBufferAdjustIndent(buf, -2); virBufferAddLit(buf, "</backend>\n"); + break; + + case VIR_DOMAIN_RNG_BACKEND_BUILTIN: + virBufferAddLit(buf, "/>\n"); + break; case VIR_DOMAIN_RNG_BACKEND_LAST: break; @@ -26474,6 +26482,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 e012975f..ac1db682 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -2103,6 +2103,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 a8137b3a..d372d289 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -5579,6 +5579,7 @@ qemuBuildRNGBackendChrdevStr(virLogManagerPtr logManager, switch ((virDomainRNGBackend) rng->backend) { case VIR_DOMAIN_RNG_BACKEND_RANDOM: + case VIR_DOMAIN_RNG_BACKEND_BUILTIN: case VIR_DOMAIN_RNG_BACKEND_LAST: /* no chardev backend is needed */ return 0; @@ -5640,6 +5641,20 @@ qemuBuildRNGBackendProps(virDomainRNGDefPtr rng, break; + case VIR_DOMAIN_RNG_BACKEND_BUILTIN: + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_RNG_BUILTIN)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("this qemu doesn't support the rng-builtin " + "backend")); + return -1; + } + + if (qemuMonitorCreateObjectProps(props, "rng-builtin", objAlias, + NULL) < 0) + return -1; + + break; + 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 ff87720f..19636e6f 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -14807,6 +14807,7 @@ qemuDomainSetupRNG(virQEMUDriverConfigPtr cfg G_GNUC_UNUSED, return -1; case VIR_DOMAIN_RNG_BACKEND_EGD: + case VIR_DOMAIN_RNG_BACKEND_BUILTIN: case VIR_DOMAIN_RNG_BACKEND_LAST: /* nada */ break; @@ -15786,6 +15787,7 @@ qemuDomainNamespaceSetupRNG(virDomainObjPtr vm, break; case VIR_DOMAIN_RNG_BACKEND_EGD: + case VIR_DOMAIN_RNG_BACKEND_BUILTIN: case VIR_DOMAIN_RNG_BACKEND_LAST: break; } @@ -15809,6 +15811,7 @@ qemuDomainNamespaceTeardownRNG(virDomainObjPtr vm, break; case VIR_DOMAIN_RNG_BACKEND_EGD: + case VIR_DOMAIN_RNG_BACKEND_BUILTIN: case VIR_DOMAIN_RNG_BACKEND_LAST: break; } -- 2.23.0

On Wed, Jan 01, 2020 at 13:06:33 +0800, Han Han wrote:
Since v4.2-rc0, QEMU introduced a builtin rng backend that uses getrandom() syscall to generate random. Add it to libvirt with the backend model 'builtin'.
https://bugzilla.redhat.com/show_bug.cgi?id=1785091
Signed-off-by: Han Han <hhan@redhat.com> --- src/conf/domain_audit.c | 2 ++ src/conf/domain_conf.c | 9 +++++++++ src/conf/domain_conf.h | 1 + src/qemu/qemu_command.c | 15 +++++++++++++++ src/qemu/qemu_domain.c | 3 +++ 5 files changed, 30 insertions(+)
[...]
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index a8137b3a..d372d289 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c
[...]
@@ -5640,6 +5641,20 @@ qemuBuildRNGBackendProps(virDomainRNGDefPtr rng,
break;
+ case VIR_DOMAIN_RNG_BACKEND_BUILTIN: + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_RNG_BUILTIN)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("this qemu doesn't support the rng-builtin " + "backend"));
The error message is misaligned, should be on a single line and also should be in the validation code not in the formatter.
+ return -1; + } + + if (qemuMonitorCreateObjectProps(props, "rng-builtin", objAlias, + NULL) < 0) + return -1; + + break; + case VIR_DOMAIN_RNG_BACKEND_LAST: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("unknown rng-random backend"));
This patch fails to pass make check: $ ./tests/qemucapabilitiestest TEST: qemucapabilitiestest ............!........................... 40 ....!.......!........................... 80 ....!... 88 FAIL 45) 4.2.0 (x86_64) ... In '/home/pipo/libvirt/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml': Offset 7070 Expect [v] Actual [flag name='rng-builtin'/> <v] ... FAILED

On Mon, Jan 06, 2020 at 11:11:01 +0100, Peter Krempa wrote:
On Wed, Jan 01, 2020 at 13:06:33 +0800, Han Han wrote:
Since v4.2-rc0, QEMU introduced a builtin rng backend that uses getrandom() syscall to generate random. Add it to libvirt with the backend model 'builtin'.
https://bugzilla.redhat.com/show_bug.cgi?id=1785091
Signed-off-by: Han Han <hhan@redhat.com> --- src/conf/domain_audit.c | 2 ++ src/conf/domain_conf.c | 9 +++++++++ src/conf/domain_conf.h | 1 +
Additionally this patch mixes XML additions (the enum value addition and corresponding conversion string and qemu implementation. We prefer if it's not mixed.

On Mon, Jan 6, 2020 at 6:22 PM Peter Krempa <pkrempa@redhat.com> wrote:
On Mon, Jan 06, 2020 at 11:11:01 +0100, Peter Krempa wrote:
On Wed, Jan 01, 2020 at 13:06:33 +0800, Han Han wrote:
Since v4.2-rc0, QEMU introduced a builtin rng backend that uses getrandom() syscall to generate random. Add it to libvirt with the backend model 'builtin'.
https://bugzilla.redhat.com/show_bug.cgi?id=1785091
Signed-off-by: Han Han <hhan@redhat.com> --- src/conf/domain_audit.c | 2 ++ src/conf/domain_conf.c | 9 +++++++++ src/conf/domain_conf.h | 1 +
Additionally this patch mixes XML additions (the enum value addition and corresponding conversion string and qemu implementation. We prefer if it's not mixed.
OK. I will split it into 2 patches.
-- Best regards, ----------------------------------- Han Han Quality Engineer Redhat. Email: hhan@redhat.com Phone: +861065339333

Signed-off-by: Han Han <hhan@redhat.com> --- docs/schemas/domaincommon.rng | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index 9b555d6a..bbcf6ce8 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -5681,6 +5681,12 @@ <ref name="qemucdevSrcType"/> <ref name="qemucdevSrcDef"/> </group> + <group> + <attribute name="model"> + <value>builtin</value> + </attribute> + <empty/> + </group> </choice> </element> </define> -- 2.23.0

On Wed, Jan 01, 2020 at 13:06:34 +0800, Han Han wrote:
Signed-off-by: Han Han <hhan@redhat.com> --- docs/schemas/domaincommon.rng | 6 ++++++ 1 file changed, 6 insertions(+)
This hunk should be part of the XML addition commit.
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index 9b555d6a..bbcf6ce8 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -5681,6 +5681,12 @@ <ref name="qemucdevSrcType"/> <ref name="qemucdevSrcDef"/> </group> + <group> + <attribute name="model"> + <value>builtin</value> + </attribute> + <empty/> + </group> </choice> </element> </define> -- 2.23.0
-- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list

Signed-off-by: Han Han <hhan@redhat.com> --- .../domaincapsdata/qemu_4.2.0-q35.x86_64.xml | 1 + .../domaincapsdata/qemu_4.2.0-tcg.x86_64.xml | 1 + .../qemu_4.2.0-virt.aarch64.xml | 1 + tests/domaincapsdata/qemu_4.2.0.aarch64.xml | 1 + tests/domaincapsdata/qemu_4.2.0.ppc64.xml | 1 + tests/domaincapsdata/qemu_4.2.0.s390x.xml | 1 + tests/domaincapsdata/qemu_4.2.0.x86_64.xml | 1 + .../caps_4.2.0.aarch64.xml | 1 + .../qemucapabilitiesdata/caps_4.2.0.ppc64.xml | 1 + .../qemucapabilitiesdata/caps_4.2.0.s390x.xml | 1 + .../caps_4.2.0.x86_64.xml | 1 + .../qemuxml2argvdata/virtio-rng-builtin.args | 30 ++++++++++++++++++ tests/qemuxml2argvdata/virtio-rng-builtin.xml | 26 ++++++++++++++++ tests/qemuxml2argvtest.c | 3 ++ .../qemuxml2xmloutdata/virtio-rng-builtin.xml | 31 +++++++++++++++++++ tests/qemuxml2xmltest.c | 2 ++ 16 files changed, 103 insertions(+) create mode 100644 tests/qemuxml2argvdata/virtio-rng-builtin.args create mode 100644 tests/qemuxml2argvdata/virtio-rng-builtin.xml create mode 100644 tests/qemuxml2xmloutdata/virtio-rng-builtin.xml diff --git a/tests/domaincapsdata/qemu_4.2.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_4.2.0-q35.x86_64.xml index c4c6bfb5..eaa3b756 100644 --- a/tests/domaincapsdata/qemu_4.2.0-q35.x86_64.xml +++ b/tests/domaincapsdata/qemu_4.2.0-q35.x86_64.xml @@ -167,6 +167,7 @@ <enum name='backendModel'> <value>random</value> <value>egd</value> + <value>builtin</value> </enum> </rng> </devices> diff --git a/tests/domaincapsdata/qemu_4.2.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_4.2.0-tcg.x86_64.xml index a7f8d9c5..af482e38 100644 --- a/tests/domaincapsdata/qemu_4.2.0-tcg.x86_64.xml +++ b/tests/domaincapsdata/qemu_4.2.0-tcg.x86_64.xml @@ -178,6 +178,7 @@ <enum name='backendModel'> <value>random</value> <value>egd</value> + <value>builtin</value> </enum> </rng> </devices> diff --git a/tests/domaincapsdata/qemu_4.2.0-virt.aarch64.xml b/tests/domaincapsdata/qemu_4.2.0-virt.aarch64.xml index e5954717..908406bf 100644 --- a/tests/domaincapsdata/qemu_4.2.0-virt.aarch64.xml +++ b/tests/domaincapsdata/qemu_4.2.0-virt.aarch64.xml @@ -136,6 +136,7 @@ <enum name='backendModel'> <value>random</value> <value>egd</value> + <value>builtin</value> </enum> </rng> </devices> diff --git a/tests/domaincapsdata/qemu_4.2.0.aarch64.xml b/tests/domaincapsdata/qemu_4.2.0.aarch64.xml index bb02b1d8..c66550ce 100644 --- a/tests/domaincapsdata/qemu_4.2.0.aarch64.xml +++ b/tests/domaincapsdata/qemu_4.2.0.aarch64.xml @@ -134,6 +134,7 @@ <enum name='backendModel'> <value>random</value> <value>egd</value> + <value>builtin</value> </enum> </rng> </devices> diff --git a/tests/domaincapsdata/qemu_4.2.0.ppc64.xml b/tests/domaincapsdata/qemu_4.2.0.ppc64.xml index 6d3ada37..7906482e 100644 --- a/tests/domaincapsdata/qemu_4.2.0.ppc64.xml +++ b/tests/domaincapsdata/qemu_4.2.0.ppc64.xml @@ -100,6 +100,7 @@ <enum name='backendModel'> <value>random</value> <value>egd</value> + <value>builtin</value> </enum> </rng> </devices> diff --git a/tests/domaincapsdata/qemu_4.2.0.s390x.xml b/tests/domaincapsdata/qemu_4.2.0.s390x.xml index c6d92542..0cdfd435 100644 --- a/tests/domaincapsdata/qemu_4.2.0.s390x.xml +++ b/tests/domaincapsdata/qemu_4.2.0.s390x.xml @@ -191,6 +191,7 @@ <enum name='backendModel'> <value>random</value> <value>egd</value> + <value>builtin</value> </enum> </rng> </devices> diff --git a/tests/domaincapsdata/qemu_4.2.0.x86_64.xml b/tests/domaincapsdata/qemu_4.2.0.x86_64.xml index f0e0f182..c82d12d3 100644 --- a/tests/domaincapsdata/qemu_4.2.0.x86_64.xml +++ b/tests/domaincapsdata/qemu_4.2.0.x86_64.xml @@ -167,6 +167,7 @@ <enum name='backendModel'> <value>random</value> <value>egd</value> + <value>builtin</value> </enum> </rng> </devices> diff --git a/tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml b/tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml index a6469073..b4363670 100644 --- a/tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml @@ -175,6 +175,7 @@ <flag name='blockdev-file-dynamic-auto-read-only'/> <flag name='savevm-monitor-nodes'/> <flag name='drive-nvme'/> + <flag name='rng-builtin'/> <version>4001050</version> <kvmVersion>0</kvmVersion> <microcodeVersion>61700242</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_4.2.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_4.2.0.ppc64.xml index ee9fb236..9b22e3fe 100644 --- a/tests/qemucapabilitiesdata/caps_4.2.0.ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_4.2.0.ppc64.xml @@ -176,6 +176,7 @@ <flag name='machine.pseries.cap-ccf-assist'/> <flag name='blockdev-file-dynamic-auto-read-only'/> <flag name='drive-nvme'/> + <flag name='rng-builtin'/> <version>4001050</version> <kvmVersion>0</kvmVersion> <microcodeVersion>42900242</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_4.2.0.s390x.xml b/tests/qemucapabilitiesdata/caps_4.2.0.s390x.xml index fdf5cb4c..4c13f672 100644 --- a/tests/qemucapabilitiesdata/caps_4.2.0.s390x.xml +++ b/tests/qemucapabilitiesdata/caps_4.2.0.s390x.xml @@ -135,6 +135,7 @@ <flag name='query-cpu-model-comparison'/> <flag name='blockdev-file-dynamic-auto-read-only'/> <flag name='drive-nvme'/> + <flag name='rng-builtin'/> <version>4001050</version> <kvmVersion>0</kvmVersion> <microcodeVersion>39100242</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml index 4857e2f5..93de5c37 100644 --- a/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml @@ -218,6 +218,7 @@ <flag name='blockdev-file-dynamic-auto-read-only'/> <flag name='savevm-monitor-nodes'/> <flag name='drive-nvme'/> + <flag name='rng-builtin'/> <version>4002000</version> <kvmVersion>0</kvmVersion> <microcodeVersion>43100242</microcodeVersion> diff --git a/tests/qemuxml2argvdata/virtio-rng-builtin.args b/tests/qemuxml2argvdata/virtio-rng-builtin.args new file mode 100644 index 00000000..242129ee --- /dev/null +++ b/tests/qemuxml2argvdata/virtio-rng-builtin.args @@ -0,0 +1,30 @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/tmp/lib/domain--1-QEMUGuest1 \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/tmp/lib/domain--1-QEMUGuest1/.local/share \ +XDG_CACHE_HOME=/tmp/lib/domain--1-QEMUGuest1/.cache \ +XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \ +QEMU_AUDIO_DRV=none \ +/usr/bin/qemu-system-i386 \ +-name QEMUGuest1 \ +-S \ +-machine pc,accel=tcg,usb=off,dump-guest-core=off \ +-m 214 \ +-realtime mlock=off \ +-smp 1,sockets=1,cores=1,threads=1 \ +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,\ +server,nowait \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-no-acpi \ +-usb \ +-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 \ +-object rng-builtin,id=objrng0 \ +-device virtio-rng-pci,rng=objrng0,id=rng0,bus=pci.0,addr=0x4 diff --git a/tests/qemuxml2argvdata/virtio-rng-builtin.xml b/tests/qemuxml2argvdata/virtio-rng-builtin.xml new file mode 100644 index 00000000..39bad092 --- /dev/null +++ b/tests/qemuxml2argvdata/virtio-rng-builtin.xml @@ -0,0 +1,26 @@ +<domain type='qemu'> + <name>QEMUGuest1</name> + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> + <memory unit='KiB'>219100</memory> + <currentMemory unit='KiB'>219100</currentMemory> + <vcpu placement='static' cpuset='1-4,8-20,525'>1</vcpu> + <os> + <type arch='i686' machine='pc'>hvm</type> + <boot dev='hd'/> + </os> + <clock offset='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <emulator>/usr/bin/qemu-system-i386</emulator> + <controller type='usb' index='0'/> + <controller type='pci' index='0' model='pci-root'/> + <input type='mouse' bus='ps2'/> + <input type='keyboard' bus='ps2'/> + <memballoon model='virtio'/> + <rng model='virtio'> + <backend model='builtin'/> + </rng> + </devices> +</domain> diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index bfbed5c3..e3579b2e 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -2119,6 +2119,9 @@ mymain(void) DO_TEST("virtio-rng-egd", QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_EGD); + DO_TEST("virtio-rng-builtin", + QEMU_CAPS_DEVICE_VIRTIO_RNG, + QEMU_CAPS_OBJECT_RNG_BUILTIN); DO_TEST_CAPS_VER("virtio-rng-egd-unix", "2.5.0"); DO_TEST_CAPS_LATEST("virtio-rng-egd-unix"); DO_TEST("virtio-rng-multiple", diff --git a/tests/qemuxml2xmloutdata/virtio-rng-builtin.xml b/tests/qemuxml2xmloutdata/virtio-rng-builtin.xml new file mode 100644 index 00000000..ba5b0cad --- /dev/null +++ b/tests/qemuxml2xmloutdata/virtio-rng-builtin.xml @@ -0,0 +1,31 @@ +<domain type='qemu'> + <name>QEMUGuest1</name> + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> + <memory unit='KiB'>219100</memory> + <currentMemory unit='KiB'>219100</currentMemory> + <vcpu placement='static' cpuset='1-4,8-20,525'>1</vcpu> + <os> + <type arch='i686' machine='pc'>hvm</type> + <boot dev='hd'/> + </os> + <clock offset='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <emulator>/usr/bin/qemu-system-i386</emulator> + <controller type='usb' index='0'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/> + </controller> + <controller type='pci' index='0' model='pci-root'/> + <input type='mouse' bus='ps2'/> + <input type='keyboard' bus='ps2'/> + <memballoon model='virtio'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> + </memballoon> + <rng model='virtio'> + <backend model='builtin'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> + </rng> + </devices> +</domain> diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c index 34c2ec8c..a18682e3 100644 --- a/tests/qemuxml2xmltest.c +++ b/tests/qemuxml2xmltest.c @@ -629,6 +629,8 @@ mymain(void) QEMU_CAPS_DEVICE_VIRTIO_RNG); DO_TEST("virtio-rng-egd", QEMU_CAPS_DEVICE_VIRTIO_RNG); + DO_TEST("virtio-rng-builtin", + QEMU_CAPS_DEVICE_VIRTIO_RNG); DO_TEST("pseries-nvram", QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE, -- 2.23.0

On Wed, Jan 01, 2020 at 13:06:35 +0800, Han Han wrote:
Signed-off-by: Han Han <hhan@redhat.com> --- .../domaincapsdata/qemu_4.2.0-q35.x86_64.xml | 1 + .../domaincapsdata/qemu_4.2.0-tcg.x86_64.xml | 1 + .../qemu_4.2.0-virt.aarch64.xml | 1 + tests/domaincapsdata/qemu_4.2.0.aarch64.xml | 1 + tests/domaincapsdata/qemu_4.2.0.ppc64.xml | 1 + tests/domaincapsdata/qemu_4.2.0.s390x.xml | 1 + tests/domaincapsdata/qemu_4.2.0.x86_64.xml | 1 + .../caps_4.2.0.aarch64.xml | 1 + .../qemucapabilitiesdata/caps_4.2.0.ppc64.xml | 1 + .../qemucapabilitiesdata/caps_4.2.0.s390x.xml | 1 + .../caps_4.2.0.x86_64.xml | 1 + .../qemuxml2argvdata/virtio-rng-builtin.args | 30 ++++++++++++++++++ tests/qemuxml2argvdata/virtio-rng-builtin.xml | 26 ++++++++++++++++ tests/qemuxml2argvtest.c | 3 ++ .../qemuxml2xmloutdata/virtio-rng-builtin.xml | 31 +++++++++++++++++++ tests/qemuxml2xmltest.c | 2 ++
You definitely will need to split out the capabilities changes and they will need to be part of the commit which actually adds the capability detection. Otherwise some of the previous commits will fail to pass the testsuite.
16 files changed, 103 insertions(+) create mode 100644 tests/qemuxml2argvdata/virtio-rng-builtin.args create mode 100644 tests/qemuxml2argvdata/virtio-rng-builtin.xml create mode 100644 tests/qemuxml2xmloutdata/virtio-rng-builtin.xml
[...]
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index bfbed5c3..e3579b2e 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -2119,6 +2119,9 @@ mymain(void) DO_TEST("virtio-rng-egd", QEMU_CAPS_DEVICE_VIRTIO_RNG, QEMU_CAPS_OBJECT_RNG_EGD); + DO_TEST("virtio-rng-builtin", + QEMU_CAPS_DEVICE_VIRTIO_RNG, + QEMU_CAPS_OBJECT_RNG_BUILTIN);
Please use DO_TEST_CAPS_LATEST instead.
DO_TEST_CAPS_VER("virtio-rng-egd-unix", "2.5.0"); DO_TEST_CAPS_LATEST("virtio-rng-egd-unix"); DO_TEST("virtio-rng-multiple",
[...]
diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c index 34c2ec8c..a18682e3 100644 --- a/tests/qemuxml2xmltest.c +++ b/tests/qemuxml2xmltest.c @@ -629,6 +629,8 @@ mymain(void) QEMU_CAPS_DEVICE_VIRTIO_RNG); DO_TEST("virtio-rng-egd", QEMU_CAPS_DEVICE_VIRTIO_RNG); + DO_TEST("virtio-rng-builtin", + QEMU_CAPS_DEVICE_VIRTIO_RNG);
Same here.

Signed-off-by: Han Han <hhan@redhat.com> --- docs/formatdomain.html.in | 10 ++++++++++ docs/formatdomaincaps.html.in | 1 + 2 files changed, 11 insertions(+) diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index dd04a05f..31099889 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -8257,6 +8257,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> ... @@ -8321,6 +8323,14 @@ qemu-kvm -net nic,model=? /dev/null for more information. </p> </dd> + <dt><code>builtin</code></dt> + <dd> + <p> + This backend uses qemu builtin random generator, which uses + getrandom() syscall to generate random. + (<span class="since">Since 6.0.0 and QEMU 4.2</span>) + </p> + </dd> </dl> </dd> <dt><code>driver</code></dt> diff --git a/docs/formatdomaincaps.html.in b/docs/formatdomaincaps.html.in index 6bf7a1c1..aa4dece2 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> ... -- 2.23.0

On Wed, Jan 01, 2020 at 13:06:36 +0800, Han Han wrote:
Signed-off-by: Han Han <hhan@redhat.com> --- docs/formatdomain.html.in | 10 ++++++++++ docs/formatdomaincaps.html.in | 1 + 2 files changed, 11 insertions(+)
This should be part of the XML addition commit.
diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index dd04a05f..31099889 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -8257,6 +8257,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> ... @@ -8321,6 +8323,14 @@ qemu-kvm -net nic,model=? /dev/null for more information. </p> </dd> + <dt><code>builtin</code></dt> + <dd> + <p> + This backend uses qemu builtin random generator, which uses + getrandom() syscall to generate random. + (<span class="since">Since 6.0.0 and QEMU 4.2</span>) + </p> + </dd> </dl> </dd> <dt><code>driver</code></dt> diff --git a/docs/formatdomaincaps.html.in b/docs/formatdomaincaps.html.in index 6bf7a1c1..aa4dece2 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> ... -- 2.23.0
-- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list

Signed-off-by: Han Han <hhan@redhat.com> --- docs/news.xml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/docs/news.xml b/docs/news.xml index 1af57f8a..d10a8b79 100644 --- a/docs/news.xml +++ b/docs/news.xml @@ -68,6 +68,16 @@ guest. </description> </change> + <change> + <summary> + qemu: new rng backend type: builtin + </summary> + <description> + It implements qemu builtin rng backend. That uses getrandom syscall + to generate random, no external rng source needed. Available since + QEMU 4.2. + </description> + </change> </section> <section title="Improvements"> <change> -- 2.23.0

CC Michal and Peter On Wed, Jan 1, 2020 at 1:06 PM Han Han <hhan@redhat.com> wrote:
https://bugzilla.redhat.com/show_bug.cgi?id=1785091
This rng backend is added since QEMU 4.2. It uses getrandom() syscall to generate random instread of external rng source.
QEMU bug reference: https://bugzilla.redhat.com/show_bug.cgi?id=1689946
Han Han (7): qemu_capabilities: Introduce QEMU_CAPS_OBJECT_RNG_BUILTIN util: Do not assume comma after object id qemu: Implement builtin rng backend docs: Add schemas for rng backend builtin tests: Add tests fr virtio-rng backend builtin docs: Documents for virtio-rng backend builtin news: Update news for rng backend type builtin
docs/formatdomain.html.in | 10 ++++++ docs/formatdomaincaps.html.in | 1 + docs/news.xml | 10 ++++++ 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_capabilities.c | 4 +++ src/qemu/qemu_capabilities.h | 1 + src/qemu/qemu_command.c | 15 +++++++++ src/qemu/qemu_domain.c | 3 ++ src/util/virqemu.c | 13 ++++---- .../domaincapsdata/qemu_4.2.0-q35.x86_64.xml | 1 + .../domaincapsdata/qemu_4.2.0-tcg.x86_64.xml | 1 + .../qemu_4.2.0-virt.aarch64.xml | 1 + tests/domaincapsdata/qemu_4.2.0.aarch64.xml | 1 + tests/domaincapsdata/qemu_4.2.0.ppc64.xml | 1 + tests/domaincapsdata/qemu_4.2.0.s390x.xml | 1 + tests/domaincapsdata/qemu_4.2.0.x86_64.xml | 1 + .../caps_4.2.0.aarch64.xml | 1 + .../qemucapabilitiesdata/caps_4.2.0.ppc64.xml | 1 + .../qemucapabilitiesdata/caps_4.2.0.s390x.xml | 1 + .../caps_4.2.0.x86_64.xml | 1 + .../qemuxml2argvdata/virtio-rng-builtin.args | 30 ++++++++++++++++++ tests/qemuxml2argvdata/virtio-rng-builtin.xml | 26 ++++++++++++++++ tests/qemuxml2argvtest.c | 3 ++ .../qemuxml2xmloutdata/virtio-rng-builtin.xml | 31 +++++++++++++++++++ tests/qemuxml2xmltest.c | 2 ++ 28 files changed, 172 insertions(+), 6 deletions(-) create mode 100644 tests/qemuxml2argvdata/virtio-rng-builtin.args create mode 100644 tests/qemuxml2argvdata/virtio-rng-builtin.xml create mode 100644 tests/qemuxml2xmloutdata/virtio-rng-builtin.xml
-- 2.23.0
-- Best regards, ----------------------------------- Han Han Quality Engineer Redhat. Email: hhan@redhat.com Phone: +861065339333
participants (2)
-
Han Han
-
Peter Krempa