[libvirt] [PATCH v2 07/12] qemu: add a functions for attach a rng object in json monitor

lhuang lhuang at redhat.com
Mon Jan 12 01:38:53 UTC 2015


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)))
+            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




More information about the libvir-list mailing list