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