Statistics
| Branch: | Revision:

root / qmp-commands.hx @ 44677ded

History | View | Annotate | Download (49.9 kB)

1
HXCOMM QMP dispatch table and documentation
2
HXCOMM Text between SQMP and EQMP is copied to the QMP documention file and
3
HXCOMM does not show up in the other formats.
4

    
5
SQMP
6
                        QMP Supported Commands
7
                        ----------------------
8

    
9
This document describes all commands currently supported by QMP.
10

    
11
Most of the time their usage is exactly the same as in the user Monitor, this
12
means that any other document which also describe commands (the manpage,
13
QEMU's manual, etc) can and should be consulted.
14

    
15
QMP has two types of commands: regular and query commands. Regular commands
16
usually change the Virtual Machine's state someway, while query commands just
17
return information. The sections below are divided accordingly.
18

    
19
It's important to observe that all communication examples are formatted in
20
a reader-friendly way, so that they're easier to understand. However, in real
21
protocol usage, they're emitted as a single line.
22

    
23
Also, the following notation is used to denote data flow:
24

    
25
-> data issued by the Client
26
<- Server data response
27

    
28
Please, refer to the QMP specification (QMP/qmp-spec.txt) for detailed
29
information on the Server command and response formats.
30

    
31
NOTE: This document is temporary and will be replaced soon.
32

    
33
1. Stability Considerations
34
===========================
35

    
36
The current QMP command set (described in this file) may be useful for a
37
number of use cases, however it's limited and several commands have bad
38
defined semantics, specially with regard to command completion.
39

    
40
These problems are going to be solved incrementally in the next QEMU releases
41
and we're going to establish a deprecation policy for badly defined commands.
42

    
43
If you're planning to adopt QMP, please observe the following:
44

    
45
    1. The deprecation policy will take effect and be documented soon, please
46
       check the documentation of each used command as soon as a new release of
47
       QEMU is available
48

    
49
    2. DO NOT rely on anything which is not explicit documented
50

    
51
    3. Errors, in special, are not documented. Applications should NOT check
52
       for specific errors classes or data (it's strongly recommended to only
53
       check for the "error" key)
54

    
55
2. Regular Commands
56
===================
57

    
58
Server's responses in the examples below are always a success response, please
59
refer to the QMP specification for more details on error responses.
60

    
61
EQMP
62

    
63
    {
64
        .name       = "quit",
65
        .args_type  = "",
66
        .mhandler.cmd_new = qmp_marshal_input_quit,
67
    },
68

    
69
SQMP
70
quit
71
----
72

    
73
Quit the emulator.
74

    
75
Arguments: None.
76

    
77
Example:
78

    
79
-> { "execute": "quit" }
80
<- { "return": {} }
81

    
82
EQMP
83

    
84
    {
85
        .name       = "eject",
86
        .args_type  = "force:-f,device:B",
87
        .params     = "[-f] device",
88
        .help       = "eject a removable medium (use -f to force it)",
89
        .user_print = monitor_user_noop,
90
        .mhandler.cmd_new = do_eject,
91
    },
92

    
93
SQMP
94
eject
95
-----
96

    
97
Eject a removable medium.
98

    
99
Arguments: 
100

    
101
- force: force ejection (json-bool, optional)
102
- device: device name (json-string)
103

    
104
Example:
105

    
106
-> { "execute": "eject", "arguments": { "device": "ide1-cd0" } }
107
<- { "return": {} }
108

    
109
Note: The "force" argument defaults to false.
110

    
111
EQMP
112

    
113
    {
114
        .name       = "change",
115
        .args_type  = "device:B,target:F,arg:s?",
116
        .params     = "device filename [format]",
117
        .help       = "change a removable medium, optional format",
118
        .user_print = monitor_user_noop,
119
        .mhandler.cmd_new = do_change,
120
    },
121

    
122
SQMP
123
change
124
------
125

    
126
Change a removable medium or VNC configuration.
127

    
128
Arguments:
129

    
130
- "device": device name (json-string)
131
- "target": filename or item (json-string)
132
- "arg": additional argument (json-string, optional)
133

    
134
Examples:
135

    
136
1. Change a removable medium
137

    
138
-> { "execute": "change",
139
             "arguments": { "device": "ide1-cd0",
140
                            "target": "/srv/images/Fedora-12-x86_64-DVD.iso" } }
141
<- { "return": {} }
142

    
143
2. Change VNC password
144

    
145
-> { "execute": "change",
146
             "arguments": { "device": "vnc", "target": "password",
147
                            "arg": "foobar1" } }
148
<- { "return": {} }
149

    
150
EQMP
151

    
152
    {
153
        .name       = "screendump",
154
        .args_type  = "filename:F",
155
        .params     = "filename",
156
        .help       = "save screen into PPM image 'filename'",
157
        .user_print = monitor_user_noop,
158
        .mhandler.cmd_new = do_screen_dump,
159
    },
160

    
161
SQMP
162
screendump
163
----------
164

    
165
Save screen into PPM image.
166

    
167
Arguments:
168

    
169
- "filename": file path (json-string)
170

    
171
Example:
172

    
173
-> { "execute": "screendump", "arguments": { "filename": "/tmp/image" } }
174
<- { "return": {} }
175

    
176
EQMP
177

    
178
    {
179
        .name       = "stop",
180
        .args_type  = "",
181
        .mhandler.cmd_new = qmp_marshal_input_stop,
182
    },
183

    
184
SQMP
185
stop
186
----
187

    
188
Stop the emulator.
189

    
190
Arguments: None.
191

    
192
Example:
193

    
194
-> { "execute": "stop" }
195
<- { "return": {} }
196

    
197
EQMP
198

    
199
    {
200
        .name       = "cont",
201
        .args_type  = "",
202
        .mhandler.cmd_new = qmp_marshal_input_cont,
203
    },
204

    
205
SQMP
206
cont
207
----
208

    
209
Resume emulation.
210

    
211
Arguments: None.
212

    
213
Example:
214

    
215
-> { "execute": "cont" }
216
<- { "return": {} }
217

    
218
EQMP
219

    
220
    {
221
        .name       = "system_reset",
222
        .args_type  = "",
223
        .mhandler.cmd_new = qmp_marshal_input_system_reset,
224
    },
225

    
226
SQMP
227
system_reset
228
------------
229

    
230
Reset the system.
231

    
232
Arguments: None.
233

    
234
Example:
235

    
236
-> { "execute": "system_reset" }
237
<- { "return": {} }
238

    
239
EQMP
240

    
241
    {
242
        .name       = "system_powerdown",
243
        .args_type  = "",
244
        .mhandler.cmd_new = qmp_marshal_input_system_powerdown,
245
    },
246

    
247
SQMP
248
system_powerdown
249
----------------
250

    
251
Send system power down event.
252

    
253
Arguments: None.
254

    
255
Example:
256

    
257
-> { "execute": "system_powerdown" }
258
<- { "return": {} }
259

    
260
EQMP
261

    
262
    {
263
        .name       = "device_add",
264
        .args_type  = "device:O",
265
        .params     = "driver[,prop=value][,...]",
266
        .help       = "add device, like -device on the command line",
267
        .user_print = monitor_user_noop,
268
        .mhandler.cmd_new = do_device_add,
269
    },
270

    
271
SQMP
272
device_add
273
----------
274

    
275
Add a device.
276

    
277
Arguments:
278

    
279
- "driver": the name of the new device's driver (json-string)
280
- "bus": the device's parent bus (device tree path, json-string, optional)
281
- "id": the device's ID, must be unique (json-string)
282
- device properties
283

    
284
Example:
285

    
286
-> { "execute": "device_add", "arguments": { "driver": "e1000", "id": "net1" } }
287
<- { "return": {} }
288

    
289
Notes:
290

    
291
(1) For detailed information about this command, please refer to the
292
    'docs/qdev-device-use.txt' file.
293

    
294
(2) It's possible to list device properties by running QEMU with the
295
    "-device DEVICE,\?" command-line argument, where DEVICE is the device's name
296

    
297
EQMP
298

    
299
    {
300
        .name       = "device_del",
301
        .args_type  = "id:s",
302
        .params     = "device",
303
        .help       = "remove device",
304
        .user_print = monitor_user_noop,
305
        .mhandler.cmd_new = do_device_del,
306
    },
307

    
308
SQMP
309
device_del
310
----------
311

    
312
Remove a device.
313

    
314
Arguments:
315

    
316
- "id": the device's ID (json-string)
317

    
318
Example:
319

    
320
-> { "execute": "device_del", "arguments": { "id": "net1" } }
321
<- { "return": {} }
322

    
323
EQMP
324

    
325
    {
326
        .name       = "cpu",
327
        .args_type  = "index:i",
328
        .mhandler.cmd_new = qmp_marshal_input_cpu,
329
    },
330

    
331
SQMP
332
cpu
333
---
334

    
335
Set the default CPU.
336

    
337
Arguments:
338

    
339
- "index": the CPU's index (json-int)
340

    
341
Example:
342

    
343
-> { "execute": "cpu", "arguments": { "index": 0 } }
344
<- { "return": {} }
345

    
346
Note: CPUs' indexes are obtained with the 'query-cpus' command.
347

    
348
EQMP
349

    
350
    {
351
        .name       = "memsave",
352
        .args_type  = "val:l,size:i,filename:s,cpu:i?",
353
        .mhandler.cmd_new = qmp_marshal_input_memsave,
354
    },
355

    
356
SQMP
357
memsave
358
-------
359

    
360
Save to disk virtual memory dump starting at 'val' of size 'size'.
361

    
362
Arguments:
363

    
364
- "val": the starting address (json-int)
365
- "size": the memory size, in bytes (json-int)
366
- "filename": file path (json-string)
367
- "cpu": virtual CPU index (json-int, optional)
368

    
369
Example:
370

    
371
-> { "execute": "memsave",
372
             "arguments": { "val": 10,
373
                            "size": 100,
374
                            "filename": "/tmp/virtual-mem-dump" } }
375
<- { "return": {} }
376

    
377
EQMP
378

    
379
    {
380
        .name       = "pmemsave",
381
        .args_type  = "val:l,size:i,filename:s",
382
        .mhandler.cmd_new = qmp_marshal_input_pmemsave,
383
    },
384

    
385
SQMP
386
pmemsave
387
--------
388

    
389
Save to disk physical memory dump starting at 'val' of size 'size'.
390

    
391
Arguments:
392

    
393
- "val": the starting address (json-int)
394
- "size": the memory size, in bytes (json-int)
395
- "filename": file path (json-string)
396

    
397
Example:
398

    
399
-> { "execute": "pmemsave",
400
             "arguments": { "val": 10,
401
                            "size": 100,
402
                            "filename": "/tmp/physical-mem-dump" } }
403
<- { "return": {} }
404

    
405
EQMP
406

    
407
    {
408
        .name       = "inject-nmi",
409
        .args_type  = "",
410
        .mhandler.cmd_new = qmp_marshal_input_inject_nmi,
411
    },
412

    
413
SQMP
414
inject-nmi
415
----------
416

    
417
Inject an NMI on guest's CPUs.
418

    
419
Arguments: None.
420

    
421
Example:
422

    
423
-> { "execute": "inject-nmi" }
424
<- { "return": {} }
425

    
426
Note: inject-nmi is only supported for x86 guest currently, it will
427
      returns "Unsupported" error for non-x86 guest.
428

    
429
EQMP
430

    
431
    {
432
        .name       = "migrate",
433
        .args_type  = "detach:-d,blk:-b,inc:-i,uri:s",
434
        .params     = "[-d] [-b] [-i] uri",
435
        .help       = "migrate to URI (using -d to not wait for completion)"
436
		      "\n\t\t\t -b for migration without shared storage with"
437
		      " full copy of disk\n\t\t\t -i for migration without "
438
		      "shared storage with incremental copy of disk "
439
		      "(base image shared between src and destination)",
440
        .user_print = monitor_user_noop,	
441
	.mhandler.cmd_new = do_migrate,
442
    },
443

    
444
SQMP
445
migrate
446
-------
447

    
448
Migrate to URI.
449

    
450
Arguments:
451

    
452
- "blk": block migration, full disk copy (json-bool, optional)
453
- "inc": incremental disk copy (json-bool, optional)
454
- "uri": Destination URI (json-string)
455

    
456
Example:
457

    
458
-> { "execute": "migrate", "arguments": { "uri": "tcp:0:4446" } }
459
<- { "return": {} }
460

    
461
Notes:
462

    
463
(1) The 'query-migrate' command should be used to check migration's progress
464
    and final result (this information is provided by the 'status' member)
465
(2) All boolean arguments default to false
466
(3) The user Monitor's "detach" argument is invalid in QMP and should not
467
    be used
468

    
469
EQMP
470

    
471
    {
472
        .name       = "migrate_cancel",
473
        .args_type  = "",
474
        .mhandler.cmd_new = qmp_marshal_input_migrate_cancel,
475
    },
476

    
477
SQMP
478
migrate_cancel
479
--------------
480

    
481
Cancel the current migration.
482

    
483
Arguments: None.
484

    
485
Example:
486

    
487
-> { "execute": "migrate_cancel" }
488
<- { "return": {} }
489

    
490
EQMP
491

    
492
    {
493
        .name       = "migrate_set_speed",
494
        .args_type  = "value:o",
495
        .mhandler.cmd_new = qmp_marshal_input_migrate_set_speed,
496
    },
497

    
498
SQMP
499
migrate_set_speed
500
-----------------
501

    
502
Set maximum speed for migrations.
503

    
504
Arguments:
505

    
506
- "value": maximum speed, in bytes per second (json-int)
507

    
508
Example:
509

    
510
-> { "execute": "migrate_set_speed", "arguments": { "value": 1024 } }
511
<- { "return": {} }
512

    
513
EQMP
514

    
515
    {
516
        .name       = "migrate_set_downtime",
517
        .args_type  = "value:T",
518
        .mhandler.cmd_new = qmp_marshal_input_migrate_set_downtime,
519
    },
520

    
521
SQMP
522
migrate_set_downtime
523
--------------------
524

    
525
Set maximum tolerated downtime (in seconds) for migrations.
526

    
527
Arguments:
528

    
529
- "value": maximum downtime (json-number)
530

    
531
Example:
532

    
533
-> { "execute": "migrate_set_downtime", "arguments": { "value": 0.1 } }
534
<- { "return": {} }
535

    
536
EQMP
537

    
538
    {
539
        .name       = "client_migrate_info",
540
        .args_type  = "protocol:s,hostname:s,port:i?,tls-port:i?,cert-subject:s?",
541
        .params     = "protocol hostname port tls-port cert-subject",
542
        .help       = "send migration info to spice/vnc client",
543
        .user_print = monitor_user_noop,
544
        .mhandler.cmd_async = client_migrate_info,
545
        .flags      = MONITOR_CMD_ASYNC,
546
    },
547

    
548
SQMP
549
client_migrate_info
550
------------------
551

    
552
Set the spice/vnc connection info for the migration target.  The spice/vnc
553
server will ask the spice/vnc client to automatically reconnect using the
554
new parameters (if specified) once the vm migration finished successfully.
555

    
556
Arguments:
557

    
558
- "protocol":     protocol: "spice" or "vnc" (json-string)
559
- "hostname":     migration target hostname (json-string)
560
- "port":         spice/vnc tcp port for plaintext channels (json-int, optional)
561
- "tls-port":     spice tcp port for tls-secured channels (json-int, optional)
562
- "cert-subject": server certificate subject (json-string, optional)
563

    
564
Example:
565

    
566
-> { "execute": "client_migrate_info",
567
     "arguments": { "protocol": "spice",
568
                    "hostname": "virt42.lab.kraxel.org",
569
                    "port": 1234 } }
570
<- { "return": {} }
571

    
572
EQMP
573

    
574
    {
575
        .name       = "netdev_add",
576
        .args_type  = "netdev:O",
577
        .params     = "[user|tap|socket],id=str[,prop=value][,...]",
578
        .help       = "add host network device",
579
        .user_print = monitor_user_noop,
580
        .mhandler.cmd_new = do_netdev_add,
581
    },
582

    
583
SQMP
584
netdev_add
585
----------
586

    
587
Add host network device.
588

    
589
Arguments:
590

    
591
- "type": the device type, "tap", "user", ... (json-string)
592
- "id": the device's ID, must be unique (json-string)
593
- device options
594

    
595
Example:
596

    
597
-> { "execute": "netdev_add", "arguments": { "type": "user", "id": "netdev1" } }
598
<- { "return": {} }
599

    
600
Note: The supported device options are the same ones supported by the '-net'
601
      command-line argument, which are listed in the '-help' output or QEMU's
602
      manual
603

    
604
EQMP
605

    
606
    {
607
        .name       = "netdev_del",
608
        .args_type  = "id:s",
609
        .params     = "id",
610
        .help       = "remove host network device",
611
        .user_print = monitor_user_noop,
612
        .mhandler.cmd_new = do_netdev_del,
613
    },
614

    
615
SQMP
616
netdev_del
617
----------
618

    
619
Remove host network device.
620

    
621
Arguments:
622

    
623
- "id": the device's ID, must be unique (json-string)
624

    
625
Example:
626

    
627
-> { "execute": "netdev_del", "arguments": { "id": "netdev1" } }
628
<- { "return": {} }
629

    
630

    
631
EQMP
632

    
633
    {
634
        .name       = "block_resize",
635
        .args_type  = "device:B,size:o",
636
        .mhandler.cmd_new = qmp_marshal_input_block_resize,
637
    },
638

    
639
SQMP
640
block_resize
641
------------
642

    
643
Resize a block image while a guest is running.
644

    
645
Arguments:
646

    
647
- "device": the device's ID, must be unique (json-string)
648
- "size": new size
649

    
650
Example:
651

    
652
-> { "execute": "block_resize", "arguments": { "device": "scratch", "size": 1073741824 } }
653
<- { "return": {} }
654

    
655
EQMP
656

    
657
    {
658
        .name       = "blockdev-snapshot-sync",
659
        .args_type  = "device:B,snapshot-file:s,format:s?",
660
        .mhandler.cmd_new = qmp_marshal_input_blockdev_snapshot_sync,
661
    },
662

    
663
SQMP
664
blockdev-snapshot-sync
665
----------------------
666

    
667
Synchronous snapshot of a block device. snapshot-file specifies the
668
target of the new image. If the file exists, or if it is a device, the
669
snapshot will be created in the existing file/device. If does not
670
exist, a new file will be created. format specifies the format of the
671
snapshot image, default is qcow2.
672

    
673
Arguments:
674

    
675
- "device": device name to snapshot (json-string)
676
- "snapshot-file": name of new image file (json-string)
677
- "format": format of new image (json-string, optional)
678

    
679
Example:
680

    
681
-> { "execute": "blockdev-snapshot-sync", "arguments": { "device": "ide-hd0",
682
                                                         "snapshot-file":
683
                                                        "/some/place/my-image",
684
                                                        "format": "qcow2" } }
685
<- { "return": {} }
686

    
687
EQMP
688

    
689
    {
690
        .name       = "balloon",
691
        .args_type  = "value:M",
692
        .mhandler.cmd_new = qmp_marshal_input_balloon,
693
    },
694

    
695
SQMP
696
balloon
697
-------
698

    
699
Request VM to change its memory allocation (in bytes).
700

    
701
Arguments:
702

    
703
- "value": New memory allocation (json-int)
704

    
705
Example:
706

    
707
-> { "execute": "balloon", "arguments": { "value": 536870912 } }
708
<- { "return": {} }
709

    
710
EQMP
711

    
712
    {
713
        .name       = "set_link",
714
        .args_type  = "name:s,up:b",
715
        .mhandler.cmd_new = qmp_marshal_input_set_link,
716
    },
717

    
718
SQMP
719
set_link
720
--------
721

    
722
Change the link status of a network adapter.
723

    
724
Arguments:
725

    
726
- "name": network device name (json-string)
727
- "up": status is up (json-bool)
728

    
729
Example:
730

    
731
-> { "execute": "set_link", "arguments": { "name": "e1000.0", "up": false } }
732
<- { "return": {} }
733

    
734
EQMP
735

    
736
    {
737
        .name       = "getfd",
738
        .args_type  = "fdname:s",
739
        .params     = "getfd name",
740
        .help       = "receive a file descriptor via SCM rights and assign it a name",
741
        .user_print = monitor_user_noop,
742
        .mhandler.cmd_new = do_getfd,
743
    },
744

    
745
SQMP
746
getfd
747
-----
748

    
749
Receive a file descriptor via SCM rights and assign it a name.
750

    
751
Arguments:
752

    
753
- "fdname": file descriptor name (json-string)
754

    
755
Example:
756

    
757
-> { "execute": "getfd", "arguments": { "fdname": "fd1" } }
758
<- { "return": {} }
759

    
760
EQMP
761

    
762
    {
763
        .name       = "closefd",
764
        .args_type  = "fdname:s",
765
        .params     = "closefd name",
766
        .help       = "close a file descriptor previously passed via SCM rights",
767
        .user_print = monitor_user_noop,
768
        .mhandler.cmd_new = do_closefd,
769
    },
770

    
771
SQMP
772
closefd
773
-------
774

    
775
Close a file descriptor previously passed via SCM rights.
776

    
777
Arguments:
778

    
779
- "fdname": file descriptor name (json-string)
780

    
781
Example:
782

    
783
-> { "execute": "closefd", "arguments": { "fdname": "fd1" } }
784
<- { "return": {} }
785

    
786
EQMP
787

    
788
    {
789
        .name       = "block_passwd",
790
        .args_type  = "device:B,password:s",
791
        .mhandler.cmd_new = qmp_marshal_input_block_passwd,
792
    },
793

    
794
SQMP
795
block_passwd
796
------------
797

    
798
Set the password of encrypted block devices.
799

    
800
Arguments:
801

    
802
- "device": device name (json-string)
803
- "password": password (json-string)
804

    
805
Example:
806

    
807
-> { "execute": "block_passwd", "arguments": { "device": "ide0-hd0",
808
                                               "password": "12345" } }
809
<- { "return": {} }
810

    
811
EQMP
812

    
813
    {
814
        .name       = "block_set_io_throttle",
815
        .args_type  = "device:B,bps:l,bps_rd:l,bps_wr:l,iops:l,iops_rd:l,iops_wr:l",
816
        .params     = "device bps bps_rd bps_wr iops iops_rd iops_wr",
817
        .help       = "change I/O throttle limits for a block drive",
818
        .user_print = monitor_user_noop,
819
        .mhandler.cmd_new = do_block_set_io_throttle,
820
    },
821

    
822
SQMP
823
block_set_io_throttle
824
------------
825

    
826
Change I/O throttle limits for a block drive.
827

    
828
Arguments:
829

    
830
- "device": device name (json-string)
831
- "bps":  total throughput limit in bytes per second(json-int)
832
- "bps_rd":  read throughput limit in bytes per second(json-int)
833
- "bps_wr":  read throughput limit in bytes per second(json-int)
834
- "iops":  total I/O operations per second(json-int)
835
- "iops_rd":  read I/O operations per second(json-int)
836
- "iops_wr":  write I/O operations per second(json-int)
837

    
838
Example:
839

    
840
-> { "execute": "block_set_io_throttle", "arguments": { "device": "virtio0",
841
                                               "bps": "1000000",
842
                                               "bps_rd": "0",
843
                                               "bps_wr": "0",
844
                                               "iops": "0",
845
                                               "iops_rd": "0",
846
                                               "iops_wr": "0" } }
847
<- { "return": {} }
848

    
849
EQMP
850

    
851
    {
852
        .name       = "set_password",
853
        .args_type  = "protocol:s,password:s,connected:s?",
854
        .params     = "protocol password action-if-connected",
855
        .help       = "set spice/vnc password",
856
        .user_print = monitor_user_noop,
857
        .mhandler.cmd_new = set_password,
858
    },
859

    
860
SQMP
861
set_password
862
------------
863

    
864
Set the password for vnc/spice protocols.
865

    
866
Arguments:
867

    
868
- "protocol": protocol name (json-string)
869
- "password": password (json-string)
870
- "connected": [ keep | disconnect | fail ] (josn-string, optional)
871

    
872
Example:
873

    
874
-> { "execute": "set_password", "arguments": { "protocol": "vnc",
875
                                               "password": "secret" } }
876
<- { "return": {} }
877

    
878
EQMP
879

    
880
    {
881
        .name       = "expire_password",
882
        .args_type  = "protocol:s,time:s",
883
        .params     = "protocol time",
884
        .help       = "set spice/vnc password expire-time",
885
        .user_print = monitor_user_noop,
886
        .mhandler.cmd_new = expire_password,
887
    },
888

    
889
SQMP
890
expire_password
891
---------------
892

    
893
Set the password expire time for vnc/spice protocols.
894

    
895
Arguments:
896

    
897
- "protocol": protocol name (json-string)
898
- "time": [ now | never | +secs | secs ] (json-string)
899

    
900
Example:
901

    
902
-> { "execute": "expire_password", "arguments": { "protocol": "vnc",
903
                                                  "time": "+60" } }
904
<- { "return": {} }
905

    
906
EQMP
907

    
908
    {
909
        .name       = "add_client",
910
        .args_type  = "protocol:s,fdname:s,skipauth:b?",
911
        .params     = "protocol fdname skipauth",
912
        .help       = "add a graphics client",
913
        .user_print = monitor_user_noop,
914
        .mhandler.cmd_new = add_graphics_client,
915
    },
916

    
917
SQMP
918
add_client
919
----------
920

    
921
Add a graphics client
922

    
923
Arguments:
924

    
925
- "protocol": protocol name (json-string)
926
- "fdname": file descriptor name (json-string)
927

    
928
Example:
929

    
930
-> { "execute": "add_client", "arguments": { "protocol": "vnc",
931
                                             "fdname": "myclient" } }
932
<- { "return": {} }
933

    
934
EQMP
935
    {
936
        .name       = "qmp_capabilities",
937
        .args_type  = "",
938
        .params     = "",
939
        .help       = "enable QMP capabilities",
940
        .user_print = monitor_user_noop,
941
        .mhandler.cmd_new = do_qmp_capabilities,
942
    },
943

    
944
SQMP
945
qmp_capabilities
946
----------------
947

    
948
Enable QMP capabilities.
949

    
950
Arguments: None.
951

    
952
Example:
953

    
954
-> { "execute": "qmp_capabilities" }
955
<- { "return": {} }
956

    
957
Note: This command must be issued before issuing any other command.
958

    
959
EQMP
960

    
961
    {
962
        .name       = "human-monitor-command",
963
        .args_type  = "command-line:s,cpu-index:i?",
964
        .mhandler.cmd_new = qmp_marshal_input_human_monitor_command,
965
    },
966

    
967
SQMP
968
human-monitor-command
969
---------------------
970

    
971
Execute a Human Monitor command.
972

    
973
Arguments: 
974

    
975
- command-line: the command name and its arguments, just like the
976
                Human Monitor's shell (json-string)
977
- cpu-index: select the CPU number to be used by commands which access CPU
978
             data, like 'info registers'. The Monitor selects CPU 0 if this
979
             argument is not provided (json-int, optional)
980

    
981
Example:
982

    
983
-> { "execute": "human-monitor-command", "arguments": { "command-line": "info kvm" } }
984
<- { "return": "kvm support: enabled\r\n" }
985

    
986
Notes:
987

    
988
(1) The Human Monitor is NOT an stable interface, this means that command
989
    names, arguments and responses can change or be removed at ANY time.
990
    Applications that rely on long term stability guarantees should NOT
991
    use this command
992

    
993
(2) Limitations:
994

    
995
    o This command is stateless, this means that commands that depend
996
      on state information (such as getfd) might not work
997

    
998
    o Commands that prompt the user for data (eg. 'cont' when the block
999
      device is encrypted) don't currently work
1000

    
1001
3. Query Commands
1002
=================
1003

    
1004
HXCOMM Each query command below is inside a SQMP/EQMP section, do NOT change
1005
HXCOMM this! We will possibly move query commands definitions inside those
1006
HXCOMM sections, just like regular commands.
1007

    
1008
EQMP
1009

    
1010
SQMP
1011
query-version
1012
-------------
1013

    
1014
Show QEMU version.
1015

    
1016
Return a json-object with the following information:
1017

    
1018
- "qemu": A json-object containing three integer values:
1019
    - "major": QEMU's major version (json-int)
1020
    - "minor": QEMU's minor version (json-int)
1021
    - "micro": QEMU's micro version (json-int)
1022
- "package": package's version (json-string)
1023

    
1024
Example:
1025

    
1026
-> { "execute": "query-version" }
1027
<- {
1028
      "return":{
1029
         "qemu":{
1030
            "major":0,
1031
            "minor":11,
1032
            "micro":5
1033
         },
1034
         "package":""
1035
      }
1036
   }
1037

    
1038
EQMP
1039

    
1040
    {
1041
        .name       = "query-version",
1042
        .args_type  = "",
1043
        .mhandler.cmd_new = qmp_marshal_input_query_version,
1044
    },
1045

    
1046
SQMP
1047
query-commands
1048
--------------
1049

    
1050
List QMP available commands.
1051

    
1052
Each command is represented by a json-object, the returned value is a json-array
1053
of all commands.
1054

    
1055
Each json-object contain:
1056

    
1057
- "name": command's name (json-string)
1058

    
1059
Example:
1060

    
1061
-> { "execute": "query-commands" }
1062
<- {
1063
      "return":[
1064
         {
1065
            "name":"query-balloon"
1066
         },
1067
         {
1068
            "name":"system_powerdown"
1069
         }
1070
      ]
1071
   }
1072

    
1073
Note: This example has been shortened as the real response is too long.
1074

    
1075
EQMP
1076

    
1077
    {
1078
        .name       = "query-commands",
1079
        .args_type  = "",
1080
        .mhandler.cmd_new = qmp_marshal_input_query_commands,
1081
    },
1082

    
1083
SQMP
1084
query-chardev
1085
-------------
1086

    
1087
Each device is represented by a json-object. The returned value is a json-array
1088
of all devices.
1089

    
1090
Each json-object contain the following:
1091

    
1092
- "label": device's label (json-string)
1093
- "filename": device's file (json-string)
1094

    
1095
Example:
1096

    
1097
-> { "execute": "query-chardev" }
1098
<- {
1099
      "return":[
1100
         {
1101
            "label":"monitor",
1102
            "filename":"stdio"
1103
         },
1104
         {
1105
            "label":"serial0",
1106
            "filename":"vc"
1107
         }
1108
      ]
1109
   }
1110

    
1111
EQMP
1112

    
1113
    {
1114
        .name       = "query-chardev",
1115
        .args_type  = "",
1116
        .mhandler.cmd_new = qmp_marshal_input_query_chardev,
1117
    },
1118

    
1119
SQMP
1120
query-block
1121
-----------
1122

    
1123
Show the block devices.
1124

    
1125
Each block device information is stored in a json-object and the returned value
1126
is a json-array of all devices.
1127

    
1128
Each json-object contain the following:
1129

    
1130
- "device": device name (json-string)
1131
- "type": device type (json-string)
1132
         - deprecated, retained for backward compatibility
1133
         - Possible values: "unknown"
1134
- "removable": true if the device is removable, false otherwise (json-bool)
1135
- "locked": true if the device is locked, false otherwise (json-bool)
1136
- "tray-open": only present if removable, true if the device has a tray,
1137
               and it is open (json-bool)
1138
- "inserted": only present if the device is inserted, it is a json-object
1139
   containing the following:
1140
         - "file": device file name (json-string)
1141
         - "ro": true if read-only, false otherwise (json-bool)
1142
         - "drv": driver format name (json-string)
1143
             - Possible values: "blkdebug", "bochs", "cloop", "cow", "dmg",
1144
                                "file", "file", "ftp", "ftps", "host_cdrom",
1145
                                "host_device", "host_floppy", "http", "https",
1146
                                "nbd", "parallels", "qcow", "qcow2", "raw",
1147
                                "tftp", "vdi", "vmdk", "vpc", "vvfat"
1148
         - "backing_file": backing file name (json-string, optional)
1149
         - "encrypted": true if encrypted, false otherwise (json-bool)
1150
         - "bps": limit total bytes per second (json-int)
1151
         - "bps_rd": limit read bytes per second (json-int)
1152
         - "bps_wr": limit write bytes per second (json-int)
1153
         - "iops": limit total I/O operations per second (json-int)
1154
         - "iops_rd": limit read operations per second (json-int)
1155
         - "iops_wr": limit write operations per second (json-int)
1156

    
1157
- "io-status": I/O operation status, only present if the device supports it
1158
               and the VM is configured to stop on errors. It's always reset
1159
               to "ok" when the "cont" command is issued (json_string, optional)
1160
             - Possible values: "ok", "failed", "nospace"
1161

    
1162
Example:
1163

    
1164
-> { "execute": "query-block" }
1165
<- {
1166
      "return":[
1167
         {
1168
            "io-status": "ok",
1169
            "device":"ide0-hd0",
1170
            "locked":false,
1171
            "removable":false,
1172
            "inserted":{
1173
               "ro":false,
1174
               "drv":"qcow2",
1175
               "encrypted":false,
1176
               "file":"disks/test.img",
1177
               "bps":1000000,
1178
               "bps_rd":0,
1179
               "bps_wr":0,
1180
               "iops":1000000,
1181
               "iops_rd":0,
1182
               "iops_wr":0,
1183
            },
1184
            "type":"unknown"
1185
         },
1186
         {
1187
            "io-status": "ok",
1188
            "device":"ide1-cd0",
1189
            "locked":false,
1190
            "removable":true,
1191
            "type":"unknown"
1192
         },
1193
         {
1194
            "device":"floppy0",
1195
            "locked":false,
1196
            "removable":true,
1197
            "type":"unknown"
1198
         },
1199
         {
1200
            "device":"sd0",
1201
            "locked":false,
1202
            "removable":true,
1203
            "type":"unknown"
1204
         }
1205
      ]
1206
   }
1207

    
1208
EQMP
1209

    
1210
    {
1211
        .name       = "query-block",
1212
        .args_type  = "",
1213
        .mhandler.cmd_new = qmp_marshal_input_query_block,
1214
    },
1215

    
1216
SQMP
1217
query-blockstats
1218
----------------
1219

    
1220
Show block device statistics.
1221

    
1222
Each device statistic information is stored in a json-object and the returned
1223
value is a json-array of all devices.
1224

    
1225
Each json-object contain the following:
1226

    
1227
- "device": device name (json-string)
1228
- "stats": A json-object with the statistics information, it contains:
1229
    - "rd_bytes": bytes read (json-int)
1230
    - "wr_bytes": bytes written (json-int)
1231
    - "rd_operations": read operations (json-int)
1232
    - "wr_operations": write operations (json-int)
1233
    - "flush_operations": cache flush operations (json-int)
1234
    - "wr_total_time_ns": total time spend on writes in nano-seconds (json-int)
1235
    - "rd_total_time_ns": total time spend on reads in nano-seconds (json-int)
1236
    - "flush_total_time_ns": total time spend on cache flushes in nano-seconds (json-int)
1237
    - "wr_highest_offset": Highest offset of a sector written since the
1238
                           BlockDriverState has been opened (json-int)
1239
- "parent": Contains recursively the statistics of the underlying
1240
            protocol (e.g. the host file for a qcow2 image). If there is
1241
            no underlying protocol, this field is omitted
1242
            (json-object, optional)
1243

    
1244
Example:
1245

    
1246
-> { "execute": "query-blockstats" }
1247
<- {
1248
      "return":[
1249
         {
1250
            "device":"ide0-hd0",
1251
            "parent":{
1252
               "stats":{
1253
                  "wr_highest_offset":3686448128,
1254
                  "wr_bytes":9786368,
1255
                  "wr_operations":751,
1256
                  "rd_bytes":122567168,
1257
                  "rd_operations":36772
1258
                  "wr_total_times_ns":313253456
1259
                  "rd_total_times_ns":3465673657
1260
                  "flush_total_times_ns":49653
1261
                  "flush_operations":61,
1262
               }
1263
            },
1264
            "stats":{
1265
               "wr_highest_offset":2821110784,
1266
               "wr_bytes":9786368,
1267
               "wr_operations":692,
1268
               "rd_bytes":122739200,
1269
               "rd_operations":36604
1270
               "flush_operations":51,
1271
               "wr_total_times_ns":313253456
1272
               "rd_total_times_ns":3465673657
1273
               "flush_total_times_ns":49653
1274
            }
1275
         },
1276
         {
1277
            "device":"ide1-cd0",
1278
            "stats":{
1279
               "wr_highest_offset":0,
1280
               "wr_bytes":0,
1281
               "wr_operations":0,
1282
               "rd_bytes":0,
1283
               "rd_operations":0
1284
               "flush_operations":0,
1285
               "wr_total_times_ns":0
1286
               "rd_total_times_ns":0
1287
               "flush_total_times_ns":0
1288
            }
1289
         },
1290
         {
1291
            "device":"floppy0",
1292
            "stats":{
1293
               "wr_highest_offset":0,
1294
               "wr_bytes":0,
1295
               "wr_operations":0,
1296
               "rd_bytes":0,
1297
               "rd_operations":0
1298
               "flush_operations":0,
1299
               "wr_total_times_ns":0
1300
               "rd_total_times_ns":0
1301
               "flush_total_times_ns":0
1302
            }
1303
         },
1304
         {
1305
            "device":"sd0",
1306
            "stats":{
1307
               "wr_highest_offset":0,
1308
               "wr_bytes":0,
1309
               "wr_operations":0,
1310
               "rd_bytes":0,
1311
               "rd_operations":0
1312
               "flush_operations":0,
1313
               "wr_total_times_ns":0
1314
               "rd_total_times_ns":0
1315
               "flush_total_times_ns":0
1316
            }
1317
         }
1318
      ]
1319
   }
1320

    
1321
EQMP
1322

    
1323
    {
1324
        .name       = "query-blockstats",
1325
        .args_type  = "",
1326
        .mhandler.cmd_new = qmp_marshal_input_query_blockstats,
1327
    },
1328

    
1329
SQMP
1330
query-cpus
1331
----------
1332

    
1333
Show CPU information.
1334

    
1335
Return a json-array. Each CPU is represented by a json-object, which contains:
1336

    
1337
- "CPU": CPU index (json-int)
1338
- "current": true if this is the current CPU, false otherwise (json-bool)
1339
- "halted": true if the cpu is halted, false otherwise (json-bool)
1340
- Current program counter. The key's name depends on the architecture:
1341
     "pc": i386/x86_64 (json-int)
1342
     "nip": PPC (json-int)
1343
     "pc" and "npc": sparc (json-int)
1344
     "PC": mips (json-int)
1345
- "thread_id": ID of the underlying host thread (json-int)
1346

    
1347
Example:
1348

    
1349
-> { "execute": "query-cpus" }
1350
<- {
1351
      "return":[
1352
         {
1353
            "CPU":0,
1354
            "current":true,
1355
            "halted":false,
1356
            "pc":3227107138
1357
            "thread_id":3134
1358
         },
1359
         {
1360
            "CPU":1,
1361
            "current":false,
1362
            "halted":true,
1363
            "pc":7108165
1364
            "thread_id":3135
1365
         }
1366
      ]
1367
   }
1368

    
1369
EQMP
1370

    
1371
    {
1372
        .name       = "query-cpus",
1373
        .args_type  = "",
1374
        .mhandler.cmd_new = qmp_marshal_input_query_cpus,
1375
    },
1376

    
1377
SQMP
1378
query-pci
1379
---------
1380

    
1381
PCI buses and devices information.
1382

    
1383
The returned value is a json-array of all buses. Each bus is represented by
1384
a json-object, which has a key with a json-array of all PCI devices attached
1385
to it. Each device is represented by a json-object.
1386

    
1387
The bus json-object contains the following:
1388

    
1389
- "bus": bus number (json-int)
1390
- "devices": a json-array of json-objects, each json-object represents a
1391
             PCI device
1392

    
1393
The PCI device json-object contains the following:
1394

    
1395
- "bus": identical to the parent's bus number (json-int)
1396
- "slot": slot number (json-int)
1397
- "function": function number (json-int)
1398
- "class_info": a json-object containing:
1399
     - "desc": device class description (json-string, optional)
1400
     - "class": device class number (json-int)
1401
- "id": a json-object containing:
1402
     - "device": device ID (json-int)
1403
     - "vendor": vendor ID (json-int)
1404
- "irq": device's IRQ if assigned (json-int, optional)
1405
- "qdev_id": qdev id string (json-string)
1406
- "pci_bridge": It's a json-object, only present if this device is a
1407
                PCI bridge, contains:
1408
     - "bus": bus number (json-int)
1409
     - "secondary": secondary bus number (json-int)
1410
     - "subordinate": subordinate bus number (json-int)
1411
     - "io_range": I/O memory range information, a json-object with the
1412
                   following members:
1413
                 - "base": base address, in bytes (json-int)
1414
                 - "limit": limit address, in bytes (json-int)
1415
     - "memory_range": memory range information, a json-object with the
1416
                       following members:
1417
                 - "base": base address, in bytes (json-int)
1418
                 - "limit": limit address, in bytes (json-int)
1419
     - "prefetchable_range": Prefetchable memory range information, a
1420
                             json-object with the following members:
1421
                 - "base": base address, in bytes (json-int)
1422
                 - "limit": limit address, in bytes (json-int)
1423
     - "devices": a json-array of PCI devices if there's any attached, each
1424
                  each element is represented by a json-object, which contains
1425
                  the same members of the 'PCI device json-object' described
1426
                  above (optional)
1427
- "regions": a json-array of json-objects, each json-object represents a
1428
             memory region of this device
1429

    
1430
The memory range json-object contains the following:
1431

    
1432
- "base": base memory address (json-int)
1433
- "limit": limit value (json-int)
1434

    
1435
The region json-object can be an I/O region or a memory region, an I/O region
1436
json-object contains the following:
1437

    
1438
- "type": "io" (json-string, fixed)
1439
- "bar": BAR number (json-int)
1440
- "address": memory address (json-int)
1441
- "size": memory size (json-int)
1442

    
1443
A memory region json-object contains the following:
1444

    
1445
- "type": "memory" (json-string, fixed)
1446
- "bar": BAR number (json-int)
1447
- "address": memory address (json-int)
1448
- "size": memory size (json-int)
1449
- "mem_type_64": true or false (json-bool)
1450
- "prefetch": true or false (json-bool)
1451

    
1452
Example:
1453

    
1454
-> { "execute": "query-pci" }
1455
<- {
1456
      "return":[
1457
         {
1458
            "bus":0,
1459
            "devices":[
1460
               {
1461
                  "bus":0,
1462
                  "qdev_id":"",
1463
                  "slot":0,
1464
                  "class_info":{
1465
                     "class":1536,
1466
                     "desc":"Host bridge"
1467
                  },
1468
                  "id":{
1469
                     "device":32902,
1470
                     "vendor":4663
1471
                  },
1472
                  "function":0,
1473
                  "regions":[
1474
   
1475
                  ]
1476
               },
1477
               {
1478
                  "bus":0,
1479
                  "qdev_id":"",
1480
                  "slot":1,
1481
                  "class_info":{
1482
                     "class":1537,
1483
                     "desc":"ISA bridge"
1484
                  },
1485
                  "id":{
1486
                     "device":32902,
1487
                     "vendor":28672
1488
                  },
1489
                  "function":0,
1490
                  "regions":[
1491
   
1492
                  ]
1493
               },
1494
               {
1495
                  "bus":0,
1496
                  "qdev_id":"",
1497
                  "slot":1,
1498
                  "class_info":{
1499
                     "class":257,
1500
                     "desc":"IDE controller"
1501
                  },
1502
                  "id":{
1503
                     "device":32902,
1504
                     "vendor":28688
1505
                  },
1506
                  "function":1,
1507
                  "regions":[
1508
                     {
1509
                        "bar":4,
1510
                        "size":16,
1511
                        "address":49152,
1512
                        "type":"io"
1513
                     }
1514
                  ]
1515
               },
1516
               {
1517
                  "bus":0,
1518
                  "qdev_id":"",
1519
                  "slot":2,
1520
                  "class_info":{
1521
                     "class":768,
1522
                     "desc":"VGA controller"
1523
                  },
1524
                  "id":{
1525
                     "device":4115,
1526
                     "vendor":184
1527
                  },
1528
                  "function":0,
1529
                  "regions":[
1530
                     {
1531
                        "prefetch":true,
1532
                        "mem_type_64":false,
1533
                        "bar":0,
1534
                        "size":33554432,
1535
                        "address":4026531840,
1536
                        "type":"memory"
1537
                     },
1538
                     {
1539
                        "prefetch":false,
1540
                        "mem_type_64":false,
1541
                        "bar":1,
1542
                        "size":4096,
1543
                        "address":4060086272,
1544
                        "type":"memory"
1545
                     },
1546
                     {
1547
                        "prefetch":false,
1548
                        "mem_type_64":false,
1549
                        "bar":6,
1550
                        "size":65536,
1551
                        "address":-1,
1552
                        "type":"memory"
1553
                     }
1554
                  ]
1555
               },
1556
               {
1557
                  "bus":0,
1558
                  "qdev_id":"",
1559
                  "irq":11,
1560
                  "slot":4,
1561
                  "class_info":{
1562
                     "class":1280,
1563
                     "desc":"RAM controller"
1564
                  },
1565
                  "id":{
1566
                     "device":6900,
1567
                     "vendor":4098
1568
                  },
1569
                  "function":0,
1570
                  "regions":[
1571
                     {
1572
                        "bar":0,
1573
                        "size":32,
1574
                        "address":49280,
1575
                        "type":"io"
1576
                     }
1577
                  ]
1578
               }
1579
            ]
1580
         }
1581
      ]
1582
   }
1583

    
1584
Note: This example has been shortened as the real response is too long.
1585

    
1586
EQMP
1587

    
1588
    {
1589
        .name       = "query-pci",
1590
        .args_type  = "",
1591
        .mhandler.cmd_new = qmp_marshal_input_query_pci,
1592
    },
1593

    
1594
SQMP
1595
query-kvm
1596
---------
1597

    
1598
Show KVM information.
1599

    
1600
Return a json-object with the following information:
1601

    
1602
- "enabled": true if KVM support is enabled, false otherwise (json-bool)
1603
- "present": true if QEMU has KVM support, false otherwise (json-bool)
1604

    
1605
Example:
1606

    
1607
-> { "execute": "query-kvm" }
1608
<- { "return": { "enabled": true, "present": true } }
1609

    
1610
EQMP
1611

    
1612
    {
1613
        .name       = "query-kvm",
1614
        .args_type  = "",
1615
        .mhandler.cmd_new = qmp_marshal_input_query_kvm,
1616
    },
1617

    
1618
SQMP
1619
query-status
1620
------------
1621

    
1622
Return a json-object with the following information:
1623

    
1624
- "running": true if the VM is running, or false if it is paused (json-bool)
1625
- "singlestep": true if the VM is in single step mode,
1626
                false otherwise (json-bool)
1627
- "status": one of the following values (json-string)
1628
    "debug" - QEMU is running on a debugger
1629
    "inmigrate" - guest is paused waiting for an incoming migration
1630
    "internal-error" - An internal error that prevents further guest
1631
    execution has occurred
1632
    "io-error" - the last IOP has failed and the device is configured
1633
    to pause on I/O errors
1634
    "paused" - guest has been paused via the 'stop' command
1635
    "postmigrate" - guest is paused following a successful 'migrate'
1636
    "prelaunch" - QEMU was started with -S and guest has not started
1637
    "finish-migrate" - guest is paused to finish the migration process
1638
    "restore-vm" - guest is paused to restore VM state
1639
    "running" - guest is actively running
1640
    "save-vm" - guest is paused to save the VM state
1641
    "shutdown" - guest is shut down (and -no-shutdown is in use)
1642
    "watchdog" - the watchdog action is configured to pause and
1643
     has been triggered
1644

    
1645
Example:
1646

    
1647
-> { "execute": "query-status" }
1648
<- { "return": { "running": true, "singlestep": false, "status": "running" } }
1649

    
1650
EQMP
1651
    
1652
    {
1653
        .name       = "query-status",
1654
        .args_type  = "",
1655
        .mhandler.cmd_new = qmp_marshal_input_query_status,
1656
    },
1657

    
1658
SQMP
1659
query-mice
1660
----------
1661

    
1662
Show VM mice information.
1663

    
1664
Each mouse is represented by a json-object, the returned value is a json-array
1665
of all mice.
1666

    
1667
The mouse json-object contains the following:
1668

    
1669
- "name": mouse's name (json-string)
1670
- "index": mouse's index (json-int)
1671
- "current": true if this mouse is receiving events, false otherwise (json-bool)
1672
- "absolute": true if the mouse generates absolute input events (json-bool)
1673

    
1674
Example:
1675

    
1676
-> { "execute": "query-mice" }
1677
<- {
1678
      "return":[
1679
         {
1680
            "name":"QEMU Microsoft Mouse",
1681
            "index":0,
1682
            "current":false,
1683
            "absolute":false
1684
         },
1685
         {
1686
            "name":"QEMU PS/2 Mouse",
1687
            "index":1,
1688
            "current":true,
1689
            "absolute":true
1690
         }
1691
      ]
1692
   }
1693

    
1694
EQMP
1695

    
1696
    {
1697
        .name       = "query-mice",
1698
        .args_type  = "",
1699
        .mhandler.cmd_new = qmp_marshal_input_query_mice,
1700
    },
1701

    
1702
SQMP
1703
query-vnc
1704
---------
1705

    
1706
Show VNC server information.
1707

    
1708
Return a json-object with server information. Connected clients are returned
1709
as a json-array of json-objects.
1710

    
1711
The main json-object contains the following:
1712

    
1713
- "enabled": true or false (json-bool)
1714
- "host": server's IP address (json-string)
1715
- "family": address family (json-string)
1716
         - Possible values: "ipv4", "ipv6", "unix", "unknown"
1717
- "service": server's port number (json-string)
1718
- "auth": authentication method (json-string)
1719
         - Possible values: "invalid", "none", "ra2", "ra2ne", "sasl", "tight",
1720
                            "tls", "ultra", "unknown", "vencrypt", "vencrypt",
1721
                            "vencrypt+plain", "vencrypt+tls+none",
1722
                            "vencrypt+tls+plain", "vencrypt+tls+sasl",
1723
                            "vencrypt+tls+vnc", "vencrypt+x509+none",
1724
                            "vencrypt+x509+plain", "vencrypt+x509+sasl",
1725
                            "vencrypt+x509+vnc", "vnc"
1726
- "clients": a json-array of all connected clients
1727

    
1728
Clients are described by a json-object, each one contain the following:
1729

    
1730
- "host": client's IP address (json-string)
1731
- "family": address family (json-string)
1732
         - Possible values: "ipv4", "ipv6", "unix", "unknown"
1733
- "service": client's port number (json-string)
1734
- "x509_dname": TLS dname (json-string, optional)
1735
- "sasl_username": SASL username (json-string, optional)
1736

    
1737
Example:
1738

    
1739
-> { "execute": "query-vnc" }
1740
<- {
1741
      "return":{
1742
         "enabled":true,
1743
         "host":"0.0.0.0",
1744
         "service":"50402",
1745
         "auth":"vnc",
1746
         "family":"ipv4",
1747
         "clients":[
1748
            {
1749
               "host":"127.0.0.1",
1750
               "service":"50401",
1751
               "family":"ipv4"
1752
            }
1753
         ]
1754
      }
1755
   }
1756

    
1757
EQMP
1758

    
1759
    {
1760
        .name       = "query-vnc",
1761
        .args_type  = "",
1762
        .mhandler.cmd_new = qmp_marshal_input_query_vnc,
1763
    },
1764

    
1765
SQMP
1766
query-spice
1767
-----------
1768

    
1769
Show SPICE server information.
1770

    
1771
Return a json-object with server information. Connected clients are returned
1772
as a json-array of json-objects.
1773

    
1774
The main json-object contains the following:
1775

    
1776
- "enabled": true or false (json-bool)
1777
- "host": server's IP address (json-string)
1778
- "port": server's port number (json-int, optional)
1779
- "tls-port": server's port number (json-int, optional)
1780
- "auth": authentication method (json-string)
1781
         - Possible values: "none", "spice"
1782
- "channels": a json-array of all active channels clients
1783

    
1784
Channels are described by a json-object, each one contain the following:
1785

    
1786
- "host": client's IP address (json-string)
1787
- "family": address family (json-string)
1788
         - Possible values: "ipv4", "ipv6", "unix", "unknown"
1789
- "port": client's port number (json-string)
1790
- "connection-id": spice connection id.  All channels with the same id
1791
                   belong to the same spice session (json-int)
1792
- "channel-type": channel type.  "1" is the main control channel, filter for
1793
                  this one if you want track spice sessions only (json-int)
1794
- "channel-id": channel id.  Usually "0", might be different needed when
1795
                multiple channels of the same type exist, such as multiple
1796
                display channels in a multihead setup (json-int)
1797
- "tls": whevener the channel is encrypted (json-bool)
1798

    
1799
Example:
1800

    
1801
-> { "execute": "query-spice" }
1802
<- {
1803
      "return": {
1804
         "enabled": true,
1805
         "auth": "spice",
1806
         "port": 5920,
1807
         "tls-port": 5921,
1808
         "host": "0.0.0.0",
1809
         "channels": [
1810
            {
1811
               "port": "54924",
1812
               "family": "ipv4",
1813
               "channel-type": 1,
1814
               "connection-id": 1804289383,
1815
               "host": "127.0.0.1",
1816
               "channel-id": 0,
1817
               "tls": true
1818
            },
1819
            {
1820
               "port": "36710",
1821
               "family": "ipv4",
1822
               "channel-type": 4,
1823
               "connection-id": 1804289383,
1824
               "host": "127.0.0.1",
1825
               "channel-id": 0,
1826
               "tls": false
1827
            },
1828
            [ ... more channels follow ... ]
1829
         ]
1830
      }
1831
   }
1832

    
1833
EQMP
1834

    
1835
#if defined(CONFIG_SPICE)
1836
    {
1837
        .name       = "query-spice",
1838
        .args_type  = "",
1839
        .mhandler.cmd_new = qmp_marshal_input_query_spice,
1840
    },
1841
#endif
1842

    
1843
SQMP
1844
query-name
1845
----------
1846

    
1847
Show VM name.
1848

    
1849
Return a json-object with the following information:
1850

    
1851
- "name": VM's name (json-string, optional)
1852

    
1853
Example:
1854

    
1855
-> { "execute": "query-name" }
1856
<- { "return": { "name": "qemu-name" } }
1857

    
1858
EQMP
1859

    
1860
    {
1861
        .name       = "query-name",
1862
        .args_type  = "",
1863
        .mhandler.cmd_new = qmp_marshal_input_query_name,
1864
    },
1865

    
1866
SQMP
1867
query-uuid
1868
----------
1869

    
1870
Show VM UUID.
1871

    
1872
Return a json-object with the following information:
1873

    
1874
- "UUID": Universally Unique Identifier (json-string)
1875

    
1876
Example:
1877

    
1878
-> { "execute": "query-uuid" }
1879
<- { "return": { "UUID": "550e8400-e29b-41d4-a716-446655440000" } }
1880

    
1881
EQMP
1882

    
1883
    {
1884
        .name       = "query-uuid",
1885
        .args_type  = "",
1886
        .mhandler.cmd_new = qmp_marshal_input_query_uuid,
1887
    },
1888

    
1889
SQMP
1890
query-migrate
1891
-------------
1892

    
1893
Migration status.
1894

    
1895
Return a json-object. If migration is active there will be another json-object
1896
with RAM migration status and if block migration is active another one with
1897
block migration status.
1898

    
1899
The main json-object contains the following:
1900

    
1901
- "status": migration status (json-string)
1902
     - Possible values: "active", "completed", "failed", "cancelled"
1903
- "ram": only present if "status" is "active", it is a json-object with the
1904
  following RAM information (in bytes):
1905
         - "transferred": amount transferred (json-int)
1906
         - "remaining": amount remaining (json-int)
1907
         - "total": total (json-int)
1908
- "disk": only present if "status" is "active" and it is a block migration,
1909
  it is a json-object with the following disk information (in bytes):
1910
         - "transferred": amount transferred (json-int)
1911
         - "remaining": amount remaining (json-int)
1912
         - "total": total (json-int)
1913

    
1914
Examples:
1915

    
1916
1. Before the first migration
1917

    
1918
-> { "execute": "query-migrate" }
1919
<- { "return": {} }
1920

    
1921
2. Migration is done and has succeeded
1922

    
1923
-> { "execute": "query-migrate" }
1924
<- { "return": { "status": "completed" } }
1925

    
1926
3. Migration is done and has failed
1927

    
1928
-> { "execute": "query-migrate" }
1929
<- { "return": { "status": "failed" } }
1930

    
1931
4. Migration is being performed and is not a block migration:
1932

    
1933
-> { "execute": "query-migrate" }
1934
<- {
1935
      "return":{
1936
         "status":"active",
1937
         "ram":{
1938
            "transferred":123,
1939
            "remaining":123,
1940
            "total":246
1941
         }
1942
      }
1943
   }
1944

    
1945
5. Migration is being performed and is a block migration:
1946

    
1947
-> { "execute": "query-migrate" }
1948
<- {
1949
      "return":{
1950
         "status":"active",
1951
         "ram":{
1952
            "total":1057024,
1953
            "remaining":1053304,
1954
            "transferred":3720
1955
         },
1956
         "disk":{
1957
            "total":20971520,
1958
            "remaining":20880384,
1959
            "transferred":91136
1960
         }
1961
      }
1962
   }
1963

    
1964
EQMP
1965

    
1966
    {
1967
        .name       = "query-migrate",
1968
        .args_type  = "",
1969
        .mhandler.cmd_new = qmp_marshal_input_query_migrate,
1970
    },
1971

    
1972
SQMP
1973
query-balloon
1974
-------------
1975

    
1976
Show balloon information.
1977

    
1978
Make an asynchronous request for balloon info. When the request completes a
1979
json-object will be returned containing the following data:
1980

    
1981
- "actual": current balloon value in bytes (json-int)
1982
- "mem_swapped_in": Amount of memory swapped in bytes (json-int, optional)
1983
- "mem_swapped_out": Amount of memory swapped out in bytes (json-int, optional)
1984
- "major_page_faults": Number of major faults (json-int, optional)
1985
- "minor_page_faults": Number of minor faults (json-int, optional)
1986
- "free_mem": Total amount of free and unused memory in
1987
              bytes (json-int, optional)
1988
- "total_mem": Total amount of available memory in bytes (json-int, optional)
1989

    
1990
Example:
1991

    
1992
-> { "execute": "query-balloon" }
1993
<- {
1994
      "return":{
1995
         "actual":1073741824,
1996
         "mem_swapped_in":0,
1997
         "mem_swapped_out":0,
1998
         "major_page_faults":142,
1999
         "minor_page_faults":239245,
2000
         "free_mem":1014185984,
2001
         "total_mem":1044668416
2002
      }
2003
   }
2004

    
2005
EQMP
2006

    
2007
    {
2008
        .name       = "query-balloon",
2009
        .args_type  = "",
2010
        .mhandler.cmd_new = qmp_marshal_input_query_balloon,
2011
    },