monitor: new parameter "x-oob"
Add new parameter to optionally enable Out-Of-Band for a QMP server. An example command line: ./qemu-system-x86_64 -chardev stdio,id=char0 \ -mon chardev=char0,mode=control,x-oob=on By default, Out-Of-Band is off. It is not allowed if either MUX or non-QMP is detected, since Out-Of-Band is currently only for QMP, and non-MUX chardev backends. Note that the client STILL has to request 'oob' during qmp_capabilities; in part because the x-oob command line option may disappear in the future if we decide the capabilities negotiation is sufficient. Signed-off-by: Peter Xu <peterx@redhat.com> Message-Id: <20180326063901.27425-4-peterx@redhat.com> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> [eblake: enhance commit message] Tested-by: Christian Borntraeger <borntraeger@de.ibm.com> Signed-off-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
parent
6d2d563f8c
commit
be933ffc23
@ -13,6 +13,7 @@ extern Monitor *cur_mon;
|
||||
#define MONITOR_USE_READLINE 0x02
|
||||
#define MONITOR_USE_CONTROL 0x04
|
||||
#define MONITOR_USE_PRETTY 0x08
|
||||
#define MONITOR_USE_OOB 0x10
|
||||
|
||||
bool monitor_cur_is_qmp(void);
|
||||
|
||||
|
22
monitor.c
22
monitor.c
@ -36,6 +36,7 @@
|
||||
#include "net/slirp.h"
|
||||
#include "chardev/char-fe.h"
|
||||
#include "chardev/char-io.h"
|
||||
#include "chardev/char-mux.h"
|
||||
#include "ui/qemu-spice.h"
|
||||
#include "sysemu/numa.h"
|
||||
#include "monitor/monitor.h"
|
||||
@ -4562,12 +4563,26 @@ static void monitor_qmp_setup_handlers_bh(void *opaque)
|
||||
void monitor_init(Chardev *chr, int flags)
|
||||
{
|
||||
Monitor *mon = g_malloc(sizeof(*mon));
|
||||
bool use_readline = flags & MONITOR_USE_READLINE;
|
||||
bool use_oob = flags & MONITOR_USE_OOB;
|
||||
|
||||
monitor_data_init(mon, false, false);
|
||||
if (use_oob) {
|
||||
if (CHARDEV_IS_MUX(chr)) {
|
||||
error_report("Monitor Out-Of-Band is not supported with "
|
||||
"MUX typed chardev backend");
|
||||
exit(1);
|
||||
}
|
||||
if (use_readline) {
|
||||
error_report("Monitor Out-Of-band is only supported by QMP");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
monitor_data_init(mon, false, use_oob);
|
||||
|
||||
qemu_chr_fe_init(&mon->chr, chr, &error_abort);
|
||||
mon->flags = flags;
|
||||
if (flags & MONITOR_USE_READLINE) {
|
||||
if (use_readline) {
|
||||
mon->rs = readline_init(monitor_readline_printf,
|
||||
monitor_readline_flush,
|
||||
mon,
|
||||
@ -4663,6 +4678,9 @@ QemuOptsList qemu_mon_opts = {
|
||||
},{
|
||||
.name = "pretty",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
},{
|
||||
.name = "x-oob",
|
||||
.type = QEMU_OPT_BOOL,
|
||||
},
|
||||
{ /* end of list */ }
|
||||
},
|
||||
|
5
vl.c
5
vl.c
@ -2404,6 +2404,11 @@ static int mon_init_func(void *opaque, QemuOpts *opts, Error **errp)
|
||||
if (qemu_opt_get_bool(opts, "pretty", 0))
|
||||
flags |= MONITOR_USE_PRETTY;
|
||||
|
||||
/* OOB is off by default */
|
||||
if (qemu_opt_get_bool(opts, "x-oob", 0)) {
|
||||
flags |= MONITOR_USE_OOB;
|
||||
}
|
||||
|
||||
chardev = qemu_opt_get(opts, "chardev");
|
||||
chr = qemu_chr_find(chardev);
|
||||
if (chr == NULL) {
|
||||
|
Loading…
Reference in New Issue
Block a user