All of lore.kernel.org
 help / color / mirror / Atom feed
From: Markus Armbruster <armbru@redhat.com>
To: qemu-devel@nongnu.org
Cc: damien.hedde@greensocs.com, berrange@redhat.com,
	mark.burton@greensocs.com, edgar.iglesias@gmail.co,
	mirela.grujic@greensocs.com, marcandre.lureau@redhat.com,
	pbonzini@redhat.com, jsnow@redhat.com
Subject: [PATCH RFC 05/11] vl: Demonstrate (bad) CLI wrapped around QMP
Date: Thu,  2 Dec 2021 08:04:44 +0100	[thread overview]
Message-ID: <20211202070450.264743-6-armbru@redhat.com> (raw)
In-Reply-To: <20211202070450.264743-1-armbru@redhat.com>

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(+)

diff --git a/softmmu/vl.c b/softmmu/vl.c
index 07be92d5c0..916cba35b7 100644
--- a/softmmu/vl.c
+++ b/softmmu/vl.c
@@ -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);
-- 
2.31.1



  parent reply	other threads:[~2021-12-02  7:51 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-02  7:04 [PATCH RFC 00/11] vl: Explore redesign of startup Markus Armbruster
2021-12-02  7:04 ` [PATCH RFC 01/11] vl: Cut off the CLI with an axe Markus Armbruster
2021-12-02  7:04 ` [PATCH RFC 02/11] vl: Drop x-exit-preconfig Markus Armbruster
2021-12-02  7:04 ` [PATCH RFC 03/11] vl: Hardcode a QMP monitor on stdio for now Markus Armbruster
2021-12-02  7:04 ` [PATCH RFC 04/11] vl: Hardcode a VGA device " Markus Armbruster
2021-12-02  7:04 ` Markus Armbruster [this message]
2021-12-02  7:04 ` [PATCH RFC 06/11] vl: Factor qemu_until_phase() out of qemu_init() Markus Armbruster
2021-12-02  7:04 ` [PATCH RFC 07/11] vl: Implement qemu_until_phase() running from arbitrary phase Markus Armbruster
2021-12-02  7:04 ` [PATCH RFC 08/11] vl: Implement qemu_until_phase() running to " Markus Armbruster
2021-12-02  7:04 ` [PATCH RFC 09/11] vl: New QMP command until-phase Markus Armbruster
2021-12-02  7:04 ` [PATCH RFC 10/11] vl: Disregard lack of 'allow-preconfig': true Markus Armbruster
2021-12-02  7:04 ` [PATCH RFC 11/11] vl: Enter main loop in phase @machine-initialized Markus Armbruster
2021-12-02 10:26 ` [PATCH RFC 00/11] vl: Explore redesign of startup Markus Armbruster
2021-12-07 16:52 ` Damien Hedde
2021-12-08  7:07   ` Markus Armbruster

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=20211202070450.264743-6-armbru@redhat.com \
    --to=armbru@redhat.com \
    --cc=berrange@redhat.com \
    --cc=damien.hedde@greensocs.com \
    --cc=edgar.iglesias@gmail.co \
    --cc=jsnow@redhat.com \
    --cc=marcandre.lureau@redhat.com \
    --cc=mark.burton@greensocs.com \
    --cc=mirela.grujic@greensocs.com \
    --cc=pbonzini@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.