@@ -129,6 +129,7 @@
#include "config-host.h"
+#include "monitor/monitor-internal.h"
#include "qapi/qapi-commands-char.h"
#include "qapi/qapi-types-control.h"
@@ -1011,6 +1012,31 @@ void qemu_init(int argc, char **argv, char **envp)
qemu_init_subsystems();
+ /*
+ * HACK to demonstrate feeding CLI to QMP
+ * Missing: translate CLI to QMP. Instead, each CLI argument is
+ * parsed as a QMP command.
+ */
+ {
+ int i;
+ QObject *req;
+ QDict *resp, *error;
+
+ for (i = 1; argv[i]; i++) {
+ loc_set_cmdline(argv, i, 1);
+ req = qobject_from_json(argv[i], &error_fatal);
+ resp = qmp_dispatch(&qmp_commands, req, false, NULL);
+ error = qdict_get_qdict(resp, "error");
+ if (error) {
+ error_report("%s", qdict_get_str(error, "desc"));
+ exit(1);
+ }
+ /* TODO do something with the command's return valud? */
+ qobject_unref(resp);
+ qobject_unref(req);
+ }
+ }
+
qemu_process_early_options();
qemu_maybe_daemonize(pid_file);
To ensure you can do everything with QMP, the CLI should wrap around QMP, like HMP should. This commit does that in the stupidest way I can think of: each CLI argument is parsed as QMP command, and fed to the QMP machinery. Errors are reported, return values thrown away. This is of course *bad* CLI. To get decent CLI, we'll want to translate from CLI syntax to QMP. We may want to target QMP's C interface instead of parse trees. Note that this CLI processing code is cleanly separated from other startup code, unlike the old CLI code I axed. Only QMP commands with 'allow-preconfig': true work at this time. This is because CLI is processed early in startup. The remainder of the series is about letting the user interleave CLI and then QMP with startup. This will make arbitrary QMP commands available in the CLI. Signed-off-by: Markus Armbruster <armbru@redhat.com> --- softmmu/vl.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+)