[libvirt] [PATCH 08/12] qemu: introduce 2 functions for attach a rng object in json monitor

Luyao Huang lhuang at redhat.com
Sat Jan 3 05:06:31 UTC 2015


We need a new function to build a RNG device object, and need a
function to build a props which will be used in qemuMonitorJSONAddObject.

Signed-off-by: Luyao Huang <lhuang at redhat.com>
---
 src/qemu/qemu_monitor_json.c | 58 ++++++++++++++++++++++++++++++++++++++++++++
 src/qemu/qemu_monitor_json.h |  5 ++++
 2 files changed, 63 insertions(+)

diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
index e567aa7..4430819 100644
--- a/src/qemu/qemu_monitor_json.c
+++ b/src/qemu/qemu_monitor_json.c
@@ -6166,6 +6166,64 @@ qemuMonitorJSONDetachCharDev(qemuMonitorPtr mon,
     return ret;
 }
 
+static virJSONValuePtr
+qemuMonitorJSONRNGPropsCommand(const char *name,
+                               const char *data)
+{
+    virJSONValuePtr ret;
+
+    if (!(ret = virJSONValueNewObject()))
+        goto error;
+
+    if (virJSONValueObjectAppendString(ret, name, data) < 0)
+        goto error;
+
+    return ret;
+
+ error:
+    virJSONValueFree(ret);
+    return NULL;
+}
+
+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 = qemuMonitorJSONRNGPropsCommand("filename", rng->source.file)))
+            goto cleanup;
+        break;
+
+    case VIR_DOMAIN_RNG_BACKEND_EGD:
+        if (!chrID) {
+            virReportError(VIR_ERR_INTERNAL_ERROR,"%s",
+                           _("miss chardev id"));
+            goto cleanup;
+        }
+        type = "rng-egd";
+        if (!(props = qemuMonitorJSONRNGPropsCommand("chardev", chrID)))
+            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);
-- 
1.8.3.1




More information about the libvir-list mailing list