[libvirt] [PATCH 08/12] qemu: introduce 2 functions for attach a rng object in json monitor
Peter Krempa
pkrempa at redhat.com
Mon Jan 5 15:29:51 UTC 2015
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 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;
> +}
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.
> +
> +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)))
> + 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).
> + 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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20150105/656d4fc4/attachment-0001.sig>
More information about the libvir-list
mailing list