Hi Luyao, On Mon, 2015-01-12 at 09:38 +0800, lhuang wrote: > On 01/10/2015 11:29 AM, Luyao Huang wrote: > > We need a new function to build a RNG device object. > > > > Signed-off-by: Luyao Huang <lhuang@xxxxxxxxxx> > > --- > > src/qemu/qemu_monitor_json.c | 46 ++++++++++++++++++++++++++++++++++++++++++++ > > src/qemu/qemu_monitor_json.h | 5 +++++ > > 2 files changed, 51 insertions(+) > > > > diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c > > index e567aa7..598b15d 100644 > > --- a/src/qemu/qemu_monitor_json.c > > +++ b/src/qemu/qemu_monitor_json.c > > @@ -6166,6 +6166,52 @@ qemuMonitorJSONDetachCharDev(qemuMonitorPtr mon, > > return ret; > > } > > > > +int > > +qemuMonitorJSONAttachRNGDev(qemuMonitorPtr mon, > > + const char *chrID, > > + const char *objID, > > + virDomainRNGDefPtr rng) > > +{ > > + const char *type = NULL; > > + virJSONValuePtr props = NULL; > > + > > + switch ((virDomainRNGBackend) rng->backend) { > > + case VIR_DOMAIN_RNG_BACKEND_RANDOM: > > + type = "rng-random"; > > + if (!(props = virJSONValueObjectCreate("s:filename", rng->source.file, NULL))) > > + goto cleanup; > > + break; > > + > > + case VIR_DOMAIN_RNG_BACKEND_EGD: > > + if (!chrID) { > > + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", > > + _("miss chardev id")); > > + goto cleanup; > > + } > > + /*chrID + 4 and objID + 3 pointing to the basic alias name of chrID.*/ > > + if (!objID || STRNEQ(chrID + 4, objID + 3)) { > > + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", > > + _("chardev id '%s' basic alias name is different from '%s'", > > + chrID, objID)); > > + goto cleanup; > > + } > > I made a big mistake here, I found a better way : > > + case VIR_DOMAIN_RNG_BACKEND_EGD: > + if (STRNEQ_NULLABLE(strstr(chrID, "rng"), strstr(objID, "rng"))) { > + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", > + _("chardev id '%s' basic alias name is > different from '%s'", > + chrID, objID)); > + goto cleanup; > + } > + type = "rng-egd"; > + if (!(props = virJSONValueObjectCreate("s:chardev", chrID, NULL))) Are you sure the above line could pass the compilation? The first parameter of virJSONValueObjectCreate() should be 'struct virJSONValue **'. Regards, Zhu > + goto cleanup; > + break; > + > > i remove the check of chrID, because this should be done in the function > which call qemuMonitorJSONAttachRNGDev. > > + type = "rng-egd"; > > + if (!(props = virJSONValueObjectCreate("s:chardev", chrID, NULL))) > > + goto cleanup; > > + break; > > + > > + case VIR_DOMAIN_RNG_BACKEND_LAST: > > + /*shouldn't happen*/ > > + goto cleanup; > > + } > > + > > + return qemuMonitorJSONAddObject(mon, type, objID, props); > > + > > + cleanup: > > + virJSONValueFree(props); > > + return -1; > > +} > > + > > > > int > > qemuMonitorJSONGetDeviceAliases(qemuMonitorPtr mon, > > diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h > > index 222f11e..66c519d 100644 > > --- a/src/qemu/qemu_monitor_json.h > > +++ b/src/qemu/qemu_monitor_json.h > > @@ -459,6 +459,11 @@ int qemuMonitorJSONAttachCharDev(qemuMonitorPtr mon, > > virDomainChrSourceDefPtr chr); > > int qemuMonitorJSONDetachCharDev(qemuMonitorPtr mon, > > const char *chrID); > > +int qemuMonitorJSONAttachRNGDev(qemuMonitorPtr mon, > > + const char *chrID, > > + const char *objID, > > + virDomainRNGDefPtr rng); > > + > > > > int qemuMonitorJSONGetDeviceAliases(qemuMonitorPtr mon, > > char ***aliases); > > Luyao > > -- > libvir-list mailing list > libvir-list@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/libvir-list -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list