monitor: Command-line flag to enable control mode
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 <lcapitulino@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
418173c72f
commit
adcb181afe
18
monitor.c
18
monitor.c
@ -3535,6 +3535,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;
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
@item -monitor @var{dev}
|
||||
@item -monitor [@var{control},]@var{dev}
|
||||
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, \
|
||||
|
11
vl.c
11
vl.c
@ -4589,6 +4589,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;
|
||||
@ -4676,8 +4677,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;
|
||||
|
||||
@ -5098,7 +5101,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:
|
||||
@ -5792,9 +5797,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]);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user