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