Commit 514337c1 authored by Marc-André Lureau's avatar Marc-André Lureau Committed by Markus Armbruster
Browse files

qapi: add conditions to SPICE type/commands/events on the schema



Add #if defined(CONFIG_SPICE) in generated code, and adjust the
qmp/hmp code accordingly.

query-qmp-schema no longer reports the command/events etc as
available when disabled at compile time.

Commands made conditional:

* query-spice

  Before the patch, the command for !CONFIG_SPICE is unregistered. It
  will fail with the same error.

Events made conditional:

* SPICE_CONNECTED, SPICE_INITIALIZED, SPICE_DISCONNECTED,
  SPICE_MIGRATE_COMPLETED

Add TODO for conditional SPICE chardevs, delayed until the supports
for conditional members lands.

No HMP change, the code was already conditional.

Signed-off-by: default avatarMarc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: default avatarGerd Hoffmann <kraxel@redhat.com>
Reviewed-by: default avatarMarkus Armbruster <armbru@redhat.com>
Message-Id: <20180703155648.11933-15-marcandre.lureau@redhat.com>
Signed-off-by: default avatarMarkus Armbruster <armbru@redhat.com>
parent 05eb4a25
Loading
Loading
Loading
Loading
+0 −3
Original line number Diff line number Diff line
@@ -1191,9 +1191,6 @@ static void qmp_query_qmp_schema(QDict *qdict, QObject **ret_data,
 */
static void qmp_unregister_commands_hack(void)
{
#ifndef CONFIG_SPICE
    qmp_unregister_command(&qmp_commands, "query-spice");
#endif
#ifndef CONFIG_REPLICATION
    qmp_unregister_command(&qmp_commands, "xen-set-replication");
    qmp_unregister_command(&qmp_commands, "query-xen-replication-status");
+6 −2
Original line number Diff line number Diff line
@@ -320,6 +320,7 @@
##
{ 'struct': 'ChardevSpiceChannel', 'data': { 'type'  : 'str' },
  'base': 'ChardevCommon' }
# TODO: 'if': 'defined(CONFIG_SPICE)'

##
# @ChardevSpicePort:
@@ -332,6 +333,7 @@
##
{ 'struct': 'ChardevSpicePort', 'data': { 'fqdn'  : 'str' },
  'base': 'ChardevCommon' }
# TODO: 'if': 'defined(CONFIG_SPICE)'

##
# @ChardevVC:
@@ -386,7 +388,9 @@
                                       'stdio'  : 'ChardevStdio',
                                       'console': 'ChardevCommon',
                                       'spicevmc': 'ChardevSpiceChannel',
# TODO: { 'type': 'ChardevSpiceChannel', 'if': 'defined(CONFIG_SPICE)' },
                                       'spiceport': 'ChardevSpicePort',
# TODO: { 'type': 'ChardevSpicePort', 'if': 'defined(CONFIG_SPICE)' },
                                       'vc'     : 'ChardevVC',
                                       'ringbuf': 'ChardevRingbuf',
                                       # next one is just for compatibility
+20 −10
Original line number Diff line number Diff line
@@ -118,7 +118,8 @@
{ 'struct': 'SpiceBasicInfo',
  'data': { 'host': 'str',
            'port': 'str',
            'family': 'NetworkAddressFamily' } }
            'family': 'NetworkAddressFamily' },
  'if': 'defined(CONFIG_SPICE)' }

##
# @SpiceServerInfo:
@@ -131,7 +132,8 @@
##
{ 'struct': 'SpiceServerInfo',
  'base': 'SpiceBasicInfo',
  'data': { '*auth': 'str' } }
  'data': { '*auth': 'str' },
  'if': 'defined(CONFIG_SPICE)' }

##
# @SpiceChannel:
@@ -156,7 +158,8 @@
{ 'struct': 'SpiceChannel',
  'base': 'SpiceBasicInfo',
  'data': {'connection-id': 'int', 'channel-type': 'int', 'channel-id': 'int',
           'tls': 'bool'} }
           'tls': 'bool'},
  'if': 'defined(CONFIG_SPICE)' }

##
# @SpiceQueryMouseMode:
@@ -175,7 +178,8 @@
# Since: 1.1
##
{ 'enum': 'SpiceQueryMouseMode',
  'data': [ 'client', 'server', 'unknown' ] }
  'data': [ 'client', 'server', 'unknown' ],
  'if': 'defined(CONFIG_SPICE)' }

##
# @SpiceInfo:
@@ -212,7 +216,8 @@
{ 'struct': 'SpiceInfo',
  'data': {'enabled': 'bool', 'migrated': 'bool', '*host': 'str', '*port': 'int',
           '*tls-port': 'int', '*auth': 'str', '*compiled-version': 'str',
           'mouse-mode': 'SpiceQueryMouseMode', '*channels': ['SpiceChannel']} }
           'mouse-mode': 'SpiceQueryMouseMode', '*channels': ['SpiceChannel']},
  'if': 'defined(CONFIG_SPICE)' }

##
# @query-spice:
@@ -257,7 +262,8 @@
#    }
#
##
{ 'command': 'query-spice', 'returns': 'SpiceInfo' }
{ 'command': 'query-spice', 'returns': 'SpiceInfo',
  'if': 'defined(CONFIG_SPICE)' }

##
# @SPICE_CONNECTED:
@@ -282,7 +288,8 @@
##
{ 'event': 'SPICE_CONNECTED',
  'data': { 'server': 'SpiceBasicInfo',
            'client': 'SpiceBasicInfo' } }
            'client': 'SpiceBasicInfo' },
  'if': 'defined(CONFIG_SPICE)' }

##
# @SPICE_INITIALIZED:
@@ -310,7 +317,8 @@
##
{ 'event': 'SPICE_INITIALIZED',
  'data': { 'server': 'SpiceServerInfo',
            'client': 'SpiceChannel' } }
            'client': 'SpiceChannel' },
  'if': 'defined(CONFIG_SPICE)' }

##
# @SPICE_DISCONNECTED:
@@ -335,7 +343,8 @@
##
{ 'event': 'SPICE_DISCONNECTED',
  'data': { 'server': 'SpiceBasicInfo',
            'client': 'SpiceBasicInfo' } }
            'client': 'SpiceBasicInfo' },
  'if': 'defined(CONFIG_SPICE)' }

##
# @SPICE_MIGRATE_COMPLETED:
@@ -350,7 +359,8 @@
#      "event": "SPICE_MIGRATE_COMPLETED" }
#
##
{ 'event': 'SPICE_MIGRATE_COMPLETED' }
{ 'event': 'SPICE_MIGRATE_COMPLETED',
  'if': 'defined(CONFIG_SPICE)' }

##
# == VNC
+0 −16
Original line number Diff line number Diff line
@@ -129,22 +129,6 @@ void qmp_cpu_add(int64_t id, Error **errp)
    }
}

#ifndef CONFIG_SPICE
/*
 * qmp_unregister_commands_hack() ensures that QMP command query-spice
 * exists only #ifdef CONFIG_SPICE.  Necessary for an accurate
 * query-commands result.  However, the QAPI schema is blissfully
 * unaware of that, and the QAPI code generator happily generates a
 * dead qmp_marshal_query_spice() that calls qmp_query_spice().
 * Provide it one, or else linking fails.  FIXME Educate the QAPI
 * schema on CONFIG_SPICE.
 */
SpiceInfo *qmp_query_spice(Error **errp)
{
    abort();
};
#endif

void qmp_exit_preconfig(Error **errp)
{
    if (!runstate_check(RUN_STATE_PRECONFIG)) {