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