
On 01/05/2015 11:29 PM, Peter Krempa wrote:
On 01/03/15 06:06, Luyao Huang wrote:
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@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; +} To allow adding generic properties to objects I've added the virJSONValueObjectCreate function that allows to create generic json value objects. Please use that func instead of the above. Thanks for pointing out, i forgot double check the exist functions.
+ +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))) With usage of virJSONValueObjectCreate the code will look like:
if (!(props = virJSONValueObjectCreate("s:filename", rng->source.file, NULL))) Thanks the example, i will use them in next version.
+ goto cleanup; + break; + + case VIR_DOMAIN_RNG_BACKEND_EGD: + if (!chrID) { + virReportError(VIR_ERR_INTERNAL_ERROR,"%s", + _("miss chardev id")); + goto cleanup; + } The chardev and backend object ID can (and should) be inferred from the rng device ID as they should be the same (except for the "char"/"obj" prefix). Eww, i think your mean is add a check for charname and objname, if they are different then output a error?
+ 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 Peter
Luyao