Commit b4b12c62 authored by Anthony Liguori's avatar Anthony Liguori
Browse files

qmp: add qom-list command



This can be used to list properties in the device model.

Signed-off-by: default avatarAnthony Liguori <aliguori@us.ibm.com>
parent 5dbee474
Loading
Loading
Loading
Loading
+48 −0
Original line number Diff line number Diff line
@@ -1168,3 +1168,51 @@
# Since: 0.14.0
##
{ 'command': 'migrate_set_speed', 'data': {'value': 'int'} }

##
# @DevicePropertyInfo:
#
# @name: the name of the property
#
# @type: the type of the property.  This will typically come in one of four
#        forms:
#
#        1) A primitive type such as 'u8', 'u16', 'bool', 'str', or 'double'.
#           These types are mapped to the appropriate JSON type.
#
#        2) A legacy type in the form 'legacy<subtype>' where subtype is the
#           legacy qdev typename.  These types are always treated as strings.
#
#        3) A child type in the form 'child<subtype>' where subtype is a qdev
#           device type name.  Child properties create the composition tree.
#
#        4) A link type in the form 'link<subtype>' where subtype is a qdev
#           device type name.  Link properties form the device model graph.
#
# Since: 1.1
#
# Notes: This type is experimental.  Its syntax may change in future releases.
##
{ 'type': 'DevicePropertyInfo',
  'data': { 'name': 'str', 'type': 'str' } }

##
# @qom-list:
#
# This command will list any properties of a device given a path in the device
# model.
#
# @path: the path within the device model.  See @qom-get for a description of
#        this parameter.
#
# Returns: a list of @DevicePropertyInfo that describe the properties of the
#          device.
#
# Since: 1.1
#
# Notes: This command is experimental.  It's syntax may change in future
#        releases.
##
{ 'command': 'qom-list',
  'data': { 'path': 'str' },
  'returns': [ 'DevicePropertyInfo' ] }
+6 −0
Original line number Diff line number Diff line
@@ -2009,3 +2009,9 @@ EQMP
        .args_type  = "",
        .mhandler.cmd_new = qmp_marshal_input_query_balloon,
    },

    {
        .name       = "qom-list",
        .args_type  = "path:s",
        .mhandler.cmd_new = qmp_marshal_input_qom_list,
    },
+28 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@
#include "qmp-commands.h"
#include "kvm.h"
#include "arch_init.h"
#include "hw/qdev.h"

NameInfo *qmp_query_name(Error **errp)
{
@@ -154,3 +155,30 @@ void qmp_cont(Error **errp)

    vm_start();
}

DevicePropertyInfoList *qmp_qom_list(const char *path, Error **errp)
{
    DeviceState *dev;
    bool ambiguous = false;
    DevicePropertyInfoList *props = NULL;
    DeviceProperty *prop;

    dev = qdev_resolve_path(path, &ambiguous);
    if (dev == NULL) {
        error_set(errp, QERR_DEVICE_NOT_FOUND, path);
        return NULL;
    }

    QTAILQ_FOREACH(prop, &dev->properties, node) {
        DevicePropertyInfoList *entry = g_malloc0(sizeof(*entry));

        entry->value = g_malloc0(sizeof(DevicePropertyInfo));
        entry->next = props;
        props = entry;

        entry->value->name = g_strdup(prop->name);
        entry->value->type = g_strdup(prop->type);
    }

    return props;
}