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