[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC][PATCH v1 08/12] qemu-char: add qmp_proxy chardev
From: |
Michael Roth |
Subject: |
[Qemu-devel] [RFC][PATCH v1 08/12] qemu-char: add qmp_proxy chardev |
Date: |
Fri, 25 Mar 2011 14:47:55 -0500 |
This allows qemu to be started with guest agent support via:
qemu -chardev qmp_proxy,path=<optional>,id=qmp_proxy \
-device ...,chardev=qmp_proxy
It is essentially a wrapper for -chardev socket, which takes the extra
step of setting required defaults and initializing the qmp proxy by
passing the path argument along.
Not sure if this is the most elegant approach, but in terms of the
command-line invocation it seems to be the most consistent way to do
it.
Signed-off-by: Michael Roth <address@hidden>
---
qemu-char.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 46 insertions(+), 0 deletions(-)
diff --git a/qemu-char.c b/qemu-char.c
index d301925..6ff7698 100644
--- a/qemu-char.c
+++ b/qemu-char.c
@@ -2275,6 +2275,51 @@ static CharDriverState *qemu_chr_open_socket(QemuOpts
*opts)
return NULL;
}
+#include "qmp-proxy-core.h"
+
+extern QmpProxy *qmp_proxy_default;
+
+static CharDriverState *qemu_chr_open_qmp_proxy(QemuOpts *opts)
+{
+ CharDriverState *chr;
+ QmpProxy *p;
+ const char *path;
+
+ /* revert to/enforce default socket chardev options for qmp proxy */
+ path = qemu_opt_get(opts, "path");
+ if (path == NULL) {
+ path = QMP_PROXY_PATH_DEFAULT;
+ qemu_opt_set_qerr(opts, "path", path);
+ }
+ /* required options for qmp proxy */
+ qemu_opt_set_qerr(opts, "server", "on");
+ qemu_opt_set_qerr(opts, "wait", "off");
+ qemu_opt_set_qerr(opts, "telnet", "off");
+
+ chr = qemu_chr_open_socket(opts);
+ if (chr == NULL) {
+ goto err;
+ }
+
+ /* initialize virtagent using the socket we just set up */
+ if (qmp_proxy_default) {
+ fprintf(stderr, "error, multiple qmp guest proxies are not allowed\n");
+ }
+ p = qmp_proxy_new(path);
+ if (p == NULL) {
+ fprintf(stderr, "error initializing qmp guest proxy\n");
+ goto err;
+ }
+ qmp_proxy_default = p;
+
+ return chr;
+err:
+ if (chr) {
+ qemu_free(chr);
+ }
+ return NULL;
+}
+
/***********************************************************/
/* Memory chardev */
typedef struct {
@@ -2495,6 +2540,7 @@ static const struct {
|| defined(__FreeBSD_kernel__)
{ .name = "parport", .open = qemu_chr_open_pp },
#endif
+ { .name = "qmp_proxy", .open = qemu_chr_open_qmp_proxy },
};
CharDriverState *qemu_chr_open_opts(QemuOpts *opts,
--
1.7.0.4
[Qemu-devel] [RFC][PATCH v1 04/12] qapi: fix function name typo in qmp-gen.py, Michael Roth, 2011/03/25
[Qemu-devel] [RFC][PATCH v1 06/12] qmp proxy: build qemu with guest proxy dependency, Michael Roth, 2011/03/25
[Qemu-devel] [RFC][PATCH v1 03/12] json-parser: add handling for NULL token list, Michael Roth, 2011/03/25
[Qemu-devel] [RFC][PATCH v1 08/12] qemu-char: add qmp_proxy chardev,
Michael Roth <=
[Qemu-devel] [RFC][PATCH v1 11/12] guest agent: guest-side command implementations, Michael Roth, 2011/03/25
[Qemu-devel] [RFC][PATCH v1 09/12] guest agent: core marshal/dispatch interfaces, Michael Roth, 2011/03/25
[Qemu-devel] [RFC][PATCH v1 12/12] guest agent: build qemu-ga, add QEMU-wide gio dep, Michael Roth, 2011/03/25
[Qemu-devel] [RFC][PATCH v1 07/12] qmp proxy: core code for proxying qmp requests to guest, Michael Roth, 2011/03/25