]> Git Repo - qemu.git/blob - monitor.c
nbd: Fully initialize client in case of failed negotiation
[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     uint64_t *node_mem;
1700     CpuInfoList *cpu_list, *cpu;
1701
1702     cpu_list = qmp_query_cpus(&error_abort);
1703     node_mem = g_new0(uint64_t, nb_numa_nodes);
1704     query_numa_node_mem(node_mem);
1705     monitor_printf(mon, "%d nodes\n", nb_numa_nodes);
1706     for (i = 0; i < nb_numa_nodes; i++) {
1707         monitor_printf(mon, "node %d cpus:", i);
1708         for (cpu = cpu_list; cpu; cpu = cpu->next) {
1709             if (cpu->value->has_props && cpu->value->props->has_node_id &&
1710                 cpu->value->props->node_id == i) {
1711                 monitor_printf(mon, " %" PRIi64, cpu->value->CPU);
1712             }
1713         }
1714         monitor_printf(mon, "\n");
1715         monitor_printf(mon, "node %d size: %" PRId64 " MB\n", i,
1716                        node_mem[i] >> 20);
1717     }
1718     qapi_free_CpuInfoList(cpu_list);
1719     g_free(node_mem);
1720 }
1721
1722 #ifdef CONFIG_PROFILER
1723
1724 int64_t tcg_time;
1725 int64_t dev_time;
1726
1727 static void hmp_info_profile(Monitor *mon, const QDict *qdict)
1728 {
1729     monitor_printf(mon, "async time  %" PRId64 " (%0.3f)\n",
1730                    dev_time, dev_time / (double)NANOSECONDS_PER_SECOND);
1731     monitor_printf(mon, "qemu time   %" PRId64 " (%0.3f)\n",
1732                    tcg_time, tcg_time / (double)NANOSECONDS_PER_SECOND);
1733     tcg_time = 0;
1734     dev_time = 0;
1735 }
1736 #else
1737 static void hmp_info_profile(Monitor *mon, const QDict *qdict)
1738 {
1739     monitor_printf(mon, "Internal profiler not compiled\n");
1740 }
1741 #endif
1742
1743 /* Capture support */
1744 static QLIST_HEAD (capture_list_head, CaptureState) capture_head;
1745
1746 static void hmp_info_capture(Monitor *mon, const QDict *qdict)
1747 {
1748     int i;
1749     CaptureState *s;
1750
1751     for (s = capture_head.lh_first, i = 0; s; s = s->entries.le_next, ++i) {
1752         monitor_printf(mon, "[%d]: ", i);
1753         s->ops.info (s->opaque);
1754     }
1755 }
1756
1757 static void hmp_stopcapture(Monitor *mon, const QDict *qdict)
1758 {
1759     int i;
1760     int n = qdict_get_int(qdict, "n");
1761     CaptureState *s;
1762
1763     for (s = capture_head.lh_first, i = 0; s; s = s->entries.le_next, ++i) {
1764         if (i == n) {
1765             s->ops.destroy (s->opaque);
1766             QLIST_REMOVE (s, entries);
1767             g_free (s);
1768             return;
1769         }
1770     }
1771 }
1772
1773 static void hmp_wavcapture(Monitor *mon, const QDict *qdict)
1774 {
1775     const char *path = qdict_get_str(qdict, "path");
1776     int has_freq = qdict_haskey(qdict, "freq");
1777     int freq = qdict_get_try_int(qdict, "freq", -1);
1778     int has_bits = qdict_haskey(qdict, "bits");
1779     int bits = qdict_get_try_int(qdict, "bits", -1);
1780     int has_channels = qdict_haskey(qdict, "nchannels");
1781     int nchannels = qdict_get_try_int(qdict, "nchannels", -1);
1782     CaptureState *s;
1783
1784     s = g_malloc0 (sizeof (*s));
1785
1786     freq = has_freq ? freq : 44100;
1787     bits = has_bits ? bits : 16;
1788     nchannels = has_channels ? nchannels : 2;
1789
1790     if (wav_start_capture (s, path, freq, bits, nchannels)) {
1791         monitor_printf(mon, "Failed to add wave capture\n");
1792         g_free (s);
1793         return;
1794     }
1795     QLIST_INSERT_HEAD (&capture_head, s, entries);
1796 }
1797
1798 static qemu_acl *find_acl(Monitor *mon, const char *name)
1799 {
1800     qemu_acl *acl = qemu_acl_find(name);
1801
1802     if (!acl) {
1803         monitor_printf(mon, "acl: unknown list '%s'\n", name);
1804     }
1805     return acl;
1806 }
1807
1808 static void hmp_acl_show(Monitor *mon, const QDict *qdict)
1809 {
1810     const char *aclname = qdict_get_str(qdict, "aclname");
1811     qemu_acl *acl = find_acl(mon, aclname);
1812     qemu_acl_entry *entry;
1813     int i = 0;
1814
1815     if (acl) {
1816         monitor_printf(mon, "policy: %s\n",
1817                        acl->defaultDeny ? "deny" : "allow");
1818         QTAILQ_FOREACH(entry, &acl->entries, next) {
1819             i++;
1820             monitor_printf(mon, "%d: %s %s\n", i,
1821                            entry->deny ? "deny" : "allow", entry->match);
1822         }
1823     }
1824 }
1825
1826 static void hmp_acl_reset(Monitor *mon, const QDict *qdict)
1827 {
1828     const char *aclname = qdict_get_str(qdict, "aclname");
1829     qemu_acl *acl = find_acl(mon, aclname);
1830
1831     if (acl) {
1832         qemu_acl_reset(acl);
1833         monitor_printf(mon, "acl: removed all rules\n");
1834     }
1835 }
1836
1837 static void hmp_acl_policy(Monitor *mon, const QDict *qdict)
1838 {
1839     const char *aclname = qdict_get_str(qdict, "aclname");
1840     const char *policy = qdict_get_str(qdict, "policy");
1841     qemu_acl *acl = find_acl(mon, aclname);
1842
1843     if (acl) {
1844         if (strcmp(policy, "allow") == 0) {
1845             acl->defaultDeny = 0;
1846             monitor_printf(mon, "acl: policy set to 'allow'\n");
1847         } else if (strcmp(policy, "deny") == 0) {
1848             acl->defaultDeny = 1;
1849             monitor_printf(mon, "acl: policy set to 'deny'\n");
1850         } else {
1851             monitor_printf(mon, "acl: unknown policy '%s', "
1852                            "expected 'deny' or 'allow'\n", policy);
1853         }
1854     }
1855 }
1856
1857 static void hmp_acl_add(Monitor *mon, const QDict *qdict)
1858 {
1859     const char *aclname = qdict_get_str(qdict, "aclname");
1860     const char *match = qdict_get_str(qdict, "match");
1861     const char *policy = qdict_get_str(qdict, "policy");
1862     int has_index = qdict_haskey(qdict, "index");
1863     int index = qdict_get_try_int(qdict, "index", -1);
1864     qemu_acl *acl = find_acl(mon, aclname);
1865     int deny, ret;
1866
1867     if (acl) {
1868         if (strcmp(policy, "allow") == 0) {
1869             deny = 0;
1870         } else if (strcmp(policy, "deny") == 0) {
1871             deny = 1;
1872         } else {
1873             monitor_printf(mon, "acl: unknown policy '%s', "
1874                            "expected 'deny' or 'allow'\n", policy);
1875             return;
1876         }
1877         if (has_index)
1878             ret = qemu_acl_insert(acl, deny, match, index);
1879         else
1880             ret = qemu_acl_append(acl, deny, match);
1881         if (ret < 0)
1882             monitor_printf(mon, "acl: unable to add acl entry\n");
1883         else
1884             monitor_printf(mon, "acl: added rule at position %d\n", ret);
1885     }
1886 }
1887
1888 static void hmp_acl_remove(Monitor *mon, const QDict *qdict)
1889 {
1890     const char *aclname = qdict_get_str(qdict, "aclname");
1891     const char *match = qdict_get_str(qdict, "match");
1892     qemu_acl *acl = find_acl(mon, aclname);
1893     int ret;
1894
1895     if (acl) {
1896         ret = qemu_acl_remove(acl, match);
1897         if (ret < 0)
1898             monitor_printf(mon, "acl: no matching acl entry\n");
1899         else
1900             monitor_printf(mon, "acl: removed rule at position %d\n", ret);
1901     }
1902 }
1903
1904 void qmp_getfd(const char *fdname, Error **errp)
1905 {
1906     mon_fd_t *monfd;
1907     int fd;
1908
1909     fd = qemu_chr_fe_get_msgfd(&cur_mon->chr);
1910     if (fd == -1) {
1911         error_setg(errp, QERR_FD_NOT_SUPPLIED);
1912         return;
1913     }
1914
1915     if (qemu_isdigit(fdname[0])) {
1916         close(fd);
1917         error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "fdname",
1918                    "a name not starting with a digit");
1919         return;
1920     }
1921
1922     QLIST_FOREACH(monfd, &cur_mon->fds, next) {
1923         if (strcmp(monfd->name, fdname) != 0) {
1924             continue;
1925         }
1926
1927         close(monfd->fd);
1928         monfd->fd = fd;
1929         return;
1930     }
1931
1932     monfd = g_malloc0(sizeof(mon_fd_t));
1933     monfd->name = g_strdup(fdname);
1934     monfd->fd = fd;
1935
1936     QLIST_INSERT_HEAD(&cur_mon->fds, monfd, next);
1937 }
1938
1939 void qmp_closefd(const char *fdname, Error **errp)
1940 {
1941     mon_fd_t *monfd;
1942
1943     QLIST_FOREACH(monfd, &cur_mon->fds, next) {
1944         if (strcmp(monfd->name, fdname) != 0) {
1945             continue;
1946         }
1947
1948         QLIST_REMOVE(monfd, next);
1949         close(monfd->fd);
1950         g_free(monfd->name);
1951         g_free(monfd);
1952         return;
1953     }
1954
1955     error_setg(errp, QERR_FD_NOT_FOUND, fdname);
1956 }
1957
1958 int monitor_get_fd(Monitor *mon, const char *fdname, Error **errp)
1959 {
1960     mon_fd_t *monfd;
1961
1962     QLIST_FOREACH(monfd, &mon->fds, next) {
1963         int fd;
1964
1965         if (strcmp(monfd->name, fdname) != 0) {
1966             continue;
1967         }
1968
1969         fd = monfd->fd;
1970
1971         /* caller takes ownership of fd */
1972         QLIST_REMOVE(monfd, next);
1973         g_free(monfd->name);
1974         g_free(monfd);
1975
1976         return fd;
1977     }
1978
1979     error_setg(errp, "File descriptor named '%s' has not been found", fdname);
1980     return -1;
1981 }
1982
1983 static void monitor_fdset_cleanup(MonFdset *mon_fdset)
1984 {
1985     MonFdsetFd *mon_fdset_fd;
1986     MonFdsetFd *mon_fdset_fd_next;
1987
1988     QLIST_FOREACH_SAFE(mon_fdset_fd, &mon_fdset->fds, next, mon_fdset_fd_next) {
1989         if ((mon_fdset_fd->removed ||
1990                 (QLIST_EMPTY(&mon_fdset->dup_fds) && mon_refcount == 0)) &&
1991                 runstate_is_running()) {
1992             close(mon_fdset_fd->fd);
1993             g_free(mon_fdset_fd->opaque);
1994             QLIST_REMOVE(mon_fdset_fd, next);
1995             g_free(mon_fdset_fd);
1996         }
1997     }
1998
1999     if (QLIST_EMPTY(&mon_fdset->fds) && QLIST_EMPTY(&mon_fdset->dup_fds)) {
2000         QLIST_REMOVE(mon_fdset, next);
2001         g_free(mon_fdset);
2002     }
2003 }
2004
2005 static void monitor_fdsets_cleanup(void)
2006 {
2007     MonFdset *mon_fdset;
2008     MonFdset *mon_fdset_next;
2009
2010     QLIST_FOREACH_SAFE(mon_fdset, &mon_fdsets, next, mon_fdset_next) {
2011         monitor_fdset_cleanup(mon_fdset);
2012     }
2013 }
2014
2015 AddfdInfo *qmp_add_fd(bool has_fdset_id, int64_t fdset_id, bool has_opaque,
2016                       const char *opaque, Error **errp)
2017 {
2018     int fd;
2019     Monitor *mon = cur_mon;
2020     AddfdInfo *fdinfo;
2021
2022     fd = qemu_chr_fe_get_msgfd(&mon->chr);
2023     if (fd == -1) {
2024         error_setg(errp, QERR_FD_NOT_SUPPLIED);
2025         goto error;
2026     }
2027
2028     fdinfo = monitor_fdset_add_fd(fd, has_fdset_id, fdset_id,
2029                                   has_opaque, opaque, errp);
2030     if (fdinfo) {
2031         return fdinfo;
2032     }
2033
2034 error:
2035     if (fd != -1) {
2036         close(fd);
2037     }
2038     return NULL;
2039 }
2040
2041 void qmp_remove_fd(int64_t fdset_id, bool has_fd, int64_t fd, Error **errp)
2042 {
2043     MonFdset *mon_fdset;
2044     MonFdsetFd *mon_fdset_fd;
2045     char fd_str[60];
2046
2047     QLIST_FOREACH(mon_fdset, &mon_fdsets, next) {
2048         if (mon_fdset->id != fdset_id) {
2049             continue;
2050         }
2051         QLIST_FOREACH(mon_fdset_fd, &mon_fdset->fds, next) {
2052             if (has_fd) {
2053                 if (mon_fdset_fd->fd != fd) {
2054                     continue;
2055                 }
2056                 mon_fdset_fd->removed = true;
2057                 break;
2058             } else {
2059                 mon_fdset_fd->removed = true;
2060             }
2061         }
2062         if (has_fd && !mon_fdset_fd) {
2063             goto error;
2064         }
2065         monitor_fdset_cleanup(mon_fdset);
2066         return;
2067     }
2068
2069 error:
2070     if (has_fd) {
2071         snprintf(fd_str, sizeof(fd_str), "fdset-id:%" PRId64 ", fd:%" PRId64,
2072                  fdset_id, fd);
2073     } else {
2074         snprintf(fd_str, sizeof(fd_str), "fdset-id:%" PRId64, fdset_id);
2075     }
2076     error_setg(errp, QERR_FD_NOT_FOUND, fd_str);
2077 }
2078
2079 FdsetInfoList *qmp_query_fdsets(Error **errp)
2080 {
2081     MonFdset *mon_fdset;
2082     MonFdsetFd *mon_fdset_fd;
2083     FdsetInfoList *fdset_list = NULL;
2084
2085     QLIST_FOREACH(mon_fdset, &mon_fdsets, next) {
2086         FdsetInfoList *fdset_info = g_malloc0(sizeof(*fdset_info));
2087         FdsetFdInfoList *fdsetfd_list = NULL;
2088
2089         fdset_info->value = g_malloc0(sizeof(*fdset_info->value));
2090         fdset_info->value->fdset_id = mon_fdset->id;
2091
2092         QLIST_FOREACH(mon_fdset_fd, &mon_fdset->fds, next) {
2093             FdsetFdInfoList *fdsetfd_info;
2094
2095             fdsetfd_info = g_malloc0(sizeof(*fdsetfd_info));
2096             fdsetfd_info->value = g_malloc0(sizeof(*fdsetfd_info->value));
2097             fdsetfd_info->value->fd = mon_fdset_fd->fd;
2098             if (mon_fdset_fd->opaque) {
2099                 fdsetfd_info->value->has_opaque = true;
2100                 fdsetfd_info->value->opaque = g_strdup(mon_fdset_fd->opaque);
2101             } else {
2102                 fdsetfd_info->value->has_opaque = false;
2103             }
2104
2105             fdsetfd_info->next = fdsetfd_list;
2106             fdsetfd_list = fdsetfd_info;
2107         }
2108
2109         fdset_info->value->fds = fdsetfd_list;
2110
2111         fdset_info->next = fdset_list;
2112         fdset_list = fdset_info;
2113     }
2114
2115     return fdset_list;
2116 }
2117
2118 AddfdInfo *monitor_fdset_add_fd(int fd, bool has_fdset_id, int64_t fdset_id,
2119                                 bool has_opaque, const char *opaque,
2120                                 Error **errp)
2121 {
2122     MonFdset *mon_fdset = NULL;
2123     MonFdsetFd *mon_fdset_fd;
2124     AddfdInfo *fdinfo;
2125
2126     if (has_fdset_id) {
2127         QLIST_FOREACH(mon_fdset, &mon_fdsets, next) {
2128             /* Break if match found or match impossible due to ordering by ID */
2129             if (fdset_id <= mon_fdset->id) {
2130                 if (fdset_id < mon_fdset->id) {
2131                     mon_fdset = NULL;
2132                 }
2133                 break;
2134             }
2135         }
2136     }
2137
2138     if (mon_fdset == NULL) {
2139         int64_t fdset_id_prev = -1;
2140         MonFdset *mon_fdset_cur = QLIST_FIRST(&mon_fdsets);
2141
2142         if (has_fdset_id) {
2143             if (fdset_id < 0) {
2144                 error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "fdset-id",
2145                            "a non-negative value");
2146                 return NULL;
2147             }
2148             /* Use specified fdset ID */
2149             QLIST_FOREACH(mon_fdset, &mon_fdsets, next) {
2150                 mon_fdset_cur = mon_fdset;
2151                 if (fdset_id < mon_fdset_cur->id) {
2152                     break;
2153                 }
2154             }
2155         } else {
2156             /* Use first available fdset ID */
2157             QLIST_FOREACH(mon_fdset, &mon_fdsets, next) {
2158                 mon_fdset_cur = mon_fdset;
2159                 if (fdset_id_prev == mon_fdset_cur->id - 1) {
2160                     fdset_id_prev = mon_fdset_cur->id;
2161                     continue;
2162                 }
2163                 break;
2164             }
2165         }
2166
2167         mon_fdset = g_malloc0(sizeof(*mon_fdset));
2168         if (has_fdset_id) {
2169             mon_fdset->id = fdset_id;
2170         } else {
2171             mon_fdset->id = fdset_id_prev + 1;
2172         }
2173
2174         /* The fdset list is ordered by fdset ID */
2175         if (!mon_fdset_cur) {
2176             QLIST_INSERT_HEAD(&mon_fdsets, mon_fdset, next);
2177         } else if (mon_fdset->id < mon_fdset_cur->id) {
2178             QLIST_INSERT_BEFORE(mon_fdset_cur, mon_fdset, next);
2179         } else {
2180             QLIST_INSERT_AFTER(mon_fdset_cur, mon_fdset, next);
2181         }
2182     }
2183
2184     mon_fdset_fd = g_malloc0(sizeof(*mon_fdset_fd));
2185     mon_fdset_fd->fd = fd;
2186     mon_fdset_fd->removed = false;
2187     if (has_opaque) {
2188         mon_fdset_fd->opaque = g_strdup(opaque);
2189     }
2190     QLIST_INSERT_HEAD(&mon_fdset->fds, mon_fdset_fd, next);
2191
2192     fdinfo = g_malloc0(sizeof(*fdinfo));
2193     fdinfo->fdset_id = mon_fdset->id;
2194     fdinfo->fd = mon_fdset_fd->fd;
2195
2196     return fdinfo;
2197 }
2198
2199 int monitor_fdset_get_fd(int64_t fdset_id, int flags)
2200 {
2201 #ifndef _WIN32
2202     MonFdset *mon_fdset;
2203     MonFdsetFd *mon_fdset_fd;
2204     int mon_fd_flags;
2205
2206     QLIST_FOREACH(mon_fdset, &mon_fdsets, next) {
2207         if (mon_fdset->id != fdset_id) {
2208             continue;
2209         }
2210         QLIST_FOREACH(mon_fdset_fd, &mon_fdset->fds, next) {
2211             mon_fd_flags = fcntl(mon_fdset_fd->fd, F_GETFL);
2212             if (mon_fd_flags == -1) {
2213                 return -1;
2214             }
2215
2216             if ((flags & O_ACCMODE) == (mon_fd_flags & O_ACCMODE)) {
2217                 return mon_fdset_fd->fd;
2218             }
2219         }
2220         errno = EACCES;
2221         return -1;
2222     }
2223 #endif
2224
2225     errno = ENOENT;
2226     return -1;
2227 }
2228
2229 int monitor_fdset_dup_fd_add(int64_t fdset_id, int dup_fd)
2230 {
2231     MonFdset *mon_fdset;
2232     MonFdsetFd *mon_fdset_fd_dup;
2233
2234     QLIST_FOREACH(mon_fdset, &mon_fdsets, next) {
2235         if (mon_fdset->id != fdset_id) {
2236             continue;
2237         }
2238         QLIST_FOREACH(mon_fdset_fd_dup, &mon_fdset->dup_fds, next) {
2239             if (mon_fdset_fd_dup->fd == dup_fd) {
2240                 return -1;
2241             }
2242         }
2243         mon_fdset_fd_dup = g_malloc0(sizeof(*mon_fdset_fd_dup));
2244         mon_fdset_fd_dup->fd = dup_fd;
2245         QLIST_INSERT_HEAD(&mon_fdset->dup_fds, mon_fdset_fd_dup, next);
2246         return 0;
2247     }
2248     return -1;
2249 }
2250
2251 static int monitor_fdset_dup_fd_find_remove(int dup_fd, bool remove)
2252 {
2253     MonFdset *mon_fdset;
2254     MonFdsetFd *mon_fdset_fd_dup;
2255
2256     QLIST_FOREACH(mon_fdset, &mon_fdsets, next) {
2257         QLIST_FOREACH(mon_fdset_fd_dup, &mon_fdset->dup_fds, next) {
2258             if (mon_fdset_fd_dup->fd == dup_fd) {
2259                 if (remove) {
2260                     QLIST_REMOVE(mon_fdset_fd_dup, next);
2261                     if (QLIST_EMPTY(&mon_fdset->dup_fds)) {
2262                         monitor_fdset_cleanup(mon_fdset);
2263                     }
2264                     return -1;
2265                 } else {
2266                     return mon_fdset->id;
2267                 }
2268             }
2269         }
2270     }
2271     return -1;
2272 }
2273
2274 int monitor_fdset_dup_fd_find(int dup_fd)
2275 {
2276     return monitor_fdset_dup_fd_find_remove(dup_fd, false);
2277 }
2278
2279 void monitor_fdset_dup_fd_remove(int dup_fd)
2280 {
2281     monitor_fdset_dup_fd_find_remove(dup_fd, true);
2282 }
2283
2284 int monitor_fd_param(Monitor *mon, const char *fdname, Error **errp)
2285 {
2286     int fd;
2287     Error *local_err = NULL;
2288
2289     if (!qemu_isdigit(fdname[0]) && mon) {
2290         fd = monitor_get_fd(mon, fdname, &local_err);
2291     } else {
2292         fd = qemu_parse_fd(fdname);
2293         if (fd == -1) {
2294             error_setg(&local_err, "Invalid file descriptor number '%s'",
2295                        fdname);
2296         }
2297     }
2298     if (local_err) {
2299         error_propagate(errp, local_err);
2300         assert(fd == -1);
2301     } else {
2302         assert(fd != -1);
2303     }
2304
2305     return fd;
2306 }
2307
2308 /* Please update hmp-commands.hx when adding or changing commands */
2309 static mon_cmd_t info_cmds[] = {
2310 #include "hmp-commands-info.h"
2311     { NULL, NULL, },
2312 };
2313
2314 /* mon_cmds and info_cmds would be sorted at runtime */
2315 static mon_cmd_t mon_cmds[] = {
2316 #include "hmp-commands.h"
2317     { NULL, NULL, },
2318 };
2319
2320 /*******************************************************************/
2321
2322 static const char *pch;
2323 static sigjmp_buf expr_env;
2324
2325
2326 static void GCC_FMT_ATTR(2, 3) QEMU_NORETURN
2327 expr_error(Monitor *mon, const char *fmt, ...)
2328 {
2329     va_list ap;
2330     va_start(ap, fmt);
2331     monitor_vprintf(mon, fmt, ap);
2332     monitor_printf(mon, "\n");
2333     va_end(ap);
2334     siglongjmp(expr_env, 1);
2335 }
2336
2337 /* return 0 if OK, -1 if not found */
2338 static int get_monitor_def(target_long *pval, const char *name)
2339 {
2340     const MonitorDef *md = target_monitor_defs();
2341     CPUState *cs = mon_get_cpu();
2342     void *ptr;
2343     uint64_t tmp = 0;
2344     int ret;
2345
2346     if (cs == NULL || md == NULL) {
2347         return -1;
2348     }
2349
2350     for(; md->name != NULL; md++) {
2351         if (compare_cmd(name, md->name)) {
2352             if (md->get_value) {
2353                 *pval = md->get_value(md, md->offset);
2354             } else {
2355                 CPUArchState *env = mon_get_cpu_env();
2356                 ptr = (uint8_t *)env + md->offset;
2357                 switch(md->type) {
2358                 case MD_I32:
2359                     *pval = *(int32_t *)ptr;
2360                     break;
2361                 case MD_TLONG:
2362                     *pval = *(target_long *)ptr;
2363                     break;
2364                 default:
2365                     *pval = 0;
2366                     break;
2367                 }
2368             }
2369             return 0;
2370         }
2371     }
2372
2373     ret = target_get_monitor_def(cs, name, &tmp);
2374     if (!ret) {
2375         *pval = (target_long) tmp;
2376     }
2377
2378     return ret;
2379 }
2380
2381 static void next(void)
2382 {
2383     if (*pch != '\0') {
2384         pch++;
2385         while (qemu_isspace(*pch))
2386             pch++;
2387     }
2388 }
2389
2390 static int64_t expr_sum(Monitor *mon);
2391
2392 static int64_t expr_unary(Monitor *mon)
2393 {
2394     int64_t n;
2395     char *p;
2396     int ret;
2397
2398     switch(*pch) {
2399     case '+':
2400         next();
2401         n = expr_unary(mon);
2402         break;
2403     case '-':
2404         next();
2405         n = -expr_unary(mon);
2406         break;
2407     case '~':
2408         next();
2409         n = ~expr_unary(mon);
2410         break;
2411     case '(':
2412         next();
2413         n = expr_sum(mon);
2414         if (*pch != ')') {
2415             expr_error(mon, "')' expected");
2416         }
2417         next();
2418         break;
2419     case '\'':
2420         pch++;
2421         if (*pch == '\0')
2422             expr_error(mon, "character constant expected");
2423         n = *pch;
2424         pch++;
2425         if (*pch != '\'')
2426             expr_error(mon, "missing terminating \' character");
2427         next();
2428         break;
2429     case '$':
2430         {
2431             char buf[128], *q;
2432             target_long reg=0;
2433
2434             pch++;
2435             q = buf;
2436             while ((*pch >= 'a' && *pch <= 'z') ||
2437                    (*pch >= 'A' && *pch <= 'Z') ||
2438                    (*pch >= '0' && *pch <= '9') ||
2439                    *pch == '_' || *pch == '.') {
2440                 if ((q - buf) < sizeof(buf) - 1)
2441                     *q++ = *pch;
2442                 pch++;
2443             }
2444             while (qemu_isspace(*pch))
2445                 pch++;
2446             *q = 0;
2447             ret = get_monitor_def(&reg, buf);
2448             if (ret < 0)
2449                 expr_error(mon, "unknown register");
2450             n = reg;
2451         }
2452         break;
2453     case '\0':
2454         expr_error(mon, "unexpected end of expression");
2455         n = 0;
2456         break;
2457     default:
2458         errno = 0;
2459         n = strtoull(pch, &p, 0);
2460         if (errno == ERANGE) {
2461             expr_error(mon, "number too large");
2462         }
2463         if (pch == p) {
2464             expr_error(mon, "invalid char '%c' in expression", *p);
2465         }
2466         pch = p;
2467         while (qemu_isspace(*pch))
2468             pch++;
2469         break;
2470     }
2471     return n;
2472 }
2473
2474
2475 static int64_t expr_prod(Monitor *mon)
2476 {
2477     int64_t val, val2;
2478     int op;
2479
2480     val = expr_unary(mon);
2481     for(;;) {
2482         op = *pch;
2483         if (op != '*' && op != '/' && op != '%')
2484             break;
2485         next();
2486         val2 = expr_unary(mon);
2487         switch(op) {
2488         default:
2489         case '*':
2490             val *= val2;
2491             break;
2492         case '/':
2493         case '%':
2494             if (val2 == 0)
2495                 expr_error(mon, "division by zero");
2496             if (op == '/')
2497                 val /= val2;
2498             else
2499                 val %= val2;
2500             break;
2501         }
2502     }
2503     return val;
2504 }
2505
2506 static int64_t expr_logic(Monitor *mon)
2507 {
2508     int64_t val, val2;
2509     int op;
2510
2511     val = expr_prod(mon);
2512     for(;;) {
2513         op = *pch;
2514         if (op != '&' && op != '|' && op != '^')
2515             break;
2516         next();
2517         val2 = expr_prod(mon);
2518         switch(op) {
2519         default:
2520         case '&':
2521             val &= val2;
2522             break;
2523         case '|':
2524             val |= val2;
2525             break;
2526         case '^':
2527             val ^= val2;
2528             break;
2529         }
2530     }
2531     return val;
2532 }
2533
2534 static int64_t expr_sum(Monitor *mon)
2535 {
2536     int64_t val, val2;
2537     int op;
2538
2539     val = expr_logic(mon);
2540     for(;;) {
2541         op = *pch;
2542         if (op != '+' && op != '-')
2543             break;
2544         next();
2545         val2 = expr_logic(mon);
2546         if (op == '+')
2547             val += val2;
2548         else
2549             val -= val2;
2550     }
2551     return val;
2552 }
2553
2554 static int get_expr(Monitor *mon, int64_t *pval, const char **pp)
2555 {
2556     pch = *pp;
2557     if (sigsetjmp(expr_env, 0)) {
2558         *pp = pch;
2559         return -1;
2560     }
2561     while (qemu_isspace(*pch))
2562         pch++;
2563     *pval = expr_sum(mon);
2564     *pp = pch;
2565     return 0;
2566 }
2567
2568 static int get_double(Monitor *mon, double *pval, const char **pp)
2569 {
2570     const char *p = *pp;
2571     char *tailp;
2572     double d;
2573
2574     d = strtod(p, &tailp);
2575     if (tailp == p) {
2576         monitor_printf(mon, "Number expected\n");
2577         return -1;
2578     }
2579     if (d != d || d - d != 0) {
2580         /* NaN or infinity */
2581         monitor_printf(mon, "Bad number\n");
2582         return -1;
2583     }
2584     *pval = d;
2585     *pp = tailp;
2586     return 0;
2587 }
2588
2589 /*
2590  * Store the command-name in cmdname, and return a pointer to
2591  * the remaining of the command string.
2592  */
2593 static const char *get_command_name(const char *cmdline,
2594                                     char *cmdname, size_t nlen)
2595 {
2596     size_t len;
2597     const char *p, *pstart;
2598
2599     p = cmdline;
2600     while (qemu_isspace(*p))
2601         p++;
2602     if (*p == '\0')
2603         return NULL;
2604     pstart = p;
2605     while (*p != '\0' && *p != '/' && !qemu_isspace(*p))
2606         p++;
2607     len = p - pstart;
2608     if (len > nlen - 1)
2609         len = nlen - 1;
2610     memcpy(cmdname, pstart, len);
2611     cmdname[len] = '\0';
2612     return p;
2613 }
2614
2615 /**
2616  * Read key of 'type' into 'key' and return the current
2617  * 'type' pointer.
2618  */
2619 static char *key_get_info(const char *type, char **key)
2620 {
2621     size_t len;
2622     char *p, *str;
2623
2624     if (*type == ',')
2625         type++;
2626
2627     p = strchr(type, ':');
2628     if (!p) {
2629         *key = NULL;
2630         return NULL;
2631     }
2632     len = p - type;
2633
2634     str = g_malloc(len + 1);
2635     memcpy(str, type, len);
2636     str[len] = '\0';
2637
2638     *key = str;
2639     return ++p;
2640 }
2641
2642 static int default_fmt_format = 'x';
2643 static int default_fmt_size = 4;
2644
2645 static int is_valid_option(const char *c, const char *typestr)
2646 {
2647     char option[3];
2648   
2649     option[0] = '-';
2650     option[1] = *c;
2651     option[2] = '\0';
2652   
2653     typestr = strstr(typestr, option);
2654     return (typestr != NULL);
2655 }
2656
2657 static const mon_cmd_t *search_dispatch_table(const mon_cmd_t *disp_table,
2658                                               const char *cmdname)
2659 {
2660     const mon_cmd_t *cmd;
2661
2662     for (cmd = disp_table; cmd->name != NULL; cmd++) {
2663         if (compare_cmd(cmdname, cmd->name)) {
2664             return cmd;
2665         }
2666     }
2667
2668     return NULL;
2669 }
2670
2671 /*
2672  * Parse command name from @cmdp according to command table @table.
2673  * If blank, return NULL.
2674  * Else, if no valid command can be found, report to @mon, and return
2675  * NULL.
2676  * Else, change @cmdp to point right behind the name, and return its
2677  * command table entry.
2678  * Do not assume the return value points into @table!  It doesn't when
2679  * the command is found in a sub-command table.
2680  */
2681 static const mon_cmd_t *monitor_parse_command(Monitor *mon,
2682                                               const char **cmdp,
2683                                               mon_cmd_t *table)
2684 {
2685     const char *p;
2686     const mon_cmd_t *cmd;
2687     char cmdname[256];
2688
2689     /* extract the command name */
2690     p = get_command_name(*cmdp, cmdname, sizeof(cmdname));
2691     if (!p)
2692         return NULL;
2693
2694     cmd = search_dispatch_table(table, cmdname);
2695     if (!cmd) {
2696         monitor_printf(mon, "unknown command: '%.*s'\n",
2697                        (int)(p - *cmdp), *cmdp);
2698         return NULL;
2699     }
2700
2701     /* filter out following useless space */
2702     while (qemu_isspace(*p)) {
2703         p++;
2704     }
2705
2706     *cmdp = p;
2707     /* search sub command */
2708     if (cmd->sub_table != NULL && *p != '\0') {
2709         return monitor_parse_command(mon, cmdp, cmd->sub_table);
2710     }
2711
2712     return cmd;
2713 }
2714
2715 /*
2716  * Parse arguments for @cmd.
2717  * If it can't be parsed, report to @mon, and return NULL.
2718  * Else, insert command arguments into a QDict, and return it.
2719  * Note: On success, caller has to free the QDict structure.
2720  */
2721
2722 static QDict *monitor_parse_arguments(Monitor *mon,
2723                                       const char **endp,
2724                                       const mon_cmd_t *cmd)
2725 {
2726     const char *typestr;
2727     char *key;
2728     int c;
2729     const char *p = *endp;
2730     char buf[1024];
2731     QDict *qdict = qdict_new();
2732
2733     /* parse the parameters */
2734     typestr = cmd->args_type;
2735     for(;;) {
2736         typestr = key_get_info(typestr, &key);
2737         if (!typestr)
2738             break;
2739         c = *typestr;
2740         typestr++;
2741         switch(c) {
2742         case 'F':
2743         case 'B':
2744         case 's':
2745             {
2746                 int ret;
2747
2748                 while (qemu_isspace(*p))
2749                     p++;
2750                 if (*typestr == '?') {
2751                     typestr++;
2752                     if (*p == '\0') {
2753                         /* no optional string: NULL argument */
2754                         break;
2755                     }
2756                 }
2757                 ret = get_str(buf, sizeof(buf), &p);
2758                 if (ret < 0) {
2759                     switch(c) {
2760                     case 'F':
2761                         monitor_printf(mon, "%s: filename expected\n",
2762                                        cmd->name);
2763                         break;
2764                     case 'B':
2765                         monitor_printf(mon, "%s: block device name expected\n",
2766                                        cmd->name);
2767                         break;
2768                     default:
2769                         monitor_printf(mon, "%s: string expected\n", cmd->name);
2770                         break;
2771                     }
2772                     goto fail;
2773                 }
2774                 qdict_put_str(qdict, key, buf);
2775             }
2776             break;
2777         case 'O':
2778             {
2779                 QemuOptsList *opts_list;
2780                 QemuOpts *opts;
2781
2782                 opts_list = qemu_find_opts(key);
2783                 if (!opts_list || opts_list->desc->name) {
2784                     goto bad_type;
2785                 }
2786                 while (qemu_isspace(*p)) {
2787                     p++;
2788                 }
2789                 if (!*p)
2790                     break;
2791                 if (get_str(buf, sizeof(buf), &p) < 0) {
2792                     goto fail;
2793                 }
2794                 opts = qemu_opts_parse_noisily(opts_list, buf, true);
2795                 if (!opts) {
2796                     goto fail;
2797                 }
2798                 qemu_opts_to_qdict(opts, qdict);
2799                 qemu_opts_del(opts);
2800             }
2801             break;
2802         case '/':
2803             {
2804                 int count, format, size;
2805
2806                 while (qemu_isspace(*p))
2807                     p++;
2808                 if (*p == '/') {
2809                     /* format found */
2810                     p++;
2811                     count = 1;
2812                     if (qemu_isdigit(*p)) {
2813                         count = 0;
2814                         while (qemu_isdigit(*p)) {
2815                             count = count * 10 + (*p - '0');
2816                             p++;
2817                         }
2818                     }
2819                     size = -1;
2820                     format = -1;
2821                     for(;;) {
2822                         switch(*p) {
2823                         case 'o':
2824                         case 'd':
2825                         case 'u':
2826                         case 'x':
2827                         case 'i':
2828                         case 'c':
2829                             format = *p++;
2830                             break;
2831                         case 'b':
2832                             size = 1;
2833                             p++;
2834                             break;
2835                         case 'h':
2836                             size = 2;
2837                             p++;
2838                             break;
2839                         case 'w':
2840                             size = 4;
2841                             p++;
2842                             break;
2843                         case 'g':
2844                         case 'L':
2845                             size = 8;
2846                             p++;
2847                             break;
2848                         default:
2849                             goto next;
2850                         }
2851                     }
2852                 next:
2853                     if (*p != '\0' && !qemu_isspace(*p)) {
2854                         monitor_printf(mon, "invalid char in format: '%c'\n",
2855                                        *p);
2856                         goto fail;
2857                     }
2858                     if (format < 0)
2859                         format = default_fmt_format;
2860                     if (format != 'i') {
2861                         /* for 'i', not specifying a size gives -1 as size */
2862                         if (size < 0)
2863                             size = default_fmt_size;
2864                         default_fmt_size = size;
2865                     }
2866                     default_fmt_format = format;
2867                 } else {
2868                     count = 1;
2869                     format = default_fmt_format;
2870                     if (format != 'i') {
2871                         size = default_fmt_size;
2872                     } else {
2873                         size = -1;
2874                     }
2875                 }
2876                 qdict_put_int(qdict, "count", count);
2877                 qdict_put_int(qdict, "format", format);
2878                 qdict_put_int(qdict, "size", size);
2879             }
2880             break;
2881         case 'i':
2882         case 'l':
2883         case 'M':
2884             {
2885                 int64_t val;
2886
2887                 while (qemu_isspace(*p))
2888                     p++;
2889                 if (*typestr == '?' || *typestr == '.') {
2890                     if (*typestr == '?') {
2891                         if (*p == '\0') {
2892                             typestr++;
2893                             break;
2894                         }
2895                     } else {
2896                         if (*p == '.') {
2897                             p++;
2898                             while (qemu_isspace(*p))
2899                                 p++;
2900                         } else {
2901                             typestr++;
2902                             break;
2903                         }
2904                     }
2905                     typestr++;
2906                 }
2907                 if (get_expr(mon, &val, &p))
2908                     goto fail;
2909                 /* Check if 'i' is greater than 32-bit */
2910                 if ((c == 'i') && ((val >> 32) & 0xffffffff)) {
2911                     monitor_printf(mon, "\'%s\' has failed: ", cmd->name);
2912                     monitor_printf(mon, "integer is for 32-bit values\n");
2913                     goto fail;
2914                 } else if (c == 'M') {
2915                     if (val < 0) {
2916                         monitor_printf(mon, "enter a positive value\n");
2917                         goto fail;
2918                     }
2919                     val <<= 20;
2920                 }
2921                 qdict_put_int(qdict, key, val);
2922             }
2923             break;
2924         case 'o':
2925             {
2926                 int ret;
2927                 uint64_t val;
2928                 char *end;
2929
2930                 while (qemu_isspace(*p)) {
2931                     p++;
2932                 }
2933                 if (*typestr == '?') {
2934                     typestr++;
2935                     if (*p == '\0') {
2936                         break;
2937                     }
2938                 }
2939                 ret = qemu_strtosz_MiB(p, &end, &val);
2940                 if (ret < 0 || val > INT64_MAX) {
2941                     monitor_printf(mon, "invalid size\n");
2942                     goto fail;
2943                 }
2944                 qdict_put_int(qdict, key, val);
2945                 p = end;
2946             }
2947             break;
2948         case 'T':
2949             {
2950                 double val;
2951
2952                 while (qemu_isspace(*p))
2953                     p++;
2954                 if (*typestr == '?') {
2955                     typestr++;
2956                     if (*p == '\0') {
2957                         break;
2958                     }
2959                 }
2960                 if (get_double(mon, &val, &p) < 0) {
2961                     goto fail;
2962                 }
2963                 if (p[0] && p[1] == 's') {
2964                     switch (*p) {
2965                     case 'm':
2966                         val /= 1e3; p += 2; break;
2967                     case 'u':
2968                         val /= 1e6; p += 2; break;
2969                     case 'n':
2970                         val /= 1e9; p += 2; break;
2971                     }
2972                 }
2973                 if (*p && !qemu_isspace(*p)) {
2974                     monitor_printf(mon, "Unknown unit suffix\n");
2975                     goto fail;
2976                 }
2977                 qdict_put(qdict, key, qfloat_from_double(val));
2978             }
2979             break;
2980         case 'b':
2981             {
2982                 const char *beg;
2983                 bool val;
2984
2985                 while (qemu_isspace(*p)) {
2986                     p++;
2987                 }
2988                 beg = p;
2989                 while (qemu_isgraph(*p)) {
2990                     p++;
2991                 }
2992                 if (p - beg == 2 && !memcmp(beg, "on", p - beg)) {
2993                     val = true;
2994                 } else if (p - beg == 3 && !memcmp(beg, "off", p - beg)) {
2995                     val = false;
2996                 } else {
2997                     monitor_printf(mon, "Expected 'on' or 'off'\n");
2998                     goto fail;
2999                 }
3000                 qdict_put_bool(qdict, key, val);
3001             }
3002             break;
3003         case '-':
3004             {
3005                 const char *tmp = p;
3006                 int skip_key = 0;
3007                 /* option */
3008
3009                 c = *typestr++;
3010                 if (c == '\0')
3011                     goto bad_type;
3012                 while (qemu_isspace(*p))
3013                     p++;
3014                 if (*p == '-') {
3015                     p++;
3016                     if(c != *p) {
3017                         if(!is_valid_option(p, typestr)) {
3018                   
3019                             monitor_printf(mon, "%s: unsupported option -%c\n",
3020                                            cmd->name, *p);
3021                             goto fail;
3022                         } else {
3023                             skip_key = 1;
3024                         }
3025                     }
3026                     if(skip_key) {
3027                         p = tmp;
3028                     } else {
3029                         /* has option */
3030                         p++;
3031                         qdict_put_bool(qdict, key, true);
3032                     }
3033                 }
3034             }
3035             break;
3036         case 'S':
3037             {
3038                 /* package all remaining string */
3039                 int len;
3040
3041                 while (qemu_isspace(*p)) {
3042                     p++;
3043                 }
3044                 if (*typestr == '?') {
3045                     typestr++;
3046                     if (*p == '\0') {
3047                         /* no remaining string: NULL argument */
3048                         break;
3049                     }
3050                 }
3051                 len = strlen(p);
3052                 if (len <= 0) {
3053                     monitor_printf(mon, "%s: string expected\n",
3054                                    cmd->name);
3055                     goto fail;
3056                 }
3057                 qdict_put_str(qdict, key, p);
3058                 p += len;
3059             }
3060             break;
3061         default:
3062         bad_type:
3063             monitor_printf(mon, "%s: unknown type '%c'\n", cmd->name, c);
3064             goto fail;
3065         }
3066         g_free(key);
3067         key = NULL;
3068     }
3069     /* check that all arguments were parsed */
3070     while (qemu_isspace(*p))
3071         p++;
3072     if (*p != '\0') {
3073         monitor_printf(mon, "%s: extraneous characters at the end of line\n",
3074                        cmd->name);
3075         goto fail;
3076     }
3077
3078     return qdict;
3079
3080 fail:
3081     QDECREF(qdict);
3082     g_free(key);
3083     return NULL;
3084 }
3085
3086 static void handle_hmp_command(Monitor *mon, const char *cmdline)
3087 {
3088     QDict *qdict;
3089     const mon_cmd_t *cmd;
3090
3091     cmd = monitor_parse_command(mon, &cmdline, mon->cmd_table);
3092     if (!cmd) {
3093         return;
3094     }
3095
3096     qdict = monitor_parse_arguments(mon, &cmdline, cmd);
3097     if (!qdict) {
3098         monitor_printf(mon, "Try \"help %s\" for more information\n",
3099                        cmd->name);
3100         return;
3101     }
3102
3103     cmd->cmd(mon, qdict);
3104     QDECREF(qdict);
3105 }
3106
3107 static void cmd_completion(Monitor *mon, const char *name, const char *list)
3108 {
3109     const char *p, *pstart;
3110     char cmd[128];
3111     int len;
3112
3113     p = list;
3114     for(;;) {
3115         pstart = p;
3116         p = strchr(p, '|');
3117         if (!p)
3118             p = pstart + strlen(pstart);
3119         len = p - pstart;
3120         if (len > sizeof(cmd) - 2)
3121             len = sizeof(cmd) - 2;
3122         memcpy(cmd, pstart, len);
3123         cmd[len] = '\0';
3124         if (name[0] == '\0' || !strncmp(name, cmd, strlen(name))) {
3125             readline_add_completion(mon->rs, cmd);
3126         }
3127         if (*p == '\0')
3128             break;
3129         p++;
3130     }
3131 }
3132
3133 static void file_completion(Monitor *mon, const char *input)
3134 {
3135     DIR *ffs;
3136     struct dirent *d;
3137     char path[1024];
3138     char file[1024], file_prefix[1024];
3139     int input_path_len;
3140     const char *p;
3141
3142     p = strrchr(input, '/');
3143     if (!p) {
3144         input_path_len = 0;
3145         pstrcpy(file_prefix, sizeof(file_prefix), input);
3146         pstrcpy(path, sizeof(path), ".");
3147     } else {
3148         input_path_len = p - input + 1;
3149         memcpy(path, input, input_path_len);
3150         if (input_path_len > sizeof(path) - 1)
3151             input_path_len = sizeof(path) - 1;
3152         path[input_path_len] = '\0';
3153         pstrcpy(file_prefix, sizeof(file_prefix), p + 1);
3154     }
3155
3156     ffs = opendir(path);
3157     if (!ffs)
3158         return;
3159     for(;;) {
3160         struct stat sb;
3161         d = readdir(ffs);
3162         if (!d)
3163             break;
3164
3165         if (strcmp(d->d_name, ".") == 0 || strcmp(d->d_name, "..") == 0) {
3166             continue;
3167         }
3168
3169         if (strstart(d->d_name, file_prefix, NULL)) {
3170             memcpy(file, input, input_path_len);
3171             if (input_path_len < sizeof(file))
3172                 pstrcpy(file + input_path_len, sizeof(file) - input_path_len,
3173                         d->d_name);
3174             /* stat the file to find out if it's a directory.
3175              * In that case add a slash to speed up typing long paths
3176              */
3177             if (stat(file, &sb) == 0 && S_ISDIR(sb.st_mode)) {
3178                 pstrcat(file, sizeof(file), "/");
3179             }
3180             readline_add_completion(mon->rs, file);
3181         }
3182     }
3183     closedir(ffs);
3184 }
3185
3186 static const char *next_arg_type(const char *typestr)
3187 {
3188     const char *p = strchr(typestr, ':');
3189     return (p != NULL ? ++p : typestr);
3190 }
3191
3192 static void add_completion_option(ReadLineState *rs, const char *str,
3193                                   const char *option)
3194 {
3195     if (!str || !option) {
3196         return;
3197     }
3198     if (!strncmp(option, str, strlen(str))) {
3199         readline_add_completion(rs, option);
3200     }
3201 }
3202
3203 void chardev_add_completion(ReadLineState *rs, int nb_args, const char *str)
3204 {
3205     size_t len;
3206     ChardevBackendInfoList *list, *start;
3207
3208     if (nb_args != 2) {
3209         return;
3210     }
3211     len = strlen(str);
3212     readline_set_completion_index(rs, len);
3213
3214     start = list = qmp_query_chardev_backends(NULL);
3215     while (list) {
3216         const char *chr_name = list->value->name;
3217
3218         if (!strncmp(chr_name, str, len)) {
3219             readline_add_completion(rs, chr_name);
3220         }
3221         list = list->next;
3222     }
3223     qapi_free_ChardevBackendInfoList(start);
3224 }
3225
3226 void netdev_add_completion(ReadLineState *rs, int nb_args, const char *str)
3227 {
3228     size_t len;
3229     int i;
3230
3231     if (nb_args != 2) {
3232         return;
3233     }
3234     len = strlen(str);
3235     readline_set_completion_index(rs, len);
3236     for (i = 0; NetClientDriver_lookup[i]; i++) {
3237         add_completion_option(rs, str, NetClientDriver_lookup[i]);
3238     }
3239 }
3240
3241 void device_add_completion(ReadLineState *rs, int nb_args, const char *str)
3242 {
3243     GSList *list, *elt;
3244     size_t len;
3245
3246     if (nb_args != 2) {
3247         return;
3248     }
3249
3250     len = strlen(str);
3251     readline_set_completion_index(rs, len);
3252     list = elt = object_class_get_list(TYPE_DEVICE, false);
3253     while (elt) {
3254         const char *name;
3255         DeviceClass *dc = OBJECT_CLASS_CHECK(DeviceClass, elt->data,
3256                                              TYPE_DEVICE);
3257         name = object_class_get_name(OBJECT_CLASS(dc));
3258
3259         if (dc->user_creatable
3260             && !strncmp(name, str, len)) {
3261             readline_add_completion(rs, name);
3262         }
3263         elt = elt->next;
3264     }
3265     g_slist_free(list);
3266 }
3267
3268 void object_add_completion(ReadLineState *rs, int nb_args, const char *str)
3269 {
3270     GSList *list, *elt;
3271     size_t len;
3272
3273     if (nb_args != 2) {
3274         return;
3275     }
3276
3277     len = strlen(str);
3278     readline_set_completion_index(rs, len);
3279     list = elt = object_class_get_list(TYPE_USER_CREATABLE, false);
3280     while (elt) {
3281         const char *name;
3282
3283         name = object_class_get_name(OBJECT_CLASS(elt->data));
3284         if (!strncmp(name, str, len) && strcmp(name, TYPE_USER_CREATABLE)) {
3285             readline_add_completion(rs, name);
3286         }
3287         elt = elt->next;
3288     }
3289     g_slist_free(list);
3290 }
3291
3292 static void peripheral_device_del_completion(ReadLineState *rs,
3293                                              const char *str, size_t len)
3294 {
3295     Object *peripheral = container_get(qdev_get_machine(), "/peripheral");
3296     GSList *list, *item;
3297
3298     list = qdev_build_hotpluggable_device_list(peripheral);
3299     if (!list) {
3300         return;
3301     }
3302
3303     for (item = list; item; item = g_slist_next(item)) {
3304         DeviceState *dev = item->data;
3305
3306         if (dev->id && !strncmp(str, dev->id, len)) {
3307             readline_add_completion(rs, dev->id);
3308         }
3309     }
3310
3311     g_slist_free(list);
3312 }
3313
3314 void chardev_remove_completion(ReadLineState *rs, int nb_args, const char *str)
3315 {
3316     size_t len;
3317     ChardevInfoList *list, *start;
3318
3319     if (nb_args != 2) {
3320         return;
3321     }
3322     len = strlen(str);
3323     readline_set_completion_index(rs, len);
3324
3325     start = list = qmp_query_chardev(NULL);
3326     while (list) {
3327         ChardevInfo *chr = list->value;
3328
3329         if (!strncmp(chr->label, str, len)) {
3330             readline_add_completion(rs, chr->label);
3331         }
3332         list = list->next;
3333     }
3334     qapi_free_ChardevInfoList(start);
3335 }
3336
3337 static void ringbuf_completion(ReadLineState *rs, const char *str)
3338 {
3339     size_t len;
3340     ChardevInfoList *list, *start;
3341
3342     len = strlen(str);
3343     readline_set_completion_index(rs, len);
3344
3345     start = list = qmp_query_chardev(NULL);
3346     while (list) {
3347         ChardevInfo *chr_info = list->value;
3348
3349         if (!strncmp(chr_info->label, str, len)) {
3350             Chardev *chr = qemu_chr_find(chr_info->label);
3351             if (chr && CHARDEV_IS_RINGBUF(chr)) {
3352                 readline_add_completion(rs, chr_info->label);
3353             }
3354         }
3355         list = list->next;
3356     }
3357     qapi_free_ChardevInfoList(start);
3358 }
3359
3360 void ringbuf_write_completion(ReadLineState *rs, int nb_args, const char *str)
3361 {
3362     if (nb_args != 2) {
3363         return;
3364     }
3365     ringbuf_completion(rs, str);
3366 }
3367
3368 void device_del_completion(ReadLineState *rs, int nb_args, const char *str)
3369 {
3370     size_t len;
3371
3372     if (nb_args != 2) {
3373         return;
3374     }
3375
3376     len = strlen(str);
3377     readline_set_completion_index(rs, len);
3378     peripheral_device_del_completion(rs, str, len);
3379 }
3380
3381 void object_del_completion(ReadLineState *rs, int nb_args, const char *str)
3382 {
3383     ObjectPropertyInfoList *list, *start;
3384     size_t len;
3385
3386     if (nb_args != 2) {
3387         return;
3388     }
3389     len = strlen(str);
3390     readline_set_completion_index(rs, len);
3391
3392     start = list = qmp_qom_list("/objects", NULL);
3393     while (list) {
3394         ObjectPropertyInfo *info = list->value;
3395
3396         if (!strncmp(info->type, "child<", 5)
3397             && !strncmp(info->name, str, len)) {
3398             readline_add_completion(rs, info->name);
3399         }
3400         list = list->next;
3401     }
3402     qapi_free_ObjectPropertyInfoList(start);
3403 }
3404
3405 void sendkey_completion(ReadLineState *rs, int nb_args, const char *str)
3406 {
3407     int i;
3408     char *sep;
3409     size_t len;
3410
3411     if (nb_args != 2) {
3412         return;
3413     }
3414     sep = strrchr(str, '-');
3415     if (sep) {
3416         str = sep + 1;
3417     }
3418     len = strlen(str);
3419     readline_set_completion_index(rs, len);
3420     for (i = 0; i < Q_KEY_CODE__MAX; i++) {
3421         if (!strncmp(str, QKeyCode_lookup[i], len)) {
3422             readline_add_completion(rs, QKeyCode_lookup[i]);
3423         }
3424     }
3425 }
3426
3427 void set_link_completion(ReadLineState *rs, int nb_args, const char *str)
3428 {
3429     size_t len;
3430
3431     len = strlen(str);
3432     readline_set_completion_index(rs, len);
3433     if (nb_args == 2) {
3434         NetClientState *ncs[MAX_QUEUE_NUM];
3435         int count, i;
3436         count = qemu_find_net_clients_except(NULL, ncs,
3437                                              NET_CLIENT_DRIVER_NONE,
3438                                              MAX_QUEUE_NUM);
3439         for (i = 0; i < MIN(count, MAX_QUEUE_NUM); i++) {
3440             const char *name = ncs[i]->name;
3441             if (!strncmp(str, name, len)) {
3442                 readline_add_completion(rs, name);
3443             }
3444         }
3445     } else if (nb_args == 3) {
3446         add_completion_option(rs, str, "on");
3447         add_completion_option(rs, str, "off");
3448     }
3449 }
3450
3451 void netdev_del_completion(ReadLineState *rs, int nb_args, const char *str)
3452 {
3453     int len, count, i;
3454     NetClientState *ncs[MAX_QUEUE_NUM];
3455
3456     if (nb_args != 2) {
3457         return;
3458     }
3459
3460     len = strlen(str);
3461     readline_set_completion_index(rs, len);
3462     count = qemu_find_net_clients_except(NULL, ncs, NET_CLIENT_DRIVER_NIC,
3463                                          MAX_QUEUE_NUM);
3464     for (i = 0; i < MIN(count, MAX_QUEUE_NUM); i++) {
3465         QemuOpts *opts;
3466         const char *name = ncs[i]->name;
3467         if (strncmp(str, name, len)) {
3468             continue;
3469         }
3470         opts = qemu_opts_find(qemu_find_opts_err("netdev", NULL), name);
3471         if (opts) {
3472             readline_add_completion(rs, name);
3473         }
3474     }
3475 }
3476
3477 void info_trace_events_completion(ReadLineState *rs, int nb_args, const char *str)
3478 {
3479     size_t len;
3480
3481     len = strlen(str);
3482     readline_set_completion_index(rs, len);
3483     if (nb_args == 2) {
3484         TraceEventIter iter;
3485         TraceEvent *ev;
3486         char *pattern = g_strdup_printf("%s*", str);
3487         trace_event_iter_init(&iter, pattern);
3488         while ((ev = trace_event_iter_next(&iter)) != NULL) {
3489             readline_add_completion(rs, trace_event_get_name(ev));
3490         }
3491         g_free(pattern);
3492     }
3493 }
3494
3495 void trace_event_completion(ReadLineState *rs, int nb_args, const char *str)
3496 {
3497     size_t len;
3498
3499     len = strlen(str);
3500     readline_set_completion_index(rs, len);
3501     if (nb_args == 2) {
3502         TraceEventIter iter;
3503         TraceEvent *ev;
3504         char *pattern = g_strdup_printf("%s*", str);
3505         trace_event_iter_init(&iter, pattern);
3506         while ((ev = trace_event_iter_next(&iter)) != NULL) {
3507             readline_add_completion(rs, trace_event_get_name(ev));
3508         }
3509         g_free(pattern);
3510     } else if (nb_args == 3) {
3511         add_completion_option(rs, str, "on");
3512         add_completion_option(rs, str, "off");
3513     }
3514 }
3515
3516 void watchdog_action_completion(ReadLineState *rs, int nb_args, const char *str)
3517 {
3518     int i;
3519
3520     if (nb_args != 2) {
3521         return;
3522     }
3523     readline_set_completion_index(rs, strlen(str));
3524     for (i = 0; WatchdogExpirationAction_lookup[i]; i++) {
3525         add_completion_option(rs, str, WatchdogExpirationAction_lookup[i]);
3526     }
3527 }
3528
3529 void migrate_set_capability_completion(ReadLineState *rs, int nb_args,
3530                                        const char *str)
3531 {
3532     size_t len;
3533
3534     len = strlen(str);
3535     readline_set_completion_index(rs, len);
3536     if (nb_args == 2) {
3537         int i;
3538         for (i = 0; i < MIGRATION_CAPABILITY__MAX; i++) {
3539             const char *name = MigrationCapability_lookup[i];
3540             if (!strncmp(str, name, len)) {
3541                 readline_add_completion(rs, name);
3542             }
3543         }
3544     } else if (nb_args == 3) {
3545         add_completion_option(rs, str, "on");
3546         add_completion_option(rs, str, "off");
3547     }
3548 }
3549
3550 void migrate_set_parameter_completion(ReadLineState *rs, int nb_args,
3551                                       const char *str)
3552 {
3553     size_t len;
3554
3555     len = strlen(str);
3556     readline_set_completion_index(rs, len);
3557     if (nb_args == 2) {
3558         int i;
3559         for (i = 0; i < MIGRATION_PARAMETER__MAX; i++) {
3560             const char *name = MigrationParameter_lookup[i];
3561             if (!strncmp(str, name, len)) {
3562                 readline_add_completion(rs, name);
3563             }
3564         }
3565     }
3566 }
3567
3568 void host_net_add_completion(ReadLineState *rs, int nb_args, const char *str)
3569 {
3570     int i;
3571     size_t len;
3572     if (nb_args != 2) {
3573         return;
3574     }
3575     len = strlen(str);
3576     readline_set_completion_index(rs, len);
3577     for (i = 0; host_net_devices[i]; i++) {
3578         if (!strncmp(host_net_devices[i], str, len)) {
3579             readline_add_completion(rs, host_net_devices[i]);
3580         }
3581     }
3582 }
3583
3584 void host_net_remove_completion(ReadLineState *rs, int nb_args, const char *str)
3585 {
3586     NetClientState *ncs[MAX_QUEUE_NUM];
3587     int count, i, len;
3588
3589     len = strlen(str);
3590     readline_set_completion_index(rs, len);
3591     if (nb_args == 2) {
3592         count = qemu_find_net_clients_except(NULL, ncs,
3593                                              NET_CLIENT_DRIVER_NONE,
3594                                              MAX_QUEUE_NUM);
3595         for (i = 0; i < MIN(count, MAX_QUEUE_NUM); i++) {
3596             int id;
3597             char name[16];
3598
3599             if (net_hub_id_for_client(ncs[i], &id)) {
3600                 continue;
3601             }
3602             snprintf(name, sizeof(name), "%d", id);
3603             if (!strncmp(str, name, len)) {
3604                 readline_add_completion(rs, name);
3605             }
3606         }
3607         return;
3608     } else if (nb_args == 3) {
3609         count = qemu_find_net_clients_except(NULL, ncs,
3610                                              NET_CLIENT_DRIVER_NIC,
3611                                              MAX_QUEUE_NUM);
3612         for (i = 0; i < MIN(count, MAX_QUEUE_NUM); i++) {
3613             int id;
3614             const char *name;
3615
3616             if (ncs[i]->info->type == NET_CLIENT_DRIVER_HUBPORT ||
3617                 net_hub_id_for_client(ncs[i], &id)) {
3618                 continue;
3619             }
3620             name = ncs[i]->name;
3621             if (!strncmp(str, name, len)) {
3622                 readline_add_completion(rs, name);
3623             }
3624         }
3625         return;
3626     }
3627 }
3628
3629 static void vm_completion(ReadLineState *rs, const char *str)
3630 {
3631     size_t len;
3632     BlockDriverState *bs;
3633     BdrvNextIterator it;
3634
3635     len = strlen(str);
3636     readline_set_completion_index(rs, len);
3637
3638     for (bs = bdrv_first(&it); bs; bs = bdrv_next(&it)) {
3639         SnapshotInfoList *snapshots, *snapshot;
3640         AioContext *ctx = bdrv_get_aio_context(bs);
3641         bool ok = false;
3642
3643         aio_context_acquire(ctx);
3644         if (bdrv_can_snapshot(bs)) {
3645             ok = bdrv_query_snapshot_info_list(bs, &snapshots, NULL) == 0;
3646         }
3647         aio_context_release(ctx);
3648         if (!ok) {
3649             continue;
3650         }
3651
3652         snapshot = snapshots;
3653         while (snapshot) {
3654             char *completion = snapshot->value->name;
3655             if (!strncmp(str, completion, len)) {
3656                 readline_add_completion(rs, completion);
3657             }
3658             completion = snapshot->value->id;
3659             if (!strncmp(str, completion, len)) {
3660                 readline_add_completion(rs, completion);
3661             }
3662             snapshot = snapshot->next;
3663         }
3664         qapi_free_SnapshotInfoList(snapshots);
3665     }
3666
3667 }
3668
3669 void delvm_completion(ReadLineState *rs, int nb_args, const char *str)
3670 {
3671     if (nb_args == 2) {
3672         vm_completion(rs, str);
3673     }
3674 }
3675
3676 void loadvm_completion(ReadLineState *rs, int nb_args, const char *str)
3677 {
3678     if (nb_args == 2) {
3679         vm_completion(rs, str);
3680     }
3681 }
3682
3683 static void monitor_find_completion_by_table(Monitor *mon,
3684                                              const mon_cmd_t *cmd_table,
3685                                              char **args,
3686                                              int nb_args)
3687 {
3688     const char *cmdname;
3689     int i;
3690     const char *ptype, *str, *name;
3691     const mon_cmd_t *cmd;
3692     BlockBackend *blk = NULL;
3693
3694     if (nb_args <= 1) {
3695         /* command completion */
3696         if (nb_args == 0)
3697             cmdname = "";
3698         else
3699             cmdname = args[0];
3700         readline_set_completion_index(mon->rs, strlen(cmdname));
3701         for (cmd = cmd_table; cmd->name != NULL; cmd++) {
3702             cmd_completion(mon, cmdname, cmd->name);
3703         }
3704     } else {
3705         /* find the command */
3706         for (cmd = cmd_table; cmd->name != NULL; cmd++) {
3707             if (compare_cmd(args[0], cmd->name)) {
3708                 break;
3709             }
3710         }
3711         if (!cmd->name) {
3712             return;
3713         }
3714
3715         if (cmd->sub_table) {
3716             /* do the job again */
3717             monitor_find_completion_by_table(mon, cmd->sub_table,
3718                                              &args[1], nb_args - 1);
3719             return;
3720         }
3721         if (cmd->command_completion) {
3722             cmd->command_completion(mon->rs, nb_args, args[nb_args - 1]);
3723             return;
3724         }
3725
3726         ptype = next_arg_type(cmd->args_type);
3727         for(i = 0; i < nb_args - 2; i++) {
3728             if (*ptype != '\0') {
3729                 ptype = next_arg_type(ptype);
3730                 while (*ptype == '?')
3731                     ptype = next_arg_type(ptype);
3732             }
3733         }
3734         str = args[nb_args - 1];
3735         while (*ptype == '-' && ptype[1] != '\0') {
3736             ptype = next_arg_type(ptype);
3737         }
3738         switch(*ptype) {
3739         case 'F':
3740             /* file completion */
3741             readline_set_completion_index(mon->rs, strlen(str));
3742             file_completion(mon, str);
3743             break;
3744         case 'B':
3745             /* block device name completion */
3746             readline_set_completion_index(mon->rs, strlen(str));
3747             while ((blk = blk_next(blk)) != NULL) {
3748                 name = blk_name(blk);
3749                 if (str[0] == '\0' ||
3750                     !strncmp(name, str, strlen(str))) {
3751                     readline_add_completion(mon->rs, name);
3752                 }
3753             }
3754             break;
3755         case 's':
3756         case 'S':
3757             if (!strcmp(cmd->name, "help|?")) {
3758                 monitor_find_completion_by_table(mon, cmd_table,
3759                                                  &args[1], nb_args - 1);
3760             }
3761             break;
3762         default:
3763             break;
3764         }
3765     }
3766 }
3767
3768 static void monitor_find_completion(void *opaque,
3769                                     const char *cmdline)
3770 {
3771     Monitor *mon = opaque;
3772     char *args[MAX_ARGS];
3773     int nb_args, len;
3774
3775     /* 1. parse the cmdline */
3776     if (parse_cmdline(cmdline, &nb_args, args) < 0) {
3777         return;
3778     }
3779
3780     /* if the line ends with a space, it means we want to complete the
3781        next arg */
3782     len = strlen(cmdline);
3783     if (len > 0 && qemu_isspace(cmdline[len - 1])) {
3784         if (nb_args >= MAX_ARGS) {
3785             goto cleanup;
3786         }
3787         args[nb_args++] = g_strdup("");
3788     }
3789
3790     /* 2. auto complete according to args */
3791     monitor_find_completion_by_table(mon, mon->cmd_table, args, nb_args);
3792
3793 cleanup:
3794     free_cmdline_args(args, nb_args);
3795 }
3796
3797 static int monitor_can_read(void *opaque)
3798 {
3799     Monitor *mon = opaque;
3800
3801     return (mon->suspend_cnt == 0) ? 1 : 0;
3802 }
3803
3804 static void handle_qmp_command(JSONMessageParser *parser, GQueue *tokens)
3805 {
3806     QObject *req, *rsp = NULL, *id = NULL;
3807     QDict *qdict = NULL;
3808     Monitor *mon = cur_mon;
3809     Error *err = NULL;
3810
3811     req = json_parser_parse_err(tokens, NULL, &err);
3812     if (!req && !err) {
3813         /* json_parser_parse_err() sucks: can fail without setting @err */
3814         error_setg(&err, QERR_JSON_PARSING);
3815     }
3816     if (err) {
3817         goto err_out;
3818     }
3819
3820     qdict = qobject_to_qdict(req);
3821     if (qdict) {
3822         id = qdict_get(qdict, "id");
3823         qobject_incref(id);
3824         qdict_del(qdict, "id");
3825     } /* else will fail qmp_dispatch() */
3826
3827     rsp = qmp_dispatch(cur_mon->qmp.commands, req);
3828
3829     if (mon->qmp.commands == &qmp_cap_negotiation_commands) {
3830         qdict = qdict_get_qdict(qobject_to_qdict(rsp), "error");
3831         if (qdict
3832             && !g_strcmp0(qdict_get_try_str(qdict, "class"),
3833                     QapiErrorClass_lookup[ERROR_CLASS_COMMAND_NOT_FOUND])) {
3834             /* Provide a more useful error message */
3835             qdict_del(qdict, "desc");
3836             qdict_put_str(qdict, "desc", "Expecting capabilities negotiation"
3837                           " with 'qmp_capabilities'");
3838         }
3839     }
3840
3841 err_out:
3842     if (err) {
3843         qdict = qdict_new();
3844         qdict_put_obj(qdict, "error", qmp_build_error_object(err));
3845         error_free(err);
3846         rsp = QOBJECT(qdict);
3847     }
3848
3849     if (rsp) {
3850         if (id) {
3851             qdict_put_obj(qobject_to_qdict(rsp), "id", id);
3852             id = NULL;
3853         }
3854
3855         monitor_json_emitter(mon, rsp);
3856     }
3857
3858     qobject_decref(id);
3859     qobject_decref(rsp);
3860     qobject_decref(req);
3861 }
3862
3863 static void monitor_qmp_read(void *opaque, const uint8_t *buf, int size)
3864 {
3865     Monitor *old_mon = cur_mon;
3866
3867     cur_mon = opaque;
3868
3869     json_message_parser_feed(&cur_mon->qmp.parser, (const char *) buf, size);
3870
3871     cur_mon = old_mon;
3872 }
3873
3874 static void monitor_read(void *opaque, const uint8_t *buf, int size)
3875 {
3876     Monitor *old_mon = cur_mon;
3877     int i;
3878
3879     cur_mon = opaque;
3880
3881     if (cur_mon->rs) {
3882         for (i = 0; i < size; i++)
3883             readline_handle_byte(cur_mon->rs, buf[i]);
3884     } else {
3885         if (size == 0 || buf[size - 1] != 0)
3886             monitor_printf(cur_mon, "corrupted command\n");
3887         else
3888             handle_hmp_command(cur_mon, (char *)buf);
3889     }
3890
3891     cur_mon = old_mon;
3892 }
3893
3894 static void monitor_command_cb(void *opaque, const char *cmdline,
3895                                void *readline_opaque)
3896 {
3897     Monitor *mon = opaque;
3898
3899     monitor_suspend(mon);
3900     handle_hmp_command(mon, cmdline);
3901     monitor_resume(mon);
3902 }
3903
3904 int monitor_suspend(Monitor *mon)
3905 {
3906     if (!mon->rs)
3907         return -ENOTTY;
3908     mon->suspend_cnt++;
3909     return 0;
3910 }
3911
3912 void monitor_resume(Monitor *mon)
3913 {
3914     if (!mon->rs)
3915         return;
3916     if (--mon->suspend_cnt == 0)
3917         readline_show_prompt(mon->rs);
3918 }
3919
3920 static QObject *get_qmp_greeting(void)
3921 {
3922     QObject *ver = NULL;
3923
3924     qmp_marshal_query_version(NULL, &ver, NULL);
3925
3926     return qobject_from_jsonf("{'QMP': {'version': %p, 'capabilities': []}}",
3927                               ver);
3928 }
3929
3930 static void monitor_qmp_event(void *opaque, int event)
3931 {
3932     QObject *data;
3933     Monitor *mon = opaque;
3934
3935     switch (event) {
3936     case CHR_EVENT_OPENED:
3937         mon->qmp.commands = &qmp_cap_negotiation_commands;
3938         data = get_qmp_greeting();
3939         monitor_json_emitter(mon, data);
3940         qobject_decref(data);
3941         mon_refcount++;
3942         break;
3943     case CHR_EVENT_CLOSED:
3944         json_message_parser_destroy(&mon->qmp.parser);
3945         json_message_parser_init(&mon->qmp.parser, handle_qmp_command);
3946         mon_refcount--;
3947         monitor_fdsets_cleanup();
3948         break;
3949     }
3950 }
3951
3952 static void monitor_event(void *opaque, int event)
3953 {
3954     Monitor *mon = opaque;
3955
3956     switch (event) {
3957     case CHR_EVENT_MUX_IN:
3958         qemu_mutex_lock(&mon->out_lock);
3959         mon->mux_out = 0;
3960         qemu_mutex_unlock(&mon->out_lock);
3961         if (mon->reset_seen) {
3962             readline_restart(mon->rs);
3963             monitor_resume(mon);
3964             monitor_flush(mon);
3965         } else {
3966             mon->suspend_cnt = 0;
3967         }
3968         break;
3969
3970     case CHR_EVENT_MUX_OUT:
3971         if (mon->reset_seen) {
3972             if (mon->suspend_cnt == 0) {
3973                 monitor_printf(mon, "\n");
3974             }
3975             monitor_flush(mon);
3976             monitor_suspend(mon);
3977         } else {
3978             mon->suspend_cnt++;
3979         }
3980         qemu_mutex_lock(&mon->out_lock);
3981         mon->mux_out = 1;
3982         qemu_mutex_unlock(&mon->out_lock);
3983         break;
3984
3985     case CHR_EVENT_OPENED:
3986         monitor_printf(mon, "QEMU %s monitor - type 'help' for more "
3987                        "information\n", QEMU_VERSION);
3988         if (!mon->mux_out) {
3989             readline_restart(mon->rs);
3990             readline_show_prompt(mon->rs);
3991         }
3992         mon->reset_seen = 1;
3993         mon_refcount++;
3994         break;
3995
3996     case CHR_EVENT_CLOSED:
3997         mon_refcount--;
3998         monitor_fdsets_cleanup();
3999         break;
4000     }
4001 }
4002
4003 static int
4004 compare_mon_cmd(const void *a, const void *b)
4005 {
4006     return strcmp(((const mon_cmd_t *)a)->name,
4007             ((const mon_cmd_t *)b)->name);
4008 }
4009
4010 static void sortcmdlist(void)
4011 {
4012     int array_num;
4013     int elem_size = sizeof(mon_cmd_t);
4014
4015     array_num = sizeof(mon_cmds)/elem_size-1;
4016     qsort((void *)mon_cmds, array_num, elem_size, compare_mon_cmd);
4017
4018     array_num = sizeof(info_cmds)/elem_size-1;
4019     qsort((void *)info_cmds, array_num, elem_size, compare_mon_cmd);
4020 }
4021
4022 /* These functions just adapt the readline interface in a typesafe way.  We
4023  * could cast function pointers but that discards compiler checks.
4024  */
4025 static void GCC_FMT_ATTR(2, 3) monitor_readline_printf(void *opaque,
4026                                                        const char *fmt, ...)
4027 {
4028     va_list ap;
4029     va_start(ap, fmt);
4030     monitor_vprintf(opaque, fmt, ap);
4031     va_end(ap);
4032 }
4033
4034 static void monitor_readline_flush(void *opaque)
4035 {
4036     monitor_flush(opaque);
4037 }
4038
4039 /*
4040  * Print to current monitor if we have one, else to stderr.
4041  * TODO should return int, so callers can calculate width, but that
4042  * requires surgery to monitor_vprintf().  Left for another day.
4043  */
4044 void error_vprintf(const char *fmt, va_list ap)
4045 {
4046     if (cur_mon && !monitor_cur_is_qmp()) {
4047         monitor_vprintf(cur_mon, fmt, ap);
4048     } else {
4049         vfprintf(stderr, fmt, ap);
4050     }
4051 }
4052
4053 void error_vprintf_unless_qmp(const char *fmt, va_list ap)
4054 {
4055     if (cur_mon && !monitor_cur_is_qmp()) {
4056         monitor_vprintf(cur_mon, fmt, ap);
4057     } else if (!cur_mon) {
4058         vfprintf(stderr, fmt, ap);
4059     }
4060 }
4061
4062 static void __attribute__((constructor)) monitor_lock_init(void)
4063 {
4064     qemu_mutex_init(&monitor_lock);
4065 }
4066
4067 void monitor_init(Chardev *chr, int flags)
4068 {
4069     static int is_first_init = 1;
4070     Monitor *mon;
4071
4072     if (is_first_init) {
4073         monitor_qapi_event_init();
4074         sortcmdlist();
4075         is_first_init = 0;
4076     }
4077
4078     mon = g_malloc(sizeof(*mon));
4079     monitor_data_init(mon);
4080
4081     qemu_chr_fe_init(&mon->chr, chr, &error_abort);
4082     mon->flags = flags;
4083     if (flags & MONITOR_USE_READLINE) {
4084         mon->rs = readline_init(monitor_readline_printf,
4085                                 monitor_readline_flush,
4086                                 mon,
4087                                 monitor_find_completion);
4088         monitor_read_command(mon, 0);
4089     }
4090
4091     if (monitor_is_qmp(mon)) {
4092         qemu_chr_fe_set_handlers(&mon->chr, monitor_can_read, monitor_qmp_read,
4093                                  monitor_qmp_event, mon, NULL, true);
4094         qemu_chr_fe_set_echo(&mon->chr, true);
4095         json_message_parser_init(&mon->qmp.parser, handle_qmp_command);
4096     } else {
4097         qemu_chr_fe_set_handlers(&mon->chr, monitor_can_read, monitor_read,
4098                                  monitor_event, mon, NULL, true);
4099     }
4100
4101     qemu_mutex_lock(&monitor_lock);
4102     QLIST_INSERT_HEAD(&mon_list, mon, entry);
4103     qemu_mutex_unlock(&monitor_lock);
4104 }
4105
4106 void monitor_cleanup(void)
4107 {
4108     Monitor *mon, *next;
4109
4110     qemu_mutex_lock(&monitor_lock);
4111     QLIST_FOREACH_SAFE(mon, &mon_list, entry, next) {
4112         QLIST_REMOVE(mon, entry);
4113         monitor_data_destroy(mon);
4114         g_free(mon);
4115     }
4116     qemu_mutex_unlock(&monitor_lock);
4117 }
4118
4119 static void bdrv_password_cb(void *opaque, const char *password,
4120                              void *readline_opaque)
4121 {
4122     Monitor *mon = opaque;
4123     BlockDriverState *bs = readline_opaque;
4124     int ret = 0;
4125     Error *local_err = NULL;
4126
4127     bdrv_add_key(bs, password, &local_err);
4128     if (local_err) {
4129         error_report_err(local_err);
4130         ret = -EPERM;
4131     }
4132     if (mon->password_completion_cb)
4133         mon->password_completion_cb(mon->password_opaque, ret);
4134
4135     monitor_read_command(mon, 1);
4136 }
4137
4138 int monitor_read_bdrv_key_start(Monitor *mon, BlockDriverState *bs,
4139                                 BlockCompletionFunc *completion_cb,
4140                                 void *opaque)
4141 {
4142     int err;
4143
4144     monitor_printf(mon, "%s (%s) is encrypted.\n", bdrv_get_device_name(bs),
4145                    bdrv_get_encrypted_filename(bs));
4146
4147     mon->password_completion_cb = completion_cb;
4148     mon->password_opaque = opaque;
4149
4150     err = monitor_read_password(mon, bdrv_password_cb, bs);
4151
4152     if (err && completion_cb)
4153         completion_cb(opaque, err);
4154
4155     return err;
4156 }
4157
4158 int monitor_read_block_device_key(Monitor *mon, const char *device,
4159                                   BlockCompletionFunc *completion_cb,
4160                                   void *opaque)
4161 {
4162     Error *err = NULL;
4163     BlockBackend *blk;
4164
4165     blk = blk_by_name(device);
4166     if (!blk) {
4167         monitor_printf(mon, "Device not found %s\n", device);
4168         return -1;
4169     }
4170     if (!blk_bs(blk)) {
4171         monitor_printf(mon, "Device '%s' has no medium\n", device);
4172         return -1;
4173     }
4174
4175     bdrv_add_key(blk_bs(blk), NULL, &err);
4176     if (err) {
4177         error_free(err);
4178         return monitor_read_bdrv_key_start(mon, blk_bs(blk), completion_cb, opaque);
4179     }
4180
4181     if (completion_cb) {
4182         completion_cb(opaque, 0);
4183     }
4184     return 0;
4185 }
4186
4187 QemuOptsList qemu_mon_opts = {
4188     .name = "mon",
4189     .implied_opt_name = "chardev",
4190     .head = QTAILQ_HEAD_INITIALIZER(qemu_mon_opts.head),
4191     .desc = {
4192         {
4193             .name = "mode",
4194             .type = QEMU_OPT_STRING,
4195         },{
4196             .name = "chardev",
4197             .type = QEMU_OPT_STRING,
4198         },{
4199             .name = "default",  /* deprecated */
4200             .type = QEMU_OPT_BOOL,
4201         },{
4202             .name = "pretty",
4203             .type = QEMU_OPT_BOOL,
4204         },
4205         { /* end of list */ }
4206     },
4207 };
4208
4209 #ifndef TARGET_I386
4210 void qmp_rtc_reset_reinjection(Error **errp)
4211 {
4212     error_setg(errp, QERR_FEATURE_DISABLED, "rtc-reset-reinjection");
4213 }
4214 #endif
4215
4216 #ifndef TARGET_S390X
4217 void qmp_dump_skeys(const char *filename, Error **errp)
4218 {
4219     error_setg(errp, QERR_FEATURE_DISABLED, "dump-skeys");
4220 }
4221 #endif
4222
4223 #ifndef TARGET_ARM
4224 GICCapabilityList *qmp_query_gic_capabilities(Error **errp)
4225 {
4226     error_setg(errp, QERR_FEATURE_DISABLED, "query-gic-capabilities");
4227     return NULL;
4228 }
4229 #endif
4230
4231 HotpluggableCPUList *qmp_query_hotpluggable_cpus(Error **errp)
4232 {
4233     MachineState *ms = MACHINE(qdev_get_machine());
4234     MachineClass *mc = MACHINE_GET_CLASS(ms);
4235
4236     if (!mc->has_hotpluggable_cpus) {
4237         error_setg(errp, QERR_FEATURE_DISABLED, "query-hotpluggable-cpus");
4238         return NULL;
4239     }
4240
4241     return machine_query_hotpluggable_cpus(ms);
4242 }
This page took 0.273898 seconds and 4 git commands to generate.