OSDN Git Service

Revert "monitor: enable IO thread for (qmp & !mux) typed"
[qmiga/qemu.git] / monitor.c
1 /*
2  * QEMU monitor
3  *
4  * Copyright (c) 2003-2004 Fabrice Bellard
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a copy
7  * of this software and associated documentation files (the "Software"), to deal
8  * in the Software without restriction, including without limitation the rights
9  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10  * copies of the Software, and to permit persons to whom the Software is
11  * furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included in
14  * all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22  * THE SOFTWARE.
23  */
24
25 #include "qemu/osdep.h"
26 #include <dirent.h>
27 #include "cpu.h"
28 #include "hw/hw.h"
29 #include "monitor/qdev.h"
30 #include "hw/usb.h"
31 #include "hw/pci/pci.h"
32 #include "sysemu/watchdog.h"
33 #include "hw/loader.h"
34 #include "exec/gdbstub.h"
35 #include "net/net.h"
36 #include "net/slirp.h"
37 #include "chardev/char-fe.h"
38 #include "chardev/char-io.h"
39 #include "ui/qemu-spice.h"
40 #include "sysemu/numa.h"
41 #include "monitor/monitor.h"
42 #include "qemu/config-file.h"
43 #include "qemu/readline.h"
44 #include "ui/console.h"
45 #include "ui/input.h"
46 #include "sysemu/blockdev.h"
47 #include "sysemu/block-backend.h"
48 #include "audio/audio.h"
49 #include "disas/disas.h"
50 #include "sysemu/balloon.h"
51 #include "qemu/timer.h"
52 #include "sysemu/hw_accel.h"
53 #include "qemu/acl.h"
54 #include "sysemu/tpm.h"
55 #include "qapi/qmp/qdict.h"
56 #include "qapi/qmp/qerror.h"
57 #include "qapi/qmp/qnum.h"
58 #include "qapi/qmp/qstring.h"
59 #include "qapi/qmp/qjson.h"
60 #include "qapi/qmp/json-streamer.h"
61 #include "qapi/qmp/json-parser.h"
62 #include "qapi/qmp/qlist.h"
63 #include "qom/object_interfaces.h"
64 #include "trace-root.h"
65 #include "trace/control.h"
66 #include "monitor/hmp-target.h"
67 #ifdef CONFIG_TRACE_SIMPLE
68 #include "trace/simple.h"
69 #endif
70 #include "exec/memory.h"
71 #include "exec/exec-all.h"
72 #include "qemu/log.h"
73 #include "qemu/option.h"
74 #include "hmp.h"
75 #include "qemu/thread.h"
76 #include "block/qapi.h"
77 #include "qapi/qapi-commands.h"
78 #include "qapi/qapi-events.h"
79 #include "qapi/error.h"
80 #include "qapi/qmp-event.h"
81 #include "qapi/qapi-introspect.h"
82 #include "sysemu/qtest.h"
83 #include "sysemu/cpus.h"
84 #include "sysemu/iothread.h"
85 #include "qemu/cutils.h"
86
87 #if defined(TARGET_S390X)
88 #include "hw/s390x/storage-keys.h"
89 #include "hw/s390x/storage-attributes.h"
90 #endif
91
92 /*
93  * Supported types:
94  *
95  * 'F'          filename
96  * 'B'          block device name
97  * 's'          string (accept optional quote)
98  * 'S'          it just appends the rest of the string (accept optional quote)
99  * 'O'          option string of the form NAME=VALUE,...
100  *              parsed according to QemuOptsList given by its name
101  *              Example: 'device:O' uses qemu_device_opts.
102  *              Restriction: only lists with empty desc are supported
103  *              TODO lift the restriction
104  * 'i'          32 bit integer
105  * 'l'          target long (32 or 64 bit)
106  * 'M'          Non-negative target long (32 or 64 bit), in user mode the
107  *              value is multiplied by 2^20 (think Mebibyte)
108  * 'o'          octets (aka bytes)
109  *              user mode accepts an optional E, e, P, p, T, t, G, g, M, m,
110  *              K, k suffix, which multiplies the value by 2^60 for suffixes E
111  *              and e, 2^50 for suffixes P and p, 2^40 for suffixes T and t,
112  *              2^30 for suffixes G and g, 2^20 for M and m, 2^10 for K and k
113  * 'T'          double
114  *              user mode accepts an optional ms, us, ns suffix,
115  *              which divides the value by 1e3, 1e6, 1e9, respectively
116  * '/'          optional gdb-like print format (like "/10x")
117  *
118  * '?'          optional type (for all types, except '/')
119  * '.'          other form of optional type (for 'i' and 'l')
120  * 'b'          boolean
121  *              user mode accepts "on" or "off"
122  * '-'          optional parameter (eg. '-f')
123  *
124  */
125
126 typedef struct mon_cmd_t {
127     const char *name;
128     const char *args_type;
129     const char *params;
130     const char *help;
131     void (*cmd)(Monitor *mon, const QDict *qdict);
132     /* @sub_table is a list of 2nd level of commands. If it does not exist,
133      * cmd should be used. If it exists, sub_table[?].cmd should be
134      * used, and cmd of 1st level plays the role of help function.
135      */
136     struct mon_cmd_t *sub_table;
137     void (*command_completion)(ReadLineState *rs, int nb_args, const char *str);
138 } mon_cmd_t;
139
140 /* file descriptors passed via SCM_RIGHTS */
141 typedef struct mon_fd_t mon_fd_t;
142 struct mon_fd_t {
143     char *name;
144     int fd;
145     QLIST_ENTRY(mon_fd_t) next;
146 };
147
148 /* file descriptor associated with a file descriptor set */
149 typedef struct MonFdsetFd MonFdsetFd;
150 struct MonFdsetFd {
151     int fd;
152     bool removed;
153     char *opaque;
154     QLIST_ENTRY(MonFdsetFd) next;
155 };
156
157 /* file descriptor set containing fds passed via SCM_RIGHTS */
158 typedef struct MonFdset MonFdset;
159 struct MonFdset {
160     int64_t id;
161     QLIST_HEAD(, MonFdsetFd) fds;
162     QLIST_HEAD(, MonFdsetFd) dup_fds;
163     QLIST_ENTRY(MonFdset) next;
164 };
165
166 typedef struct {
167     JSONMessageParser parser;
168     /*
169      * When a client connects, we're in capabilities negotiation mode.
170      * When command qmp_capabilities succeeds, we go into command
171      * mode.
172      */
173     QmpCommandList *commands;
174     bool qmp_caps[QMP_CAPABILITY__MAX];
175     /*
176      * Protects qmp request/response queue.  Please take monitor_lock
177      * first when used together.
178      */
179     QemuMutex qmp_queue_lock;
180     /* Input queue that holds all the parsed QMP requests */
181     GQueue *qmp_requests;
182     /* Output queue contains all the QMP responses in order */
183     GQueue *qmp_responses;
184 } MonitorQMP;
185
186 /*
187  * To prevent flooding clients, events can be throttled. The
188  * throttling is calculated globally, rather than per-Monitor
189  * instance.
190  */
191 typedef struct MonitorQAPIEventState {
192     QAPIEvent event;    /* Throttling state for this event type and... */
193     QDict *data;        /* ... data, see qapi_event_throttle_equal() */
194     QEMUTimer *timer;   /* Timer for handling delayed events */
195     QDict *qdict;       /* Delayed event (if any) */
196 } MonitorQAPIEventState;
197
198 typedef struct {
199     int64_t rate;       /* Minimum time (in ns) between two events */
200 } MonitorQAPIEventConf;
201
202 struct Monitor {
203     CharBackend chr;
204     int reset_seen;
205     int flags;
206     int suspend_cnt;            /* Needs to be accessed atomically */
207     bool skip_flush;
208     bool use_io_thr;
209
210     /* We can't access guest memory when holding the lock */
211     QemuMutex out_lock;
212     QString *outbuf;
213     guint out_watch;
214
215     /* Read under either BQL or out_lock, written with BQL+out_lock.  */
216     int mux_out;
217
218     ReadLineState *rs;
219     MonitorQMP qmp;
220     gchar *mon_cpu_path;
221     BlockCompletionFunc *password_completion_cb;
222     void *password_opaque;
223     mon_cmd_t *cmd_table;
224     QLIST_HEAD(,mon_fd_t) fds;
225     QTAILQ_ENTRY(Monitor) entry;
226 };
227
228 /* Let's add monitor global variables to this struct. */
229 static struct {
230     IOThread *mon_iothread;
231     /* Bottom half to dispatch the requests received from IO thread */
232     QEMUBH *qmp_dispatcher_bh;
233     /* Bottom half to deliver the responses back to clients */
234     QEMUBH *qmp_respond_bh;
235 } mon_global;
236
237 /* QMP checker flags */
238 #define QMP_ACCEPT_UNKNOWNS 1
239
240 /* Protects mon_list, monitor_event_state.  */
241 static QemuMutex monitor_lock;
242
243 static QTAILQ_HEAD(mon_list, Monitor) mon_list;
244 static QLIST_HEAD(mon_fdsets, MonFdset) mon_fdsets;
245 static int mon_refcount;
246
247 static mon_cmd_t mon_cmds[];
248 static mon_cmd_t info_cmds[];
249
250 QmpCommandList qmp_commands, qmp_cap_negotiation_commands;
251
252 Monitor *cur_mon;
253
254 static QEMUClockType event_clock_type = QEMU_CLOCK_REALTIME;
255
256 static void monitor_command_cb(void *opaque, const char *cmdline,
257                                void *readline_opaque);
258
259 /**
260  * Is @mon a QMP monitor?
261  */
262 static inline bool monitor_is_qmp(const Monitor *mon)
263 {
264     return (mon->flags & MONITOR_USE_CONTROL);
265 }
266
267 /**
268  * Whether @mon is using readline?  Note: not all HMP monitors use
269  * readline, e.g., gdbserver has a non-interactive HMP monitor, so
270  * readline is not used there.
271  */
272 static inline bool monitor_uses_readline(const Monitor *mon)
273 {
274     return mon->flags & MONITOR_USE_READLINE;
275 }
276
277 static inline bool monitor_is_hmp_non_interactive(const Monitor *mon)
278 {
279     return !monitor_is_qmp(mon) && !monitor_uses_readline(mon);
280 }
281
282 /**
283  * Is the current monitor, if any, a QMP monitor?
284  */
285 bool monitor_cur_is_qmp(void)
286 {
287     return cur_mon && monitor_is_qmp(cur_mon);
288 }
289
290 void monitor_read_command(Monitor *mon, int show_prompt)
291 {
292     if (!mon->rs)
293         return;
294
295     readline_start(mon->rs, "(qemu) ", 0, monitor_command_cb, NULL);
296     if (show_prompt)
297         readline_show_prompt(mon->rs);
298 }
299
300 int monitor_read_password(Monitor *mon, ReadLineFunc *readline_func,
301                           void *opaque)
302 {
303     if (mon->rs) {
304         readline_start(mon->rs, "Password: ", 1, readline_func, opaque);
305         /* prompt is printed on return from the command handler */
306         return 0;
307     } else {
308         monitor_printf(mon, "terminal does not support password prompting\n");
309         return -ENOTTY;
310     }
311 }
312
313 static void monitor_flush_locked(Monitor *mon);
314
315 static gboolean monitor_unblocked(GIOChannel *chan, GIOCondition cond,
316                                   void *opaque)
317 {
318     Monitor *mon = opaque;
319
320     qemu_mutex_lock(&mon->out_lock);
321     mon->out_watch = 0;
322     monitor_flush_locked(mon);
323     qemu_mutex_unlock(&mon->out_lock);
324     return FALSE;
325 }
326
327 /* Called with mon->out_lock held.  */
328 static void monitor_flush_locked(Monitor *mon)
329 {
330     int rc;
331     size_t len;
332     const char *buf;
333
334     if (mon->skip_flush) {
335         return;
336     }
337
338     buf = qstring_get_str(mon->outbuf);
339     len = qstring_get_length(mon->outbuf);
340
341     if (len && !mon->mux_out) {
342         rc = qemu_chr_fe_write(&mon->chr, (const uint8_t *) buf, len);
343         if ((rc < 0 && errno != EAGAIN) || (rc == len)) {
344             /* all flushed or error */
345             QDECREF(mon->outbuf);
346             mon->outbuf = qstring_new();
347             return;
348         }
349         if (rc > 0) {
350             /* partial write */
351             QString *tmp = qstring_from_str(buf + rc);
352             QDECREF(mon->outbuf);
353             mon->outbuf = tmp;
354         }
355         if (mon->out_watch == 0) {
356             mon->out_watch =
357                 qemu_chr_fe_add_watch(&mon->chr, G_IO_OUT | G_IO_HUP,
358                                       monitor_unblocked, mon);
359         }
360     }
361 }
362
363 void monitor_flush(Monitor *mon)
364 {
365     qemu_mutex_lock(&mon->out_lock);
366     monitor_flush_locked(mon);
367     qemu_mutex_unlock(&mon->out_lock);
368 }
369
370 /* flush at every end of line */
371 static void monitor_puts(Monitor *mon, const char *str)
372 {
373     char c;
374
375     qemu_mutex_lock(&mon->out_lock);
376     for(;;) {
377         c = *str++;
378         if (c == '\0')
379             break;
380         if (c == '\n') {
381             qstring_append_chr(mon->outbuf, '\r');
382         }
383         qstring_append_chr(mon->outbuf, c);
384         if (c == '\n') {
385             monitor_flush_locked(mon);
386         }
387     }
388     qemu_mutex_unlock(&mon->out_lock);
389 }
390
391 void monitor_vprintf(Monitor *mon, const char *fmt, va_list ap)
392 {
393     char *buf;
394
395     if (!mon)
396         return;
397
398     if (monitor_is_qmp(mon)) {
399         return;
400     }
401
402     buf = g_strdup_vprintf(fmt, ap);
403     monitor_puts(mon, buf);
404     g_free(buf);
405 }
406
407 void monitor_printf(Monitor *mon, const char *fmt, ...)
408 {
409     va_list ap;
410     va_start(ap, fmt);
411     monitor_vprintf(mon, fmt, ap);
412     va_end(ap);
413 }
414
415 int monitor_fprintf(FILE *stream, const char *fmt, ...)
416 {
417     va_list ap;
418     va_start(ap, fmt);
419     monitor_vprintf((Monitor *)stream, fmt, ap);
420     va_end(ap);
421     return 0;
422 }
423
424 static void monitor_json_emitter_raw(Monitor *mon,
425                                      QObject *data)
426 {
427     QString *json;
428
429     json = mon->flags & MONITOR_USE_PRETTY ? qobject_to_json_pretty(data) :
430                                              qobject_to_json(data);
431     assert(json != NULL);
432
433     qstring_append_chr(json, '\n');
434     monitor_puts(mon, qstring_get_str(json));
435
436     QDECREF(json);
437 }
438
439 static void monitor_json_emitter(Monitor *mon, QObject *data)
440 {
441     if (mon->use_io_thr) {
442         /*
443          * If using IO thread, we need to queue the item so that IO
444          * thread will do the rest for us.  Take refcount so that
445          * caller won't free the data (which will be finally freed in
446          * responder thread).
447          */
448         qobject_incref(data);
449         qemu_mutex_lock(&mon->qmp.qmp_queue_lock);
450         g_queue_push_tail(mon->qmp.qmp_responses, (void *)data);
451         qemu_mutex_unlock(&mon->qmp.qmp_queue_lock);
452         qemu_bh_schedule(mon_global.qmp_respond_bh);
453     } else {
454         /*
455          * If not using monitor IO thread, then we are in main thread.
456          * Do the emission right away.
457          */
458         monitor_json_emitter_raw(mon, data);
459     }
460 }
461
462 struct QMPResponse {
463     Monitor *mon;
464     QObject *data;
465 };
466 typedef struct QMPResponse QMPResponse;
467
468 /*
469  * Return one QMPResponse.  The response is only valid if
470  * response.data is not NULL.
471  */
472 static QMPResponse monitor_qmp_response_pop_one(void)
473 {
474     Monitor *mon;
475     QObject *data = NULL;
476
477     qemu_mutex_lock(&monitor_lock);
478     QTAILQ_FOREACH(mon, &mon_list, entry) {
479         qemu_mutex_lock(&mon->qmp.qmp_queue_lock);
480         data = g_queue_pop_head(mon->qmp.qmp_responses);
481         qemu_mutex_unlock(&mon->qmp.qmp_queue_lock);
482         if (data) {
483             break;
484         }
485     }
486     qemu_mutex_unlock(&monitor_lock);
487     return (QMPResponse) { .mon = mon, .data = data };
488 }
489
490 static void monitor_qmp_bh_responder(void *opaque)
491 {
492     QMPResponse response;
493
494     while (true) {
495         response = monitor_qmp_response_pop_one();
496         if (!response.data) {
497             break;
498         }
499         monitor_json_emitter_raw(response.mon, response.data);
500         qobject_decref(response.data);
501     }
502 }
503
504 static MonitorQAPIEventConf monitor_qapi_event_conf[QAPI_EVENT__MAX] = {
505     /* Limit guest-triggerable events to 1 per second */
506     [QAPI_EVENT_RTC_CHANGE]        = { 1000 * SCALE_MS },
507     [QAPI_EVENT_WATCHDOG]          = { 1000 * SCALE_MS },
508     [QAPI_EVENT_BALLOON_CHANGE]    = { 1000 * SCALE_MS },
509     [QAPI_EVENT_QUORUM_REPORT_BAD] = { 1000 * SCALE_MS },
510     [QAPI_EVENT_QUORUM_FAILURE]    = { 1000 * SCALE_MS },
511     [QAPI_EVENT_VSERPORT_CHANGE]   = { 1000 * SCALE_MS },
512 };
513
514 GHashTable *monitor_qapi_event_state;
515
516 /*
517  * Emits the event to every monitor instance, @event is only used for trace
518  * Called with monitor_lock held.
519  */
520 static void monitor_qapi_event_emit(QAPIEvent event, QDict *qdict)
521 {
522     Monitor *mon;
523
524     trace_monitor_protocol_event_emit(event, qdict);
525     QTAILQ_FOREACH(mon, &mon_list, entry) {
526         if (monitor_is_qmp(mon)
527             && mon->qmp.commands != &qmp_cap_negotiation_commands) {
528             monitor_json_emitter(mon, QOBJECT(qdict));
529         }
530     }
531 }
532
533 static void monitor_qapi_event_handler(void *opaque);
534
535 /*
536  * Queue a new event for emission to Monitor instances,
537  * applying any rate limiting if required.
538  */
539 static void
540 monitor_qapi_event_queue(QAPIEvent event, QDict *qdict, Error **errp)
541 {
542     MonitorQAPIEventConf *evconf;
543     MonitorQAPIEventState *evstate;
544
545     assert(event < QAPI_EVENT__MAX);
546     evconf = &monitor_qapi_event_conf[event];
547     trace_monitor_protocol_event_queue(event, qdict, evconf->rate);
548
549     qemu_mutex_lock(&monitor_lock);
550
551     if (!evconf->rate) {
552         /* Unthrottled event */
553         monitor_qapi_event_emit(event, qdict);
554     } else {
555         QDict *data = qobject_to(QDict, qdict_get(qdict, "data"));
556         MonitorQAPIEventState key = { .event = event, .data = data };
557
558         evstate = g_hash_table_lookup(monitor_qapi_event_state, &key);
559         assert(!evstate || timer_pending(evstate->timer));
560
561         if (evstate) {
562             /*
563              * Timer is pending for (at least) evconf->rate ns after
564              * last send.  Store event for sending when timer fires,
565              * replacing a prior stored event if any.
566              */
567             QDECREF(evstate->qdict);
568             evstate->qdict = qdict;
569             QINCREF(evstate->qdict);
570         } else {
571             /*
572              * Last send was (at least) evconf->rate ns ago.
573              * Send immediately, and arm the timer to call
574              * monitor_qapi_event_handler() in evconf->rate ns.  Any
575              * events arriving before then will be delayed until then.
576              */
577             int64_t now = qemu_clock_get_ns(event_clock_type);
578
579             monitor_qapi_event_emit(event, qdict);
580
581             evstate = g_new(MonitorQAPIEventState, 1);
582             evstate->event = event;
583             evstate->data = data;
584             QINCREF(evstate->data);
585             evstate->qdict = NULL;
586             evstate->timer = timer_new_ns(event_clock_type,
587                                           monitor_qapi_event_handler,
588                                           evstate);
589             g_hash_table_add(monitor_qapi_event_state, evstate);
590             timer_mod_ns(evstate->timer, now + evconf->rate);
591         }
592     }
593
594     qemu_mutex_unlock(&monitor_lock);
595 }
596
597 /*
598  * This function runs evconf->rate ns after sending a throttled
599  * event.
600  * If another event has since been stored, send it.
601  */
602 static void monitor_qapi_event_handler(void *opaque)
603 {
604     MonitorQAPIEventState *evstate = opaque;
605     MonitorQAPIEventConf *evconf = &monitor_qapi_event_conf[evstate->event];
606
607     trace_monitor_protocol_event_handler(evstate->event, evstate->qdict);
608     qemu_mutex_lock(&monitor_lock);
609
610     if (evstate->qdict) {
611         int64_t now = qemu_clock_get_ns(event_clock_type);
612
613         monitor_qapi_event_emit(evstate->event, evstate->qdict);
614         QDECREF(evstate->qdict);
615         evstate->qdict = NULL;
616         timer_mod_ns(evstate->timer, now + evconf->rate);
617     } else {
618         g_hash_table_remove(monitor_qapi_event_state, evstate);
619         QDECREF(evstate->data);
620         timer_free(evstate->timer);
621         g_free(evstate);
622     }
623
624     qemu_mutex_unlock(&monitor_lock);
625 }
626
627 static unsigned int qapi_event_throttle_hash(const void *key)
628 {
629     const MonitorQAPIEventState *evstate = key;
630     unsigned int hash = evstate->event * 255;
631
632     if (evstate->event == QAPI_EVENT_VSERPORT_CHANGE) {
633         hash += g_str_hash(qdict_get_str(evstate->data, "id"));
634     }
635
636     if (evstate->event == QAPI_EVENT_QUORUM_REPORT_BAD) {
637         hash += g_str_hash(qdict_get_str(evstate->data, "node-name"));
638     }
639
640     return hash;
641 }
642
643 static gboolean qapi_event_throttle_equal(const void *a, const void *b)
644 {
645     const MonitorQAPIEventState *eva = a;
646     const MonitorQAPIEventState *evb = b;
647
648     if (eva->event != evb->event) {
649         return FALSE;
650     }
651
652     if (eva->event == QAPI_EVENT_VSERPORT_CHANGE) {
653         return !strcmp(qdict_get_str(eva->data, "id"),
654                        qdict_get_str(evb->data, "id"));
655     }
656
657     if (eva->event == QAPI_EVENT_QUORUM_REPORT_BAD) {
658         return !strcmp(qdict_get_str(eva->data, "node-name"),
659                        qdict_get_str(evb->data, "node-name"));
660     }
661
662     return TRUE;
663 }
664
665 static void monitor_qapi_event_init(void)
666 {
667     if (qtest_enabled()) {
668         event_clock_type = QEMU_CLOCK_VIRTUAL;
669     }
670
671     monitor_qapi_event_state = g_hash_table_new(qapi_event_throttle_hash,
672                                                 qapi_event_throttle_equal);
673     qmp_event_set_func_emit(monitor_qapi_event_queue);
674 }
675
676 static void handle_hmp_command(Monitor *mon, const char *cmdline);
677
678 static void monitor_data_init(Monitor *mon, bool skip_flush,
679                               bool use_io_thr)
680 {
681     memset(mon, 0, sizeof(Monitor));
682     qemu_mutex_init(&mon->out_lock);
683     qemu_mutex_init(&mon->qmp.qmp_queue_lock);
684     mon->outbuf = qstring_new();
685     /* Use *mon_cmds by default. */
686     mon->cmd_table = mon_cmds;
687     mon->skip_flush = skip_flush;
688     mon->use_io_thr = use_io_thr;
689     mon->qmp.qmp_requests = g_queue_new();
690     mon->qmp.qmp_responses = g_queue_new();
691 }
692
693 static void monitor_data_destroy(Monitor *mon)
694 {
695     g_free(mon->mon_cpu_path);
696     qemu_chr_fe_deinit(&mon->chr, false);
697     if (monitor_is_qmp(mon)) {
698         json_message_parser_destroy(&mon->qmp.parser);
699     }
700     readline_free(mon->rs);
701     QDECREF(mon->outbuf);
702     qemu_mutex_destroy(&mon->out_lock);
703     qemu_mutex_destroy(&mon->qmp.qmp_queue_lock);
704     g_queue_free(mon->qmp.qmp_requests);
705     g_queue_free(mon->qmp.qmp_responses);
706 }
707
708 char *qmp_human_monitor_command(const char *command_line, bool has_cpu_index,
709                                 int64_t cpu_index, Error **errp)
710 {
711     char *output = NULL;
712     Monitor *old_mon, hmp;
713
714     monitor_data_init(&hmp, true, false);
715
716     old_mon = cur_mon;
717     cur_mon = &hmp;
718
719     if (has_cpu_index) {
720         int ret = monitor_set_cpu(cpu_index);
721         if (ret < 0) {
722             cur_mon = old_mon;
723             error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "cpu-index",
724                        "a CPU number");
725             goto out;
726         }
727     }
728
729     handle_hmp_command(&hmp, command_line);
730     cur_mon = old_mon;
731
732     qemu_mutex_lock(&hmp.out_lock);
733     if (qstring_get_length(hmp.outbuf) > 0) {
734         output = g_strdup(qstring_get_str(hmp.outbuf));
735     } else {
736         output = g_strdup("");
737     }
738     qemu_mutex_unlock(&hmp.out_lock);
739
740 out:
741     monitor_data_destroy(&hmp);
742     return output;
743 }
744
745 static int compare_cmd(const char *name, const char *list)
746 {
747     const char *p, *pstart;
748     int len;
749     len = strlen(name);
750     p = list;
751     for(;;) {
752         pstart = p;
753         p = strchr(p, '|');
754         if (!p)
755             p = pstart + strlen(pstart);
756         if ((p - pstart) == len && !memcmp(pstart, name, len))
757             return 1;
758         if (*p == '\0')
759             break;
760         p++;
761     }
762     return 0;
763 }
764
765 static int get_str(char *buf, int buf_size, const char **pp)
766 {
767     const char *p;
768     char *q;
769     int c;
770
771     q = buf;
772     p = *pp;
773     while (qemu_isspace(*p)) {
774         p++;
775     }
776     if (*p == '\0') {
777     fail:
778         *q = '\0';
779         *pp = p;
780         return -1;
781     }
782     if (*p == '\"') {
783         p++;
784         while (*p != '\0' && *p != '\"') {
785             if (*p == '\\') {
786                 p++;
787                 c = *p++;
788                 switch (c) {
789                 case 'n':
790                     c = '\n';
791                     break;
792                 case 'r':
793                     c = '\r';
794                     break;
795                 case '\\':
796                 case '\'':
797                 case '\"':
798                     break;
799                 default:
800                     printf("unsupported escape code: '\\%c'\n", c);
801                     goto fail;
802                 }
803                 if ((q - buf) < buf_size - 1) {
804                     *q++ = c;
805                 }
806             } else {
807                 if ((q - buf) < buf_size - 1) {
808                     *q++ = *p;
809                 }
810                 p++;
811             }
812         }
813         if (*p != '\"') {
814             printf("unterminated string\n");
815             goto fail;
816         }
817         p++;
818     } else {
819         while (*p != '\0' && !qemu_isspace(*p)) {
820             if ((q - buf) < buf_size - 1) {
821                 *q++ = *p;
822             }
823             p++;
824         }
825     }
826     *q = '\0';
827     *pp = p;
828     return 0;
829 }
830
831 #define MAX_ARGS 16
832
833 static void free_cmdline_args(char **args, int nb_args)
834 {
835     int i;
836
837     assert(nb_args <= MAX_ARGS);
838
839     for (i = 0; i < nb_args; i++) {
840         g_free(args[i]);
841     }
842
843 }
844
845 /*
846  * Parse the command line to get valid args.
847  * @cmdline: command line to be parsed.
848  * @pnb_args: location to store the number of args, must NOT be NULL.
849  * @args: location to store the args, which should be freed by caller, must
850  *        NOT be NULL.
851  *
852  * Returns 0 on success, negative on failure.
853  *
854  * NOTE: this parser is an approximate form of the real command parser. Number
855  *       of args have a limit of MAX_ARGS. If cmdline contains more, it will
856  *       return with failure.
857  */
858 static int parse_cmdline(const char *cmdline,
859                          int *pnb_args, char **args)
860 {
861     const char *p;
862     int nb_args, ret;
863     char buf[1024];
864
865     p = cmdline;
866     nb_args = 0;
867     for (;;) {
868         while (qemu_isspace(*p)) {
869             p++;
870         }
871         if (*p == '\0') {
872             break;
873         }
874         if (nb_args >= MAX_ARGS) {
875             goto fail;
876         }
877         ret = get_str(buf, sizeof(buf), &p);
878         if (ret < 0) {
879             goto fail;
880         }
881         args[nb_args] = g_strdup(buf);
882         nb_args++;
883     }
884     *pnb_args = nb_args;
885     return 0;
886
887  fail:
888     free_cmdline_args(args, nb_args);
889     return -1;
890 }
891
892 static void help_cmd_dump_one(Monitor *mon,
893                               const mon_cmd_t *cmd,
894                               char **prefix_args,
895                               int prefix_args_nb)
896 {
897     int i;
898
899     for (i = 0; i < prefix_args_nb; i++) {
900         monitor_printf(mon, "%s ", prefix_args[i]);
901     }
902     monitor_printf(mon, "%s %s -- %s\n", cmd->name, cmd->params, cmd->help);
903 }
904
905 /* @args[@arg_index] is the valid command need to find in @cmds */
906 static void help_cmd_dump(Monitor *mon, const mon_cmd_t *cmds,
907                           char **args, int nb_args, int arg_index)
908 {
909     const mon_cmd_t *cmd;
910
911     /* No valid arg need to compare with, dump all in *cmds */
912     if (arg_index >= nb_args) {
913         for (cmd = cmds; cmd->name != NULL; cmd++) {
914             help_cmd_dump_one(mon, cmd, args, arg_index);
915         }
916         return;
917     }
918
919     /* Find one entry to dump */
920     for (cmd = cmds; cmd->name != NULL; cmd++) {
921         if (compare_cmd(args[arg_index], cmd->name)) {
922             if (cmd->sub_table) {
923                 /* continue with next arg */
924                 help_cmd_dump(mon, cmd->sub_table,
925                               args, nb_args, arg_index + 1);
926             } else {
927                 help_cmd_dump_one(mon, cmd, args, arg_index);
928             }
929             break;
930         }
931     }
932 }
933
934 static void help_cmd(Monitor *mon, const char *name)
935 {
936     char *args[MAX_ARGS];
937     int nb_args = 0;
938
939     /* 1. parse user input */
940     if (name) {
941         /* special case for log, directly dump and return */
942         if (!strcmp(name, "log")) {
943             const QEMULogItem *item;
944             monitor_printf(mon, "Log items (comma separated):\n");
945             monitor_printf(mon, "%-10s %s\n", "none", "remove all logs");
946             for (item = qemu_log_items; item->mask != 0; item++) {
947                 monitor_printf(mon, "%-10s %s\n", item->name, item->help);
948             }
949             return;
950         }
951
952         if (parse_cmdline(name, &nb_args, args) < 0) {
953             return;
954         }
955     }
956
957     /* 2. dump the contents according to parsed args */
958     help_cmd_dump(mon, mon->cmd_table, args, nb_args, 0);
959
960     free_cmdline_args(args, nb_args);
961 }
962
963 static void do_help_cmd(Monitor *mon, const QDict *qdict)
964 {
965     help_cmd(mon, qdict_get_try_str(qdict, "name"));
966 }
967
968 static void hmp_trace_event(Monitor *mon, const QDict *qdict)
969 {
970     const char *tp_name = qdict_get_str(qdict, "name");
971     bool new_state = qdict_get_bool(qdict, "option");
972     bool has_vcpu = qdict_haskey(qdict, "vcpu");
973     int vcpu = qdict_get_try_int(qdict, "vcpu", 0);
974     Error *local_err = NULL;
975
976     if (vcpu < 0) {
977         monitor_printf(mon, "argument vcpu must be positive");
978         return;
979     }
980
981     qmp_trace_event_set_state(tp_name, new_state, true, true, has_vcpu, vcpu, &local_err);
982     if (local_err) {
983         error_report_err(local_err);
984     }
985 }
986
987 #ifdef CONFIG_TRACE_SIMPLE
988 static void hmp_trace_file(Monitor *mon, const QDict *qdict)
989 {
990     const char *op = qdict_get_try_str(qdict, "op");
991     const char *arg = qdict_get_try_str(qdict, "arg");
992
993     if (!op) {
994         st_print_trace_file_status((FILE *)mon, &monitor_fprintf);
995     } else if (!strcmp(op, "on")) {
996         st_set_trace_file_enabled(true);
997     } else if (!strcmp(op, "off")) {
998         st_set_trace_file_enabled(false);
999     } else if (!strcmp(op, "flush")) {
1000         st_flush_trace_buffer();
1001     } else if (!strcmp(op, "set")) {
1002         if (arg) {
1003             st_set_trace_file(arg);
1004         }
1005     } else {
1006         monitor_printf(mon, "unexpected argument \"%s\"\n", op);
1007         help_cmd(mon, "trace-file");
1008     }
1009 }
1010 #endif
1011
1012 static void hmp_info_help(Monitor *mon, const QDict *qdict)
1013 {
1014     help_cmd(mon, "info");
1015 }
1016
1017 static void query_commands_cb(QmpCommand *cmd, void *opaque)
1018 {
1019     CommandInfoList *info, **list = opaque;
1020
1021     if (!cmd->enabled) {
1022         return;
1023     }
1024
1025     info = g_malloc0(sizeof(*info));
1026     info->value = g_malloc0(sizeof(*info->value));
1027     info->value->name = g_strdup(cmd->name);
1028     info->next = *list;
1029     *list = info;
1030 }
1031
1032 CommandInfoList *qmp_query_commands(Error **errp)
1033 {
1034     CommandInfoList *list = NULL;
1035
1036     qmp_for_each_command(cur_mon->qmp.commands, query_commands_cb, &list);
1037
1038     return list;
1039 }
1040
1041 EventInfoList *qmp_query_events(Error **errp)
1042 {
1043     EventInfoList *info, *ev_list = NULL;
1044     QAPIEvent e;
1045
1046     for (e = 0 ; e < QAPI_EVENT__MAX ; e++) {
1047         const char *event_name = QAPIEvent_str(e);
1048         assert(event_name != NULL);
1049         info = g_malloc0(sizeof(*info));
1050         info->value = g_malloc0(sizeof(*info->value));
1051         info->value->name = g_strdup(event_name);
1052
1053         info->next = ev_list;
1054         ev_list = info;
1055     }
1056
1057     return ev_list;
1058 }
1059
1060 /*
1061  * Minor hack: generated marshalling suppressed for this command
1062  * ('gen': false in the schema) so we can parse the JSON string
1063  * directly into QObject instead of first parsing it with
1064  * visit_type_SchemaInfoList() into a SchemaInfoList, then marshal it
1065  * to QObject with generated output marshallers, every time.  Instead,
1066  * we do it in test-qobject-input-visitor.c, just to make sure
1067  * qapi-gen.py's output actually conforms to the schema.
1068  */
1069 static void qmp_query_qmp_schema(QDict *qdict, QObject **ret_data,
1070                                  Error **errp)
1071 {
1072     *ret_data = qobject_from_qlit(&qmp_schema_qlit);
1073 }
1074
1075 /*
1076  * We used to define commands in qmp-commands.hx in addition to the
1077  * QAPI schema.  This permitted defining some of them only in certain
1078  * configurations.  query-commands has always reflected that (good,
1079  * because it lets QMP clients figure out what's actually available),
1080  * while query-qmp-schema never did (not so good).  This function is a
1081  * hack to keep the configuration-specific commands defined exactly as
1082  * before, even though qmp-commands.hx is gone.
1083  *
1084  * FIXME Educate the QAPI schema on configuration-specific commands,
1085  * and drop this hack.
1086  */
1087 static void qmp_unregister_commands_hack(void)
1088 {
1089 #ifndef CONFIG_SPICE
1090     qmp_unregister_command(&qmp_commands, "query-spice");
1091 #endif
1092 #ifndef CONFIG_REPLICATION
1093     qmp_unregister_command(&qmp_commands, "xen-set-replication");
1094     qmp_unregister_command(&qmp_commands, "query-xen-replication-status");
1095     qmp_unregister_command(&qmp_commands, "xen-colo-do-checkpoint");
1096 #endif
1097 #ifndef TARGET_I386
1098     qmp_unregister_command(&qmp_commands, "rtc-reset-reinjection");
1099     qmp_unregister_command(&qmp_commands, "query-sev");
1100     qmp_unregister_command(&qmp_commands, "query-sev-launch-measure");
1101     qmp_unregister_command(&qmp_commands, "query-sev-capabilities");
1102 #endif
1103 #ifndef TARGET_S390X
1104     qmp_unregister_command(&qmp_commands, "dump-skeys");
1105 #endif
1106 #ifndef TARGET_ARM
1107     qmp_unregister_command(&qmp_commands, "query-gic-capabilities");
1108 #endif
1109 #if !defined(TARGET_S390X) && !defined(TARGET_I386)
1110     qmp_unregister_command(&qmp_commands, "query-cpu-model-expansion");
1111 #endif
1112 #if !defined(TARGET_S390X)
1113     qmp_unregister_command(&qmp_commands, "query-cpu-model-baseline");
1114     qmp_unregister_command(&qmp_commands, "query-cpu-model-comparison");
1115 #endif
1116 #if !defined(TARGET_PPC) && !defined(TARGET_ARM) && !defined(TARGET_I386) \
1117     && !defined(TARGET_S390X)
1118     qmp_unregister_command(&qmp_commands, "query-cpu-definitions");
1119 #endif
1120 }
1121
1122 static void monitor_init_qmp_commands(void)
1123 {
1124     /*
1125      * Two command lists:
1126      * - qmp_commands contains all QMP commands
1127      * - qmp_cap_negotiation_commands contains just
1128      *   "qmp_capabilities", to enforce capability negotiation
1129      */
1130
1131     qmp_init_marshal(&qmp_commands);
1132
1133     qmp_register_command(&qmp_commands, "query-qmp-schema",
1134                          qmp_query_qmp_schema,
1135                          QCO_NO_OPTIONS);
1136     qmp_register_command(&qmp_commands, "device_add", qmp_device_add,
1137                          QCO_NO_OPTIONS);
1138     qmp_register_command(&qmp_commands, "netdev_add", qmp_netdev_add,
1139                          QCO_NO_OPTIONS);
1140
1141     qmp_unregister_commands_hack();
1142
1143     QTAILQ_INIT(&qmp_cap_negotiation_commands);
1144     qmp_register_command(&qmp_cap_negotiation_commands, "qmp_capabilities",
1145                          qmp_marshal_qmp_capabilities, QCO_NO_OPTIONS);
1146 }
1147
1148 static bool qmp_cap_enabled(Monitor *mon, QMPCapability cap)
1149 {
1150     return mon->qmp.qmp_caps[cap];
1151 }
1152
1153 static bool qmp_oob_enabled(Monitor *mon)
1154 {
1155     return qmp_cap_enabled(mon, QMP_CAPABILITY_OOB);
1156 }
1157
1158 static void qmp_caps_check(Monitor *mon, QMPCapabilityList *list,
1159                            Error **errp)
1160 {
1161     for (; list; list = list->next) {
1162         assert(list->value < QMP_CAPABILITY__MAX);
1163         switch (list->value) {
1164         case QMP_CAPABILITY_OOB:
1165             if (!mon->use_io_thr) {
1166                 /*
1167                  * Out-Of-Band only works with monitors that are
1168                  * running on dedicated IOThread.
1169                  */
1170                 error_setg(errp, "This monitor does not support "
1171                            "Out-Of-Band (OOB)");
1172                 return;
1173             }
1174             break;
1175         default:
1176             break;
1177         }
1178     }
1179 }
1180
1181 /* This function should only be called after capabilities are checked. */
1182 static void qmp_caps_apply(Monitor *mon, QMPCapabilityList *list)
1183 {
1184     for (; list; list = list->next) {
1185         mon->qmp.qmp_caps[list->value] = true;
1186     }
1187 }
1188
1189 /*
1190  * Return true if check successful, or false otherwise.  When false is
1191  * returned, detailed error will be in errp if provided.
1192  */
1193 static bool qmp_cmd_oob_check(Monitor *mon, QDict *req, Error **errp)
1194 {
1195     const char *command;
1196     QmpCommand *cmd;
1197
1198     command = qdict_get_try_str(req, "execute");
1199     if (!command) {
1200         error_setg(errp, "Command field 'execute' missing");
1201         return false;
1202     }
1203
1204     cmd = qmp_find_command(mon->qmp.commands, command);
1205     if (!cmd) {
1206         error_set(errp, ERROR_CLASS_COMMAND_NOT_FOUND,
1207                   "The command %s has not been found", command);
1208         return false;
1209     }
1210
1211     if (qmp_is_oob(req)) {
1212         if (!qmp_oob_enabled(mon)) {
1213             error_setg(errp, "Please enable Out-Of-Band first "
1214                        "for the session during capabilities negotiation");
1215             return false;
1216         }
1217         if (!(cmd->options & QCO_ALLOW_OOB)) {
1218             error_setg(errp, "The command %s does not support OOB",
1219                        command);
1220             return false;
1221         }
1222     }
1223
1224     return true;
1225 }
1226
1227 void qmp_qmp_capabilities(bool has_enable, QMPCapabilityList *enable,
1228                           Error **errp)
1229 {
1230     Error *local_err = NULL;
1231
1232     if (cur_mon->qmp.commands == &qmp_commands) {
1233         error_set(errp, ERROR_CLASS_COMMAND_NOT_FOUND,
1234                   "Capabilities negotiation is already complete, command "
1235                   "ignored");
1236         return;
1237     }
1238
1239     /* Enable QMP capabilities provided by the client if applicable. */
1240     if (has_enable) {
1241         qmp_caps_check(cur_mon, enable, &local_err);
1242         if (local_err) {
1243             /*
1244              * Failed check on any of the capabilities will fail the
1245              * entire command (and thus not apply any of the other
1246              * capabilities that were also requested).
1247              */
1248             error_propagate(errp, local_err);
1249             return;
1250         }
1251         qmp_caps_apply(cur_mon, enable);
1252     }
1253
1254     cur_mon->qmp.commands = &qmp_commands;
1255 }
1256
1257 /* set the current CPU defined by the user */
1258 int monitor_set_cpu(int cpu_index)
1259 {
1260     CPUState *cpu;
1261
1262     cpu = qemu_get_cpu(cpu_index);
1263     if (cpu == NULL) {
1264         return -1;
1265     }
1266     g_free(cur_mon->mon_cpu_path);
1267     cur_mon->mon_cpu_path = object_get_canonical_path(OBJECT(cpu));
1268     return 0;
1269 }
1270
1271 static CPUState *mon_get_cpu_sync(bool synchronize)
1272 {
1273     CPUState *cpu;
1274
1275     if (cur_mon->mon_cpu_path) {
1276         cpu = (CPUState *) object_resolve_path_type(cur_mon->mon_cpu_path,
1277                                                     TYPE_CPU, NULL);
1278         if (!cpu) {
1279             g_free(cur_mon->mon_cpu_path);
1280             cur_mon->mon_cpu_path = NULL;
1281         }
1282     }
1283     if (!cur_mon->mon_cpu_path) {
1284         if (!first_cpu) {
1285             return NULL;
1286         }
1287         monitor_set_cpu(first_cpu->cpu_index);
1288         cpu = first_cpu;
1289     }
1290     if (synchronize) {
1291         cpu_synchronize_state(cpu);
1292     }
1293     return cpu;
1294 }
1295
1296 CPUState *mon_get_cpu(void)
1297 {
1298     return mon_get_cpu_sync(true);
1299 }
1300
1301 CPUArchState *mon_get_cpu_env(void)
1302 {
1303     CPUState *cs = mon_get_cpu();
1304
1305     return cs ? cs->env_ptr : NULL;
1306 }
1307
1308 int monitor_get_cpu_index(void)
1309 {
1310     CPUState *cs = mon_get_cpu_sync(false);
1311
1312     return cs ? cs->cpu_index : UNASSIGNED_CPU_INDEX;
1313 }
1314
1315 static void hmp_info_registers(Monitor *mon, const QDict *qdict)
1316 {
1317     bool all_cpus = qdict_get_try_bool(qdict, "cpustate_all", false);
1318     CPUState *cs;
1319
1320     if (all_cpus) {
1321         CPU_FOREACH(cs) {
1322             monitor_printf(mon, "\nCPU#%d\n", cs->cpu_index);
1323             cpu_dump_state(cs, (FILE *)mon, monitor_fprintf, CPU_DUMP_FPU);
1324         }
1325     } else {
1326         cs = mon_get_cpu();
1327
1328         if (!cs) {
1329             monitor_printf(mon, "No CPU available\n");
1330             return;
1331         }
1332
1333         cpu_dump_state(cs, (FILE *)mon, monitor_fprintf, CPU_DUMP_FPU);
1334     }
1335 }
1336
1337 #ifdef CONFIG_TCG
1338 static void hmp_info_jit(Monitor *mon, const QDict *qdict)
1339 {
1340     if (!tcg_enabled()) {
1341         error_report("JIT information is only available with accel=tcg");
1342         return;
1343     }
1344
1345     dump_exec_info((FILE *)mon, monitor_fprintf);
1346     dump_drift_info((FILE *)mon, monitor_fprintf);
1347 }
1348
1349 static void hmp_info_opcount(Monitor *mon, const QDict *qdict)
1350 {
1351     dump_opcount_info((FILE *)mon, monitor_fprintf);
1352 }
1353 #endif
1354
1355 static void hmp_info_history(Monitor *mon, const QDict *qdict)
1356 {
1357     int i;
1358     const char *str;
1359
1360     if (!mon->rs)
1361         return;
1362     i = 0;
1363     for(;;) {
1364         str = readline_get_history(mon->rs, i);
1365         if (!str)
1366             break;
1367         monitor_printf(mon, "%d: '%s'\n", i, str);
1368         i++;
1369     }
1370 }
1371
1372 static void hmp_info_cpustats(Monitor *mon, const QDict *qdict)
1373 {
1374     CPUState *cs = mon_get_cpu();
1375
1376     if (!cs) {
1377         monitor_printf(mon, "No CPU available\n");
1378         return;
1379     }
1380     cpu_dump_statistics(cs, (FILE *)mon, &monitor_fprintf, 0);
1381 }
1382
1383 static void hmp_info_trace_events(Monitor *mon, const QDict *qdict)
1384 {
1385     const char *name = qdict_get_try_str(qdict, "name");
1386     bool has_vcpu = qdict_haskey(qdict, "vcpu");
1387     int vcpu = qdict_get_try_int(qdict, "vcpu", 0);
1388     TraceEventInfoList *events;
1389     TraceEventInfoList *elem;
1390     Error *local_err = NULL;
1391
1392     if (name == NULL) {
1393         name = "*";
1394     }
1395     if (vcpu < 0) {
1396         monitor_printf(mon, "argument vcpu must be positive");
1397         return;
1398     }
1399
1400     events = qmp_trace_event_get_state(name, has_vcpu, vcpu, &local_err);
1401     if (local_err) {
1402         error_report_err(local_err);
1403         return;
1404     }
1405
1406     for (elem = events; elem != NULL; elem = elem->next) {
1407         monitor_printf(mon, "%s : state %u\n",
1408                        elem->value->name,
1409                        elem->value->state == TRACE_EVENT_STATE_ENABLED ? 1 : 0);
1410     }
1411     qapi_free_TraceEventInfoList(events);
1412 }
1413
1414 void qmp_client_migrate_info(const char *protocol, const char *hostname,
1415                              bool has_port, int64_t port,
1416                              bool has_tls_port, int64_t tls_port,
1417                              bool has_cert_subject, const char *cert_subject,
1418                              Error **errp)
1419 {
1420     if (strcmp(protocol, "spice") == 0) {
1421         if (!qemu_using_spice(errp)) {
1422             return;
1423         }
1424
1425         if (!has_port && !has_tls_port) {
1426             error_setg(errp, QERR_MISSING_PARAMETER, "port/tls-port");
1427             return;
1428         }
1429
1430         if (qemu_spice_migrate_info(hostname,
1431                                     has_port ? port : -1,
1432                                     has_tls_port ? tls_port : -1,
1433                                     cert_subject)) {
1434             error_setg(errp, QERR_UNDEFINED_ERROR);
1435             return;
1436         }
1437         return;
1438     }
1439
1440     error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "protocol", "spice");
1441 }
1442
1443 static void hmp_logfile(Monitor *mon, const QDict *qdict)
1444 {
1445     Error *err = NULL;
1446
1447     qemu_set_log_filename(qdict_get_str(qdict, "filename"), &err);
1448     if (err) {
1449         error_report_err(err);
1450     }
1451 }
1452
1453 static void hmp_log(Monitor *mon, const QDict *qdict)
1454 {
1455     int mask;
1456     const char *items = qdict_get_str(qdict, "items");
1457
1458     if (!strcmp(items, "none")) {
1459         mask = 0;
1460     } else {
1461         mask = qemu_str_to_log_mask(items);
1462         if (!mask) {
1463             help_cmd(mon, "log");
1464             return;
1465         }
1466     }
1467     qemu_set_log(mask);
1468 }
1469
1470 static void hmp_singlestep(Monitor *mon, const QDict *qdict)
1471 {
1472     const char *option = qdict_get_try_str(qdict, "option");
1473     if (!option || !strcmp(option, "on")) {
1474         singlestep = 1;
1475     } else if (!strcmp(option, "off")) {
1476         singlestep = 0;
1477     } else {
1478         monitor_printf(mon, "unexpected option %s\n", option);
1479     }
1480 }
1481
1482 static void hmp_gdbserver(Monitor *mon, const QDict *qdict)
1483 {
1484     const char *device = qdict_get_try_str(qdict, "device");
1485     if (!device)
1486         device = "tcp::" DEFAULT_GDBSTUB_PORT;
1487     if (gdbserver_start(device) < 0) {
1488         monitor_printf(mon, "Could not open gdbserver on device '%s'\n",
1489                        device);
1490     } else if (strcmp(device, "none") == 0) {
1491         monitor_printf(mon, "Disabled gdbserver\n");
1492     } else {
1493         monitor_printf(mon, "Waiting for gdb connection on device '%s'\n",
1494                        device);
1495     }
1496 }
1497
1498 static void hmp_watchdog_action(Monitor *mon, const QDict *qdict)
1499 {
1500     const char *action = qdict_get_str(qdict, "action");
1501     if (select_watchdog_action(action) == -1) {
1502         monitor_printf(mon, "Unknown watchdog action '%s'\n", action);
1503     }
1504 }
1505
1506 static void monitor_printc(Monitor *mon, int c)
1507 {
1508     monitor_printf(mon, "'");
1509     switch(c) {
1510     case '\'':
1511         monitor_printf(mon, "\\'");
1512         break;
1513     case '\\':
1514         monitor_printf(mon, "\\\\");
1515         break;
1516     case '\n':
1517         monitor_printf(mon, "\\n");
1518         break;
1519     case '\r':
1520         monitor_printf(mon, "\\r");
1521         break;
1522     default:
1523         if (c >= 32 && c <= 126) {
1524             monitor_printf(mon, "%c", c);
1525         } else {
1526             monitor_printf(mon, "\\x%02x", c);
1527         }
1528         break;
1529     }
1530     monitor_printf(mon, "'");
1531 }
1532
1533 static void memory_dump(Monitor *mon, int count, int format, int wsize,
1534                         hwaddr addr, int is_physical)
1535 {
1536     int l, line_size, i, max_digits, len;
1537     uint8_t buf[16];
1538     uint64_t v;
1539     CPUState *cs = mon_get_cpu();
1540
1541     if (!cs && (format == 'i' || !is_physical)) {
1542         monitor_printf(mon, "Can not dump without CPU\n");
1543         return;
1544     }
1545
1546     if (format == 'i') {
1547         monitor_disas(mon, cs, addr, count, is_physical);
1548         return;
1549     }
1550
1551     len = wsize * count;
1552     if (wsize == 1)
1553         line_size = 8;
1554     else
1555         line_size = 16;
1556     max_digits = 0;
1557
1558     switch(format) {
1559     case 'o':
1560         max_digits = DIV_ROUND_UP(wsize * 8, 3);
1561         break;
1562     default:
1563     case 'x':
1564         max_digits = (wsize * 8) / 4;
1565         break;
1566     case 'u':
1567     case 'd':
1568         max_digits = DIV_ROUND_UP(wsize * 8 * 10, 33);
1569         break;
1570     case 'c':
1571         wsize = 1;
1572         break;
1573     }
1574
1575     while (len > 0) {
1576         if (is_physical)
1577             monitor_printf(mon, TARGET_FMT_plx ":", addr);
1578         else
1579             monitor_printf(mon, TARGET_FMT_lx ":", (target_ulong)addr);
1580         l = len;
1581         if (l > line_size)
1582             l = line_size;
1583         if (is_physical) {
1584             cpu_physical_memory_read(addr, buf, l);
1585         } else {
1586             if (cpu_memory_rw_debug(cs, addr, buf, l, 0) < 0) {
1587                 monitor_printf(mon, " Cannot access memory\n");
1588                 break;
1589             }
1590         }
1591         i = 0;
1592         while (i < l) {
1593             switch(wsize) {
1594             default:
1595             case 1:
1596                 v = ldub_p(buf + i);
1597                 break;
1598             case 2:
1599                 v = lduw_p(buf + i);
1600                 break;
1601             case 4:
1602                 v = (uint32_t)ldl_p(buf + i);
1603                 break;
1604             case 8:
1605                 v = ldq_p(buf + i);
1606                 break;
1607             }
1608             monitor_printf(mon, " ");
1609             switch(format) {
1610             case 'o':
1611                 monitor_printf(mon, "%#*" PRIo64, max_digits, v);
1612                 break;
1613             case 'x':
1614                 monitor_printf(mon, "0x%0*" PRIx64, max_digits, v);
1615                 break;
1616             case 'u':
1617                 monitor_printf(mon, "%*" PRIu64, max_digits, v);
1618                 break;
1619             case 'd':
1620                 monitor_printf(mon, "%*" PRId64, max_digits, v);
1621                 break;
1622             case 'c':
1623                 monitor_printc(mon, v);
1624                 break;
1625             }
1626             i += wsize;
1627         }
1628         monitor_printf(mon, "\n");
1629         addr += l;
1630         len -= l;
1631     }
1632 }
1633
1634 static void hmp_memory_dump(Monitor *mon, const QDict *qdict)
1635 {
1636     int count = qdict_get_int(qdict, "count");
1637     int format = qdict_get_int(qdict, "format");
1638     int size = qdict_get_int(qdict, "size");
1639     target_long addr = qdict_get_int(qdict, "addr");
1640
1641     memory_dump(mon, count, format, size, addr, 0);
1642 }
1643
1644 static void hmp_physical_memory_dump(Monitor *mon, const QDict *qdict)
1645 {
1646     int count = qdict_get_int(qdict, "count");
1647     int format = qdict_get_int(qdict, "format");
1648     int size = qdict_get_int(qdict, "size");
1649     hwaddr addr = qdict_get_int(qdict, "addr");
1650
1651     memory_dump(mon, count, format, size, addr, 1);
1652 }
1653
1654 static void *gpa2hva(MemoryRegion **p_mr, hwaddr addr, Error **errp)
1655 {
1656     MemoryRegionSection mrs = memory_region_find(get_system_memory(),
1657                                                  addr, 1);
1658
1659     if (!mrs.mr) {
1660         error_setg(errp, "No memory is mapped at address 0x%" HWADDR_PRIx, addr);
1661         return NULL;
1662     }
1663
1664     if (!memory_region_is_ram(mrs.mr) && !memory_region_is_romd(mrs.mr)) {
1665         error_setg(errp, "Memory at address 0x%" HWADDR_PRIx "is not RAM", addr);
1666         memory_region_unref(mrs.mr);
1667         return NULL;
1668     }
1669
1670     *p_mr = mrs.mr;
1671     return qemu_map_ram_ptr(mrs.mr->ram_block, mrs.offset_within_region);
1672 }
1673
1674 static void hmp_gpa2hva(Monitor *mon, const QDict *qdict)
1675 {
1676     hwaddr addr = qdict_get_int(qdict, "addr");
1677     Error *local_err = NULL;
1678     MemoryRegion *mr = NULL;
1679     void *ptr;
1680
1681     ptr = gpa2hva(&mr, addr, &local_err);
1682     if (local_err) {
1683         error_report_err(local_err);
1684         return;
1685     }
1686
1687     monitor_printf(mon, "Host virtual address for 0x%" HWADDR_PRIx
1688                    " (%s) is %p\n",
1689                    addr, mr->name, ptr);
1690
1691     memory_region_unref(mr);
1692 }
1693
1694 #ifdef CONFIG_LINUX
1695 static uint64_t vtop(void *ptr, Error **errp)
1696 {
1697     uint64_t pinfo;
1698     uint64_t ret = -1;
1699     uintptr_t addr = (uintptr_t) ptr;
1700     uintptr_t pagesize = getpagesize();
1701     off_t offset = addr / pagesize * sizeof(pinfo);
1702     int fd;
1703
1704     fd = open("/proc/self/pagemap", O_RDONLY);
1705     if (fd == -1) {
1706         error_setg_errno(errp, errno, "Cannot open /proc/self/pagemap");
1707         return -1;
1708     }
1709
1710     /* Force copy-on-write if necessary.  */
1711     atomic_add((uint8_t *)ptr, 0);
1712
1713     if (pread(fd, &pinfo, sizeof(pinfo), offset) != sizeof(pinfo)) {
1714         error_setg_errno(errp, errno, "Cannot read pagemap");
1715         goto out;
1716     }
1717     if ((pinfo & (1ull << 63)) == 0) {
1718         error_setg(errp, "Page not present");
1719         goto out;
1720     }
1721     ret = ((pinfo & 0x007fffffffffffffull) * pagesize) | (addr & (pagesize - 1));
1722
1723 out:
1724     close(fd);
1725     return ret;
1726 }
1727
1728 static void hmp_gpa2hpa(Monitor *mon, const QDict *qdict)
1729 {
1730     hwaddr addr = qdict_get_int(qdict, "addr");
1731     Error *local_err = NULL;
1732     MemoryRegion *mr = NULL;
1733     void *ptr;
1734     uint64_t physaddr;
1735
1736     ptr = gpa2hva(&mr, addr, &local_err);
1737     if (local_err) {
1738         error_report_err(local_err);
1739         return;
1740     }
1741
1742     physaddr = vtop(ptr, &local_err);
1743     if (local_err) {
1744         error_report_err(local_err);
1745     } else {
1746         monitor_printf(mon, "Host physical address for 0x%" HWADDR_PRIx
1747                        " (%s) is 0x%" PRIx64 "\n",
1748                        addr, mr->name, (uint64_t) physaddr);
1749     }
1750
1751     memory_region_unref(mr);
1752 }
1753 #endif
1754
1755 static void do_print(Monitor *mon, const QDict *qdict)
1756 {
1757     int format = qdict_get_int(qdict, "format");
1758     hwaddr val = qdict_get_int(qdict, "val");
1759
1760     switch(format) {
1761     case 'o':
1762         monitor_printf(mon, "%#" HWADDR_PRIo, val);
1763         break;
1764     case 'x':
1765         monitor_printf(mon, "%#" HWADDR_PRIx, val);
1766         break;
1767     case 'u':
1768         monitor_printf(mon, "%" HWADDR_PRIu, val);
1769         break;
1770     default:
1771     case 'd':
1772         monitor_printf(mon, "%" HWADDR_PRId, val);
1773         break;
1774     case 'c':
1775         monitor_printc(mon, val);
1776         break;
1777     }
1778     monitor_printf(mon, "\n");
1779 }
1780
1781 static void hmp_sum(Monitor *mon, const QDict *qdict)
1782 {
1783     uint32_t addr;
1784     uint16_t sum;
1785     uint32_t start = qdict_get_int(qdict, "start");
1786     uint32_t size = qdict_get_int(qdict, "size");
1787
1788     sum = 0;
1789     for(addr = start; addr < (start + size); addr++) {
1790         uint8_t val = address_space_ldub(&address_space_memory, addr,
1791                                          MEMTXATTRS_UNSPECIFIED, NULL);
1792         /* BSD sum algorithm ('sum' Unix command) */
1793         sum = (sum >> 1) | (sum << 15);
1794         sum += val;
1795     }
1796     monitor_printf(mon, "%05d\n", sum);
1797 }
1798
1799 static int mouse_button_state;
1800
1801 static void hmp_mouse_move(Monitor *mon, const QDict *qdict)
1802 {
1803     int dx, dy, dz, button;
1804     const char *dx_str = qdict_get_str(qdict, "dx_str");
1805     const char *dy_str = qdict_get_str(qdict, "dy_str");
1806     const char *dz_str = qdict_get_try_str(qdict, "dz_str");
1807
1808     dx = strtol(dx_str, NULL, 0);
1809     dy = strtol(dy_str, NULL, 0);
1810     qemu_input_queue_rel(NULL, INPUT_AXIS_X, dx);
1811     qemu_input_queue_rel(NULL, INPUT_AXIS_Y, dy);
1812
1813     if (dz_str) {
1814         dz = strtol(dz_str, NULL, 0);
1815         if (dz != 0) {
1816             button = (dz > 0) ? INPUT_BUTTON_WHEEL_UP : INPUT_BUTTON_WHEEL_DOWN;
1817             qemu_input_queue_btn(NULL, button, true);
1818             qemu_input_event_sync();
1819             qemu_input_queue_btn(NULL, button, false);
1820         }
1821     }
1822     qemu_input_event_sync();
1823 }
1824
1825 static void hmp_mouse_button(Monitor *mon, const QDict *qdict)
1826 {
1827     static uint32_t bmap[INPUT_BUTTON__MAX] = {
1828         [INPUT_BUTTON_LEFT]       = MOUSE_EVENT_LBUTTON,
1829         [INPUT_BUTTON_MIDDLE]     = MOUSE_EVENT_MBUTTON,
1830         [INPUT_BUTTON_RIGHT]      = MOUSE_EVENT_RBUTTON,
1831     };
1832     int button_state = qdict_get_int(qdict, "button_state");
1833
1834     if (mouse_button_state == button_state) {
1835         return;
1836     }
1837     qemu_input_update_buttons(NULL, bmap, mouse_button_state, button_state);
1838     qemu_input_event_sync();
1839     mouse_button_state = button_state;
1840 }
1841
1842 static void hmp_ioport_read(Monitor *mon, const QDict *qdict)
1843 {
1844     int size = qdict_get_int(qdict, "size");
1845     int addr = qdict_get_int(qdict, "addr");
1846     int has_index = qdict_haskey(qdict, "index");
1847     uint32_t val;
1848     int suffix;
1849
1850     if (has_index) {
1851         int index = qdict_get_int(qdict, "index");
1852         cpu_outb(addr & IOPORTS_MASK, index & 0xff);
1853         addr++;
1854     }
1855     addr &= 0xffff;
1856
1857     switch(size) {
1858     default:
1859     case 1:
1860         val = cpu_inb(addr);
1861         suffix = 'b';
1862         break;
1863     case 2:
1864         val = cpu_inw(addr);
1865         suffix = 'w';
1866         break;
1867     case 4:
1868         val = cpu_inl(addr);
1869         suffix = 'l';
1870         break;
1871     }
1872     monitor_printf(mon, "port%c[0x%04x] = %#0*x\n",
1873                    suffix, addr, size * 2, val);
1874 }
1875
1876 static void hmp_ioport_write(Monitor *mon, const QDict *qdict)
1877 {
1878     int size = qdict_get_int(qdict, "size");
1879     int addr = qdict_get_int(qdict, "addr");
1880     int val = qdict_get_int(qdict, "val");
1881
1882     addr &= IOPORTS_MASK;
1883
1884     switch (size) {
1885     default:
1886     case 1:
1887         cpu_outb(addr, val);
1888         break;
1889     case 2:
1890         cpu_outw(addr, val);
1891         break;
1892     case 4:
1893         cpu_outl(addr, val);
1894         break;
1895     }
1896 }
1897
1898 static void hmp_boot_set(Monitor *mon, const QDict *qdict)
1899 {
1900     Error *local_err = NULL;
1901     const char *bootdevice = qdict_get_str(qdict, "bootdevice");
1902
1903     qemu_boot_set(bootdevice, &local_err);
1904     if (local_err) {
1905         error_report_err(local_err);
1906     } else {
1907         monitor_printf(mon, "boot device list now set to %s\n", bootdevice);
1908     }
1909 }
1910
1911 static void hmp_info_mtree(Monitor *mon, const QDict *qdict)
1912 {
1913     bool flatview = qdict_get_try_bool(qdict, "flatview", false);
1914     bool dispatch_tree = qdict_get_try_bool(qdict, "dispatch_tree", false);
1915
1916     mtree_info((fprintf_function)monitor_printf, mon, flatview, dispatch_tree);
1917 }
1918
1919 static void hmp_info_numa(Monitor *mon, const QDict *qdict)
1920 {
1921     int i;
1922     NumaNodeMem *node_mem;
1923     CpuInfoList *cpu_list, *cpu;
1924
1925     cpu_list = qmp_query_cpus(&error_abort);
1926     node_mem = g_new0(NumaNodeMem, nb_numa_nodes);
1927
1928     query_numa_node_mem(node_mem);
1929     monitor_printf(mon, "%d nodes\n", nb_numa_nodes);
1930     for (i = 0; i < nb_numa_nodes; i++) {
1931         monitor_printf(mon, "node %d cpus:", i);
1932         for (cpu = cpu_list; cpu; cpu = cpu->next) {
1933             if (cpu->value->has_props && cpu->value->props->has_node_id &&
1934                 cpu->value->props->node_id == i) {
1935                 monitor_printf(mon, " %" PRIi64, cpu->value->CPU);
1936             }
1937         }
1938         monitor_printf(mon, "\n");
1939         monitor_printf(mon, "node %d size: %" PRId64 " MB\n", i,
1940                        node_mem[i].node_mem >> 20);
1941         monitor_printf(mon, "node %d plugged: %" PRId64 " MB\n", i,
1942                        node_mem[i].node_plugged_mem >> 20);
1943     }
1944     qapi_free_CpuInfoList(cpu_list);
1945     g_free(node_mem);
1946 }
1947
1948 #ifdef CONFIG_PROFILER
1949
1950 int64_t tcg_time;
1951 int64_t dev_time;
1952
1953 static void hmp_info_profile(Monitor *mon, const QDict *qdict)
1954 {
1955     monitor_printf(mon, "async time  %" PRId64 " (%0.3f)\n",
1956                    dev_time, dev_time / (double)NANOSECONDS_PER_SECOND);
1957     monitor_printf(mon, "qemu time   %" PRId64 " (%0.3f)\n",
1958                    tcg_time, tcg_time / (double)NANOSECONDS_PER_SECOND);
1959     tcg_time = 0;
1960     dev_time = 0;
1961 }
1962 #else
1963 static void hmp_info_profile(Monitor *mon, const QDict *qdict)
1964 {
1965     monitor_printf(mon, "Internal profiler not compiled\n");
1966 }
1967 #endif
1968
1969 /* Capture support */
1970 static QLIST_HEAD (capture_list_head, CaptureState) capture_head;
1971
1972 static void hmp_info_capture(Monitor *mon, const QDict *qdict)
1973 {
1974     int i;
1975     CaptureState *s;
1976
1977     for (s = capture_head.lh_first, i = 0; s; s = s->entries.le_next, ++i) {
1978         monitor_printf(mon, "[%d]: ", i);
1979         s->ops.info (s->opaque);
1980     }
1981 }
1982
1983 static void hmp_stopcapture(Monitor *mon, const QDict *qdict)
1984 {
1985     int i;
1986     int n = qdict_get_int(qdict, "n");
1987     CaptureState *s;
1988
1989     for (s = capture_head.lh_first, i = 0; s; s = s->entries.le_next, ++i) {
1990         if (i == n) {
1991             s->ops.destroy (s->opaque);
1992             QLIST_REMOVE (s, entries);
1993             g_free (s);
1994             return;
1995         }
1996     }
1997 }
1998
1999 static void hmp_wavcapture(Monitor *mon, const QDict *qdict)
2000 {
2001     const char *path = qdict_get_str(qdict, "path");
2002     int has_freq = qdict_haskey(qdict, "freq");
2003     int freq = qdict_get_try_int(qdict, "freq", -1);
2004     int has_bits = qdict_haskey(qdict, "bits");
2005     int bits = qdict_get_try_int(qdict, "bits", -1);
2006     int has_channels = qdict_haskey(qdict, "nchannels");
2007     int nchannels = qdict_get_try_int(qdict, "nchannels", -1);
2008     CaptureState *s;
2009
2010     s = g_malloc0 (sizeof (*s));
2011
2012     freq = has_freq ? freq : 44100;
2013     bits = has_bits ? bits : 16;
2014     nchannels = has_channels ? nchannels : 2;
2015
2016     if (wav_start_capture (s, path, freq, bits, nchannels)) {
2017         monitor_printf(mon, "Failed to add wave capture\n");
2018         g_free (s);
2019         return;
2020     }
2021     QLIST_INSERT_HEAD (&capture_head, s, entries);
2022 }
2023
2024 static qemu_acl *find_acl(Monitor *mon, const char *name)
2025 {
2026     qemu_acl *acl = qemu_acl_find(name);
2027
2028     if (!acl) {
2029         monitor_printf(mon, "acl: unknown list '%s'\n", name);
2030     }
2031     return acl;
2032 }
2033
2034 static void hmp_acl_show(Monitor *mon, const QDict *qdict)
2035 {
2036     const char *aclname = qdict_get_str(qdict, "aclname");
2037     qemu_acl *acl = find_acl(mon, aclname);
2038     qemu_acl_entry *entry;
2039     int i = 0;
2040
2041     if (acl) {
2042         monitor_printf(mon, "policy: %s\n",
2043                        acl->defaultDeny ? "deny" : "allow");
2044         QTAILQ_FOREACH(entry, &acl->entries, next) {
2045             i++;
2046             monitor_printf(mon, "%d: %s %s\n", i,
2047                            entry->deny ? "deny" : "allow", entry->match);
2048         }
2049     }
2050 }
2051
2052 static void hmp_acl_reset(Monitor *mon, const QDict *qdict)
2053 {
2054     const char *aclname = qdict_get_str(qdict, "aclname");
2055     qemu_acl *acl = find_acl(mon, aclname);
2056
2057     if (acl) {
2058         qemu_acl_reset(acl);
2059         monitor_printf(mon, "acl: removed all rules\n");
2060     }
2061 }
2062
2063 static void hmp_acl_policy(Monitor *mon, const QDict *qdict)
2064 {
2065     const char *aclname = qdict_get_str(qdict, "aclname");
2066     const char *policy = qdict_get_str(qdict, "policy");
2067     qemu_acl *acl = find_acl(mon, aclname);
2068
2069     if (acl) {
2070         if (strcmp(policy, "allow") == 0) {
2071             acl->defaultDeny = 0;
2072             monitor_printf(mon, "acl: policy set to 'allow'\n");
2073         } else if (strcmp(policy, "deny") == 0) {
2074             acl->defaultDeny = 1;
2075             monitor_printf(mon, "acl: policy set to 'deny'\n");
2076         } else {
2077             monitor_printf(mon, "acl: unknown policy '%s', "
2078                            "expected 'deny' or 'allow'\n", policy);
2079         }
2080     }
2081 }
2082
2083 static void hmp_acl_add(Monitor *mon, const QDict *qdict)
2084 {
2085     const char *aclname = qdict_get_str(qdict, "aclname");
2086     const char *match = qdict_get_str(qdict, "match");
2087     const char *policy = qdict_get_str(qdict, "policy");
2088     int has_index = qdict_haskey(qdict, "index");
2089     int index = qdict_get_try_int(qdict, "index", -1);
2090     qemu_acl *acl = find_acl(mon, aclname);
2091     int deny, ret;
2092
2093     if (acl) {
2094         if (strcmp(policy, "allow") == 0) {
2095             deny = 0;
2096         } else if (strcmp(policy, "deny") == 0) {
2097             deny = 1;
2098         } else {
2099             monitor_printf(mon, "acl: unknown policy '%s', "
2100                            "expected 'deny' or 'allow'\n", policy);
2101             return;
2102         }
2103         if (has_index)
2104             ret = qemu_acl_insert(acl, deny, match, index);
2105         else
2106             ret = qemu_acl_append(acl, deny, match);
2107         if (ret < 0)
2108             monitor_printf(mon, "acl: unable to add acl entry\n");
2109         else
2110             monitor_printf(mon, "acl: added rule at position %d\n", ret);
2111     }
2112 }
2113
2114 static void hmp_acl_remove(Monitor *mon, const QDict *qdict)
2115 {
2116     const char *aclname = qdict_get_str(qdict, "aclname");
2117     const char *match = qdict_get_str(qdict, "match");
2118     qemu_acl *acl = find_acl(mon, aclname);
2119     int ret;
2120
2121     if (acl) {
2122         ret = qemu_acl_remove(acl, match);
2123         if (ret < 0)
2124             monitor_printf(mon, "acl: no matching acl entry\n");
2125         else
2126             monitor_printf(mon, "acl: removed rule at position %d\n", ret);
2127     }
2128 }
2129
2130 void qmp_getfd(const char *fdname, Error **errp)
2131 {
2132     mon_fd_t *monfd;
2133     int fd;
2134
2135     fd = qemu_chr_fe_get_msgfd(&cur_mon->chr);
2136     if (fd == -1) {
2137         error_setg(errp, QERR_FD_NOT_SUPPLIED);
2138         return;
2139     }
2140
2141     if (qemu_isdigit(fdname[0])) {
2142         close(fd);
2143         error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "fdname",
2144                    "a name not starting with a digit");
2145         return;
2146     }
2147
2148     QLIST_FOREACH(monfd, &cur_mon->fds, next) {
2149         if (strcmp(monfd->name, fdname) != 0) {
2150             continue;
2151         }
2152
2153         close(monfd->fd);
2154         monfd->fd = fd;
2155         return;
2156     }
2157
2158     monfd = g_malloc0(sizeof(mon_fd_t));
2159     monfd->name = g_strdup(fdname);
2160     monfd->fd = fd;
2161
2162     QLIST_INSERT_HEAD(&cur_mon->fds, monfd, next);
2163 }
2164
2165 void qmp_closefd(const char *fdname, Error **errp)
2166 {
2167     mon_fd_t *monfd;
2168
2169     QLIST_FOREACH(monfd, &cur_mon->fds, next) {
2170         if (strcmp(monfd->name, fdname) != 0) {
2171             continue;
2172         }
2173
2174         QLIST_REMOVE(monfd, next);
2175         close(monfd->fd);
2176         g_free(monfd->name);
2177         g_free(monfd);
2178         return;
2179     }
2180
2181     error_setg(errp, QERR_FD_NOT_FOUND, fdname);
2182 }
2183
2184 int monitor_get_fd(Monitor *mon, const char *fdname, Error **errp)
2185 {
2186     mon_fd_t *monfd;
2187
2188     QLIST_FOREACH(monfd, &mon->fds, next) {
2189         int fd;
2190
2191         if (strcmp(monfd->name, fdname) != 0) {
2192             continue;
2193         }
2194
2195         fd = monfd->fd;
2196
2197         /* caller takes ownership of fd */
2198         QLIST_REMOVE(monfd, next);
2199         g_free(monfd->name);
2200         g_free(monfd);
2201
2202         return fd;
2203     }
2204
2205     error_setg(errp, "File descriptor named '%s' has not been found", fdname);
2206     return -1;
2207 }
2208
2209 static void monitor_fdset_cleanup(MonFdset *mon_fdset)
2210 {
2211     MonFdsetFd *mon_fdset_fd;
2212     MonFdsetFd *mon_fdset_fd_next;
2213
2214     QLIST_FOREACH_SAFE(mon_fdset_fd, &mon_fdset->fds, next, mon_fdset_fd_next) {
2215         if ((mon_fdset_fd->removed ||
2216                 (QLIST_EMPTY(&mon_fdset->dup_fds) && mon_refcount == 0)) &&
2217                 runstate_is_running()) {
2218             close(mon_fdset_fd->fd);
2219             g_free(mon_fdset_fd->opaque);
2220             QLIST_REMOVE(mon_fdset_fd, next);
2221             g_free(mon_fdset_fd);
2222         }
2223     }
2224
2225     if (QLIST_EMPTY(&mon_fdset->fds) && QLIST_EMPTY(&mon_fdset->dup_fds)) {
2226         QLIST_REMOVE(mon_fdset, next);
2227         g_free(mon_fdset);
2228     }
2229 }
2230
2231 static void monitor_fdsets_cleanup(void)
2232 {
2233     MonFdset *mon_fdset;
2234     MonFdset *mon_fdset_next;
2235
2236     QLIST_FOREACH_SAFE(mon_fdset, &mon_fdsets, next, mon_fdset_next) {
2237         monitor_fdset_cleanup(mon_fdset);
2238     }
2239 }
2240
2241 AddfdInfo *qmp_add_fd(bool has_fdset_id, int64_t fdset_id, bool has_opaque,
2242                       const char *opaque, Error **errp)
2243 {
2244     int fd;
2245     Monitor *mon = cur_mon;
2246     AddfdInfo *fdinfo;
2247
2248     fd = qemu_chr_fe_get_msgfd(&mon->chr);
2249     if (fd == -1) {
2250         error_setg(errp, QERR_FD_NOT_SUPPLIED);
2251         goto error;
2252     }
2253
2254     fdinfo = monitor_fdset_add_fd(fd, has_fdset_id, fdset_id,
2255                                   has_opaque, opaque, errp);
2256     if (fdinfo) {
2257         return fdinfo;
2258     }
2259
2260 error:
2261     if (fd != -1) {
2262         close(fd);
2263     }
2264     return NULL;
2265 }
2266
2267 void qmp_remove_fd(int64_t fdset_id, bool has_fd, int64_t fd, Error **errp)
2268 {
2269     MonFdset *mon_fdset;
2270     MonFdsetFd *mon_fdset_fd;
2271     char fd_str[60];
2272
2273     QLIST_FOREACH(mon_fdset, &mon_fdsets, next) {
2274         if (mon_fdset->id != fdset_id) {
2275             continue;
2276         }
2277         QLIST_FOREACH(mon_fdset_fd, &mon_fdset->fds, next) {
2278             if (has_fd) {
2279                 if (mon_fdset_fd->fd != fd) {
2280                     continue;
2281                 }
2282                 mon_fdset_fd->removed = true;
2283                 break;
2284             } else {
2285                 mon_fdset_fd->removed = true;
2286             }
2287         }
2288         if (has_fd && !mon_fdset_fd) {
2289             goto error;
2290         }
2291         monitor_fdset_cleanup(mon_fdset);
2292         return;
2293     }
2294
2295 error:
2296     if (has_fd) {
2297         snprintf(fd_str, sizeof(fd_str), "fdset-id:%" PRId64 ", fd:%" PRId64,
2298                  fdset_id, fd);
2299     } else {
2300         snprintf(fd_str, sizeof(fd_str), "fdset-id:%" PRId64, fdset_id);
2301     }
2302     error_setg(errp, QERR_FD_NOT_FOUND, fd_str);
2303 }
2304
2305 FdsetInfoList *qmp_query_fdsets(Error **errp)
2306 {
2307     MonFdset *mon_fdset;
2308     MonFdsetFd *mon_fdset_fd;
2309     FdsetInfoList *fdset_list = NULL;
2310
2311     QLIST_FOREACH(mon_fdset, &mon_fdsets, next) {
2312         FdsetInfoList *fdset_info = g_malloc0(sizeof(*fdset_info));
2313         FdsetFdInfoList *fdsetfd_list = NULL;
2314
2315         fdset_info->value = g_malloc0(sizeof(*fdset_info->value));
2316         fdset_info->value->fdset_id = mon_fdset->id;
2317
2318         QLIST_FOREACH(mon_fdset_fd, &mon_fdset->fds, next) {
2319             FdsetFdInfoList *fdsetfd_info;
2320
2321             fdsetfd_info = g_malloc0(sizeof(*fdsetfd_info));
2322             fdsetfd_info->value = g_malloc0(sizeof(*fdsetfd_info->value));
2323             fdsetfd_info->value->fd = mon_fdset_fd->fd;
2324             if (mon_fdset_fd->opaque) {
2325                 fdsetfd_info->value->has_opaque = true;
2326                 fdsetfd_info->value->opaque = g_strdup(mon_fdset_fd->opaque);
2327             } else {
2328                 fdsetfd_info->value->has_opaque = false;
2329             }
2330
2331             fdsetfd_info->next = fdsetfd_list;
2332             fdsetfd_list = fdsetfd_info;
2333         }
2334
2335         fdset_info->value->fds = fdsetfd_list;
2336
2337         fdset_info->next = fdset_list;
2338         fdset_list = fdset_info;
2339     }
2340
2341     return fdset_list;
2342 }
2343
2344 AddfdInfo *monitor_fdset_add_fd(int fd, bool has_fdset_id, int64_t fdset_id,
2345                                 bool has_opaque, const char *opaque,
2346                                 Error **errp)
2347 {
2348     MonFdset *mon_fdset = NULL;
2349     MonFdsetFd *mon_fdset_fd;
2350     AddfdInfo *fdinfo;
2351
2352     if (has_fdset_id) {
2353         QLIST_FOREACH(mon_fdset, &mon_fdsets, next) {
2354             /* Break if match found or match impossible due to ordering by ID */
2355             if (fdset_id <= mon_fdset->id) {
2356                 if (fdset_id < mon_fdset->id) {
2357                     mon_fdset = NULL;
2358                 }
2359                 break;
2360             }
2361         }
2362     }
2363
2364     if (mon_fdset == NULL) {
2365         int64_t fdset_id_prev = -1;
2366         MonFdset *mon_fdset_cur = QLIST_FIRST(&mon_fdsets);
2367
2368         if (has_fdset_id) {
2369             if (fdset_id < 0) {
2370                 error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "fdset-id",
2371                            "a non-negative value");
2372                 return NULL;
2373             }
2374             /* Use specified fdset ID */
2375             QLIST_FOREACH(mon_fdset, &mon_fdsets, next) {
2376                 mon_fdset_cur = mon_fdset;
2377                 if (fdset_id < mon_fdset_cur->id) {
2378                     break;
2379                 }
2380             }
2381         } else {
2382             /* Use first available fdset ID */
2383             QLIST_FOREACH(mon_fdset, &mon_fdsets, next) {
2384                 mon_fdset_cur = mon_fdset;
2385                 if (fdset_id_prev == mon_fdset_cur->id - 1) {
2386                     fdset_id_prev = mon_fdset_cur->id;
2387                     continue;
2388                 }
2389                 break;
2390             }
2391         }
2392
2393         mon_fdset = g_malloc0(sizeof(*mon_fdset));
2394         if (has_fdset_id) {
2395             mon_fdset->id = fdset_id;
2396         } else {
2397             mon_fdset->id = fdset_id_prev + 1;
2398         }
2399
2400         /* The fdset list is ordered by fdset ID */
2401         if (!mon_fdset_cur) {
2402             QLIST_INSERT_HEAD(&mon_fdsets, mon_fdset, next);
2403         } else if (mon_fdset->id < mon_fdset_cur->id) {
2404             QLIST_INSERT_BEFORE(mon_fdset_cur, mon_fdset, next);
2405         } else {
2406             QLIST_INSERT_AFTER(mon_fdset_cur, mon_fdset, next);
2407         }
2408     }
2409
2410     mon_fdset_fd = g_malloc0(sizeof(*mon_fdset_fd));
2411     mon_fdset_fd->fd = fd;
2412     mon_fdset_fd->removed = false;
2413     if (has_opaque) {
2414         mon_fdset_fd->opaque = g_strdup(opaque);
2415     }
2416     QLIST_INSERT_HEAD(&mon_fdset->fds, mon_fdset_fd, next);
2417
2418     fdinfo = g_malloc0(sizeof(*fdinfo));
2419     fdinfo->fdset_id = mon_fdset->id;
2420     fdinfo->fd = mon_fdset_fd->fd;
2421
2422     return fdinfo;
2423 }
2424
2425 int monitor_fdset_get_fd(int64_t fdset_id, int flags)
2426 {
2427 #ifndef _WIN32
2428     MonFdset *mon_fdset;
2429     MonFdsetFd *mon_fdset_fd;
2430     int mon_fd_flags;
2431
2432     QLIST_FOREACH(mon_fdset, &mon_fdsets, next) {
2433         if (mon_fdset->id != fdset_id) {
2434             continue;
2435         }
2436         QLIST_FOREACH(mon_fdset_fd, &mon_fdset->fds, next) {
2437             mon_fd_flags = fcntl(mon_fdset_fd->fd, F_GETFL);
2438             if (mon_fd_flags == -1) {
2439                 return -1;
2440             }
2441
2442             if ((flags & O_ACCMODE) == (mon_fd_flags & O_ACCMODE)) {
2443                 return mon_fdset_fd->fd;
2444             }
2445         }
2446         errno = EACCES;
2447         return -1;
2448     }
2449 #endif
2450
2451     errno = ENOENT;
2452     return -1;
2453 }
2454
2455 int monitor_fdset_dup_fd_add(int64_t fdset_id, int dup_fd)
2456 {
2457     MonFdset *mon_fdset;
2458     MonFdsetFd *mon_fdset_fd_dup;
2459
2460     QLIST_FOREACH(mon_fdset, &mon_fdsets, next) {
2461         if (mon_fdset->id != fdset_id) {
2462             continue;
2463         }
2464         QLIST_FOREACH(mon_fdset_fd_dup, &mon_fdset->dup_fds, next) {
2465             if (mon_fdset_fd_dup->fd == dup_fd) {
2466                 return -1;
2467             }
2468         }
2469         mon_fdset_fd_dup = g_malloc0(sizeof(*mon_fdset_fd_dup));
2470         mon_fdset_fd_dup->fd = dup_fd;
2471         QLIST_INSERT_HEAD(&mon_fdset->dup_fds, mon_fdset_fd_dup, next);
2472         return 0;
2473     }
2474     return -1;
2475 }
2476
2477 static int monitor_fdset_dup_fd_find_remove(int dup_fd, bool remove)
2478 {
2479     MonFdset *mon_fdset;
2480     MonFdsetFd *mon_fdset_fd_dup;
2481
2482     QLIST_FOREACH(mon_fdset, &mon_fdsets, next) {
2483         QLIST_FOREACH(mon_fdset_fd_dup, &mon_fdset->dup_fds, next) {
2484             if (mon_fdset_fd_dup->fd == dup_fd) {
2485                 if (remove) {
2486                     QLIST_REMOVE(mon_fdset_fd_dup, next);
2487                     if (QLIST_EMPTY(&mon_fdset->dup_fds)) {
2488                         monitor_fdset_cleanup(mon_fdset);
2489                     }
2490                     return -1;
2491                 } else {
2492                     return mon_fdset->id;
2493                 }
2494             }
2495         }
2496     }
2497     return -1;
2498 }
2499
2500 int monitor_fdset_dup_fd_find(int dup_fd)
2501 {
2502     return monitor_fdset_dup_fd_find_remove(dup_fd, false);
2503 }
2504
2505 void monitor_fdset_dup_fd_remove(int dup_fd)
2506 {
2507     monitor_fdset_dup_fd_find_remove(dup_fd, true);
2508 }
2509
2510 int monitor_fd_param(Monitor *mon, const char *fdname, Error **errp)
2511 {
2512     int fd;
2513     Error *local_err = NULL;
2514
2515     if (!qemu_isdigit(fdname[0]) && mon) {
2516         fd = monitor_get_fd(mon, fdname, &local_err);
2517     } else {
2518         fd = qemu_parse_fd(fdname);
2519         if (fd == -1) {
2520             error_setg(&local_err, "Invalid file descriptor number '%s'",
2521                        fdname);
2522         }
2523     }
2524     if (local_err) {
2525         error_propagate(errp, local_err);
2526         assert(fd == -1);
2527     } else {
2528         assert(fd != -1);
2529     }
2530
2531     return fd;
2532 }
2533
2534 /* Please update hmp-commands.hx when adding or changing commands */
2535 static mon_cmd_t info_cmds[] = {
2536 #include "hmp-commands-info.h"
2537     { NULL, NULL, },
2538 };
2539
2540 /* mon_cmds and info_cmds would be sorted at runtime */
2541 static mon_cmd_t mon_cmds[] = {
2542 #include "hmp-commands.h"
2543     { NULL, NULL, },
2544 };
2545
2546 /*******************************************************************/
2547
2548 static const char *pch;
2549 static sigjmp_buf expr_env;
2550
2551
2552 static void GCC_FMT_ATTR(2, 3) QEMU_NORETURN
2553 expr_error(Monitor *mon, const char *fmt, ...)
2554 {
2555     va_list ap;
2556     va_start(ap, fmt);
2557     monitor_vprintf(mon, fmt, ap);
2558     monitor_printf(mon, "\n");
2559     va_end(ap);
2560     siglongjmp(expr_env, 1);
2561 }
2562
2563 /* return 0 if OK, -1 if not found */
2564 static int get_monitor_def(target_long *pval, const char *name)
2565 {
2566     const MonitorDef *md = target_monitor_defs();
2567     CPUState *cs = mon_get_cpu();
2568     void *ptr;
2569     uint64_t tmp = 0;
2570     int ret;
2571
2572     if (cs == NULL || md == NULL) {
2573         return -1;
2574     }
2575
2576     for(; md->name != NULL; md++) {
2577         if (compare_cmd(name, md->name)) {
2578             if (md->get_value) {
2579                 *pval = md->get_value(md, md->offset);
2580             } else {
2581                 CPUArchState *env = mon_get_cpu_env();
2582                 ptr = (uint8_t *)env + md->offset;
2583                 switch(md->type) {
2584                 case MD_I32:
2585                     *pval = *(int32_t *)ptr;
2586                     break;
2587                 case MD_TLONG:
2588                     *pval = *(target_long *)ptr;
2589                     break;
2590                 default:
2591                     *pval = 0;
2592                     break;
2593                 }
2594             }
2595             return 0;
2596         }
2597     }
2598
2599     ret = target_get_monitor_def(cs, name, &tmp);
2600     if (!ret) {
2601         *pval = (target_long) tmp;
2602     }
2603
2604     return ret;
2605 }
2606
2607 static void next(void)
2608 {
2609     if (*pch != '\0') {
2610         pch++;
2611         while (qemu_isspace(*pch))
2612             pch++;
2613     }
2614 }
2615
2616 static int64_t expr_sum(Monitor *mon);
2617
2618 static int64_t expr_unary(Monitor *mon)
2619 {
2620     int64_t n;
2621     char *p;
2622     int ret;
2623
2624     switch(*pch) {
2625     case '+':
2626         next();
2627         n = expr_unary(mon);
2628         break;
2629     case '-':
2630         next();
2631         n = -expr_unary(mon);
2632         break;
2633     case '~':
2634         next();
2635         n = ~expr_unary(mon);
2636         break;
2637     case '(':
2638         next();
2639         n = expr_sum(mon);
2640         if (*pch != ')') {
2641             expr_error(mon, "')' expected");
2642         }
2643         next();
2644         break;
2645     case '\'':
2646         pch++;
2647         if (*pch == '\0')
2648             expr_error(mon, "character constant expected");
2649         n = *pch;
2650         pch++;
2651         if (*pch != '\'')
2652             expr_error(mon, "missing terminating \' character");
2653         next();
2654         break;
2655     case '$':
2656         {
2657             char buf[128], *q;
2658             target_long reg=0;
2659
2660             pch++;
2661             q = buf;
2662             while ((*pch >= 'a' && *pch <= 'z') ||
2663                    (*pch >= 'A' && *pch <= 'Z') ||
2664                    (*pch >= '0' && *pch <= '9') ||
2665                    *pch == '_' || *pch == '.') {
2666                 if ((q - buf) < sizeof(buf) - 1)
2667                     *q++ = *pch;
2668                 pch++;
2669             }
2670             while (qemu_isspace(*pch))
2671                 pch++;
2672             *q = 0;
2673             ret = get_monitor_def(&reg, buf);
2674             if (ret < 0)
2675                 expr_error(mon, "unknown register");
2676             n = reg;
2677         }
2678         break;
2679     case '\0':
2680         expr_error(mon, "unexpected end of expression");
2681         n = 0;
2682         break;
2683     default:
2684         errno = 0;
2685         n = strtoull(pch, &p, 0);
2686         if (errno == ERANGE) {
2687             expr_error(mon, "number too large");
2688         }
2689         if (pch == p) {
2690             expr_error(mon, "invalid char '%c' in expression", *p);
2691         }
2692         pch = p;
2693         while (qemu_isspace(*pch))
2694             pch++;
2695         break;
2696     }
2697     return n;
2698 }
2699
2700
2701 static int64_t expr_prod(Monitor *mon)
2702 {
2703     int64_t val, val2;
2704     int op;
2705
2706     val = expr_unary(mon);
2707     for(;;) {
2708         op = *pch;
2709         if (op != '*' && op != '/' && op != '%')
2710             break;
2711         next();
2712         val2 = expr_unary(mon);
2713         switch(op) {
2714         default:
2715         case '*':
2716             val *= val2;
2717             break;
2718         case '/':
2719         case '%':
2720             if (val2 == 0)
2721                 expr_error(mon, "division by zero");
2722             if (op == '/')
2723                 val /= val2;
2724             else
2725                 val %= val2;
2726             break;
2727         }
2728     }
2729     return val;
2730 }
2731
2732 static int64_t expr_logic(Monitor *mon)
2733 {
2734     int64_t val, val2;
2735     int op;
2736
2737     val = expr_prod(mon);
2738     for(;;) {
2739         op = *pch;
2740         if (op != '&' && op != '|' && op != '^')
2741             break;
2742         next();
2743         val2 = expr_prod(mon);
2744         switch(op) {
2745         default:
2746         case '&':
2747             val &= val2;
2748             break;
2749         case '|':
2750             val |= val2;
2751             break;
2752         case '^':
2753             val ^= val2;
2754             break;
2755         }
2756     }
2757     return val;
2758 }
2759
2760 static int64_t expr_sum(Monitor *mon)
2761 {
2762     int64_t val, val2;
2763     int op;
2764
2765     val = expr_logic(mon);
2766     for(;;) {
2767         op = *pch;
2768         if (op != '+' && op != '-')
2769             break;
2770         next();
2771         val2 = expr_logic(mon);
2772         if (op == '+')
2773             val += val2;
2774         else
2775             val -= val2;
2776     }
2777     return val;
2778 }
2779
2780 static int get_expr(Monitor *mon, int64_t *pval, const char **pp)
2781 {
2782     pch = *pp;
2783     if (sigsetjmp(expr_env, 0)) {
2784         *pp = pch;
2785         return -1;
2786     }
2787     while (qemu_isspace(*pch))
2788         pch++;
2789     *pval = expr_sum(mon);
2790     *pp = pch;
2791     return 0;
2792 }
2793
2794 static int get_double(Monitor *mon, double *pval, const char **pp)
2795 {
2796     const char *p = *pp;
2797     char *tailp;
2798     double d;
2799
2800     d = strtod(p, &tailp);
2801     if (tailp == p) {
2802         monitor_printf(mon, "Number expected\n");
2803         return -1;
2804     }
2805     if (d != d || d - d != 0) {
2806         /* NaN or infinity */
2807         monitor_printf(mon, "Bad number\n");
2808         return -1;
2809     }
2810     *pval = d;
2811     *pp = tailp;
2812     return 0;
2813 }
2814
2815 /*
2816  * Store the command-name in cmdname, and return a pointer to
2817  * the remaining of the command string.
2818  */
2819 static const char *get_command_name(const char *cmdline,
2820                                     char *cmdname, size_t nlen)
2821 {
2822     size_t len;
2823     const char *p, *pstart;
2824
2825     p = cmdline;
2826     while (qemu_isspace(*p))
2827         p++;
2828     if (*p == '\0')
2829         return NULL;
2830     pstart = p;
2831     while (*p != '\0' && *p != '/' && !qemu_isspace(*p))
2832         p++;
2833     len = p - pstart;
2834     if (len > nlen - 1)
2835         len = nlen - 1;
2836     memcpy(cmdname, pstart, len);
2837     cmdname[len] = '\0';
2838     return p;
2839 }
2840
2841 /**
2842  * Read key of 'type' into 'key' and return the current
2843  * 'type' pointer.
2844  */
2845 static char *key_get_info(const char *type, char **key)
2846 {
2847     size_t len;
2848     char *p, *str;
2849
2850     if (*type == ',')
2851         type++;
2852
2853     p = strchr(type, ':');
2854     if (!p) {
2855         *key = NULL;
2856         return NULL;
2857     }
2858     len = p - type;
2859
2860     str = g_malloc(len + 1);
2861     memcpy(str, type, len);
2862     str[len] = '\0';
2863
2864     *key = str;
2865     return ++p;
2866 }
2867
2868 static int default_fmt_format = 'x';
2869 static int default_fmt_size = 4;
2870
2871 static int is_valid_option(const char *c, const char *typestr)
2872 {
2873     char option[3];
2874   
2875     option[0] = '-';
2876     option[1] = *c;
2877     option[2] = '\0';
2878   
2879     typestr = strstr(typestr, option);
2880     return (typestr != NULL);
2881 }
2882
2883 static const mon_cmd_t *search_dispatch_table(const mon_cmd_t *disp_table,
2884                                               const char *cmdname)
2885 {
2886     const mon_cmd_t *cmd;
2887
2888     for (cmd = disp_table; cmd->name != NULL; cmd++) {
2889         if (compare_cmd(cmdname, cmd->name)) {
2890             return cmd;
2891         }
2892     }
2893
2894     return NULL;
2895 }
2896
2897 /*
2898  * Parse command name from @cmdp according to command table @table.
2899  * If blank, return NULL.
2900  * Else, if no valid command can be found, report to @mon, and return
2901  * NULL.
2902  * Else, change @cmdp to point right behind the name, and return its
2903  * command table entry.
2904  * Do not assume the return value points into @table!  It doesn't when
2905  * the command is found in a sub-command table.
2906  */
2907 static const mon_cmd_t *monitor_parse_command(Monitor *mon,
2908                                               const char *cmdp_start,
2909                                               const char **cmdp,
2910                                               mon_cmd_t *table)
2911 {
2912     const char *p;
2913     const mon_cmd_t *cmd;
2914     char cmdname[256];
2915
2916     /* extract the command name */
2917     p = get_command_name(*cmdp, cmdname, sizeof(cmdname));
2918     if (!p)
2919         return NULL;
2920
2921     cmd = search_dispatch_table(table, cmdname);
2922     if (!cmd) {
2923         monitor_printf(mon, "unknown command: '%.*s'\n",
2924                        (int)(p - cmdp_start), cmdp_start);
2925         return NULL;
2926     }
2927
2928     /* filter out following useless space */
2929     while (qemu_isspace(*p)) {
2930         p++;
2931     }
2932
2933     *cmdp = p;
2934     /* search sub command */
2935     if (cmd->sub_table != NULL && *p != '\0') {
2936         return monitor_parse_command(mon, cmdp_start, cmdp, cmd->sub_table);
2937     }
2938
2939     return cmd;
2940 }
2941
2942 /*
2943  * Parse arguments for @cmd.
2944  * If it can't be parsed, report to @mon, and return NULL.
2945  * Else, insert command arguments into a QDict, and return it.
2946  * Note: On success, caller has to free the QDict structure.
2947  */
2948
2949 static QDict *monitor_parse_arguments(Monitor *mon,
2950                                       const char **endp,
2951                                       const mon_cmd_t *cmd)
2952 {
2953     const char *typestr;
2954     char *key;
2955     int c;
2956     const char *p = *endp;
2957     char buf[1024];
2958     QDict *qdict = qdict_new();
2959
2960     /* parse the parameters */
2961     typestr = cmd->args_type;
2962     for(;;) {
2963         typestr = key_get_info(typestr, &key);
2964         if (!typestr)
2965             break;
2966         c = *typestr;
2967         typestr++;
2968         switch(c) {
2969         case 'F':
2970         case 'B':
2971         case 's':
2972             {
2973                 int ret;
2974
2975                 while (qemu_isspace(*p))
2976                     p++;
2977                 if (*typestr == '?') {
2978                     typestr++;
2979                     if (*p == '\0') {
2980                         /* no optional string: NULL argument */
2981                         break;
2982                     }
2983                 }
2984                 ret = get_str(buf, sizeof(buf), &p);
2985                 if (ret < 0) {
2986                     switch(c) {
2987                     case 'F':
2988                         monitor_printf(mon, "%s: filename expected\n",
2989                                        cmd->name);
2990                         break;
2991                     case 'B':
2992                         monitor_printf(mon, "%s: block device name expected\n",
2993                                        cmd->name);
2994                         break;
2995                     default:
2996                         monitor_printf(mon, "%s: string expected\n", cmd->name);
2997                         break;
2998                     }
2999                     goto fail;
3000                 }
3001                 qdict_put_str(qdict, key, buf);
3002             }
3003             break;
3004         case 'O':
3005             {
3006                 QemuOptsList *opts_list;
3007                 QemuOpts *opts;
3008
3009                 opts_list = qemu_find_opts(key);
3010                 if (!opts_list || opts_list->desc->name) {
3011                     goto bad_type;
3012                 }
3013                 while (qemu_isspace(*p)) {
3014                     p++;
3015                 }
3016                 if (!*p)
3017                     break;
3018                 if (get_str(buf, sizeof(buf), &p) < 0) {
3019                     goto fail;
3020                 }
3021                 opts = qemu_opts_parse_noisily(opts_list, buf, true);
3022                 if (!opts) {
3023                     goto fail;
3024                 }
3025                 qemu_opts_to_qdict(opts, qdict);
3026                 qemu_opts_del(opts);
3027             }
3028             break;
3029         case '/':
3030             {
3031                 int count, format, size;
3032
3033                 while (qemu_isspace(*p))
3034                     p++;
3035                 if (*p == '/') {
3036                     /* format found */
3037                     p++;
3038                     count = 1;
3039                     if (qemu_isdigit(*p)) {
3040                         count = 0;
3041                         while (qemu_isdigit(*p)) {
3042                             count = count * 10 + (*p - '0');
3043                             p++;
3044                         }
3045                     }
3046                     size = -1;
3047                     format = -1;
3048                     for(;;) {
3049                         switch(*p) {
3050                         case 'o':
3051                         case 'd':
3052                         case 'u':
3053                         case 'x':
3054                         case 'i':
3055                         case 'c':
3056                             format = *p++;
3057                             break;
3058                         case 'b':
3059                             size = 1;
3060                             p++;
3061                             break;
3062                         case 'h':
3063                             size = 2;
3064                             p++;
3065                             break;
3066                         case 'w':
3067                             size = 4;
3068                             p++;
3069                             break;
3070                         case 'g':
3071                         case 'L':
3072                             size = 8;
3073                             p++;
3074                             break;
3075                         default:
3076                             goto next;
3077                         }
3078                     }
3079                 next:
3080                     if (*p != '\0' && !qemu_isspace(*p)) {
3081                         monitor_printf(mon, "invalid char in format: '%c'\n",
3082                                        *p);
3083                         goto fail;
3084                     }
3085                     if (format < 0)
3086                         format = default_fmt_format;
3087                     if (format != 'i') {
3088                         /* for 'i', not specifying a size gives -1 as size */
3089                         if (size < 0)
3090                             size = default_fmt_size;
3091                         default_fmt_size = size;
3092                     }
3093                     default_fmt_format = format;
3094                 } else {
3095                     count = 1;
3096                     format = default_fmt_format;
3097                     if (format != 'i') {
3098                         size = default_fmt_size;
3099                     } else {
3100                         size = -1;
3101                     }
3102                 }
3103                 qdict_put_int(qdict, "count", count);
3104                 qdict_put_int(qdict, "format", format);
3105                 qdict_put_int(qdict, "size", size);
3106             }
3107             break;
3108         case 'i':
3109         case 'l':
3110         case 'M':
3111             {
3112                 int64_t val;
3113
3114                 while (qemu_isspace(*p))
3115                     p++;
3116                 if (*typestr == '?' || *typestr == '.') {
3117                     if (*typestr == '?') {
3118                         if (*p == '\0') {
3119                             typestr++;
3120                             break;
3121                         }
3122                     } else {
3123                         if (*p == '.') {
3124                             p++;
3125                             while (qemu_isspace(*p))
3126                                 p++;
3127                         } else {
3128                             typestr++;
3129                             break;
3130                         }
3131                     }
3132                     typestr++;
3133                 }
3134                 if (get_expr(mon, &val, &p))
3135                     goto fail;
3136                 /* Check if 'i' is greater than 32-bit */
3137                 if ((c == 'i') && ((val >> 32) & 0xffffffff)) {
3138                     monitor_printf(mon, "\'%s\' has failed: ", cmd->name);
3139                     monitor_printf(mon, "integer is for 32-bit values\n");
3140                     goto fail;
3141                 } else if (c == 'M') {
3142                     if (val < 0) {
3143                         monitor_printf(mon, "enter a positive value\n");
3144                         goto fail;
3145                     }
3146                     val <<= 20;
3147                 }
3148                 qdict_put_int(qdict, key, val);
3149             }
3150             break;
3151         case 'o':
3152             {
3153                 int ret;
3154                 uint64_t val;
3155                 char *end;
3156
3157                 while (qemu_isspace(*p)) {
3158                     p++;
3159                 }
3160                 if (*typestr == '?') {
3161                     typestr++;
3162                     if (*p == '\0') {
3163                         break;
3164                     }
3165                 }
3166                 ret = qemu_strtosz_MiB(p, &end, &val);
3167                 if (ret < 0 || val > INT64_MAX) {
3168                     monitor_printf(mon, "invalid size\n");
3169                     goto fail;
3170                 }
3171                 qdict_put_int(qdict, key, val);
3172                 p = end;
3173             }
3174             break;
3175         case 'T':
3176             {
3177                 double val;
3178
3179                 while (qemu_isspace(*p))
3180                     p++;
3181                 if (*typestr == '?') {
3182                     typestr++;
3183                     if (*p == '\0') {
3184                         break;
3185                     }
3186                 }
3187                 if (get_double(mon, &val, &p) < 0) {
3188                     goto fail;
3189                 }
3190                 if (p[0] && p[1] == 's') {
3191                     switch (*p) {
3192                     case 'm':
3193                         val /= 1e3; p += 2; break;
3194                     case 'u':
3195                         val /= 1e6; p += 2; break;
3196                     case 'n':
3197                         val /= 1e9; p += 2; break;
3198                     }
3199                 }
3200                 if (*p && !qemu_isspace(*p)) {
3201                     monitor_printf(mon, "Unknown unit suffix\n");
3202                     goto fail;
3203                 }
3204                 qdict_put(qdict, key, qnum_from_double(val));
3205             }
3206             break;
3207         case 'b':
3208             {
3209                 const char *beg;
3210                 bool val;
3211
3212                 while (qemu_isspace(*p)) {
3213                     p++;
3214                 }
3215                 beg = p;
3216                 while (qemu_isgraph(*p)) {
3217                     p++;
3218                 }
3219                 if (p - beg == 2 && !memcmp(beg, "on", p - beg)) {
3220                     val = true;
3221                 } else if (p - beg == 3 && !memcmp(beg, "off", p - beg)) {
3222                     val = false;
3223                 } else {
3224                     monitor_printf(mon, "Expected 'on' or 'off'\n");
3225                     goto fail;
3226                 }
3227                 qdict_put_bool(qdict, key, val);
3228             }
3229             break;
3230         case '-':
3231             {
3232                 const char *tmp = p;
3233                 int skip_key = 0;
3234                 /* option */
3235
3236                 c = *typestr++;
3237                 if (c == '\0')
3238                     goto bad_type;
3239                 while (qemu_isspace(*p))
3240                     p++;
3241                 if (*p == '-') {
3242                     p++;
3243                     if(c != *p) {
3244                         if(!is_valid_option(p, typestr)) {
3245                   
3246                             monitor_printf(mon, "%s: unsupported option -%c\n",
3247                                            cmd->name, *p);
3248                             goto fail;
3249                         } else {
3250                             skip_key = 1;
3251                         }
3252                     }
3253                     if(skip_key) {
3254                         p = tmp;
3255                     } else {
3256                         /* has option */
3257                         p++;
3258                         qdict_put_bool(qdict, key, true);
3259                     }
3260                 }
3261             }
3262             break;
3263         case 'S':
3264             {
3265                 /* package all remaining string */
3266                 int len;
3267
3268                 while (qemu_isspace(*p)) {
3269                     p++;
3270                 }
3271                 if (*typestr == '?') {
3272                     typestr++;
3273                     if (*p == '\0') {
3274                         /* no remaining string: NULL argument */
3275                         break;
3276                     }
3277                 }
3278                 len = strlen(p);
3279                 if (len <= 0) {
3280                     monitor_printf(mon, "%s: string expected\n",
3281                                    cmd->name);
3282                     goto fail;
3283                 }
3284                 qdict_put_str(qdict, key, p);
3285                 p += len;
3286             }
3287             break;
3288         default:
3289         bad_type:
3290             monitor_printf(mon, "%s: unknown type '%c'\n", cmd->name, c);
3291             goto fail;
3292         }
3293         g_free(key);
3294         key = NULL;
3295     }
3296     /* check that all arguments were parsed */
3297     while (qemu_isspace(*p))
3298         p++;
3299     if (*p != '\0') {
3300         monitor_printf(mon, "%s: extraneous characters at the end of line\n",
3301                        cmd->name);
3302         goto fail;
3303     }
3304
3305     return qdict;
3306
3307 fail:
3308     QDECREF(qdict);
3309     g_free(key);
3310     return NULL;
3311 }
3312
3313 static void handle_hmp_command(Monitor *mon, const char *cmdline)
3314 {
3315     QDict *qdict;
3316     const mon_cmd_t *cmd;
3317
3318     trace_handle_hmp_command(mon, cmdline);
3319
3320     cmd = monitor_parse_command(mon, cmdline, &cmdline, mon->cmd_table);
3321     if (!cmd) {
3322         return;
3323     }
3324
3325     qdict = monitor_parse_arguments(mon, &cmdline, cmd);
3326     if (!qdict) {
3327         monitor_printf(mon, "Try \"help %s\" for more information\n",
3328                        cmd->name);
3329         return;
3330     }
3331
3332     cmd->cmd(mon, qdict);
3333     QDECREF(qdict);
3334 }
3335
3336 static void cmd_completion(Monitor *mon, const char *name, const char *list)
3337 {
3338     const char *p, *pstart;
3339     char cmd[128];
3340     int len;
3341
3342     p = list;
3343     for(;;) {
3344         pstart = p;
3345         p = strchr(p, '|');
3346         if (!p)
3347             p = pstart + strlen(pstart);
3348         len = p - pstart;
3349         if (len > sizeof(cmd) - 2)
3350             len = sizeof(cmd) - 2;
3351         memcpy(cmd, pstart, len);
3352         cmd[len] = '\0';
3353         if (name[0] == '\0' || !strncmp(name, cmd, strlen(name))) {
3354             readline_add_completion(mon->rs, cmd);
3355         }
3356         if (*p == '\0')
3357             break;
3358         p++;
3359     }
3360 }
3361
3362 static void file_completion(Monitor *mon, const char *input)
3363 {
3364     DIR *ffs;
3365     struct dirent *d;
3366     char path[1024];
3367     char file[1024], file_prefix[1024];
3368     int input_path_len;
3369     const char *p;
3370
3371     p = strrchr(input, '/');
3372     if (!p) {
3373         input_path_len = 0;
3374         pstrcpy(file_prefix, sizeof(file_prefix), input);
3375         pstrcpy(path, sizeof(path), ".");
3376     } else {
3377         input_path_len = p - input + 1;
3378         memcpy(path, input, input_path_len);
3379         if (input_path_len > sizeof(path) - 1)
3380             input_path_len = sizeof(path) - 1;
3381         path[input_path_len] = '\0';
3382         pstrcpy(file_prefix, sizeof(file_prefix), p + 1);
3383     }
3384
3385     ffs = opendir(path);
3386     if (!ffs)
3387         return;
3388     for(;;) {
3389         struct stat sb;
3390         d = readdir(ffs);
3391         if (!d)
3392             break;
3393
3394         if (strcmp(d->d_name, ".") == 0 || strcmp(d->d_name, "..") == 0) {
3395             continue;
3396         }
3397
3398         if (strstart(d->d_name, file_prefix, NULL)) {
3399             memcpy(file, input, input_path_len);
3400             if (input_path_len < sizeof(file))
3401                 pstrcpy(file + input_path_len, sizeof(file) - input_path_len,
3402                         d->d_name);
3403             /* stat the file to find out if it's a directory.
3404              * In that case add a slash to speed up typing long paths
3405              */
3406             if (stat(file, &sb) == 0 && S_ISDIR(sb.st_mode)) {
3407                 pstrcat(file, sizeof(file), "/");
3408             }
3409             readline_add_completion(mon->rs, file);
3410         }
3411     }
3412     closedir(ffs);
3413 }
3414
3415 static const char *next_arg_type(const char *typestr)
3416 {
3417     const char *p = strchr(typestr, ':');
3418     return (p != NULL ? ++p : typestr);
3419 }
3420
3421 static void add_completion_option(ReadLineState *rs, const char *str,
3422                                   const char *option)
3423 {
3424     if (!str || !option) {
3425         return;
3426     }
3427     if (!strncmp(option, str, strlen(str))) {
3428         readline_add_completion(rs, option);
3429     }
3430 }
3431
3432 void chardev_add_completion(ReadLineState *rs, int nb_args, const char *str)
3433 {
3434     size_t len;
3435     ChardevBackendInfoList *list, *start;
3436
3437     if (nb_args != 2) {
3438         return;
3439     }
3440     len = strlen(str);
3441     readline_set_completion_index(rs, len);
3442
3443     start = list = qmp_query_chardev_backends(NULL);
3444     while (list) {
3445         const char *chr_name = list->value->name;
3446
3447         if (!strncmp(chr_name, str, len)) {
3448             readline_add_completion(rs, chr_name);
3449         }
3450         list = list->next;
3451     }
3452     qapi_free_ChardevBackendInfoList(start);
3453 }
3454
3455 void netdev_add_completion(ReadLineState *rs, int nb_args, const char *str)
3456 {
3457     size_t len;
3458     int i;
3459
3460     if (nb_args != 2) {
3461         return;
3462     }
3463     len = strlen(str);
3464     readline_set_completion_index(rs, len);
3465     for (i = 0; i < NET_CLIENT_DRIVER__MAX; i++) {
3466         add_completion_option(rs, str, NetClientDriver_str(i));
3467     }
3468 }
3469
3470 void device_add_completion(ReadLineState *rs, int nb_args, const char *str)
3471 {
3472     GSList *list, *elt;
3473     size_t len;
3474
3475     if (nb_args != 2) {
3476         return;
3477     }
3478
3479     len = strlen(str);
3480     readline_set_completion_index(rs, len);
3481     list = elt = object_class_get_list(TYPE_DEVICE, false);
3482     while (elt) {
3483         const char *name;
3484         DeviceClass *dc = OBJECT_CLASS_CHECK(DeviceClass, elt->data,
3485                                              TYPE_DEVICE);
3486         name = object_class_get_name(OBJECT_CLASS(dc));
3487
3488         if (dc->user_creatable
3489             && !strncmp(name, str, len)) {
3490             readline_add_completion(rs, name);
3491         }
3492         elt = elt->next;
3493     }
3494     g_slist_free(list);
3495 }
3496
3497 void object_add_completion(ReadLineState *rs, int nb_args, const char *str)
3498 {
3499     GSList *list, *elt;
3500     size_t len;
3501
3502     if (nb_args != 2) {
3503         return;
3504     }
3505
3506     len = strlen(str);
3507     readline_set_completion_index(rs, len);
3508     list = elt = object_class_get_list(TYPE_USER_CREATABLE, false);
3509     while (elt) {
3510         const char *name;
3511
3512         name = object_class_get_name(OBJECT_CLASS(elt->data));
3513         if (!strncmp(name, str, len) && strcmp(name, TYPE_USER_CREATABLE)) {
3514             readline_add_completion(rs, name);
3515         }
3516         elt = elt->next;
3517     }
3518     g_slist_free(list);
3519 }
3520
3521 static void peripheral_device_del_completion(ReadLineState *rs,
3522                                              const char *str, size_t len)
3523 {
3524     Object *peripheral = container_get(qdev_get_machine(), "/peripheral");
3525     GSList *list, *item;
3526
3527     list = qdev_build_hotpluggable_device_list(peripheral);
3528     if (!list) {
3529         return;
3530     }
3531
3532     for (item = list; item; item = g_slist_next(item)) {
3533         DeviceState *dev = item->data;
3534
3535         if (dev->id && !strncmp(str, dev->id, len)) {
3536             readline_add_completion(rs, dev->id);
3537         }
3538     }
3539
3540     g_slist_free(list);
3541 }
3542
3543 void chardev_remove_completion(ReadLineState *rs, int nb_args, const char *str)
3544 {
3545     size_t len;
3546     ChardevInfoList *list, *start;
3547
3548     if (nb_args != 2) {
3549         return;
3550     }
3551     len = strlen(str);
3552     readline_set_completion_index(rs, len);
3553
3554     start = list = qmp_query_chardev(NULL);
3555     while (list) {
3556         ChardevInfo *chr = list->value;
3557
3558         if (!strncmp(chr->label, str, len)) {
3559             readline_add_completion(rs, chr->label);
3560         }
3561         list = list->next;
3562     }
3563     qapi_free_ChardevInfoList(start);
3564 }
3565
3566 static void ringbuf_completion(ReadLineState *rs, const char *str)
3567 {
3568     size_t len;
3569     ChardevInfoList *list, *start;
3570
3571     len = strlen(str);
3572     readline_set_completion_index(rs, len);
3573
3574     start = list = qmp_query_chardev(NULL);
3575     while (list) {
3576         ChardevInfo *chr_info = list->value;
3577
3578         if (!strncmp(chr_info->label, str, len)) {
3579             Chardev *chr = qemu_chr_find(chr_info->label);
3580             if (chr && CHARDEV_IS_RINGBUF(chr)) {
3581                 readline_add_completion(rs, chr_info->label);
3582             }
3583         }
3584         list = list->next;
3585     }
3586     qapi_free_ChardevInfoList(start);
3587 }
3588
3589 void ringbuf_write_completion(ReadLineState *rs, int nb_args, const char *str)
3590 {
3591     if (nb_args != 2) {
3592         return;
3593     }
3594     ringbuf_completion(rs, str);
3595 }
3596
3597 void device_del_completion(ReadLineState *rs, int nb_args, const char *str)
3598 {
3599     size_t len;
3600
3601     if (nb_args != 2) {
3602         return;
3603     }
3604
3605     len = strlen(str);
3606     readline_set_completion_index(rs, len);
3607     peripheral_device_del_completion(rs, str, len);
3608 }
3609
3610 void object_del_completion(ReadLineState *rs, int nb_args, const char *str)
3611 {
3612     ObjectPropertyInfoList *list, *start;
3613     size_t len;
3614
3615     if (nb_args != 2) {
3616         return;
3617     }
3618     len = strlen(str);
3619     readline_set_completion_index(rs, len);
3620
3621     start = list = qmp_qom_list("/objects", NULL);
3622     while (list) {
3623         ObjectPropertyInfo *info = list->value;
3624
3625         if (!strncmp(info->type, "child<", 5)
3626             && !strncmp(info->name, str, len)) {
3627             readline_add_completion(rs, info->name);
3628         }
3629         list = list->next;
3630     }
3631     qapi_free_ObjectPropertyInfoList(start);
3632 }
3633
3634 void sendkey_completion(ReadLineState *rs, int nb_args, const char *str)
3635 {
3636     int i;
3637     char *sep;
3638     size_t len;
3639
3640     if (nb_args != 2) {
3641         return;
3642     }
3643     sep = strrchr(str, '-');
3644     if (sep) {
3645         str = sep + 1;
3646     }
3647     len = strlen(str);
3648     readline_set_completion_index(rs, len);
3649     for (i = 0; i < Q_KEY_CODE__MAX; i++) {
3650         if (!strncmp(str, QKeyCode_str(i), len)) {
3651             readline_add_completion(rs, QKeyCode_str(i));
3652         }
3653     }
3654 }
3655
3656 void set_link_completion(ReadLineState *rs, int nb_args, const char *str)
3657 {
3658     size_t len;
3659
3660     len = strlen(str);
3661     readline_set_completion_index(rs, len);
3662     if (nb_args == 2) {
3663         NetClientState *ncs[MAX_QUEUE_NUM];
3664         int count, i;
3665         count = qemu_find_net_clients_except(NULL, ncs,
3666                                              NET_CLIENT_DRIVER_NONE,
3667                                              MAX_QUEUE_NUM);
3668         for (i = 0; i < MIN(count, MAX_QUEUE_NUM); i++) {
3669             const char *name = ncs[i]->name;
3670             if (!strncmp(str, name, len)) {
3671                 readline_add_completion(rs, name);
3672             }
3673         }
3674     } else if (nb_args == 3) {
3675         add_completion_option(rs, str, "on");
3676         add_completion_option(rs, str, "off");
3677     }
3678 }
3679
3680 void netdev_del_completion(ReadLineState *rs, int nb_args, const char *str)
3681 {
3682     int len, count, i;
3683     NetClientState *ncs[MAX_QUEUE_NUM];
3684
3685     if (nb_args != 2) {
3686         return;
3687     }
3688
3689     len = strlen(str);
3690     readline_set_completion_index(rs, len);
3691     count = qemu_find_net_clients_except(NULL, ncs, NET_CLIENT_DRIVER_NIC,
3692                                          MAX_QUEUE_NUM);
3693     for (i = 0; i < MIN(count, MAX_QUEUE_NUM); i++) {
3694         QemuOpts *opts;
3695         const char *name = ncs[i]->name;
3696         if (strncmp(str, name, len)) {
3697             continue;
3698         }
3699         opts = qemu_opts_find(qemu_find_opts_err("netdev", NULL), name);
3700         if (opts) {
3701             readline_add_completion(rs, name);
3702         }
3703     }
3704 }
3705
3706 void info_trace_events_completion(ReadLineState *rs, int nb_args, const char *str)
3707 {
3708     size_t len;
3709
3710     len = strlen(str);
3711     readline_set_completion_index(rs, len);
3712     if (nb_args == 2) {
3713         TraceEventIter iter;
3714         TraceEvent *ev;
3715         char *pattern = g_strdup_printf("%s*", str);
3716         trace_event_iter_init(&iter, pattern);
3717         while ((ev = trace_event_iter_next(&iter)) != NULL) {
3718             readline_add_completion(rs, trace_event_get_name(ev));
3719         }
3720         g_free(pattern);
3721     }
3722 }
3723
3724 void trace_event_completion(ReadLineState *rs, int nb_args, const char *str)
3725 {
3726     size_t len;
3727
3728     len = strlen(str);
3729     readline_set_completion_index(rs, len);
3730     if (nb_args == 2) {
3731         TraceEventIter iter;
3732         TraceEvent *ev;
3733         char *pattern = g_strdup_printf("%s*", str);
3734         trace_event_iter_init(&iter, pattern);
3735         while ((ev = trace_event_iter_next(&iter)) != NULL) {
3736             readline_add_completion(rs, trace_event_get_name(ev));
3737         }
3738         g_free(pattern);
3739     } else if (nb_args == 3) {
3740         add_completion_option(rs, str, "on");
3741         add_completion_option(rs, str, "off");
3742     }
3743 }
3744
3745 void watchdog_action_completion(ReadLineState *rs, int nb_args, const char *str)
3746 {
3747     int i;
3748
3749     if (nb_args != 2) {
3750         return;
3751     }
3752     readline_set_completion_index(rs, strlen(str));
3753     for (i = 0; i < WATCHDOG_ACTION__MAX; i++) {
3754         add_completion_option(rs, str, WatchdogAction_str(i));
3755     }
3756 }
3757
3758 void migrate_set_capability_completion(ReadLineState *rs, int nb_args,
3759                                        const char *str)
3760 {
3761     size_t len;
3762
3763     len = strlen(str);
3764     readline_set_completion_index(rs, len);
3765     if (nb_args == 2) {
3766         int i;
3767         for (i = 0; i < MIGRATION_CAPABILITY__MAX; i++) {
3768             const char *name = MigrationCapability_str(i);
3769             if (!strncmp(str, name, len)) {
3770                 readline_add_completion(rs, name);
3771             }
3772         }
3773     } else if (nb_args == 3) {
3774         add_completion_option(rs, str, "on");
3775         add_completion_option(rs, str, "off");
3776     }
3777 }
3778
3779 void migrate_set_parameter_completion(ReadLineState *rs, int nb_args,
3780                                       const char *str)
3781 {
3782     size_t len;
3783
3784     len = strlen(str);
3785     readline_set_completion_index(rs, len);
3786     if (nb_args == 2) {
3787         int i;
3788         for (i = 0; i < MIGRATION_PARAMETER__MAX; i++) {
3789             const char *name = MigrationParameter_str(i);
3790             if (!strncmp(str, name, len)) {
3791                 readline_add_completion(rs, name);
3792             }
3793         }
3794     }
3795 }
3796
3797 static void vm_completion(ReadLineState *rs, const char *str)
3798 {
3799     size_t len;
3800     BlockDriverState *bs;
3801     BdrvNextIterator it;
3802
3803     len = strlen(str);
3804     readline_set_completion_index(rs, len);
3805
3806     for (bs = bdrv_first(&it); bs; bs = bdrv_next(&it)) {
3807         SnapshotInfoList *snapshots, *snapshot;
3808         AioContext *ctx = bdrv_get_aio_context(bs);
3809         bool ok = false;
3810
3811         aio_context_acquire(ctx);
3812         if (bdrv_can_snapshot(bs)) {
3813             ok = bdrv_query_snapshot_info_list(bs, &snapshots, NULL) == 0;
3814         }
3815         aio_context_release(ctx);
3816         if (!ok) {
3817             continue;
3818         }
3819
3820         snapshot = snapshots;
3821         while (snapshot) {
3822             char *completion = snapshot->value->name;
3823             if (!strncmp(str, completion, len)) {
3824                 readline_add_completion(rs, completion);
3825             }
3826             completion = snapshot->value->id;
3827             if (!strncmp(str, completion, len)) {
3828                 readline_add_completion(rs, completion);
3829             }
3830             snapshot = snapshot->next;
3831         }
3832         qapi_free_SnapshotInfoList(snapshots);
3833     }
3834
3835 }
3836
3837 void delvm_completion(ReadLineState *rs, int nb_args, const char *str)
3838 {
3839     if (nb_args == 2) {
3840         vm_completion(rs, str);
3841     }
3842 }
3843
3844 void loadvm_completion(ReadLineState *rs, int nb_args, const char *str)
3845 {
3846     if (nb_args == 2) {
3847         vm_completion(rs, str);
3848     }
3849 }
3850
3851 static void monitor_find_completion_by_table(Monitor *mon,
3852                                              const mon_cmd_t *cmd_table,
3853                                              char **args,
3854                                              int nb_args)
3855 {
3856     const char *cmdname;
3857     int i;
3858     const char *ptype, *old_ptype, *str, *name;
3859     const mon_cmd_t *cmd;
3860     BlockBackend *blk = NULL;
3861
3862     if (nb_args <= 1) {
3863         /* command completion */
3864         if (nb_args == 0)
3865             cmdname = "";
3866         else
3867             cmdname = args[0];
3868         readline_set_completion_index(mon->rs, strlen(cmdname));
3869         for (cmd = cmd_table; cmd->name != NULL; cmd++) {
3870             cmd_completion(mon, cmdname, cmd->name);
3871         }
3872     } else {
3873         /* find the command */
3874         for (cmd = cmd_table; cmd->name != NULL; cmd++) {
3875             if (compare_cmd(args[0], cmd->name)) {
3876                 break;
3877             }
3878         }
3879         if (!cmd->name) {
3880             return;
3881         }
3882
3883         if (cmd->sub_table) {
3884             /* do the job again */
3885             monitor_find_completion_by_table(mon, cmd->sub_table,
3886                                              &args[1], nb_args - 1);
3887             return;
3888         }
3889         if (cmd->command_completion) {
3890             cmd->command_completion(mon->rs, nb_args, args[nb_args - 1]);
3891             return;
3892         }
3893
3894         ptype = next_arg_type(cmd->args_type);
3895         for(i = 0; i < nb_args - 2; i++) {
3896             if (*ptype != '\0') {
3897                 ptype = next_arg_type(ptype);
3898                 while (*ptype == '?')
3899                     ptype = next_arg_type(ptype);
3900             }
3901         }
3902         str = args[nb_args - 1];
3903         old_ptype = NULL;
3904         while (*ptype == '-' && old_ptype != ptype) {
3905             old_ptype = ptype;
3906             ptype = next_arg_type(ptype);
3907         }
3908         switch(*ptype) {
3909         case 'F':
3910             /* file completion */
3911             readline_set_completion_index(mon->rs, strlen(str));
3912             file_completion(mon, str);
3913             break;
3914         case 'B':
3915             /* block device name completion */
3916             readline_set_completion_index(mon->rs, strlen(str));
3917             while ((blk = blk_next(blk)) != NULL) {
3918                 name = blk_name(blk);
3919                 if (str[0] == '\0' ||
3920                     !strncmp(name, str, strlen(str))) {
3921                     readline_add_completion(mon->rs, name);
3922                 }
3923             }
3924             break;
3925         case 's':
3926         case 'S':
3927             if (!strcmp(cmd->name, "help|?")) {
3928                 monitor_find_completion_by_table(mon, cmd_table,
3929                                                  &args[1], nb_args - 1);
3930             }
3931             break;
3932         default:
3933             break;
3934         }
3935     }
3936 }
3937
3938 static void monitor_find_completion(void *opaque,
3939                                     const char *cmdline)
3940 {
3941     Monitor *mon = opaque;
3942     char *args[MAX_ARGS];
3943     int nb_args, len;
3944
3945     /* 1. parse the cmdline */
3946     if (parse_cmdline(cmdline, &nb_args, args) < 0) {
3947         return;
3948     }
3949
3950     /* if the line ends with a space, it means we want to complete the
3951        next arg */
3952     len = strlen(cmdline);
3953     if (len > 0 && qemu_isspace(cmdline[len - 1])) {
3954         if (nb_args >= MAX_ARGS) {
3955             goto cleanup;
3956         }
3957         args[nb_args++] = g_strdup("");
3958     }
3959
3960     /* 2. auto complete according to args */
3961     monitor_find_completion_by_table(mon, mon->cmd_table, args, nb_args);
3962
3963 cleanup:
3964     free_cmdline_args(args, nb_args);
3965 }
3966
3967 static int monitor_can_read(void *opaque)
3968 {
3969     Monitor *mon = opaque;
3970
3971     return !atomic_mb_read(&mon->suspend_cnt);
3972 }
3973
3974 /*
3975  * 1. This function takes ownership of rsp, err, and id.
3976  * 2. rsp, err, and id may be NULL.
3977  * 3. If err != NULL then rsp must be NULL.
3978  */
3979 static void monitor_qmp_respond(Monitor *mon, QObject *rsp,
3980                                 Error *err, QObject *id)
3981 {
3982     QDict *qdict = NULL;
3983
3984     if (err) {
3985         assert(!rsp);
3986         qdict = qdict_new();
3987         qdict_put_obj(qdict, "error", qmp_build_error_object(err));
3988         error_free(err);
3989         rsp = QOBJECT(qdict);
3990     }
3991
3992     if (rsp) {
3993         if (id) {
3994             /* This is for the qdict below. */
3995             qobject_incref(id);
3996             qdict_put_obj(qobject_to(QDict, rsp), "id", id);
3997         }
3998
3999         monitor_json_emitter(mon, rsp);
4000     }
4001
4002     qobject_decref(id);
4003     qobject_decref(rsp);
4004 }
4005
4006 struct QMPRequest {
4007     /* Owner of the request */
4008     Monitor *mon;
4009     /* "id" field of the request */
4010     QObject *id;
4011     /* Request object to be handled */
4012     QObject *req;
4013     /*
4014      * Whether we need to resume the monitor afterward.  This flag is
4015      * used to emulate the old QMP server behavior that the current
4016      * command must be completed before execution of the next one.
4017      */
4018     bool need_resume;
4019 };
4020 typedef struct QMPRequest QMPRequest;
4021
4022 /*
4023  * Dispatch one single QMP request. The function will free the req_obj
4024  * and objects inside it before return.
4025  */
4026 static void monitor_qmp_dispatch_one(QMPRequest *req_obj)
4027 {
4028     Monitor *mon, *old_mon;
4029     QObject *req, *rsp = NULL, *id;
4030     QDict *qdict = NULL;
4031     bool need_resume;
4032
4033     req = req_obj->req;
4034     mon = req_obj->mon;
4035     id = req_obj->id;
4036     need_resume = req_obj->need_resume;
4037
4038     g_free(req_obj);
4039
4040     if (trace_event_get_state_backends(TRACE_HANDLE_QMP_COMMAND)) {
4041         QString *req_json = qobject_to_json(req);
4042         trace_handle_qmp_command(mon, qstring_get_str(req_json));
4043         QDECREF(req_json);
4044     }
4045
4046     old_mon = cur_mon;
4047     cur_mon = mon;
4048
4049     rsp = qmp_dispatch(mon->qmp.commands, req);
4050
4051     cur_mon = old_mon;
4052
4053     if (mon->qmp.commands == &qmp_cap_negotiation_commands) {
4054         qdict = qdict_get_qdict(qobject_to(QDict, rsp), "error");
4055         if (qdict
4056             && !g_strcmp0(qdict_get_try_str(qdict, "class"),
4057                     QapiErrorClass_str(ERROR_CLASS_COMMAND_NOT_FOUND))) {
4058             /* Provide a more useful error message */
4059             qdict_del(qdict, "desc");
4060             qdict_put_str(qdict, "desc", "Expecting capabilities negotiation"
4061                           " with 'qmp_capabilities'");
4062         }
4063     }
4064
4065     /* Respond if necessary */
4066     monitor_qmp_respond(mon, rsp, NULL, id);
4067
4068     /* This pairs with the monitor_suspend() in handle_qmp_command(). */
4069     if (need_resume) {
4070         monitor_resume(mon);
4071     }
4072
4073     qobject_decref(req);
4074 }
4075
4076 /*
4077  * Pop one QMP request from monitor queues, return NULL if not found.
4078  * We are using round-robin fashion to pop the request, to avoid
4079  * processing commands only on a very busy monitor.  To achieve that,
4080  * when we process one request on a specific monitor, we put that
4081  * monitor to the end of mon_list queue.
4082  */
4083 static QMPRequest *monitor_qmp_requests_pop_one(void)
4084 {
4085     QMPRequest *req_obj = NULL;
4086     Monitor *mon;
4087
4088     qemu_mutex_lock(&monitor_lock);
4089
4090     QTAILQ_FOREACH(mon, &mon_list, entry) {
4091         qemu_mutex_lock(&mon->qmp.qmp_queue_lock);
4092         req_obj = g_queue_pop_head(mon->qmp.qmp_requests);
4093         qemu_mutex_unlock(&mon->qmp.qmp_queue_lock);
4094         if (req_obj) {
4095             break;
4096         }
4097     }
4098
4099     if (req_obj) {
4100         /*
4101          * We found one request on the monitor. Degrade this monitor's
4102          * priority to lowest by re-inserting it to end of queue.
4103          */
4104         QTAILQ_REMOVE(&mon_list, mon, entry);
4105         QTAILQ_INSERT_TAIL(&mon_list, mon, entry);
4106     }
4107
4108     qemu_mutex_unlock(&monitor_lock);
4109
4110     return req_obj;
4111 }
4112
4113 static void monitor_qmp_bh_dispatcher(void *data)
4114 {
4115     QMPRequest *req_obj = monitor_qmp_requests_pop_one();
4116
4117     if (req_obj) {
4118         trace_monitor_qmp_cmd_in_band(qobject_get_try_str(req_obj->id) ?: "");
4119         monitor_qmp_dispatch_one(req_obj);
4120         /* Reschedule instead of looping so the main loop stays responsive */
4121         qemu_bh_schedule(mon_global.qmp_dispatcher_bh);
4122     }
4123 }
4124
4125 #define  QMP_REQ_QUEUE_LEN_MAX  (8)
4126
4127 static void handle_qmp_command(JSONMessageParser *parser, GQueue *tokens)
4128 {
4129     QObject *req, *id = NULL;
4130     QDict *qdict = NULL;
4131     MonitorQMP *mon_qmp = container_of(parser, MonitorQMP, parser);
4132     Monitor *mon = container_of(mon_qmp, Monitor, qmp);
4133     Error *err = NULL;
4134     QMPRequest *req_obj;
4135
4136     req = json_parser_parse_err(tokens, NULL, &err);
4137     if (!req && !err) {
4138         /* json_parser_parse_err() sucks: can fail without setting @err */
4139         error_setg(&err, QERR_JSON_PARSING);
4140     }
4141     if (err) {
4142         goto err;
4143     }
4144
4145     /* Check against the request in general layout */
4146     qdict = qmp_dispatch_check_obj(req, &err);
4147     if (!qdict) {
4148         goto err;
4149     }
4150
4151     /* Check against OOB specific */
4152     if (!qmp_cmd_oob_check(mon, qdict, &err)) {
4153         goto err;
4154     }
4155
4156     id = qdict_get(qdict, "id");
4157
4158     /* When OOB is enabled, the "id" field is mandatory. */
4159     if (qmp_oob_enabled(mon) && !id) {
4160         error_setg(&err, "Out-Of-Band capability requires that "
4161                    "every command contains an 'id' field");
4162         goto err;
4163     }
4164
4165     qobject_incref(id);
4166     qdict_del(qdict, "id");
4167
4168     req_obj = g_new0(QMPRequest, 1);
4169     req_obj->mon = mon;
4170     req_obj->id = id;
4171     req_obj->req = req;
4172     req_obj->need_resume = false;
4173
4174     if (qmp_is_oob(qdict)) {
4175         /* Out-Of-Band (OOB) requests are executed directly in parser. */
4176         trace_monitor_qmp_cmd_out_of_band(qobject_get_try_str(req_obj->id)
4177                                           ?: "");
4178         monitor_qmp_dispatch_one(req_obj);
4179         return;
4180     }
4181
4182     /* Protect qmp_requests and fetching its length. */
4183     qemu_mutex_lock(&mon->qmp.qmp_queue_lock);
4184
4185     /*
4186      * If OOB is not enabled on the current monitor, we'll emulate the
4187      * old behavior that we won't process the current monitor any more
4188      * until it has responded.  This helps make sure that as long as
4189      * OOB is not enabled, the server will never drop any command.
4190      */
4191     if (!qmp_oob_enabled(mon)) {
4192         monitor_suspend(mon);
4193         req_obj->need_resume = true;
4194     } else {
4195         /* Drop the request if queue is full. */
4196         if (mon->qmp.qmp_requests->length >= QMP_REQ_QUEUE_LEN_MAX) {
4197             qemu_mutex_unlock(&mon->qmp.qmp_queue_lock);
4198             qapi_event_send_command_dropped(id,
4199                                             COMMAND_DROP_REASON_QUEUE_FULL,
4200                                             &error_abort);
4201             qobject_decref(id);
4202             qobject_decref(req);
4203             g_free(req_obj);
4204             return;
4205         }
4206     }
4207
4208     /*
4209      * Put the request to the end of queue so that requests will be
4210      * handled in time order.  Ownership for req_obj, req, id,
4211      * etc. will be delivered to the handler side.
4212      */
4213     g_queue_push_tail(mon->qmp.qmp_requests, req_obj);
4214     qemu_mutex_unlock(&mon->qmp.qmp_queue_lock);
4215
4216     /* Kick the dispatcher routine */
4217     qemu_bh_schedule(mon_global.qmp_dispatcher_bh);
4218     return;
4219
4220 err:
4221     monitor_qmp_respond(mon, NULL, err, NULL);
4222     qobject_decref(req);
4223 }
4224
4225 static void monitor_qmp_read(void *opaque, const uint8_t *buf, int size)
4226 {
4227     Monitor *mon = opaque;
4228
4229     json_message_parser_feed(&mon->qmp.parser, (const char *) buf, size);
4230 }
4231
4232 static void monitor_read(void *opaque, const uint8_t *buf, int size)
4233 {
4234     Monitor *old_mon = cur_mon;
4235     int i;
4236
4237     cur_mon = opaque;
4238
4239     if (cur_mon->rs) {
4240         for (i = 0; i < size; i++)
4241             readline_handle_byte(cur_mon->rs, buf[i]);
4242     } else {
4243         if (size == 0 || buf[size - 1] != 0)
4244             monitor_printf(cur_mon, "corrupted command\n");
4245         else
4246             handle_hmp_command(cur_mon, (char *)buf);
4247     }
4248
4249     cur_mon = old_mon;
4250 }
4251
4252 static void monitor_command_cb(void *opaque, const char *cmdline,
4253                                void *readline_opaque)
4254 {
4255     Monitor *mon = opaque;
4256
4257     monitor_suspend(mon);
4258     handle_hmp_command(mon, cmdline);
4259     monitor_resume(mon);
4260 }
4261
4262 int monitor_suspend(Monitor *mon)
4263 {
4264     if (monitor_is_hmp_non_interactive(mon)) {
4265         return -ENOTTY;
4266     }
4267
4268     atomic_inc(&mon->suspend_cnt);
4269
4270     if (monitor_is_qmp(mon)) {
4271         /*
4272          * Kick iothread to make sure this takes effect.  It'll be
4273          * evaluated again in prepare() of the watch object.
4274          */
4275         aio_notify(iothread_get_aio_context(mon_global.mon_iothread));
4276     }
4277
4278     trace_monitor_suspend(mon, 1);
4279     return 0;
4280 }
4281
4282 void monitor_resume(Monitor *mon)
4283 {
4284     if (monitor_is_hmp_non_interactive(mon)) {
4285         return;
4286     }
4287
4288     if (atomic_dec_fetch(&mon->suspend_cnt) == 0) {
4289         if (monitor_is_qmp(mon)) {
4290             /*
4291              * For QMP monitors that are running in IOThread, let's
4292              * kick the thread in case it's sleeping.
4293              */
4294             if (mon->use_io_thr) {
4295                 aio_notify(iothread_get_aio_context(mon_global.mon_iothread));
4296             }
4297         } else {
4298             assert(mon->rs);
4299             readline_show_prompt(mon->rs);
4300         }
4301     }
4302     trace_monitor_suspend(mon, -1);
4303 }
4304
4305 static QObject *get_qmp_greeting(Monitor *mon)
4306 {
4307     QList *cap_list = qlist_new();
4308     QObject *ver = NULL;
4309     QMPCapability cap;
4310
4311     qmp_marshal_query_version(NULL, &ver, NULL);
4312
4313     for (cap = 0; cap < QMP_CAPABILITY__MAX; cap++) {
4314         if (!mon->use_io_thr && cap == QMP_CAPABILITY_OOB) {
4315             /* Monitors that are not using IOThread won't support OOB */
4316             continue;
4317         }
4318         qlist_append(cap_list, qstring_from_str(QMPCapability_str(cap)));
4319     }
4320
4321     return qobject_from_jsonf("{'QMP': {'version': %p, 'capabilities': %p}}",
4322                               ver, cap_list);
4323 }
4324
4325 static void monitor_qmp_caps_reset(Monitor *mon)
4326 {
4327     memset(mon->qmp.qmp_caps, 0, sizeof(mon->qmp.qmp_caps));
4328 }
4329
4330 static void monitor_qmp_event(void *opaque, int event)
4331 {
4332     QObject *data;
4333     Monitor *mon = opaque;
4334
4335     switch (event) {
4336     case CHR_EVENT_OPENED:
4337         mon->qmp.commands = &qmp_cap_negotiation_commands;
4338         monitor_qmp_caps_reset(mon);
4339         data = get_qmp_greeting(mon);
4340         monitor_json_emitter(mon, data);
4341         qobject_decref(data);
4342         mon_refcount++;
4343         break;
4344     case CHR_EVENT_CLOSED:
4345         json_message_parser_destroy(&mon->qmp.parser);
4346         json_message_parser_init(&mon->qmp.parser, handle_qmp_command);
4347         mon_refcount--;
4348         monitor_fdsets_cleanup();
4349         break;
4350     }
4351 }
4352
4353 static void monitor_event(void *opaque, int event)
4354 {
4355     Monitor *mon = opaque;
4356
4357     switch (event) {
4358     case CHR_EVENT_MUX_IN:
4359         qemu_mutex_lock(&mon->out_lock);
4360         mon->mux_out = 0;
4361         qemu_mutex_unlock(&mon->out_lock);
4362         if (mon->reset_seen) {
4363             readline_restart(mon->rs);
4364             monitor_resume(mon);
4365             monitor_flush(mon);
4366         } else {
4367             atomic_mb_set(&mon->suspend_cnt, 0);
4368         }
4369         break;
4370
4371     case CHR_EVENT_MUX_OUT:
4372         if (mon->reset_seen) {
4373             if (atomic_mb_read(&mon->suspend_cnt) == 0) {
4374                 monitor_printf(mon, "\n");
4375             }
4376             monitor_flush(mon);
4377             monitor_suspend(mon);
4378         } else {
4379             atomic_inc(&mon->suspend_cnt);
4380         }
4381         qemu_mutex_lock(&mon->out_lock);
4382         mon->mux_out = 1;
4383         qemu_mutex_unlock(&mon->out_lock);
4384         break;
4385
4386     case CHR_EVENT_OPENED:
4387         monitor_printf(mon, "QEMU %s monitor - type 'help' for more "
4388                        "information\n", QEMU_VERSION);
4389         if (!mon->mux_out) {
4390             readline_restart(mon->rs);
4391             readline_show_prompt(mon->rs);
4392         }
4393         mon->reset_seen = 1;
4394         mon_refcount++;
4395         break;
4396
4397     case CHR_EVENT_CLOSED:
4398         mon_refcount--;
4399         monitor_fdsets_cleanup();
4400         break;
4401     }
4402 }
4403
4404 static int
4405 compare_mon_cmd(const void *a, const void *b)
4406 {
4407     return strcmp(((const mon_cmd_t *)a)->name,
4408             ((const mon_cmd_t *)b)->name);
4409 }
4410
4411 static void sortcmdlist(void)
4412 {
4413     int array_num;
4414     int elem_size = sizeof(mon_cmd_t);
4415
4416     array_num = sizeof(mon_cmds)/elem_size-1;
4417     qsort((void *)mon_cmds, array_num, elem_size, compare_mon_cmd);
4418
4419     array_num = sizeof(info_cmds)/elem_size-1;
4420     qsort((void *)info_cmds, array_num, elem_size, compare_mon_cmd);
4421 }
4422
4423 static GMainContext *monitor_get_io_context(void)
4424 {
4425     return iothread_get_g_main_context(mon_global.mon_iothread);
4426 }
4427
4428 static AioContext *monitor_get_aio_context(void)
4429 {
4430     return iothread_get_aio_context(mon_global.mon_iothread);
4431 }
4432
4433 static void monitor_iothread_init(void)
4434 {
4435     mon_global.mon_iothread = iothread_create("mon_iothread",
4436                                               &error_abort);
4437
4438     /*
4439      * This MUST be on main loop thread since we have commands that
4440      * have assumption to be run on main loop thread.  It would be
4441      * nice that one day we can remove this assumption in the future.
4442      */
4443     mon_global.qmp_dispatcher_bh = aio_bh_new(qemu_get_aio_context(),
4444                                               monitor_qmp_bh_dispatcher,
4445                                               NULL);
4446
4447     /*
4448      * Unlike the dispatcher BH, this must be run on the monitor IO
4449      * thread, so that monitors that are using IO thread will make
4450      * sure read/write operations are all done on the IO thread.
4451      */
4452     mon_global.qmp_respond_bh = aio_bh_new(monitor_get_aio_context(),
4453                                            monitor_qmp_bh_responder,
4454                                            NULL);
4455 }
4456
4457 void monitor_init_globals(void)
4458 {
4459     monitor_init_qmp_commands();
4460     monitor_qapi_event_init();
4461     sortcmdlist();
4462     qemu_mutex_init(&monitor_lock);
4463     monitor_iothread_init();
4464 }
4465
4466 /* These functions just adapt the readline interface in a typesafe way.  We
4467  * could cast function pointers but that discards compiler checks.
4468  */
4469 static void GCC_FMT_ATTR(2, 3) monitor_readline_printf(void *opaque,
4470                                                        const char *fmt, ...)
4471 {
4472     va_list ap;
4473     va_start(ap, fmt);
4474     monitor_vprintf(opaque, fmt, ap);
4475     va_end(ap);
4476 }
4477
4478 static void monitor_readline_flush(void *opaque)
4479 {
4480     monitor_flush(opaque);
4481 }
4482
4483 /*
4484  * Print to current monitor if we have one, else to stderr.
4485  * TODO should return int, so callers can calculate width, but that
4486  * requires surgery to monitor_vprintf().  Left for another day.
4487  */
4488 void error_vprintf(const char *fmt, va_list ap)
4489 {
4490     if (cur_mon && !monitor_cur_is_qmp()) {
4491         monitor_vprintf(cur_mon, fmt, ap);
4492     } else {
4493         vfprintf(stderr, fmt, ap);
4494     }
4495 }
4496
4497 void error_vprintf_unless_qmp(const char *fmt, va_list ap)
4498 {
4499     if (cur_mon && !monitor_cur_is_qmp()) {
4500         monitor_vprintf(cur_mon, fmt, ap);
4501     } else if (!cur_mon) {
4502         vfprintf(stderr, fmt, ap);
4503     }
4504 }
4505
4506 static void monitor_list_append(Monitor *mon)
4507 {
4508     qemu_mutex_lock(&monitor_lock);
4509     QTAILQ_INSERT_HEAD(&mon_list, mon, entry);
4510     qemu_mutex_unlock(&monitor_lock);
4511 }
4512
4513 static void monitor_qmp_setup_handlers_bh(void *opaque)
4514 {
4515     Monitor *mon = opaque;
4516     GMainContext *context;
4517
4518     if (mon->use_io_thr) {
4519         /*
4520          * When use_io_thr is set, we use the global shared dedicated
4521          * IO thread for this monitor to handle input/output.
4522          */
4523         context = monitor_get_io_context();
4524         /* We should have inited globals before reaching here. */
4525         assert(context);
4526     } else {
4527         /* The default main loop, which is the main thread */
4528         context = NULL;
4529     }
4530
4531     qemu_chr_fe_set_handlers(&mon->chr, monitor_can_read, monitor_qmp_read,
4532                              monitor_qmp_event, NULL, mon, context, true);
4533     monitor_list_append(mon);
4534 }
4535
4536 void monitor_init(Chardev *chr, int flags)
4537 {
4538     Monitor *mon = g_malloc(sizeof(*mon));
4539
4540     monitor_data_init(mon, false, false);
4541
4542     qemu_chr_fe_init(&mon->chr, chr, &error_abort);
4543     mon->flags = flags;
4544     if (flags & MONITOR_USE_READLINE) {
4545         mon->rs = readline_init(monitor_readline_printf,
4546                                 monitor_readline_flush,
4547                                 mon,
4548                                 monitor_find_completion);
4549         monitor_read_command(mon, 0);
4550     }
4551
4552     if (monitor_is_qmp(mon)) {
4553         qemu_chr_fe_set_echo(&mon->chr, true);
4554         json_message_parser_init(&mon->qmp.parser, handle_qmp_command);
4555         if (mon->use_io_thr) {
4556             /*
4557              * Make sure the old iowatch is gone.  It's possible when
4558              * e.g. the chardev is in client mode, with wait=on.
4559              */
4560             remove_fd_in_watch(chr);
4561             /*
4562              * We can't call qemu_chr_fe_set_handlers() directly here
4563              * since during the procedure the chardev will be active
4564              * and running in monitor iothread, while we'll still do
4565              * something before returning from it, which is a possible
4566              * race too.  To avoid that, we just create a BH to setup
4567              * the handlers.
4568              */
4569             aio_bh_schedule_oneshot(monitor_get_aio_context(),
4570                                     monitor_qmp_setup_handlers_bh, mon);
4571             /* We'll add this to mon_list in the BH when setup done */
4572             return;
4573         } else {
4574             qemu_chr_fe_set_handlers(&mon->chr, monitor_can_read,
4575                                      monitor_qmp_read, monitor_qmp_event,
4576                                      NULL, mon, NULL, true);
4577         }
4578     } else {
4579         qemu_chr_fe_set_handlers(&mon->chr, monitor_can_read, monitor_read,
4580                                  monitor_event, NULL, mon, NULL, true);
4581     }
4582
4583     monitor_list_append(mon);
4584 }
4585
4586 void monitor_cleanup(void)
4587 {
4588     Monitor *mon, *next;
4589
4590     /*
4591      * We need to explicitly stop the iothread (but not destroy it),
4592      * cleanup the monitor resources, then destroy the iothread since
4593      * we need to unregister from chardev below in
4594      * monitor_data_destroy(), and chardev is not thread-safe yet
4595      */
4596     iothread_stop(mon_global.mon_iothread);
4597
4598     /*
4599      * After we have IOThread to send responses, it's possible that
4600      * when we stop the IOThread there are still replies queued in the
4601      * responder queue.  Flush all of them.  Note that even after this
4602      * flush it's still possible that out buffer is not flushed.
4603      * It'll be done in below monitor_flush() as the last resort.
4604      */
4605     monitor_qmp_bh_responder(NULL);
4606
4607     qemu_mutex_lock(&monitor_lock);
4608     QTAILQ_FOREACH_SAFE(mon, &mon_list, entry, next) {
4609         QTAILQ_REMOVE(&mon_list, mon, entry);
4610         monitor_flush(mon);
4611         monitor_data_destroy(mon);
4612         g_free(mon);
4613     }
4614     qemu_mutex_unlock(&monitor_lock);
4615
4616     /* QEMUBHs needs to be deleted before destroying the IOThread. */
4617     qemu_bh_delete(mon_global.qmp_dispatcher_bh);
4618     mon_global.qmp_dispatcher_bh = NULL;
4619     qemu_bh_delete(mon_global.qmp_respond_bh);
4620     mon_global.qmp_respond_bh = NULL;
4621
4622     iothread_destroy(mon_global.mon_iothread);
4623     mon_global.mon_iothread = NULL;
4624 }
4625
4626 QemuOptsList qemu_mon_opts = {
4627     .name = "mon",
4628     .implied_opt_name = "chardev",
4629     .head = QTAILQ_HEAD_INITIALIZER(qemu_mon_opts.head),
4630     .desc = {
4631         {
4632             .name = "mode",
4633             .type = QEMU_OPT_STRING,
4634         },{
4635             .name = "chardev",
4636             .type = QEMU_OPT_STRING,
4637         },{
4638             .name = "pretty",
4639             .type = QEMU_OPT_BOOL,
4640         },
4641         { /* end of list */ }
4642     },
4643 };
4644
4645 #ifndef TARGET_I386
4646 void qmp_rtc_reset_reinjection(Error **errp)
4647 {
4648     error_setg(errp, QERR_FEATURE_DISABLED, "rtc-reset-reinjection");
4649 }
4650
4651 SevInfo *qmp_query_sev(Error **errp)
4652 {
4653     error_setg(errp, QERR_FEATURE_DISABLED, "query-sev");
4654     return NULL;
4655 }
4656
4657 SevLaunchMeasureInfo *qmp_query_sev_launch_measure(Error **errp)
4658 {
4659     error_setg(errp, QERR_FEATURE_DISABLED, "query-sev-launch-measure");
4660     return NULL;
4661 }
4662
4663 SevCapability *qmp_query_sev_capabilities(Error **errp)
4664 {
4665     error_setg(errp, QERR_FEATURE_DISABLED, "query-sev-capabilities");
4666     return NULL;
4667 }
4668 #endif
4669
4670 #ifndef TARGET_S390X
4671 void qmp_dump_skeys(const char *filename, Error **errp)
4672 {
4673     error_setg(errp, QERR_FEATURE_DISABLED, "dump-skeys");
4674 }
4675 #endif
4676
4677 #ifndef TARGET_ARM
4678 GICCapabilityList *qmp_query_gic_capabilities(Error **errp)
4679 {
4680     error_setg(errp, QERR_FEATURE_DISABLED, "query-gic-capabilities");
4681     return NULL;
4682 }
4683 #endif
4684
4685 HotpluggableCPUList *qmp_query_hotpluggable_cpus(Error **errp)
4686 {
4687     MachineState *ms = MACHINE(qdev_get_machine());
4688     MachineClass *mc = MACHINE_GET_CLASS(ms);
4689
4690     if (!mc->has_hotpluggable_cpus) {
4691         error_setg(errp, QERR_FEATURE_DISABLED, "query-hotpluggable-cpus");
4692         return NULL;
4693     }
4694
4695     return machine_query_hotpluggable_cpus(ms);
4696 }