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