mirror of https://gitee.com/openkylin/qemu.git
monitor: Move monitor option parsing to monitor/monitor.c
Both the system emulators and tools with QMP support (specifically, the planned storage daemon) will need to parse monitor options, so move that code to monitor/monitor.c, which can be linked into binaries that aren't a system emulator. Signed-off-by: Kevin Wolf <kwolf@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> Message-Id: <20200129102239.31435-2-kwolf@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com>
This commit is contained in:
parent
9ced5c7c20
commit
c3e9555182
|
@ -10,12 +10,15 @@ typedef struct MonitorHMP MonitorHMP;
|
|||
|
||||
#define QMP_REQ_QUEUE_LEN_MAX 8
|
||||
|
||||
extern QemuOptsList qemu_mon_opts;
|
||||
|
||||
bool monitor_cur_is_qmp(void);
|
||||
|
||||
void monitor_init_globals(void);
|
||||
void monitor_init_globals_core(void);
|
||||
void monitor_init_qmp(Chardev *chr, bool pretty);
|
||||
void monitor_init_hmp(Chardev *chr, bool use_readline);
|
||||
int monitor_init_opts(QemuOpts *opts, Error **errp);
|
||||
void monitor_cleanup(void);
|
||||
|
||||
int monitor_suspend(Monitor *mon);
|
||||
|
|
|
@ -125,7 +125,6 @@ extern QemuOptsList qemu_netdev_opts;
|
|||
extern QemuOptsList qemu_nic_opts;
|
||||
extern QemuOptsList qemu_net_opts;
|
||||
extern QemuOptsList qemu_global_opts;
|
||||
extern QemuOptsList qemu_mon_opts;
|
||||
extern QemuOptsList qemu_semihosting_config_opts;
|
||||
|
||||
#endif
|
||||
|
|
|
@ -609,6 +609,54 @@ void monitor_init_globals_core(void)
|
|||
NULL);
|
||||
}
|
||||
|
||||
int monitor_init_opts(QemuOpts *opts, Error **errp)
|
||||
{
|
||||
Chardev *chr;
|
||||
bool qmp;
|
||||
bool pretty = false;
|
||||
const char *chardev;
|
||||
const char *mode;
|
||||
|
||||
mode = qemu_opt_get(opts, "mode");
|
||||
if (mode == NULL) {
|
||||
mode = "readline";
|
||||
}
|
||||
if (strcmp(mode, "readline") == 0) {
|
||||
qmp = false;
|
||||
} else if (strcmp(mode, "control") == 0) {
|
||||
qmp = true;
|
||||
} else {
|
||||
error_setg(errp, "unknown monitor mode \"%s\"", mode);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!qmp && qemu_opt_get(opts, "pretty")) {
|
||||
warn_report("'pretty' is deprecated for HMP monitors, it has no effect "
|
||||
"and will be removed in future versions");
|
||||
}
|
||||
if (qemu_opt_get_bool(opts, "pretty", 0)) {
|
||||
pretty = true;
|
||||
}
|
||||
|
||||
chardev = qemu_opt_get(opts, "chardev");
|
||||
if (!chardev) {
|
||||
error_report("chardev is required");
|
||||
exit(1);
|
||||
}
|
||||
chr = qemu_chr_find(chardev);
|
||||
if (chr == NULL) {
|
||||
error_setg(errp, "chardev \"%s\" not found", chardev);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (qmp) {
|
||||
monitor_init_qmp(chr, pretty);
|
||||
} else {
|
||||
monitor_init_hmp(chr, true);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
QemuOptsList qemu_mon_opts = {
|
||||
.name = "mon",
|
||||
.implied_opt_name = "chardev",
|
||||
|
|
45
vl.c
45
vl.c
|
@ -2127,50 +2127,7 @@ static int fsdev_init_func(void *opaque, QemuOpts *opts, Error **errp)
|
|||
|
||||
static int mon_init_func(void *opaque, QemuOpts *opts, Error **errp)
|
||||
{
|
||||
Chardev *chr;
|
||||
bool qmp;
|
||||
bool pretty = false;
|
||||
const char *chardev;
|
||||
const char *mode;
|
||||
|
||||
mode = qemu_opt_get(opts, "mode");
|
||||
if (mode == NULL) {
|
||||
mode = "readline";
|
||||
}
|
||||
if (strcmp(mode, "readline") == 0) {
|
||||
qmp = false;
|
||||
} else if (strcmp(mode, "control") == 0) {
|
||||
qmp = true;
|
||||
} else {
|
||||
error_setg(errp, "unknown monitor mode \"%s\"", mode);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!qmp && qemu_opt_get(opts, "pretty")) {
|
||||
warn_report("'pretty' is deprecated for HMP monitors, it has no effect "
|
||||
"and will be removed in future versions");
|
||||
}
|
||||
if (qemu_opt_get_bool(opts, "pretty", 0)) {
|
||||
pretty = true;
|
||||
}
|
||||
|
||||
chardev = qemu_opt_get(opts, "chardev");
|
||||
if (!chardev) {
|
||||
error_report("chardev is required");
|
||||
exit(1);
|
||||
}
|
||||
chr = qemu_chr_find(chardev);
|
||||
if (chr == NULL) {
|
||||
error_setg(errp, "chardev \"%s\" not found", chardev);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (qmp) {
|
||||
monitor_init_qmp(chr, pretty);
|
||||
} else {
|
||||
monitor_init_hmp(chr, true);
|
||||
}
|
||||
return 0;
|
||||
return monitor_init_opts(opts, errp);
|
||||
}
|
||||
|
||||
static void monitor_parse(const char *optarg, const char *mode, bool pretty)
|
||||
|
|
Loading…
Reference in New Issue