summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--hmp-commands.hx14
-rw-r--r--include/monitor/hmp.h1
-rw-r--r--qom/qom-hmp-cmds.c18
-rw-r--r--tests/qtest/test-hmp.c1
4 files changed, 34 insertions, 0 deletions
diff --git a/hmp-commands.hx b/hmp-commands.hx
index 7f0f3974ad..250ddae54d 100644
--- a/hmp-commands.hx
+++ b/hmp-commands.hx
@@ -1791,6 +1791,20 @@ SRST
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",
.params = "path property value",
diff --git a/include/monitor/hmp.h b/include/monitor/hmp.h
index e33ca5a911..c986cfd28b 100644
--- a/include/monitor/hmp.h
+++ b/include/monitor/hmp.h
@@ -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);
diff --git a/qom/qom-hmp-cmds.c b/qom/qom-hmp-cmds.c
index cd08233a4c..a8b0a080c7 100644
--- a/qom/qom-hmp-cmds.c
+++ b/qom/qom-hmp-cmds.c
@@ -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;
diff --git a/tests/qtest/test-hmp.c b/tests/qtest/test-hmp.c
index f8aa5f92c5..b8b1271b9e 100644
--- a/tests/qtest/test-hmp.c
+++ b/tests/qtest/test-hmp.c
@@ -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",