[libvirt] [PATCH v2 07/12] qemu: add a functions for attach a rng object in json monitor
Zhu Guihua
zhugh.fnst at cn.fujitsu.com
Tue Jan 13 02:35:13 UTC 2015
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 at redhat.com>
> > ---
> > 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 at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
More information about the libvir-list
mailing list