[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 2/2] monitor: introduce query-config-schema command
From: |
Amos Kong |
Subject: |
[Qemu-devel] [PATCH 2/2] monitor: introduce query-config-schema command |
Date: |
Wed, 24 Apr 2013 20:47:26 +0800 |
Libvirt has no way to probe if an option or property is supported,
This patch introdues a new qmp command to query configuration schema
information. hmp command isn't added because it's not needed.
Signed-off-by: Amos Kong <address@hidden>
CC: Osier Yang <address@hidden>
CC: Anthony Liguori <address@hidden>
---
qapi-schema.json | 29 +++++++++++++++++++++++++++++
qmp-commands.hx | 40 ++++++++++++++++++++++++++++++++++++++++
util/qemu-config.c | 40 ++++++++++++++++++++++++++++++++++++++++
3 files changed, 109 insertions(+), 0 deletions(-)
diff --git a/qapi-schema.json b/qapi-schema.json
index 751d3c2..aeab057 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -3505,3 +3505,32 @@
'*asl_compiler_rev': 'uint32',
'*file': 'str',
'*data': 'str' }}
+
+##
+# @ConfigSchemaInfo:
+#
+# Configration schema information.
+#
+# @option: option name
+#
+# @params: parameters strList of one option
+#
+# Since 1.5
+##
+{ 'type': 'ConfigSchemaInfo', 'data': {'option': 'str', 'params': ['str']} }
+
+##
+# @query-config-schema
+#
+# Query configuration schema information of options
+#
+# @option: #optional option name
+#
+# Returns: returns @ConfigSchemaInfo if option is assigned, returns
+# @ConfigSchemaInfo list if no option is assigned, returns an error
+# QERR_INVALID_OPTION_GROUP if assigned option doesn't exist.
+#
+# Since 1.5
+##
+{'command': 'query-config-schema', 'data': {'*option': 'str'},
+ 'returns': ['ConfigSchemaInfo']}
diff --git a/qmp-commands.hx b/qmp-commands.hx
index 4d65422..c6399be 100644
--- a/qmp-commands.hx
+++ b/qmp-commands.hx
@@ -2414,6 +2414,46 @@ EQMP
.args_type = "",
.mhandler.cmd_new = qmp_marshal_input_query_uuid,
},
+SQMP
+query-config-schema
+------------
+
+Show configuration schema.
+
+Return configuration schema of one option if option is assigned, return
+configuration schema list of all options if no option is assigned. return
+an error QERR_INVALID_OPTION_GROUP if assigned option doesn't exist.
+
+- "option": option name
+- "params": parameters string list of one option
+
+Example:
+
+-> {"execute": "query-config-schema", "arguments" : {"option": "boot-opts"}}
+<- {
+ "return": [
+ {
+ "params": [
+ "strict",
+ "reboot-timeout",
+ "splash-time",
+ "splash",
+ "menu",
+ "once",
+ "order"
+ ],
+ "option": "boot-opts"
+ }
+ ]
+ }
+
+EQMP
+
+ {
+ .name = "query-config-schema",
+ .args_type = "option:s?",
+ .mhandler.cmd_new = qmp_marshal_input_query_config_schema,
+ },
SQMP
query-migrate
diff --git a/util/qemu-config.c b/util/qemu-config.c
index 01ca890..e8b4466 100644
--- a/util/qemu-config.c
+++ b/util/qemu-config.c
@@ -5,6 +5,7 @@
#include "qapi/qmp/qerror.h"
#include "hw/qdev.h"
#include "qapi/error.h"
+#include "qmp-commands.h"
static QemuOptsList *vm_config_groups[32];
@@ -37,6 +38,45 @@ QemuOptsList *qemu_find_opts(const char *group)
return ret;
}
+ConfigSchemaInfoList *qmp_query_config_schema(bool has_option,
+ const char *option, Error **errp)
+{
+ ConfigSchemaInfoList *conf_list = NULL, *entry;
+ ConfigSchemaInfo *info;
+ strList *str_list = NULL, *str_entry;
+ int entries, i, j;
+
+ entries = ARRAY_SIZE(vm_config_groups);
+
+ for (i = 0; i < entries; i++) {
+ if (vm_config_groups[i] != NULL &&
+ (!has_option || !strcmp(option, vm_config_groups[i]->name))) {
+ info = g_malloc0(sizeof(*info));
+ info->option = g_strdup(vm_config_groups[i]->name);
+ str_list = NULL;
+
+ for (j = 0; vm_config_groups[i]->desc[j].name != NULL; j++) {
+ str_entry = g_malloc0(sizeof(*str_entry));
+ str_entry->value = g_strdup(vm_config_groups[i]->desc[j].name);
+ str_entry->next = str_list;
+ str_list = str_entry;
+ }
+
+ info->params = str_list;
+ entry = g_malloc0(sizeof(*entry));
+ entry->value = info;
+ entry->next = conf_list;
+ conf_list = entry;
+ }
+ }
+
+ if (conf_list == NULL) {
+ error_set(errp, QERR_INVALID_OPTION_GROUP, option);
+ }
+
+ return conf_list;
+}
+
QemuOptsList *qemu_find_opts_err(const char *group, Error **errp)
{
return find_list(vm_config_groups, group, errp);
--
1.7.1
- [Qemu-devel] [RESEND PATCH 1/2] qapi: introduce strList and visit_type_strList(), Amos Kong, 2013/04/24
- [Qemu-devel] [PATCH 2/2] monitor: introduce query-config-schema command,
Amos Kong <=
- Re: [Qemu-devel] [PATCH 2/2] monitor: introduce query-config-schema command, Eric Blake, 2013/04/24
- [Qemu-devel] [PATCH] monitor: introduce query-config-schema command, Amos Kong, 2013/04/24
- [Qemu-devel] [PATCH v2] monitor: introduce query-config-schema command, Amos Kong, 2013/04/24
- Re: [Qemu-devel] [PATCH] monitor: introduce query-config-schema command, Luiz Capitulino, 2013/04/24
- Re: [Qemu-devel] [PATCH] monitor: introduce query-config-schema command, Eric Blake, 2013/04/24
- Re: [Qemu-devel] [PATCH] monitor: introduce query-config-schema command, Eric Blake, 2013/04/24
- Re: [Qemu-devel] [PATCH] monitor: introduce query-config-schema command, Amos Kong, 2013/04/24
- Re: [Qemu-devel] [PATCH] monitor: introduce query-config-schema command, Osier Yang, 2013/04/25
- Re: [Qemu-devel] [PATCH] monitor: introduce query-config-schema command, Amos Kong, 2013/04/25