[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [RFC v2 7/9] libxl_qmp: Implement query-status command
It check via QMP if QEMU as reach the intended status. Signed-off-by: Anthony PERARD <anthony.perard@xxxxxxxxxx> --- tools/libxl/libxl_internal.h | 3 +++ tools/libxl/libxl_qmp.c | 39 ++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h index 6352380644..3764d26463 100644 --- a/tools/libxl/libxl_internal.h +++ b/tools/libxl/libxl_internal.h @@ -1857,6 +1857,9 @@ _hidden int libxl__qmp_nbd_server_stop(libxl__gc *gc, int domid); _hidden int libxl__qmp_x_blockdev_change(libxl__gc *gc, int domid, const char *parant, const char *child, const char *node); +_hidden int libxl__qmp_query_status(libxl__gc *gc, + int domid, + const char *intended_status); /* run a hmp command in qmp mode */ _hidden int libxl__qmp_hmp(libxl__gc *gc, int domid, const char *command_line, char **out); diff --git a/tools/libxl/libxl_qmp.c b/tools/libxl/libxl_qmp.c index 3bb0f28bea..83bd804219 100644 --- a/tools/libxl/libxl_qmp.c +++ b/tools/libxl/libxl_qmp.c @@ -1246,6 +1246,45 @@ int libxl__qmp_x_blockdev_change(libxl__gc *gc, int domid, const char *parent, return qmp_run_command(gc, domid, "x-blockdev-change", args, NULL, NULL); } +static int qmp_check_status(libxl__qmp_handler *qmp, + const libxl__json_object *response, + void *opaque) +{ + char **status = opaque; + GC_INIT(qmp->ctx); + const libxl__json_object *o; + + o = libxl__json_map_get("status", response, JSON_STRING); + if (!o) + return 1; + *status = libxl__strdup(gc, libxl__json_object_get_string(o)); + return 0; +} + +int libxl__qmp_query_status(libxl__gc *gc, + int domid, + const char *intended_status) +{ + char *status = NULL; + int rc; + + rc = qmp_run_command(gc, domid, "query-status", NULL, + qmp_check_status, &status); + if (rc < 0) + return rc; + if (rc == 1) + /* QMP command returned unexpected result */ + return ERROR_FAIL; + + LOGD(DEBUG, domid, "query-status result: %s", status); + if (!strcmp(intended_status, status)) + /* success and ready */ + return 0; + + /* command success, status != intended_status */ + return ERROR_NOT_READY; +} + static int hmp_callback(libxl__qmp_handler *qmp, const libxl__json_object *response, void *opaque) -- Anthony PERARD _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |