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