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