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