@@ -155,6 +155,24 @@ void hmp_info_migrate(Monitor *mon)
qapi_free_MigrationInfo(info);
}
+void hmp_info_migration_caps(Monitor *mon)
+{
+ MigrationCapList *caps_list, *cap;
+
+ caps_list = qmp_query_migration_caps(NULL);
+ if (!caps_list) {
+ monitor_printf(mon, "No migration capabilities found\n");
+ return;
+ }
+
+ for (cap = caps_list; cap; cap = cap->next) {
+ monitor_printf(mon, "%s\n", cap->value->name);
+ }
+
+ qapi_free_MigrationCapList(caps_list);
+
+}
+
void hmp_info_cpus(Monitor *mon)
{
CpuInfoList *cpu_list, *cpu;
@@ -25,6 +25,7 @@ void hmp_info_uuid(Monitor *mon);
void hmp_info_chardev(Monitor *mon);
void hmp_info_mice(Monitor *mon);
void hmp_info_migrate(Monitor *mon);
+void hmp_info_migration_caps(Monitor *mon);
void hmp_info_cpus(Monitor *mon);
void hmp_info_block(Monitor *mon);
void hmp_info_blockstats(Monitor *mon);
@@ -161,6 +161,17 @@ MigrationInfo *qmp_query_migrate(Error **errp)
return info;
}
+MigrationCapList *qmp_query_migration_caps(Error **errp)
+{
+ MigrationCapList *caps_list = g_malloc0(sizeof(*caps_list));
+
+ caps_list->value = g_malloc(sizeof(*caps_list->value));
+ caps_list->value->name = g_strdup("uleb");
+ caps_list->next = NULL;
+
+ return caps_list;
+}
+
/* shared migration helpers */
static void migrate_fd_monitor_suspend(MigrationState *s, Monitor *mon)
@@ -502,3 +513,4 @@ void qmp_migrate_set_downtime(double value, Error **errp)
value = MAX(0, MIN(UINT64_MAX, value));
max_downtime = (uint64_t)value;
}
+
@@ -2527,6 +2527,13 @@ static mon_cmd_t info_cmds[] = {
.mhandler.info = hmp_info_migrate,
},
{
+ .name = "migration_caps",
+ .args_type = "",
+ .params = "",
+ .help = "show migration capabilties",
+ .mhandler.info = hmp_info_migration_caps,
+ },
+ {
.name = "balloon",
.args_type = "",
.params = "",
@@ -276,6 +276,30 @@
{ 'command': 'query-migrate', 'returns': 'MigrationInfo' }
##
+# @MigrationCap
+#
+# Information about current migration capabilites.
+#
+# @xbzrle: true if the current migration supports xbzrle
+#
+# Since: 1.1
+##
+{ 'type': 'MigrationCap',
+ 'data': { 'name': 'str'} }
+
+##
+# @query-migration-caps
+#
+# Returns information about current migration process capabilties.
+#
+# Returns: @MigrationCap
+#
+# Since: 1.1
+##
+{ 'command': 'query-migration-caps', 'returns': ['MigrationCap'] }
+
+
+##
# @MouseInfo:
#
# Information about a mouse device.
@@ -1955,6 +1955,30 @@ EQMP
},
SQMP
+query-migration-caps
+-------
+
+Query migration capabilties
+
+- "xbzrle": xbzrle support
+
+Arguments:
+
+Example:
+
+-> { "execute": "query-migration-caps"}
+<- { "return": { "xbzrle" : true } }
+
+EQMP
+
+ {
+ .name = "query_migration_caps",
+ .args_type = "",
+ .mhandler.cmd_new = qmp_marshal_input_query_migration_caps,
+ },
+
+
+SQMP
query-balloon
-------------
Add migration capabiltes that can be queried by the management. The managment can query to source and the destination in order to verfiy both support some maigration capability (currently only XBZRLE). Signed-off-by: Orit Wasserman <owasserm@redhat.com> --- hmp.c | 18 ++++++++++++++++++ hmp.h | 1 + migration.c | 12 ++++++++++++ monitor.c | 7 +++++++ qapi-schema.json | 24 ++++++++++++++++++++++++ qmp-commands.hx | 24 ++++++++++++++++++++++++ 6 files changed, 86 insertions(+), 0 deletions(-)