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(a)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