[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [RFC] spice-core: allow setting properties from QMP
From: |
Eric Blake |
Subject: |
Re: [Qemu-devel] [RFC] spice-core: allow setting properties from QMP |
Date: |
Wed, 19 Jun 2019 10:19:11 -0500 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1 |
On 6/19/19 7:30 AM, Kevin Pouget wrote:
> Hello,
>
> we're investigating the possibility to set some spice properties at
> runtime, through the QMP interface, but we're not sure what's the best
> way to proceed.
> I've prepared the patch below, that adds a new QMP
> command, but is there another way like with a QOM object, that could
> reuse an existing command? I searched but couldn't find an easy/not
> hacky way to create such objects ...
>
A new command may be okay, however,
> +##
> +# @set-spice:
> +#
> +# Set Spice properties.
> +# @property: the SPICE property to modify
> +# @value: the new value to affect to this property
> +#
> +# Since: ...
> +#
> +# Example:
> +#
> +# -> { "execute": "set-spice", "arguments": { "property": "video-codecs",
> +# "value":
> "spice:mjpeg;gst:mjpeg;" } }
> +# <- { "returns": {} }
> +##
> +{ 'command': 'set-spice',
> + 'data': {'property': 'str', 'value': 'str'},
> + 'if': 'defined(CONFIG_SPICE)' }
letting 'property' be an open-coded string feels wrong. If you are only
going to accept a specific (limited) set of property names, then
'property' should be typed as an enum:
{ 'enum': 'SpiceProperties', 'data': [ 'video-codecs' ] }
{ 'command': 'set-spice', 'data': { 'property': 'SpiceProperties',
'value': 'str' } }
> +
> ##
> # @SPICE_CONNECTED:
> #
> diff --git a/ui/spice-core.c b/ui/spice-core.c
> index 2ffc3335f0..5408b16684 100644
> --- a/ui/spice-core.c
> +++ b/ui/spice-core.c
> @@ -503,6 +503,19 @@ static QemuOptsList qemu_spice_opts = {
> },
> };
>
> +void qmp_set_spice(const char *property, const char *value, Error **errp) {
> + if (strcmp(property, "video-codecs") == 0) {
> + int invalid_codecs = spice_server_set_video_codecs(spice_server,
> value);
> +
> + if (invalid_codecs) {
> + error_setg(errp, "Found %d invalic codecs while setting "
invalid
> + "the property %s=%s\n", invalid_codecs, property,
> value);
> + }
> + } else {
> + error_setg(errp, "Setting an unknown spice property (%s=%s)\n",
> property, value);
> + }
> +}
> +
> SpiceInfo *qmp_query_spice(Error **errp)
> {
> QemuOpts *opts = QTAILQ_FIRST(&qemu_spice_opts.head);
> --
> 2.21.0
>
>
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3226
Virtualization: qemu.org | libvirt.org
signature.asc
Description: OpenPGP digital signature