[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC v6 11/27] qmp: introduce QMPCapability
From: |
Peter Xu |
Subject: |
[Qemu-devel] [RFC v6 11/27] qmp: introduce QMPCapability |
Date: |
Tue, 19 Dec 2017 16:45:41 +0800 |
There was no QMP capabilities defined. Define the first "oob" as
capability to allow out-of-band messages.
Also, touch up qmp-test.c to test the new bits.
Signed-off-by: Peter Xu <address@hidden>
---
monitor.c | 10 ++++++++--
qapi-schema.json | 13 +++++++++++++
tests/qmp-test.c | 10 +++++++++-
3 files changed, 30 insertions(+), 3 deletions(-)
diff --git a/monitor.c b/monitor.c
index 4b2bee773f..81fb0a42b4 100644
--- a/monitor.c
+++ b/monitor.c
@@ -3943,12 +3943,18 @@ void monitor_resume(Monitor *mon)
static QObject *get_qmp_greeting(void)
{
+ QList *cap_list = qlist_new();
QObject *ver = NULL;
+ QMPCapability cap;
qmp_marshal_query_version(NULL, &ver, NULL);
- return qobject_from_jsonf("{'QMP': {'version': %p, 'capabilities': []}}",
- ver);
+ for (cap = 0; cap < QMP_CAPABILITY__MAX; cap++) {
+ qlist_append(cap_list, qstring_from_str(QMPCapability_str(cap)));
+ }
+
+ return qobject_from_jsonf("{'QMP': {'version': %p, 'capabilities': %p}}",
+ ver, cap_list);
}
static void monitor_qmp_event(void *opaque, int event)
diff --git a/qapi-schema.json b/qapi-schema.json
index 18457954a8..03201578b4 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -118,6 +118,19 @@
##
{ 'command': 'qmp_capabilities' }
+##
+# @QMPCapability:
+#
+# QMP supported capabilities to be broadcasted to the clients.
+#
+# @oob: QMP ability to support Out-Of-Band requests.
+#
+# Since: 2.12
+#
+##
+{ 'enum': 'QMPCapability',
+ 'data': [ 'oob' ] }
+
##
# @VersionTriple:
#
diff --git a/tests/qmp-test.c b/tests/qmp-test.c
index c5a5c10b41..292c5f135a 100644
--- a/tests/qmp-test.c
+++ b/tests/qmp-test.c
@@ -17,6 +17,7 @@
#include "qapi/qobject-input-visitor.h"
#include "qapi/util.h"
#include "qapi/visitor.h"
+#include "qapi/qmp/qstring.h"
const char common_args[] = "-nodefaults -machine none";
@@ -75,6 +76,8 @@ static void test_qmp_protocol(void)
{
QDict *resp, *q, *ret;
QList *capabilities;
+ const QListEntry *entry;
+ QString *qstr;
global_qtest = qtest_init_without_qmp_handshake(common_args);
@@ -84,7 +87,12 @@ static void test_qmp_protocol(void)
g_assert(q);
test_version(qdict_get(q, "version"));
capabilities = qdict_get_qlist(q, "capabilities");
- g_assert(capabilities && qlist_empty(capabilities));
+ g_assert(capabilities);
+ entry = qlist_first(capabilities);
+ g_assert(entry);
+ qstr = qobject_to_qstring(entry->value);
+ g_assert(qstr);
+ g_assert_cmpstr(qstring_get_str(qstr), ==, "oob");
QDECREF(resp);
/* Test valid command before handshake */
--
2.14.3
- [Qemu-devel] [RFC v6 05/27] monitor: move skip_flush into monitor_data_init, (continued)
- [Qemu-devel] [RFC v6 05/27] monitor: move skip_flush into monitor_data_init, Peter Xu, 2017/12/19
- [Qemu-devel] [RFC v6 06/27] monitor: move the cur_mon hack deeper for QMP, Peter Xu, 2017/12/19
- [Qemu-devel] [RFC v6 07/27] monitor: unify global init, Peter Xu, 2017/12/19
- [Qemu-devel] [RFC v6 08/27] monitor: let mon_list be tail queue, Peter Xu, 2017/12/19
- [Qemu-devel] [RFC v6 09/27] monitor: create monitor dedicate iothread, Peter Xu, 2017/12/19
- [Qemu-devel] [RFC v6 10/27] monitor: allow to use IO thread for parsing, Peter Xu, 2017/12/19
- [Qemu-devel] [RFC v6 11/27] qmp: introduce QMPCapability,
Peter Xu <=
- [Qemu-devel] [RFC v6 12/27] qmp: negotiate QMP capabilities, Peter Xu, 2017/12/19
- [Qemu-devel] [RFC v6 13/27] monitor: introduce monitor_qmp_respond(), Peter Xu, 2017/12/19
- [Qemu-devel] [RFC v6 14/27] monitor: let suspend_cnt be thread safe, Peter Xu, 2017/12/19
- [Qemu-devel] [RFC v6 15/27] monitor: let suspend/resume work even with QMPs, Peter Xu, 2017/12/19