From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=33644 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Q3Czq-00004u-3R for qemu-devel@nongnu.org; Fri, 25 Mar 2011 15:48:36 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Q3Czl-0006MU-V6 for qemu-devel@nongnu.org; Fri, 25 Mar 2011 15:48:30 -0400 Received: from e9.ny.us.ibm.com ([32.97.182.139]:60151) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Q3Czl-0006MO-RZ for qemu-devel@nongnu.org; Fri, 25 Mar 2011 15:48:29 -0400 Received: from d01dlp02.pok.ibm.com (d01dlp02.pok.ibm.com [9.56.224.85]) by e9.ny.us.ibm.com (8.14.4/8.13.1) with ESMTP id p2PJLO7c032019 for ; Fri, 25 Mar 2011 15:21:24 -0400 Received: from d01relay03.pok.ibm.com (d01relay03.pok.ibm.com [9.56.227.235]) by d01dlp02.pok.ibm.com (Postfix) with ESMTP id 8F57B6E8036 for ; Fri, 25 Mar 2011 15:48:29 -0400 (EDT) Received: from d01av03.pok.ibm.com (d01av03.pok.ibm.com [9.56.224.217]) by d01relay03.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id p2PJmTIo347642 for ; Fri, 25 Mar 2011 15:48:29 -0400 Received: from d01av03.pok.ibm.com (loopback [127.0.0.1]) by d01av03.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id p2PJmSNL024878 for ; Fri, 25 Mar 2011 16:48:29 -0300 From: Michael Roth Date: Fri, 25 Mar 2011 14:47:55 -0500 Message-Id: <1301082479-4058-9-git-send-email-mdroth@linux.vnet.ibm.com> In-Reply-To: <1301082479-4058-1-git-send-email-mdroth@linux.vnet.ibm.com> References: <1301082479-4058-1-git-send-email-mdroth@linux.vnet.ibm.com> Subject: [Qemu-devel] [RFC][PATCH v1 08/12] qemu-char: add qmp_proxy chardev List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: aliguori@linux.vnet.ibm.com, agl@linux.vnet.ibm.com, mdroth@linux.vnet.ibm.com, Jes.Sorensen@redhat.com This allows qemu to be started with guest agent support via: qemu -chardev qmp_proxy,path=,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 --- 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