[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 02/20] monitor: Command-line flag to enable control
From: |
Luiz Capitulino |
Subject: |
[Qemu-devel] [PATCH 02/20] monitor: Command-line flag to enable control mode |
Date: |
Thu, 26 Nov 2009 22:58:52 -0200 |
This commit adds a flag called 'control' to the '-monitor'
command-line option. This flag enables control mode.
The syntax is:
qemu [...] -monitor control,<device>
Where <device> 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.
NOTE: I've tried using QemuOpts for this, but turns out that it
will try to parse the device part, which should be untouched.
Signed-off-by: Luiz Capitulino <address@hidden>
---
monitor.c | 18 ++++++++++++++++++
monitor.h | 1 +
qemu-options.hx | 5 +++--
vl.c | 11 +++++++----
4 files changed, 29 insertions(+), 6 deletions(-)
diff --git a/monitor.c b/monitor.c
index 5907252..4d18699 100644
--- a/monitor.c
+++ b/monitor.c
@@ -3620,6 +3620,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/qemu-options.hx b/qemu-options.hx
index b65fd74..1b5781a 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
@@ -1577,13 +1577,14 @@ Use @code{-parallel none} to disable all parallel ports.
ETEXI
DEF("monitor", HAS_ARG, QEMU_OPTION_monitor, \
- "-monitor dev redirect the monitor to char device 'dev'\n")
+ "-monitor [control,]dev redirect the monitor to char device 'dev'\n")
STEXI
address@hidden -monitor @var{dev}
address@hidden -monitor address@hidden,address@hidden
Redirect the monitor to host device @var{dev} (same devices as the
serial port).
The default device is @code{vc} in graphical mode and @code{stdio} in
non graphical mode.
+The option @var{control} enables the QEMU Monitor Protocol.
ETEXI
DEF("pidfile", HAS_ARG, QEMU_OPTION_pidfile, \
diff --git a/vl.c b/vl.c
index e7d0754..dd9b74b 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;
@@ -5148,7 +5151,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:
@@ -5842,9 +5847,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]);
}
}
--
1.6.6.rc0.50.gaf06e
- [Qemu-devel] [PATCH v1 00/20] QEMU Monitor Protocol, Luiz Capitulino, 2009/11/26
- [Qemu-devel] [PATCH 01/20] monitor: Introduce MONITOR_USE_CONTROL flag, Luiz Capitulino, 2009/11/26
- [Qemu-devel] [PATCH 02/20] monitor: Command-line flag to enable control mode,
Luiz Capitulino <=
- [Qemu-devel] [PATCH 03/20] monitor: Introduce monitor_call_handler(), Luiz Capitulino, 2009/11/26
- [Qemu-devel] [PATCH 04/20] monitor: Introduce monitor_find_command(), Luiz Capitulino, 2009/11/26
- [Qemu-devel] [PATCH 05/20] monitor: Rename monitor_handle_command(), Luiz Capitulino, 2009/11/26
- [Qemu-devel] [PATCH 06/20] monitor: Introduce 'info commands', Luiz Capitulino, 2009/11/26
- [Qemu-devel] [PATCH 07/20] QError: Add errors needed by QMP, Luiz Capitulino, 2009/11/26
- [Qemu-devel] [PATCH 08/20] QMP: Initial support, Luiz Capitulino, 2009/11/26
- [Qemu-devel] [PATCH 09/20] QMP: Output support, Luiz Capitulino, 2009/11/26
- [Qemu-devel] [PATCH 10/20] QMP: do_info() checks, Luiz Capitulino, 2009/11/26
- [Qemu-devel] [PATCH 11/20] QMP: Input support, Luiz Capitulino, 2009/11/26
- [Qemu-devel] [PATCH 12/20] QMP: Allow 'query-' commands, Luiz Capitulino, 2009/11/26