hmp: Implement qom-get HMP command
This started off as Andreas Färber's implementation from March 2015, but after feedback from Paolo and Markus it morphed into using the json output which handles structs reasonably. Use with qom-list to find the members of an object. (qemu) qom-get /backend/console[0]/device/vga.rom[0] size 65536 (qemu) qom-get /machine smm "auto" (qemu) qom-get /machine rtc-time { "tm_year": 120, "tm_sec": 51, "tm_hour": 9, "tm_min": 50, "tm_mon": 4, "tm_mday": 20 } (qemu) qom-get /machine frob Error: Property '.frob' not found Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com> Message-Id: <20200520151108.160598-2-dgilbert@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
This commit is contained in:
parent
2f0c285aaa
commit
89cf4fe34f
@ -1790,6 +1790,20 @@ SRST
|
||||
Print QOM properties of object at location *path*
|
||||
ERST
|
||||
|
||||
{
|
||||
.name = "qom-get",
|
||||
.args_type = "path:s,property:s",
|
||||
.params = "path property",
|
||||
.help = "print QOM property",
|
||||
.cmd = hmp_qom_get,
|
||||
.flags = "p",
|
||||
},
|
||||
|
||||
SRST
|
||||
``qom-get`` *path* *property*
|
||||
Print QOM property *property* of object at location *path*
|
||||
ERST
|
||||
|
||||
{
|
||||
.name = "qom-set",
|
||||
.args_type = "path:s,property:s,value:s",
|
||||
|
@ -96,6 +96,7 @@ void hmp_info_memdev(Monitor *mon, const QDict *qdict);
|
||||
void hmp_info_numa(Monitor *mon, const QDict *qdict);
|
||||
void hmp_info_memory_devices(Monitor *mon, const QDict *qdict);
|
||||
void hmp_qom_list(Monitor *mon, const QDict *qdict);
|
||||
void hmp_qom_get(Monitor *mon, const QDict *qdict);
|
||||
void hmp_qom_set(Monitor *mon, const QDict *qdict);
|
||||
void hmp_info_qom_tree(Monitor *mon, const QDict *dict);
|
||||
void object_add_completion(ReadLineState *rs, int nb_args, const char *str);
|
||||
|
@ -12,6 +12,8 @@
|
||||
#include "qapi/error.h"
|
||||
#include "qapi/qapi-commands-qom.h"
|
||||
#include "qapi/qmp/qdict.h"
|
||||
#include "qapi/qmp/qjson.h"
|
||||
#include "qapi/qmp/qstring.h"
|
||||
#include "qom/object.h"
|
||||
|
||||
void hmp_qom_list(Monitor *mon, const QDict *qdict)
|
||||
@ -62,6 +64,22 @@ void hmp_qom_set(Monitor *mon, const QDict *qdict)
|
||||
hmp_handle_error(mon, err);
|
||||
}
|
||||
|
||||
void hmp_qom_get(Monitor *mon, const QDict *qdict)
|
||||
{
|
||||
const char *path = qdict_get_str(qdict, "path");
|
||||
const char *property = qdict_get_str(qdict, "property");
|
||||
Error *err = NULL;
|
||||
QObject *obj = qmp_qom_get(path, property, &err);
|
||||
|
||||
if (err == NULL) {
|
||||
QString *str = qobject_to_json_pretty(obj);
|
||||
monitor_printf(mon, "%s\n", qstring_get_str(str));
|
||||
qobject_unref(str);
|
||||
}
|
||||
|
||||
hmp_handle_error(mon, err);
|
||||
}
|
||||
|
||||
typedef struct QOMCompositionState {
|
||||
Monitor *mon;
|
||||
int indent;
|
||||
|
@ -61,6 +61,7 @@ static const char *hmp_cmds[] = {
|
||||
"p $pc + 8",
|
||||
"qom-list /",
|
||||
"qom-set /machine initrd test",
|
||||
"qom-get /machine initrd",
|
||||
"screendump /dev/null",
|
||||
"sendkey x",
|
||||
"singlestep on",
|
||||
|
Loading…
Reference in New Issue
Block a user