Commit 77d1c3c6 authored by Martin Kletzander's avatar Martin Kletzander Committed by Luiz Capitulino
Browse files

qmp: expose list of supported character device backends



Introduce 'query-chardev-backends' QMP command which lists all
supported character device backends.

Signed-off-by: default avatarMartin Kletzander <mkletzan@redhat.com>
Reviewed-by: default avatarEric Blake <eblake@redhat.com>
Signed-off-by: default avatarLuiz Capitulino <lcapitulino@redhat.com>
parent 84d18f06
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -436,6 +436,28 @@
##
{ 'command': 'query-chardev', 'returns': ['ChardevInfo'] }

##
# @ChardevBackendInfo:
#
# Information about a character device backend
#
# @name: The backend name
#
# Since: 2.0
##
{ 'type': 'ChardevBackendInfo', 'data': {'name': 'str'} }

##
# @query-chardev-backends:
#
# Returns information about character device backends.
#
# Returns: a list of @ChardevBackendInfo
#
# Since: 2.0
##
{ 'command': 'query-chardev-backends', 'returns': ['ChardevBackendInfo'] }

##
# @DataFormat:
#
+19 −0
Original line number Diff line number Diff line
@@ -3432,6 +3432,25 @@ ChardevInfoList *qmp_query_chardev(Error **errp)
    return chr_list;
}

ChardevBackendInfoList *qmp_query_chardev_backends(Error **errp)
{
    ChardevBackendInfoList *backend_list = NULL;
    CharDriver *c = NULL;
    GSList *i = NULL;

    for (i = backends; i; i = i->next) {
        ChardevBackendInfoList *info = g_malloc0(sizeof(*info));
        c = i->data;
        info->value = g_malloc0(sizeof(*info->value));
        info->value->name = g_strdup(c->name);

        info->next = backend_list;
        backend_list = info;
    }

    return backend_list;
}

CharDriverState *qemu_chr_find(const char *name)
{
    CharDriverState *chr;
+41 −0
Original line number Diff line number Diff line
@@ -1923,6 +1923,47 @@ EQMP
        .mhandler.cmd_new = qmp_marshal_input_query_chardev,
    },

SQMP
query-chardev-backends
-------------

List available character device backends.

Each backend is represented by a json-object, the returned value is a json-array
of all backends.

Each json-object contains:

- "name": backend name (json-string)

Example:

-> { "execute": "query-chardev-backends" }
<- {
      "return":[
         {
            "name":"udp"
         },
         {
            "name":"tcp"
         },
         {
            "name":"unix"
         },
         {
            "name":"spiceport"
         }
      ]
   }

EQMP

    {
        .name       = "query-chardev-backends",
        .args_type  = "",
        .mhandler.cmd_new = qmp_marshal_input_query_chardev_backends,
    },

SQMP
query-block
-----------