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