From patchwork Thu Nov 19 15:13:30 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luiz Capitulino X-Patchwork-Id: 38845 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 DDC19B7B3E for ; Fri, 20 Nov 2009 02:25:39 +1100 (EST) Received: from localhost ([127.0.0.1]:40962 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NB8t7-0004vh-4d for incoming@patchwork.ozlabs.org; Thu, 19 Nov 2009 10:25:37 -0500 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NB8ht-0007VP-9k for qemu-devel@nongnu.org; Thu, 19 Nov 2009 10:14:01 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1NB8ho-0007SA-A2 for qemu-devel@nongnu.org; Thu, 19 Nov 2009 10:14:00 -0500 Received: from [199.232.76.173] (port=49910 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NB8ho-0007Rw-3H for qemu-devel@nongnu.org; Thu, 19 Nov 2009 10:13:56 -0500 Received: from mx1.redhat.com ([209.132.183.28]:58894) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1NB8hn-00022X-HH for qemu-devel@nongnu.org; Thu, 19 Nov 2009 10:13:55 -0500 Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id nAJFDsG6011512 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 19 Nov 2009 10:13:54 -0500 Received: from localhost (vpn-9-45.rdu.redhat.com [10.11.9.45]) by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id nAJFDrcT009471; Thu, 19 Nov 2009 10:13:54 -0500 From: Luiz Capitulino To: qemu-devel@nongnu.org Date: Thu, 19 Nov 2009 13:13:30 -0200 Message-Id: <1258643623-8636-3-git-send-email-lcapitulino@redhat.com> In-Reply-To: <1258643623-8636-1-git-send-email-lcapitulino@redhat.com> References: <1258643623-8636-1-git-send-email-lcapitulino@redhat.com> X-Scanned-By: MIMEDefang 2.67 on 10.5.11.12 X-detected-operating-system: by monty-python.gnu.org: Genre and OS details not recognized. Cc: aliguori@us.ibm.com, avi@redhat.com Subject: [Qemu-devel] [PATCH 02/15] monitor: Command-line flag to enable control mode 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 commit adds a flag called 'control' to the '-monitor' command-line option. This flag enables control mode. The syntax is: qemu [...] -monitor control, Where is a chardev (excluding 'vc', for obvious reasons). For example: $ qemu [...] -monitor control,tcp:localhost:4444,server Will run QEMU in control mode, waiting for a client TCP connection on localhost port 4444. TODO: Update manpage. Signed-off-by: Luiz Capitulino --- monitor.c | 18 ++++++++++++++++++ monitor.h | 1 + vl.c | 11 +++++++---- 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/monitor.c b/monitor.c index e7c6451..a98dc42 100644 --- a/monitor.c +++ b/monitor.c @@ -3616,6 +3616,24 @@ static void monitor_event(void *opaque, int event) * End: */ +const char *monitor_cmdline_parse(const char *cmdline, int *flags) +{ + const char *dev; + + if (strstart(cmdline, "control,", &dev)) { + if (strstart(dev, "vc", NULL)) { + fprintf(stderr, "qemu: control mode is for low-level interaction "); + fprintf(stderr, "cannot be used with device 'vc'\n"); + exit(1); + } + *flags &= ~MONITOR_USE_READLINE; + *flags |= MONITOR_USE_CONTROL; + return dev; + } + + return cmdline; +} + void monitor_init(CharDriverState *chr, int flags) { static int is_first_init = 1; diff --git a/monitor.h b/monitor.h index 6cb1d4b..556507c 100644 --- a/monitor.h +++ b/monitor.h @@ -13,6 +13,7 @@ extern Monitor *cur_mon; #define MONITOR_USE_READLINE 0x02 #define MONITOR_USE_CONTROL 0x04 +const char *monitor_cmdline_parse(const char *cmdline, int *flags); void monitor_init(CharDriverState *chr, int flags); int monitor_suspend(Monitor *mon); diff --git a/vl.c b/vl.c index 73fe68d..6b1a77a 100644 --- a/vl.c +++ b/vl.c @@ -4639,6 +4639,7 @@ int main(int argc, char **argv, char **envp) const char *r, *optarg; CharDriverState *monitor_hds[MAX_MONITOR_DEVICES]; const char *monitor_devices[MAX_MONITOR_DEVICES]; + int monitor_flags[MAX_MONITOR_DEVICES]; int monitor_device_index; const char *serial_devices[MAX_SERIAL_PORTS]; int serial_device_index; @@ -4726,8 +4727,10 @@ int main(int argc, char **argv, char **envp) virtio_console_index = 0; monitor_devices[0] = "vc:80Cx24C"; + monitor_flags[0] = MONITOR_IS_DEFAULT | MONITOR_USE_READLINE; for (i = 1; i < MAX_MONITOR_DEVICES; i++) { monitor_devices[i] = NULL; + monitor_flags[i] = MONITOR_USE_READLINE; } monitor_device_index = 0; @@ -5150,7 +5153,9 @@ int main(int argc, char **argv, char **envp) fprintf(stderr, "qemu: too many monitor devices\n"); exit(1); } - monitor_devices[monitor_device_index] = optarg; + monitor_devices[monitor_device_index] = + monitor_cmdline_parse(optarg, + &monitor_flags[monitor_device_index]); monitor_device_index++; break; case QEMU_OPTION_chardev: @@ -5844,9 +5849,7 @@ int main(int argc, char **argv, char **envp) for (i = 0; i < MAX_MONITOR_DEVICES; i++) { if (monitor_devices[i] && monitor_hds[i]) { - monitor_init(monitor_hds[i], - MONITOR_USE_READLINE | - ((i == 0) ? MONITOR_IS_DEFAULT : 0)); + monitor_init(monitor_hds[i], monitor_flags[i]); } }