From: Amos Kong <akong@redhat.com>
To: qemu-devel@nongnu.org, lcapitulino@redhat.com
Cc: aliguori@us.ibm.com, jyang@redhat.com
Subject: [Qemu-devel] [PATCH] monitor: introduce query-config-schema command
Date: Thu, 25 Apr 2013 01:33:24 +0800 [thread overview]
Message-ID: <1366824804-24532-1-git-send-email-akong@redhat.com> (raw)
In-Reply-To: <1366807646-8473-2-git-send-email-akong@redhat.com>
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.
V2: fix jaso schema and comments (Eric)
Signed-off-by: Amos Kong <akong@redhat.com>
CC: Osier Yang <jyang@redhat.com>
CC: Anthony Liguori <aliguori@us.ibm.com>
Signed-off-by: Amos Kong <akong@redhat.com>
---
qapi-schema.json | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
qmp-commands.hx | 43 ++++++++++++++++++++++++++++++++++++
util/qemu-config.c | 51 +++++++++++++++++++++++++++++++++++++++++++
3 files changed, 158 insertions(+)
diff --git a/qapi-schema.json b/qapi-schema.json
index 751d3c2..55aee4a 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -3505,3 +3505,67 @@
'*asl_compiler_rev': 'uint32',
'*file': 'str',
'*data': 'str' }}
+
+##
+# @ConfigParamType:
+#
+# JSON representation of values of QEMUOptionParType, may grow in future
+#
+# @flag: If no value is given, the flag is set to 1. Otherwise the value must
+# be "on" (set to 1) or "off" (set to 0)
+#
+# @number: Simple number
+#
+# @size: The value is converted to an integer. Suffixes for kilobytes etc
+#
+# @string: Character string
+#
+# Since 1.5
+##
+{ 'enum': 'ConfigParamType',
+ 'data': [ 'flag', 'number', 'size', 'string' ] }
+
+##
+# @ConfigParamInfo:
+#
+# JSON representation of QEMUOptionParameter, may grow in future
+#
+# @name: parameter name
+#
+# @type: parameter type
+#
+# @help is optional if no text was present
+#
+# Since 1.5
+##
+{ 'type': 'ConfigParamInfo',
+ 'data': { 'name': 'str', 'type': 'ConfigParamType', '*help':'str' } }
+
+##
+# @ConfigSchemaInfo:
+#
+# Each command line option, and its list of parameters
+#
+# @option: option name
+#
+# @params: a list of parameters of one option
+#
+# Since 1.5
+##
+{ 'type': 'ConfigSchemaInfo',
+ 'data': { 'option':'str', 'params': ['ConfigParamInfo'] } }
+
+##
+# @query-config-schema:
+#
+# Query configuration schema information
+#
+# @option: #optional option name
+#
+# Returns: list of @ConfigSchemaInfo for all options (or for the given
+# @option). Returns an error if a given @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..19415e4 100644
--- a/qmp-commands.hx
+++ b/qmp-commands.hx
@@ -2414,6 +2414,49 @@ EQMP
.args_type = "",
.mhandler.cmd_new = qmp_marshal_input_query_uuid,
},
+SQMP
+query-config-schema
+------------
+
+Show configuration schema.
+
+Return list of configuration schema of all options (or for the given option),
+return an error if given option doesn't exist.
+
+- "option": option name
+- "params": parameters infomation list of one option
+- "name": parameter name
+- "type": parameter type
+- "help": parameter help message
+
+Example:
+
+-> {"execute": "query-config-schema", "arguments" : {"option": "option-rom"}}
+<- {
+ "return": [
+ {
+ "params": [
+ {
+ "name": "romfile",
+ "type": "flag"
+ },
+ {
+ "name": "bootindex",
+ "type": "size"
+ }
+ ],
+ "option": "option-rom"
+ }
+ ]
+ }
+
+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..6d93642 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,56 @@ 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, *conf_entry;
+ ConfigSchemaInfo *schema_info;
+ ConfigParamInfoList *param_list = NULL, *param_entry;
+ ConfigParamInfo *param_info;
+ 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))) {
+ schema_info = g_malloc0(sizeof(*schema_info));
+ schema_info->option = g_strdup(vm_config_groups[i]->name);
+ param_list = NULL;
+
+ for (j = 0; vm_config_groups[i]->desc[j].name != NULL; j++) {
+ param_info = g_malloc0(sizeof(*param_info));
+ param_info->name = g_strdup(vm_config_groups[i]->desc[j].name);
+ param_info->type = vm_config_groups[i]->desc[j].type;
+
+ if (vm_config_groups[i]->desc[j].help) {
+ param_info->has_help = true;
+ param_info->help = g_strdup(
+ vm_config_groups[i]->desc[j].help);
+ }
+
+ param_entry = g_malloc0(sizeof(*param_entry));
+ param_entry->value = param_info;
+ param_entry->next = param_list;
+ param_list = param_entry;
+ }
+
+ schema_info->params = param_list;
+ conf_entry = g_malloc0(sizeof(*conf_entry));
+ conf_entry->value = schema_info;
+ conf_entry->next = conf_list;
+ conf_list = conf_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.8.1.4
next prev parent reply other threads:[~2013-04-24 17:33 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-04-24 12:47 [Qemu-devel] [RESEND PATCH 1/2] qapi: introduce strList and visit_type_strList() Amos Kong
2013-04-24 12:47 ` [Qemu-devel] [PATCH 2/2] monitor: introduce query-config-schema command Amos Kong
2013-04-24 14:38 ` Eric Blake
2013-04-24 16:45 ` Anthony Liguori
2013-04-24 17:33 ` Amos Kong [this message]
2013-04-24 17:36 ` [Qemu-devel] [PATCH v2] " Amos Kong
2013-04-24 18:20 ` [Qemu-devel] [PATCH] " Luiz Capitulino
2013-04-24 19:39 ` Eric Blake
2013-04-24 23:55 ` Eric Blake
2013-04-25 3:52 ` Amos Kong
2013-04-25 4:27 ` Osier Yang
2013-04-25 5:09 ` Amos Kong
2013-04-25 12:36 ` Luiz Capitulino
2013-04-25 13:30 ` Eric Blake
2013-04-25 1:14 ` Amos Kong
2013-04-25 1:35 ` Luiz Capitulino
2013-04-25 1:44 ` Eric Blake
2013-04-25 2:03 ` Amos Kong
2013-04-25 2:14 ` Luiz Capitulino
2013-04-25 1:43 ` Eric Blake
2013-04-25 3:38 ` Osier Yang
2013-04-24 14:01 ` [Qemu-devel] [RESEND PATCH 1/2] qapi: introduce strList and visit_type_strList() Eric Blake
2013-04-24 15:59 ` Amos Kong
2013-04-24 14:39 ` Eric Blake
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1366824804-24532-1-git-send-email-akong@redhat.com \
--to=akong@redhat.com \
--cc=aliguori@us.ibm.com \
--cc=jyang@redhat.com \
--cc=lcapitulino@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).