On 03/25/2011 04:29 PM, Anthony Liguori wrote:
On 03/25/2011 02:47 PM, Michael Roth wrote:
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<mdr...@linux.vnet.ibm.com>
---
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");

Why are these options required?

The qmp_proxy_new() constructor expects a path to a socket it can connect() to. Not sure about telnet, but the other options are required for this. Well...server=on at least, wait=off needs to be set as well because that's the only way to have the socket chardev set the listening socket to non-block, since qmp_proxy_new() calls connect() on it before we return to the main I/O loop.

Although, we probably shouldn't just silently switch out explicitly set options; an error would probably be more appropriate here.


Regards,

Anthony Liguori


Reply via email to