qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH 4/8] QMP: Introduce qmp_switch_mode command


From: Luiz Capitulino
Subject: [Qemu-devel] [PATCH 4/8] QMP: Introduce qmp_switch_mode command
Date: Thu, 28 Jan 2010 11:42:56 -0200

It will be used to switch between "handshake" and "operational"
modes. Currently it doesn't have any practical effect, as
mode-oriented support is not enforced yet.

Usage example:

{ "execute": "qmp_switch_mode", "arguments": { "mode": "operational" } }

Signed-off-by: Luiz Capitulino <address@hidden>
---
 monitor.c       |   26 ++++++++++++++++++++++++++
 qemu-monitor.hx |   15 +++++++++++++++
 2 files changed, 41 insertions(+), 0 deletions(-)

diff --git a/monitor.c b/monitor.c
index 3ced51d..f6dd64d 100644
--- a/monitor.c
+++ b/monitor.c
@@ -704,6 +704,32 @@ static void do_info_qmp_mode(Monitor *mon, QObject 
**ret_data)
     *ret_data = qobject_from_jsonf("{ 'mode': %s }", mode);
 }
 
+static void do_qmp_switch_mode(Monitor *mon, const QDict *qdict,
+                               QObject **ret_data)
+{
+    const char *mode;
+
+    if (!monitor_ctrl_mode(mon)) {
+        return;
+    }
+
+    mode = qdict_get_str(qdict, "mode");
+
+    /*
+     * Check is simple, as this function can only run in
+     * handshake mode.
+     */
+
+    if (!strcmp(mode, "operational")) {
+        mon->mc->mode = QMODE_OPERATIONAL;
+    } else if (!strcmp(mode,  "handshake")) {
+        /* only handshake -> operational is allowed */
+        qemu_error_new(QERR_QMP_INVALID_MODE_TRANSITION);
+    } else {
+        qemu_error_new(QERR_QMP_INVALID_MODE_NAME, mode);
+    }
+}
+
 /**
  * do_info_commands(): List QMP available commands
  *
diff --git a/qemu-monitor.hx b/qemu-monitor.hx
index b51bb47..29155ce 100644
--- a/qemu-monitor.hx
+++ b/qemu-monitor.hx
@@ -1064,6 +1064,21 @@ STEXI
 Set the encrypted device @var{device} password to @var{password}
 ETEXI
 
+    {
+        .name       = "qmp_switch_mode",
+        .args_type  = "mode:s",
+        .params     = "qmp_switch_mode mode",
+        .help       = "switch QMP mode",
+        .flags      = HANDLER_HANDSHAKE_ONLY,
+        .user_print = monitor_user_noop,
+        .mhandler.cmd_new = do_qmp_switch_mode,
+    },
+
+STEXI
address@hidden qmp_switch_mode @var{mode}
+Switch QMP to @var{mode}
+ETEXI
+
 STEXI
 @end table
 ETEXI
-- 
1.6.6





reply via email to

[Prev in Thread] Current Thread [Next in Thread]