From patchwork Fri Mar 25 19:47:55 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Roth X-Patchwork-Id: 88412 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [199.232.76.165]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id D171DB6F85 for ; Sat, 26 Mar 2011 06:50:18 +1100 (EST) Received: from localhost ([127.0.0.1]:51478 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Q3D1U-00008h-2c for incoming@patchwork.ozlabs.org; Fri, 25 Mar 2011 15:50:16 -0400 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 Received: from localhost.localdomain (sig-9-65-252-65.mts.ibm.com [9.65.252.65]) by d01av03.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id p2PJm3tD022972; Fri, 25 Mar 2011 16:48:28 -0300 From: Michael Roth To: qemu-devel@nongnu.org Date: Fri, 25 Mar 2011 14:47:55 -0500 Message-Id: <1301082479-4058-9-git-send-email-mdroth@linux.vnet.ibm.com> X-Mailer: git-send-email 1.7.0.4 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> X-Content-Scanned: Fidelis XPS MAILER X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6, seldom 2.4 (older, 4) X-Received-From: 32.97.182.139 Cc: aliguori@linux.vnet.ibm.com, agl@linux.vnet.ibm.com, mdroth@linux.vnet.ibm.com, Jes.Sorensen@redhat.com Subject: [Qemu-devel] [RFC][PATCH v1 08/12] qemu-char: add qmp_proxy chardev X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org 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,