Loading hmp.c +43 −0 Original line number Diff line number Diff line Loading @@ -306,6 +306,49 @@ out: qapi_free_VncInfo(info); } void hmp_info_spice(Monitor *mon) { SpiceChannelList *chan; SpiceInfo *info; info = qmp_query_spice(NULL); if (!info->enabled) { monitor_printf(mon, "Server: disabled\n"); goto out; } monitor_printf(mon, "Server:\n"); if (info->has_port) { monitor_printf(mon, " address: %s:%" PRId64 "\n", info->host, info->port); } if (info->has_tls_port) { monitor_printf(mon, " address: %s:%" PRId64 " [tls]\n", info->host, info->tls_port); } monitor_printf(mon, " auth: %s\n", info->auth); monitor_printf(mon, " compiled: %s\n", info->compiled_version); if (!info->has_channels || info->channels == NULL) { monitor_printf(mon, "Channels: none\n"); } else { for (chan = info->channels; chan; chan = chan->next) { monitor_printf(mon, "Channel:\n"); monitor_printf(mon, " address: %s:%s%s\n", chan->value->host, chan->value->port, chan->value->tls ? " [tls]" : ""); monitor_printf(mon, " session: %" PRId64 "\n", chan->value->connection_id); monitor_printf(mon, " channel: %" PRId64 ":%" PRId64 "\n", chan->value->channel_type, chan->value->channel_id); } } out: qapi_free_SpiceInfo(info); } void hmp_quit(Monitor *mon, const QDict *qdict) { monitor_suspend(mon); Loading hmp.h +1 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ void hmp_info_cpus(Monitor *mon); void hmp_info_block(Monitor *mon); void hmp_info_blockstats(Monitor *mon); void hmp_info_vnc(Monitor *mon); void hmp_info_spice(Monitor *mon); void hmp_quit(Monitor *mon, const QDict *qdict); void hmp_stop(Monitor *mon, const QDict *qdict); void hmp_system_reset(Monitor *mon, const QDict *qdict); Loading monitor.c +1 −12 Original line number Diff line number Diff line Loading @@ -2857,8 +2857,7 @@ static const mon_cmd_t info_cmds[] = { .args_type = "", .params = "", .help = "show the spice server status", .user_print = do_info_spice_print, .mhandler.info_new = do_info_spice, .mhandler.info = hmp_info_spice, }, #endif { Loading Loading @@ -2965,16 +2964,6 @@ static const mon_cmd_t qmp_query_cmds[] = { .user_print = do_pci_info_print, .mhandler.info_new = do_pci_info, }, #if defined(CONFIG_SPICE) { .name = "spice", .args_type = "", .params = "", .help = "show the spice server status", .user_print = do_info_spice_print, .mhandler.info_new = do_info_spice, }, #endif { .name = "balloon", .args_type = "", Loading qapi-schema.json +74 −0 Original line number Diff line number Diff line Loading @@ -584,6 +584,80 @@ ## { 'command': 'query-vnc', 'returns': 'VncInfo' } ## # @SpiceChannel # # Information about a SPICE client channel. # # @host: The host name of the client. QEMU tries to resolve this to a DNS name # when possible. # # @family: 'ipv6' if the client is connected via IPv6 and TCP # 'ipv4' if the client is connected via IPv4 and TCP # 'unix' if the client is connected via a unix domain socket # 'unknown' otherwise # # @port: The client's port number. # # @connection-id: SPICE connection id number. All channels with the same id # belong to the same SPICE session. # # @connection-type: SPICE channel type number. "1" is the main control channel, # filter for this one if you want track spice sessions only # # @channel-id: SPICE channel ID number. Usually "0", might be different needed # when multiple channels of the same type exist, such as multiple # display channels in a multihead setup # # @tls: true if the channel is encrypted, false otherwise. # # Since: 0.14.0 ## { 'type': 'SpiceChannel', 'data': {'host': 'str', 'family': 'str', 'port': 'str', 'connection-id': 'int', 'channel-type': 'int', 'channel-id': 'int', 'tls': 'bool'} } ## # @SpiceInfo # # Information about the SPICE session. # # @enabled: true if the SPICE server is enabled, false otherwise # # @host: #optional The hostname the SPICE server is bound to. This depends on # the name resolution on the host and may be an IP address. # # @port: #optional The SPICE server's port number. # # @compiled-version: #optional SPICE server version. # # @tls-port: #optional The SPICE server's TLS port number. # # @auth: #optional the current authentication type used by the server # 'none' if no authentication is being used # 'spice' (TODO: describe) # # @channels: a list of @SpiceChannel for each active spice channel # # Since: 0.14.0 ## { 'type': 'SpiceInfo', 'data': {'enabled': 'bool', '*host': 'str', '*port': 'int', '*tls-port': 'int', '*auth': 'str', '*compiled-version': 'str', '*channels': ['SpiceChannel']} } ## # @query-spice # # Returns information about the current SPICE server # # Returns: @SpiceInfo # # Since: 0.14.0 ## { 'command': 'query-spice', 'returns': 'SpiceInfo' } ## # @quit: # Loading qmp-commands.hx +8 −0 Original line number Diff line number Diff line Loading @@ -1817,6 +1817,14 @@ Example: EQMP #if defined(CONFIG_SPICE) { .name = "query-spice", .args_type = "", .mhandler.cmd_new = qmp_marshal_input_query_spice, }, #endif SQMP query-name ---------- Loading Loading
hmp.c +43 −0 Original line number Diff line number Diff line Loading @@ -306,6 +306,49 @@ out: qapi_free_VncInfo(info); } void hmp_info_spice(Monitor *mon) { SpiceChannelList *chan; SpiceInfo *info; info = qmp_query_spice(NULL); if (!info->enabled) { monitor_printf(mon, "Server: disabled\n"); goto out; } monitor_printf(mon, "Server:\n"); if (info->has_port) { monitor_printf(mon, " address: %s:%" PRId64 "\n", info->host, info->port); } if (info->has_tls_port) { monitor_printf(mon, " address: %s:%" PRId64 " [tls]\n", info->host, info->tls_port); } monitor_printf(mon, " auth: %s\n", info->auth); monitor_printf(mon, " compiled: %s\n", info->compiled_version); if (!info->has_channels || info->channels == NULL) { monitor_printf(mon, "Channels: none\n"); } else { for (chan = info->channels; chan; chan = chan->next) { monitor_printf(mon, "Channel:\n"); monitor_printf(mon, " address: %s:%s%s\n", chan->value->host, chan->value->port, chan->value->tls ? " [tls]" : ""); monitor_printf(mon, " session: %" PRId64 "\n", chan->value->connection_id); monitor_printf(mon, " channel: %" PRId64 ":%" PRId64 "\n", chan->value->channel_type, chan->value->channel_id); } } out: qapi_free_SpiceInfo(info); } void hmp_quit(Monitor *mon, const QDict *qdict) { monitor_suspend(mon); Loading
hmp.h +1 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ void hmp_info_cpus(Monitor *mon); void hmp_info_block(Monitor *mon); void hmp_info_blockstats(Monitor *mon); void hmp_info_vnc(Monitor *mon); void hmp_info_spice(Monitor *mon); void hmp_quit(Monitor *mon, const QDict *qdict); void hmp_stop(Monitor *mon, const QDict *qdict); void hmp_system_reset(Monitor *mon, const QDict *qdict); Loading
monitor.c +1 −12 Original line number Diff line number Diff line Loading @@ -2857,8 +2857,7 @@ static const mon_cmd_t info_cmds[] = { .args_type = "", .params = "", .help = "show the spice server status", .user_print = do_info_spice_print, .mhandler.info_new = do_info_spice, .mhandler.info = hmp_info_spice, }, #endif { Loading Loading @@ -2965,16 +2964,6 @@ static const mon_cmd_t qmp_query_cmds[] = { .user_print = do_pci_info_print, .mhandler.info_new = do_pci_info, }, #if defined(CONFIG_SPICE) { .name = "spice", .args_type = "", .params = "", .help = "show the spice server status", .user_print = do_info_spice_print, .mhandler.info_new = do_info_spice, }, #endif { .name = "balloon", .args_type = "", Loading
qapi-schema.json +74 −0 Original line number Diff line number Diff line Loading @@ -584,6 +584,80 @@ ## { 'command': 'query-vnc', 'returns': 'VncInfo' } ## # @SpiceChannel # # Information about a SPICE client channel. # # @host: The host name of the client. QEMU tries to resolve this to a DNS name # when possible. # # @family: 'ipv6' if the client is connected via IPv6 and TCP # 'ipv4' if the client is connected via IPv4 and TCP # 'unix' if the client is connected via a unix domain socket # 'unknown' otherwise # # @port: The client's port number. # # @connection-id: SPICE connection id number. All channels with the same id # belong to the same SPICE session. # # @connection-type: SPICE channel type number. "1" is the main control channel, # filter for this one if you want track spice sessions only # # @channel-id: SPICE channel ID number. Usually "0", might be different needed # when multiple channels of the same type exist, such as multiple # display channels in a multihead setup # # @tls: true if the channel is encrypted, false otherwise. # # Since: 0.14.0 ## { 'type': 'SpiceChannel', 'data': {'host': 'str', 'family': 'str', 'port': 'str', 'connection-id': 'int', 'channel-type': 'int', 'channel-id': 'int', 'tls': 'bool'} } ## # @SpiceInfo # # Information about the SPICE session. # # @enabled: true if the SPICE server is enabled, false otherwise # # @host: #optional The hostname the SPICE server is bound to. This depends on # the name resolution on the host and may be an IP address. # # @port: #optional The SPICE server's port number. # # @compiled-version: #optional SPICE server version. # # @tls-port: #optional The SPICE server's TLS port number. # # @auth: #optional the current authentication type used by the server # 'none' if no authentication is being used # 'spice' (TODO: describe) # # @channels: a list of @SpiceChannel for each active spice channel # # Since: 0.14.0 ## { 'type': 'SpiceInfo', 'data': {'enabled': 'bool', '*host': 'str', '*port': 'int', '*tls-port': 'int', '*auth': 'str', '*compiled-version': 'str', '*channels': ['SpiceChannel']} } ## # @query-spice # # Returns information about the current SPICE server # # Returns: @SpiceInfo # # Since: 0.14.0 ## { 'command': 'query-spice', 'returns': 'SpiceInfo' } ## # @quit: # Loading
qmp-commands.hx +8 −0 Original line number Diff line number Diff line Loading @@ -1817,6 +1817,14 @@ Example: EQMP #if defined(CONFIG_SPICE) { .name = "query-spice", .args_type = "", .mhandler.cmd_new = qmp_marshal_input_query_spice, }, #endif SQMP query-name ---------- Loading