qmp: add qom-list command

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

Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
Anthony Liguori 2011-12-12 14:29:34 -06:00
parent 5dbee474f3
commit b4b12c6247
3 changed files with 82 additions and 0 deletions

View File

@ -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' ] }

View File

@ -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
qmp.c
View File

@ -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;
}