Patchwork [2/4] QMP: Introduce the qmp_capabilities command

login
register
mail settings
Submitter Luiz Capitulino
Date Feb. 4, 2010, 2:24 p.m.
Message ID <1265293484-30677-3-git-send-email-lcapitulino@redhat.com>
Download mbox | patch
Permalink /patch/44497/
State New
Headers show

Comments

Luiz Capitulino - Feb. 4, 2010, 2:24 p.m.
This command will be used to enable QMP capabilities advertised
by the capabilities array.

Note that it will be mandatory to issue this command in order
to make QMP functional (although this behavior is not being
enforced yet).

Also, as we don't have any capabilities yet, the new command
doesn't accept any arguments. I will postpone the decision for
a format for this until we get our first capability.

Finally, this command is visible from the user Monitor too, in
the meaning that you can execute it but it won't do anything.
Making it only visible in QMP is beyond this series' goal, as
it requires changes in unrelated places.

Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
---
 monitor.c       |   11 +++++++++++
 qemu-monitor.hx |   14 ++++++++++++++
 2 files changed, 25 insertions(+), 0 deletions(-)
Markus Armbruster - Feb. 4, 2010, 4:40 p.m.
Luiz Capitulino <lcapitulino@redhat.com> writes:

> This command will be used to enable QMP capabilities advertised
> by the capabilities array.
>
> Note that it will be mandatory to issue this command in order
> to make QMP functional (although this behavior is not being
> enforced yet).

The next commit enforces it.

> Also, as we don't have any capabilities yet, the new command
> doesn't accept any arguments. I will postpone the decision for
> a format for this until we get our first capability.

Fair enough.  Any argument we add to select capabilities after we ship
it this way will have to be optional, but that's okay.

> Finally, this command is visible from the user Monitor too, in
> the meaning that you can execute it but it won't do anything.
> Making it only visible in QMP is beyond this series' goal, as
> it requires changes in unrelated places.

We can fix this wart later.

Patch

diff --git a/monitor.c b/monitor.c
index 47b0050..7dac2f7 100644
--- a/monitor.c
+++ b/monitor.c
@@ -122,6 +122,7 @@  typedef struct MonitorControl {
     QObject *id;
     int print_enabled;
     JSONMessageParser parser;
+    int command_mode;
 } MonitorControl;
 
 struct Monitor {
@@ -409,6 +410,15 @@  void monitor_protocol_event(MonitorEvent event, QObject *data)
     QDECREF(qmp);
 }
 
+static void do_qmp_capabilities(Monitor *mon, const QDict *params,
+                                QObject **ret_data)
+{
+    /* Will setup QMP capabilities in the future */
+    if (monitor_ctrl_mode(mon)) {
+        mon->mc->command_mode = 1;
+    }
+}
+
 static int compare_cmd(const char *name, const char *list)
 {
     const char *p, *pstart;
@@ -4382,6 +4392,7 @@  static void monitor_control_event(void *opaque, int event)
         QObject *data;
         Monitor *mon = opaque;
 
+        mon->mc->command_mode = 0;
         json_message_parser_init(&mon->mc->parser, handle_qmp_command);
 
         data = get_qmp_gretting();
diff --git a/qemu-monitor.hx b/qemu-monitor.hx
index e5bff8e..8edbf23 100644
--- a/qemu-monitor.hx
+++ b/qemu-monitor.hx
@@ -1066,6 +1066,20 @@  STEXI
 Set the encrypted device @var{device} password to @var{password}
 ETEXI
 
+    {
+        .name       = "qmp_capabilities",
+        .args_type  = "",
+        .params     = "",
+        .help       = "enable QMP capabilities",
+        .user_print = monitor_user_noop,
+        .mhandler.cmd_new = do_qmp_capabilities,
+    },
+
+STEXI
+@item qmp_capabilities
+Enable the specified QMP capabilities
+ETEXI
+
 STEXI
 @end table
 ETEXI