On Tue, 2015-01-13 at 12:05 +0800, lhuang wrote: > On 01/13/2015 10:35 AM, Zhu Guihua wrote: > > Hi Luyao, > > Hi Guihua, > > 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 > > Oh, my god! thanks your pointing out :) > > Maybe this will work? I cannot test it now ,i will double check these > code this night > yeah, it looks ok now. And I think you'd better test the code in the latest version again. Regards, Zhu > + const char *type = NULL; > + virJSONValuePtr props; > + > + if (!(props = virJSONValueNewObject())) > + goto cleanup; > + > + switch ((virDomainRNGBackend) rng->backend) { > + case VIR_DOMAIN_RNG_BACKEND_RANDOM: > + type = "rng-random"; > + if ((virJSONValueObjectCreate(&props, "s:filename", > rng->source.file, NULL)) < 0) > + goto cleanup; > + break; > + > + 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 ((virJSONValueObjectCreate(&props, "s:chardev", chrID, > NULL)) < 0) > + goto cleanup; > + break; > > >> + 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 > > Thanks, > Luyao > > > -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list