mirror of https://gitee.com/openkylin/qemu.git
monitor: Convert client_migrate_info to QAPI
Signed-off-by: Markus Armbruster <armbru@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Reviewed-by: Luiz Capitulino <lcapitulino@redhat.com>
This commit is contained in:
parent
13cadefbda
commit
b8a185bc9a
|
@ -1012,8 +1012,7 @@ ETEXI
|
|||
.args_type = "protocol:s,hostname:s,port:i?,tls-port:i?,cert-subject:s?",
|
||||
.params = "protocol hostname port tls-port cert-subject",
|
||||
.help = "set migration information for remote display",
|
||||
.user_print = monitor_user_noop,
|
||||
.mhandler.cmd_new = client_migrate_info,
|
||||
.mhandler.cmd = hmp_client_migrate_info,
|
||||
},
|
||||
|
||||
STEXI
|
||||
|
|
17
hmp.c
17
hmp.c
|
@ -1250,6 +1250,23 @@ void hmp_migrate_set_parameter(Monitor *mon, const QDict *qdict)
|
|||
}
|
||||
}
|
||||
|
||||
void hmp_client_migrate_info(Monitor *mon, const QDict *qdict)
|
||||
{
|
||||
Error *err = NULL;
|
||||
const char *protocol = qdict_get_str(qdict, "protocol");
|
||||
const char *hostname = qdict_get_str(qdict, "hostname");
|
||||
bool has_port = qdict_haskey(qdict, "port");
|
||||
int port = qdict_get_try_int(qdict, "port", -1);
|
||||
bool has_tls_port = qdict_haskey(qdict, "tls-port");
|
||||
int tls_port = qdict_get_try_int(qdict, "tls-port", -1);
|
||||
const char *cert_subject = qdict_get_try_str(qdict, "cert-subject");
|
||||
|
||||
qmp_client_migrate_info(protocol, hostname,
|
||||
has_port, port, has_tls_port, tls_port,
|
||||
!!cert_subject, cert_subject, &err);
|
||||
hmp_handle_error(mon, &err);
|
||||
}
|
||||
|
||||
void hmp_set_password(Monitor *mon, const QDict *qdict)
|
||||
{
|
||||
const char *protocol = qdict_get_str(qdict, "protocol");
|
||||
|
|
1
hmp.h
1
hmp.h
|
@ -67,6 +67,7 @@ void hmp_migrate_set_speed(Monitor *mon, const QDict *qdict);
|
|||
void hmp_migrate_set_capability(Monitor *mon, const QDict *qdict);
|
||||
void hmp_migrate_set_parameter(Monitor *mon, const QDict *qdict);
|
||||
void hmp_migrate_set_cache_size(Monitor *mon, const QDict *qdict);
|
||||
void hmp_client_migrate_info(Monitor *mon, const QDict *qdict);
|
||||
void hmp_set_password(Monitor *mon, const QDict *qdict);
|
||||
void hmp_expire_password(Monitor *mon, const QDict *qdict);
|
||||
void hmp_eject(Monitor *mon, const QDict *qdict);
|
||||
|
|
42
monitor.c
42
monitor.c
|
@ -1032,39 +1032,33 @@ static void hmp_info_trace_events(Monitor *mon, const QDict *qdict)
|
|||
qapi_free_TraceEventInfoList(events);
|
||||
}
|
||||
|
||||
static int client_migrate_info(Monitor *mon, const QDict *qdict,
|
||||
QObject **ret_data)
|
||||
void qmp_client_migrate_info(const char *protocol, const char *hostname,
|
||||
bool has_port, int64_t port,
|
||||
bool has_tls_port, int64_t tls_port,
|
||||
bool has_cert_subject, const char *cert_subject,
|
||||
Error **errp)
|
||||
{
|
||||
const char *protocol = qdict_get_str(qdict, "protocol");
|
||||
const char *hostname = qdict_get_str(qdict, "hostname");
|
||||
const char *subject = qdict_get_try_str(qdict, "cert-subject");
|
||||
int port = qdict_get_try_int(qdict, "port", -1);
|
||||
int tls_port = qdict_get_try_int(qdict, "tls-port", -1);
|
||||
Error *err = NULL;
|
||||
int ret;
|
||||
|
||||
if (strcmp(protocol, "spice") == 0) {
|
||||
if (!qemu_using_spice(&err)) {
|
||||
qerror_report_err(err);
|
||||
error_free(err);
|
||||
return -1;
|
||||
if (!qemu_using_spice(errp)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (port == -1 && tls_port == -1) {
|
||||
qerror_report(QERR_MISSING_PARAMETER, "port/tls-port");
|
||||
return -1;
|
||||
if (!has_port && !has_tls_port) {
|
||||
error_set(errp, QERR_MISSING_PARAMETER, "port/tls-port");
|
||||
return;
|
||||
}
|
||||
|
||||
ret = qemu_spice_migrate_info(hostname, port, tls_port, subject);
|
||||
if (ret != 0) {
|
||||
qerror_report(QERR_UNDEFINED_ERROR);
|
||||
return -1;
|
||||
if (qemu_spice_migrate_info(hostname,
|
||||
has_port ? port : -1,
|
||||
has_tls_port ? tls_port : -1,
|
||||
cert_subject)) {
|
||||
error_set(errp, QERR_UNDEFINED_ERROR);
|
||||
return;
|
||||
}
|
||||
return 0;
|
||||
return;
|
||||
}
|
||||
|
||||
qerror_report(QERR_INVALID_PARAMETER_VALUE, "protocol", "spice");
|
||||
return -1;
|
||||
error_set(errp, QERR_INVALID_PARAMETER_VALUE, "protocol", "spice");
|
||||
}
|
||||
|
||||
static void hmp_logfile(Monitor *mon, const QDict *qdict)
|
||||
|
|
|
@ -637,6 +637,25 @@
|
|||
{ 'command': 'query-migrate-parameters',
|
||||
'returns': 'MigrationParameters' }
|
||||
|
||||
##
|
||||
# @client_migrate_info
|
||||
#
|
||||
# Set migration information for remote display. This makes the server
|
||||
# ask the client to automatically reconnect using the new parameters
|
||||
# once migration finished successfully. Only implemented for SPICE.
|
||||
#
|
||||
# @protocol: must be "spice"
|
||||
# @hostname: migration target hostname
|
||||
# @port: #optional spice tcp port for plaintext channels
|
||||
# @tls-port: #optional spice tcp port for tls-secured channels
|
||||
# @cert-subject: #optional server certificate subject
|
||||
#
|
||||
# Since: 0.14.0
|
||||
##
|
||||
{ 'command': 'client_migrate_info',
|
||||
'data': { 'protocol': 'str', 'hostname': 'str', '*port': 'int',
|
||||
'*tls-port': 'int', '*cert-subject': 'str' } }
|
||||
|
||||
##
|
||||
# @MouseInfo:
|
||||
#
|
||||
|
|
|
@ -785,7 +785,7 @@ EQMP
|
|||
.args_type = "protocol:s,hostname:s,port:i?,tls-port:i?,cert-subject:s?",
|
||||
.params = "protocol hostname port tls-port cert-subject",
|
||||
.help = "set migration information for remote display",
|
||||
.mhandler.cmd_new = client_migrate_info,
|
||||
.mhandler.cmd_new = qmp_marshal_input_client_migrate_info,
|
||||
},
|
||||
|
||||
SQMP
|
||||
|
|
Loading…
Reference in New Issue