[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