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