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:
parent
5dbee474f3
commit
b4b12c6247
@ -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' ] }
|
||||
|
@ -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
28
qmp.c
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user