From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=58781 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Q3EZ7-0008MD-4M for qemu-devel@nongnu.org; Fri, 25 Mar 2011 17:29:06 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Q3EZ5-0001XK-OX for qemu-devel@nongnu.org; Fri, 25 Mar 2011 17:29:04 -0400 Received: from e37.co.us.ibm.com ([32.97.110.158]:34198) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Q3EZ5-0001XD-I0 for qemu-devel@nongnu.org; Fri, 25 Mar 2011 17:29:03 -0400 Received: from d03relay03.boulder.ibm.com (d03relay03.boulder.ibm.com [9.17.195.228]) by e37.co.us.ibm.com (8.14.4/8.13.1) with ESMTP id p2PLQNf2006897 for ; Fri, 25 Mar 2011 15:26:23 -0600 Received: from d03av01.boulder.ibm.com (d03av01.boulder.ibm.com [9.17.195.167]) by d03relay03.boulder.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id p2PLT23Y095042 for ; Fri, 25 Mar 2011 15:29:02 -0600 Received: from d03av01.boulder.ibm.com (loopback [127.0.0.1]) by d03av01.boulder.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id p2PLT1rr023620 for ; Fri, 25 Mar 2011 15:29:02 -0600 Message-ID: <4D8D091D.6030102@us.ibm.com> Date: Fri, 25 Mar 2011 16:29:01 -0500 From: Anthony Liguori MIME-Version: 1.0 References: <1301082479-4058-1-git-send-email-mdroth@linux.vnet.ibm.com> <1301082479-4058-9-git-send-email-mdroth@linux.vnet.ibm.com> In-Reply-To: <1301082479-4058-9-git-send-email-mdroth@linux.vnet.ibm.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: [Qemu-devel] Re: [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: Michael Roth Cc: aliguori@linux.vnet.ibm.com, agl@linux.vnet.ibm.com, qemu-devel@nongnu.org, Jes.Sorensen@redhat.com 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=,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"); Why are these options required? Regards, Anthony Liguori > + > + 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,