Statistics
| Branch: | Revision:

root / qmp-commands.hx @ 4d700430

History | View | Annotate | Download (70.4 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
        .mhandler.cmd_new = qmp_marshal_input_eject,
88
    },
89

    
90
SQMP
91
eject
92
-----
93

    
94
Eject a removable medium.
95

    
96
Arguments: 
97

    
98
- force: force ejection (json-bool, optional)
99
- device: device name (json-string)
100

    
101
Example:
102

    
103
-> { "execute": "eject", "arguments": { "device": "ide1-cd0" } }
104
<- { "return": {} }
105

    
106
Note: The "force" argument defaults to false.
107

    
108
EQMP
109

    
110
    {
111
        .name       = "change",
112
        .args_type  = "device:B,target:F,arg:s?",
113
        .mhandler.cmd_new = qmp_marshal_input_change,
114
    },
115

    
116
SQMP
117
change
118
------
119

    
120
Change a removable medium or VNC configuration.
121

    
122
Arguments:
123

    
124
- "device": device name (json-string)
125
- "target": filename or item (json-string)
126
- "arg": additional argument (json-string, optional)
127

    
128
Examples:
129

    
130
1. Change a removable medium
131

    
132
-> { "execute": "change",
133
             "arguments": { "device": "ide1-cd0",
134
                            "target": "/srv/images/Fedora-12-x86_64-DVD.iso" } }
135
<- { "return": {} }
136

    
137
2. Change VNC password
138

    
139
-> { "execute": "change",
140
             "arguments": { "device": "vnc", "target": "password",
141
                            "arg": "foobar1" } }
142
<- { "return": {} }
143

    
144
EQMP
145

    
146
    {
147
        .name       = "screendump",
148
        .args_type  = "filename:F",
149
        .mhandler.cmd_new = qmp_marshal_input_screendump,
150
    },
151

    
152
SQMP
153
screendump
154
----------
155

    
156
Save screen into PPM image.
157

    
158
Arguments:
159

    
160
- "filename": file path (json-string)
161

    
162
Example:
163

    
164
-> { "execute": "screendump", "arguments": { "filename": "/tmp/image" } }
165
<- { "return": {} }
166

    
167
EQMP
168

    
169
    {
170
        .name       = "stop",
171
        .args_type  = "",
172
        .mhandler.cmd_new = qmp_marshal_input_stop,
173
    },
174

    
175
SQMP
176
stop
177
----
178

    
179
Stop the emulator.
180

    
181
Arguments: None.
182

    
183
Example:
184

    
185
-> { "execute": "stop" }
186
<- { "return": {} }
187

    
188
EQMP
189

    
190
    {
191
        .name       = "cont",
192
        .args_type  = "",
193
        .mhandler.cmd_new = qmp_marshal_input_cont,
194
    },
195

    
196
SQMP
197
cont
198
----
199

    
200
Resume emulation.
201

    
202
Arguments: None.
203

    
204
Example:
205

    
206
-> { "execute": "cont" }
207
<- { "return": {} }
208

    
209
EQMP
210

    
211
    {
212
        .name       = "system_wakeup",
213
        .args_type  = "",
214
        .mhandler.cmd_new = qmp_marshal_input_system_wakeup,
215
    },
216

    
217
SQMP
218
system_wakeup
219
-------------
220

    
221
Wakeup guest from suspend.
222

    
223
Arguments: None.
224

    
225
Example:
226

    
227
-> { "execute": "system_wakeup" }
228
<- { "return": {} }
229

    
230
EQMP
231

    
232
    {
233
        .name       = "system_reset",
234
        .args_type  = "",
235
        .mhandler.cmd_new = qmp_marshal_input_system_reset,
236
    },
237

    
238
SQMP
239
system_reset
240
------------
241

    
242
Reset the system.
243

    
244
Arguments: None.
245

    
246
Example:
247

    
248
-> { "execute": "system_reset" }
249
<- { "return": {} }
250

    
251
EQMP
252

    
253
    {
254
        .name       = "system_powerdown",
255
        .args_type  = "",
256
        .mhandler.cmd_new = qmp_marshal_input_system_powerdown,
257
    },
258

    
259
SQMP
260
system_powerdown
261
----------------
262

    
263
Send system power down event.
264

    
265
Arguments: None.
266

    
267
Example:
268

    
269
-> { "execute": "system_powerdown" }
270
<- { "return": {} }
271

    
272
EQMP
273

    
274
    {
275
        .name       = "device_add",
276
        .args_type  = "device:O",
277
        .params     = "driver[,prop=value][,...]",
278
        .help       = "add device, like -device on the command line",
279
        .user_print = monitor_user_noop,
280
        .mhandler.cmd_new = do_device_add,
281
    },
282

    
283
SQMP
284
device_add
285
----------
286

    
287
Add a device.
288

    
289
Arguments:
290

    
291
- "driver": the name of the new device's driver (json-string)
292
- "bus": the device's parent bus (device tree path, json-string, optional)
293
- "id": the device's ID, must be unique (json-string)
294
- device properties
295

    
296
Example:
297

    
298
-> { "execute": "device_add", "arguments": { "driver": "e1000", "id": "net1" } }
299
<- { "return": {} }
300

    
301
Notes:
302

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

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

    
309
EQMP
310

    
311
    {
312
        .name       = "device_del",
313
        .args_type  = "id:s",
314
        .mhandler.cmd_new = qmp_marshal_input_device_del,
315
    },
316

    
317
SQMP
318
device_del
319
----------
320

    
321
Remove a device.
322

    
323
Arguments:
324

    
325
- "id": the device's ID (json-string)
326

    
327
Example:
328

    
329
-> { "execute": "device_del", "arguments": { "id": "net1" } }
330
<- { "return": {} }
331

    
332
EQMP
333

    
334
    {
335
        .name       = "send-key",
336
        .args_type  = "keys:O,hold-time:i?",
337
        .mhandler.cmd_new = qmp_marshal_input_send_key,
338
    },
339

    
340
SQMP
341
send-key
342
----------
343

    
344
Send keys to VM.
345

    
346
Arguments:
347

    
348
keys array:
349
    - "key": key sequence (a json-array of key enum values)
350

    
351
- hold-time: time to delay key up events, milliseconds. Defaults to 100
352
             (json-int, optional)
353

    
354
Example:
355

    
356
-> { "execute": "send-key",
357
     "arguments": { 'keys': [ 'ctrl', 'alt', 'delete' ] } }
358
<- { "return": {} }
359

    
360
EQMP
361

    
362
    {
363
        .name       = "cpu",
364
        .args_type  = "index:i",
365
        .mhandler.cmd_new = qmp_marshal_input_cpu,
366
    },
367

    
368
SQMP
369
cpu
370
---
371

    
372
Set the default CPU.
373

    
374
Arguments:
375

    
376
- "index": the CPU's index (json-int)
377

    
378
Example:
379

    
380
-> { "execute": "cpu", "arguments": { "index": 0 } }
381
<- { "return": {} }
382

    
383
Note: CPUs' indexes are obtained with the 'query-cpus' command.
384

    
385
EQMP
386

    
387
    {
388
        .name       = "query-cpu-max",
389
        .args_type  = "",
390
        .mhandler.cmd_new = qmp_marshal_input_query_cpu_max,
391
    },
392

    
393
SQMP
394
query-cpu-max
395
-------------
396

    
397
Get the maximum CPUs supported by the machine being currently
398
emulated.
399

    
400
Returns json-int.
401

    
402
Example:
403

    
404
-> { "execute": "query-cpu-max" }
405
<- { "return": 255 }
406

    
407
EQMP
408

    
409
    {
410
        .name       = "memsave",
411
        .args_type  = "val:l,size:i,filename:s,cpu:i?",
412
        .mhandler.cmd_new = qmp_marshal_input_memsave,
413
    },
414

    
415
SQMP
416
memsave
417
-------
418

    
419
Save to disk virtual memory dump starting at 'val' of size 'size'.
420

    
421
Arguments:
422

    
423
- "val": the starting address (json-int)
424
- "size": the memory size, in bytes (json-int)
425
- "filename": file path (json-string)
426
- "cpu": virtual CPU index (json-int, optional)
427

    
428
Example:
429

    
430
-> { "execute": "memsave",
431
             "arguments": { "val": 10,
432
                            "size": 100,
433
                            "filename": "/tmp/virtual-mem-dump" } }
434
<- { "return": {} }
435

    
436
EQMP
437

    
438
    {
439
        .name       = "pmemsave",
440
        .args_type  = "val:l,size:i,filename:s",
441
        .mhandler.cmd_new = qmp_marshal_input_pmemsave,
442
    },
443

    
444
SQMP
445
pmemsave
446
--------
447

    
448
Save to disk physical memory dump starting at 'val' of size 'size'.
449

    
450
Arguments:
451

    
452
- "val": the starting address (json-int)
453
- "size": the memory size, in bytes (json-int)
454
- "filename": file path (json-string)
455

    
456
Example:
457

    
458
-> { "execute": "pmemsave",
459
             "arguments": { "val": 10,
460
                            "size": 100,
461
                            "filename": "/tmp/physical-mem-dump" } }
462
<- { "return": {} }
463

    
464
EQMP
465

    
466
    {
467
        .name       = "inject-nmi",
468
        .args_type  = "",
469
        .mhandler.cmd_new = qmp_marshal_input_inject_nmi,
470
    },
471

    
472
SQMP
473
inject-nmi
474
----------
475

    
476
Inject an NMI on guest's CPUs.
477

    
478
Arguments: None.
479

    
480
Example:
481

    
482
-> { "execute": "inject-nmi" }
483
<- { "return": {} }
484

    
485
Note: inject-nmi fails when the guest doesn't support injecting.
486
      Currently, only x86 guests do.
487

    
488
EQMP
489

    
490
    {
491
        .name       = "ringbuf-write",
492
        .args_type  = "device:s,data:s,format:s?",
493
        .mhandler.cmd_new = qmp_marshal_input_ringbuf_write,
494
    },
495

    
496
SQMP
497
ringbuf-write
498
-------------
499

    
500
Write to a ring buffer character device.
501

    
502
Arguments:
503

    
504
- "device": ring buffer character device name (json-string)
505
- "data": data to write (json-string)
506
- "format": data format (json-string, optional)
507
          - Possible values: "utf8" (default), "base64"
508
            Bug: invalid base64 is currently not rejected.
509
            Whitespace *is* invalid.
510

    
511
Example:
512

    
513
-> { "execute": "ringbuf-write",
514
                "arguments": { "device": "foo",
515
                               "data": "abcdefgh",
516
                               "format": "utf8" } }
517
<- { "return": {} }
518

    
519
EQMP
520

    
521
    {
522
        .name       = "ringbuf-read",
523
        .args_type  = "device:s,size:i,format:s?",
524
        .mhandler.cmd_new = qmp_marshal_input_ringbuf_read,
525
    },
526

    
527
SQMP
528
ringbuf-read
529
-------------
530

    
531
Read from a ring buffer character device.
532

    
533
Arguments:
534

    
535
- "device": ring buffer character device name (json-string)
536
- "size": how many bytes to read at most (json-int)
537
          - Number of data bytes, not number of characters in encoded data
538
- "format": data format (json-string, optional)
539
          - Possible values: "utf8" (default), "base64"
540
          - Naturally, format "utf8" works only when the ring buffer
541
            contains valid UTF-8 text.  Invalid UTF-8 sequences get
542
            replaced.  Bug: replacement doesn't work.  Bug: can screw
543
            up on encountering NUL characters, after the ring buffer
544
            lost data, and when reading stops because the size limit
545
            is reached.
546

    
547
Example:
548

    
549
-> { "execute": "ringbuf-read",
550
                "arguments": { "device": "foo",
551
                               "size": 1000,
552
                               "format": "utf8" } }
553
<- {"return": "abcdefgh"}
554

    
555
EQMP
556

    
557
    {
558
        .name       = "xen-save-devices-state",
559
        .args_type  = "filename:F",
560
    .mhandler.cmd_new = qmp_marshal_input_xen_save_devices_state,
561
    },
562

    
563
SQMP
564
xen-save-devices-state
565
-------
566

    
567
Save the state of all devices to file. The RAM and the block devices
568
of the VM are not saved by this command.
569

    
570
Arguments:
571

    
572
- "filename": the file to save the state of the devices to as binary
573
data. See xen-save-devices-state.txt for a description of the binary
574
format.
575

    
576
Example:
577

    
578
-> { "execute": "xen-save-devices-state",
579
     "arguments": { "filename": "/tmp/save" } }
580
<- { "return": {} }
581

    
582
EQMP
583

    
584
    {
585
        .name       = "xen-set-global-dirty-log",
586
        .args_type  = "enable:b",
587
        .mhandler.cmd_new = qmp_marshal_input_xen_set_global_dirty_log,
588
    },
589

    
590
SQMP
591
xen-set-global-dirty-log
592
-------
593

    
594
Enable or disable the global dirty log mode.
595

    
596
Arguments:
597

    
598
- "enable": Enable it or disable it.
599

    
600
Example:
601

    
602
-> { "execute": "xen-set-global-dirty-log",
603
     "arguments": { "enable": true } }
604
<- { "return": {} }
605

    
606
EQMP
607

    
608
    {
609
        .name       = "migrate",
610
        .args_type  = "detach:-d,blk:-b,inc:-i,uri:s",
611
        .mhandler.cmd_new = qmp_marshal_input_migrate,
612
    },
613

    
614
SQMP
615
migrate
616
-------
617

    
618
Migrate to URI.
619

    
620
Arguments:
621

    
622
- "blk": block migration, full disk copy (json-bool, optional)
623
- "inc": incremental disk copy (json-bool, optional)
624
- "uri": Destination URI (json-string)
625

    
626
Example:
627

    
628
-> { "execute": "migrate", "arguments": { "uri": "tcp:0:4446" } }
629
<- { "return": {} }
630

    
631
Notes:
632

    
633
(1) The 'query-migrate' command should be used to check migration's progress
634
    and final result (this information is provided by the 'status' member)
635
(2) All boolean arguments default to false
636
(3) The user Monitor's "detach" argument is invalid in QMP and should not
637
    be used
638

    
639
EQMP
640

    
641
    {
642
        .name       = "migrate_cancel",
643
        .args_type  = "",
644
        .mhandler.cmd_new = qmp_marshal_input_migrate_cancel,
645
    },
646

    
647
SQMP
648
migrate_cancel
649
--------------
650

    
651
Cancel the current migration.
652

    
653
Arguments: None.
654

    
655
Example:
656

    
657
-> { "execute": "migrate_cancel" }
658
<- { "return": {} }
659

    
660
EQMP
661
{
662
        .name       = "migrate-set-cache-size",
663
        .args_type  = "value:o",
664
        .mhandler.cmd_new = qmp_marshal_input_migrate_set_cache_size,
665
    },
666

    
667
SQMP
668
migrate-set-cache-size
669
---------------------
670

    
671
Set cache size to be used by XBZRLE migration, the cache size will be rounded
672
down to the nearest power of 2
673

    
674
Arguments:
675

    
676
- "value": cache size in bytes (json-int)
677

    
678
Example:
679

    
680
-> { "execute": "migrate-set-cache-size", "arguments": { "value": 536870912 } }
681
<- { "return": {} }
682

    
683
EQMP
684
    {
685
        .name       = "query-migrate-cache-size",
686
        .args_type  = "",
687
        .mhandler.cmd_new = qmp_marshal_input_query_migrate_cache_size,
688
    },
689

    
690
SQMP
691
query-migrate-cache-size
692
---------------------
693

    
694
Show cache size to be used by XBZRLE migration
695

    
696
returns a json-object with the following information:
697
- "size" : json-int
698

    
699
Example:
700

    
701
-> { "execute": "query-migrate-cache-size" }
702
<- { "return": 67108864 }
703

    
704
EQMP
705

    
706
    {
707
        .name       = "migrate_set_speed",
708
        .args_type  = "value:o",
709
        .mhandler.cmd_new = qmp_marshal_input_migrate_set_speed,
710
    },
711

    
712
SQMP
713
migrate_set_speed
714
-----------------
715

    
716
Set maximum speed for migrations.
717

    
718
Arguments:
719

    
720
- "value": maximum speed, in bytes per second (json-int)
721

    
722
Example:
723

    
724
-> { "execute": "migrate_set_speed", "arguments": { "value": 1024 } }
725
<- { "return": {} }
726

    
727
EQMP
728

    
729
    {
730
        .name       = "migrate_set_downtime",
731
        .args_type  = "value:T",
732
        .mhandler.cmd_new = qmp_marshal_input_migrate_set_downtime,
733
    },
734

    
735
SQMP
736
migrate_set_downtime
737
--------------------
738

    
739
Set maximum tolerated downtime (in seconds) for migrations.
740

    
741
Arguments:
742

    
743
- "value": maximum downtime (json-number)
744

    
745
Example:
746

    
747
-> { "execute": "migrate_set_downtime", "arguments": { "value": 0.1 } }
748
<- { "return": {} }
749

    
750
EQMP
751

    
752
    {
753
        .name       = "client_migrate_info",
754
        .args_type  = "protocol:s,hostname:s,port:i?,tls-port:i?,cert-subject:s?",
755
        .params     = "protocol hostname port tls-port cert-subject",
756
        .help       = "send migration info to spice/vnc client",
757
        .user_print = monitor_user_noop,
758
        .mhandler.cmd_async = client_migrate_info,
759
        .flags      = MONITOR_CMD_ASYNC,
760
    },
761

    
762
SQMP
763
client_migrate_info
764
------------------
765

    
766
Set the spice/vnc connection info for the migration target.  The spice/vnc
767
server will ask the spice/vnc client to automatically reconnect using the
768
new parameters (if specified) once the vm migration finished successfully.
769

    
770
Arguments:
771

    
772
- "protocol":     protocol: "spice" or "vnc" (json-string)
773
- "hostname":     migration target hostname (json-string)
774
- "port":         spice/vnc tcp port for plaintext channels (json-int, optional)
775
- "tls-port":     spice tcp port for tls-secured channels (json-int, optional)
776
- "cert-subject": server certificate subject (json-string, optional)
777

    
778
Example:
779

    
780
-> { "execute": "client_migrate_info",
781
     "arguments": { "protocol": "spice",
782
                    "hostname": "virt42.lab.kraxel.org",
783
                    "port": 1234 } }
784
<- { "return": {} }
785

    
786
EQMP
787

    
788
    {
789
        .name       = "dump-guest-memory",
790
        .args_type  = "paging:b,protocol:s,begin:i?,end:i?",
791
        .params     = "-p protocol [begin] [length]",
792
        .help       = "dump guest memory to file",
793
        .user_print = monitor_user_noop,
794
        .mhandler.cmd_new = qmp_marshal_input_dump_guest_memory,
795
    },
796

    
797
SQMP
798
dump
799

    
800

    
801
Dump guest memory to file. The file can be processed with crash or gdb.
802

    
803
Arguments:
804

    
805
- "paging": do paging to get guest's memory mapping (json-bool)
806
- "protocol": destination file(started with "file:") or destination file
807
              descriptor (started with "fd:") (json-string)
808
- "begin": the starting physical address. It's optional, and should be specified
809
           with length together (json-int)
810
- "length": the memory size, in bytes. It's optional, and should be specified
811
            with begin together (json-int)
812

    
813
Example:
814

    
815
-> { "execute": "dump-guest-memory", "arguments": { "protocol": "fd:dump" } }
816
<- { "return": {} }
817

    
818
Notes:
819

    
820
(1) All boolean arguments default to false
821

    
822
EQMP
823

    
824
    {
825
        .name       = "netdev_add",
826
        .args_type  = "netdev:O",
827
        .mhandler.cmd_new = qmp_netdev_add,
828
    },
829

    
830
SQMP
831
netdev_add
832
----------
833

    
834
Add host network device.
835

    
836
Arguments:
837

    
838
- "type": the device type, "tap", "user", ... (json-string)
839
- "id": the device's ID, must be unique (json-string)
840
- device options
841

    
842
Example:
843

    
844
-> { "execute": "netdev_add", "arguments": { "type": "user", "id": "netdev1" } }
845
<- { "return": {} }
846

    
847
Note: The supported device options are the same ones supported by the '-netdev'
848
      command-line argument, which are listed in the '-help' output or QEMU's
849
      manual
850

    
851
EQMP
852

    
853
    {
854
        .name       = "netdev_del",
855
        .args_type  = "id:s",
856
        .mhandler.cmd_new = qmp_marshal_input_netdev_del,
857
    },
858

    
859
SQMP
860
netdev_del
861
----------
862

    
863
Remove host network device.
864

    
865
Arguments:
866

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

    
869
Example:
870

    
871
-> { "execute": "netdev_del", "arguments": { "id": "netdev1" } }
872
<- { "return": {} }
873

    
874

    
875
EQMP
876

    
877
    {
878
        .name       = "block_resize",
879
        .args_type  = "device:B,size:o",
880
        .mhandler.cmd_new = qmp_marshal_input_block_resize,
881
    },
882

    
883
SQMP
884
block_resize
885
------------
886

    
887
Resize a block image while a guest is running.
888

    
889
Arguments:
890

    
891
- "device": the device's ID, must be unique (json-string)
892
- "size": new size
893

    
894
Example:
895

    
896
-> { "execute": "block_resize", "arguments": { "device": "scratch", "size": 1073741824 } }
897
<- { "return": {} }
898

    
899
EQMP
900

    
901
    {
902
        .name       = "block-stream",
903
        .args_type  = "device:B,base:s?,speed:o?,on-error:s?",
904
        .mhandler.cmd_new = qmp_marshal_input_block_stream,
905
    },
906

    
907
    {
908
        .name       = "block-commit",
909
        .args_type  = "device:B,base:s?,top:s,speed:o?",
910
        .mhandler.cmd_new = qmp_marshal_input_block_commit,
911
    },
912

    
913
    {
914
        .name       = "block-job-set-speed",
915
        .args_type  = "device:B,speed:o",
916
        .mhandler.cmd_new = qmp_marshal_input_block_job_set_speed,
917
    },
918

    
919
    {
920
        .name       = "block-job-cancel",
921
        .args_type  = "device:B,force:b?",
922
        .mhandler.cmd_new = qmp_marshal_input_block_job_cancel,
923
    },
924
    {
925
        .name       = "block-job-pause",
926
        .args_type  = "device:B",
927
        .mhandler.cmd_new = qmp_marshal_input_block_job_pause,
928
    },
929
    {
930
        .name       = "block-job-resume",
931
        .args_type  = "device:B",
932
        .mhandler.cmd_new = qmp_marshal_input_block_job_resume,
933
    },
934
    {
935
        .name       = "block-job-complete",
936
        .args_type  = "device:B",
937
        .mhandler.cmd_new = qmp_marshal_input_block_job_complete,
938
    },
939
    {
940
        .name       = "transaction",
941
        .args_type  = "actions:q",
942
        .mhandler.cmd_new = qmp_marshal_input_transaction,
943
    },
944

    
945
SQMP
946
transaction
947
-----------
948

    
949
Atomically operate on one or more block devices.  The only supported
950
operation for now is snapshotting.  If there is any failure performing
951
any of the operations, all snapshots for the group are abandoned, and
952
the original disks pre-snapshot attempt are used.
953

    
954
A list of dictionaries is accepted, that contains the actions to be performed.
955
For snapshots this is the device, the file to use for the new snapshot,
956
and the format.  The default format, if not specified, is qcow2.
957

    
958
Each new snapshot defaults to being created by QEMU (wiping any
959
contents if the file already exists), but it is also possible to reuse
960
an externally-created file.  In the latter case, you should ensure that
961
the new image file has the same contents as the current one; QEMU cannot
962
perform any meaningful check.  Typically this is achieved by using the
963
current image file as the backing file for the new image.
964

    
965
Arguments:
966

    
967
actions array:
968
    - "type": the operation to perform.  The only supported
969
      value is "blockdev-snapshot-sync". (json-string)
970
    - "data": a dictionary.  The contents depend on the value
971
      of "type".  When "type" is "blockdev-snapshot-sync":
972
      - "device": device name to snapshot (json-string)
973
      - "snapshot-file": name of new image file (json-string)
974
      - "format": format of new image (json-string, optional)
975
      - "mode": whether and how QEMU should create the snapshot file
976
        (NewImageMode, optional, default "absolute-paths")
977

    
978
Example:
979

    
980
-> { "execute": "transaction",
981
     "arguments": { "actions": [
982
         { 'type': 'blockdev-snapshot-sync', 'data' : { "device": "ide-hd0",
983
                                         "snapshot-file": "/some/place/my-image",
984
                                         "format": "qcow2" } },
985
         { 'type': 'blockdev-snapshot-sync', 'data' : { "device": "ide-hd1",
986
                                         "snapshot-file": "/some/place/my-image2",
987
                                         "mode": "existing",
988
                                         "format": "qcow2" } } ] } }
989
<- { "return": {} }
990

    
991
EQMP
992

    
993
    {
994
        .name       = "blockdev-snapshot-sync",
995
        .args_type  = "device:B,snapshot-file:s,format:s?,mode:s?",
996
        .mhandler.cmd_new = qmp_marshal_input_blockdev_snapshot_sync,
997
    },
998

    
999
SQMP
1000
blockdev-snapshot-sync
1001
----------------------
1002

    
1003
Synchronous snapshot of a block device. snapshot-file specifies the
1004
target of the new image. If the file exists, or if it is a device, the
1005
snapshot will be created in the existing file/device. If does not
1006
exist, a new file will be created. format specifies the format of the
1007
snapshot image, default is qcow2.
1008

    
1009
Arguments:
1010

    
1011
- "device": device name to snapshot (json-string)
1012
- "snapshot-file": name of new image file (json-string)
1013
- "mode": whether and how QEMU should create the snapshot file
1014
  (NewImageMode, optional, default "absolute-paths")
1015
- "format": format of new image (json-string, optional)
1016

    
1017
Example:
1018

    
1019
-> { "execute": "blockdev-snapshot-sync", "arguments": { "device": "ide-hd0",
1020
                                                         "snapshot-file":
1021
                                                        "/some/place/my-image",
1022
                                                        "format": "qcow2" } }
1023
<- { "return": {} }
1024

    
1025
EQMP
1026

    
1027
    {
1028
        .name       = "drive-mirror",
1029
        .args_type  = "sync:s,device:B,target:s,speed:i?,mode:s?,format:s?,"
1030
                      "on-source-error:s?,on-target-error:s?,"
1031
                      "granularity:i?,buf-size:i?",
1032
        .mhandler.cmd_new = qmp_marshal_input_drive_mirror,
1033
    },
1034

    
1035
SQMP
1036
drive-mirror
1037
------------
1038

    
1039
Start mirroring a block device's writes to a new destination. target
1040
specifies the target of the new image. If the file exists, or if it is
1041
a device, it will be used as the new destination for writes. If it does not
1042
exist, a new file will be created. format specifies the format of the
1043
mirror image, default is to probe if mode='existing', else the format
1044
of the source.
1045

    
1046
Arguments:
1047

    
1048
- "device": device name to operate on (json-string)
1049
- "target": name of new image file (json-string)
1050
- "format": format of new image (json-string, optional)
1051
- "mode": how an image file should be created into the target
1052
  file/device (NewImageMode, optional, default 'absolute-paths')
1053
- "speed": maximum speed of the streaming job, in bytes per second
1054
  (json-int)
1055
- "granularity": granularity of the dirty bitmap, in bytes (json-int, optional)
1056
- "buf_size": maximum amount of data in flight from source to target, in bytes
1057
  (json-int, default 10M)
1058
- "sync": what parts of the disk image should be copied to the destination;
1059
  possibilities include "full" for all the disk, "top" for only the sectors
1060
  allocated in the topmost image, or "none" to only replicate new I/O
1061
  (MirrorSyncMode).
1062
- "on-source-error": the action to take on an error on the source
1063
  (BlockdevOnError, default 'report')
1064
- "on-target-error": the action to take on an error on the target
1065
  (BlockdevOnError, default 'report')
1066

    
1067
The default value of the granularity is the image cluster size clamped
1068
between 4096 and 65536, if the image format defines one.  If the format
1069
does not define a cluster size, the default value of the granularity
1070
is 65536.
1071

    
1072

    
1073
Example:
1074

    
1075
-> { "execute": "drive-mirror", "arguments": { "device": "ide-hd0",
1076
                                               "target": "/some/place/my-image",
1077
                                               "sync": "full",
1078
                                               "format": "qcow2" } }
1079
<- { "return": {} }
1080

    
1081
EQMP
1082

    
1083
    {
1084
        .name       = "balloon",
1085
        .args_type  = "value:M",
1086
        .mhandler.cmd_new = qmp_marshal_input_balloon,
1087
    },
1088

    
1089
SQMP
1090
balloon
1091
-------
1092

    
1093
Request VM to change its memory allocation (in bytes).
1094

    
1095
Arguments:
1096

    
1097
- "value": New memory allocation (json-int)
1098

    
1099
Example:
1100

    
1101
-> { "execute": "balloon", "arguments": { "value": 536870912 } }
1102
<- { "return": {} }
1103

    
1104
EQMP
1105

    
1106
    {
1107
        .name       = "set_link",
1108
        .args_type  = "name:s,up:b",
1109
        .mhandler.cmd_new = qmp_marshal_input_set_link,
1110
    },
1111

    
1112
SQMP
1113
set_link
1114
--------
1115

    
1116
Change the link status of a network adapter.
1117

    
1118
Arguments:
1119

    
1120
- "name": network device name (json-string)
1121
- "up": status is up (json-bool)
1122

    
1123
Example:
1124

    
1125
-> { "execute": "set_link", "arguments": { "name": "e1000.0", "up": false } }
1126
<- { "return": {} }
1127

    
1128
EQMP
1129

    
1130
    {
1131
        .name       = "getfd",
1132
        .args_type  = "fdname:s",
1133
        .params     = "getfd name",
1134
        .help       = "receive a file descriptor via SCM rights and assign it a name",
1135
        .mhandler.cmd_new = qmp_marshal_input_getfd,
1136
    },
1137

    
1138
SQMP
1139
getfd
1140
-----
1141

    
1142
Receive a file descriptor via SCM rights and assign it a name.
1143

    
1144
Arguments:
1145

    
1146
- "fdname": file descriptor name (json-string)
1147

    
1148
Example:
1149

    
1150
-> { "execute": "getfd", "arguments": { "fdname": "fd1" } }
1151
<- { "return": {} }
1152

    
1153
Notes:
1154

    
1155
(1) If the name specified by the "fdname" argument already exists,
1156
    the file descriptor assigned to it will be closed and replaced
1157
    by the received file descriptor.
1158
(2) The 'closefd' command can be used to explicitly close the file
1159
    descriptor when it is no longer needed.
1160

    
1161
EQMP
1162

    
1163
    {
1164
        .name       = "closefd",
1165
        .args_type  = "fdname:s",
1166
        .params     = "closefd name",
1167
        .help       = "close a file descriptor previously passed via SCM rights",
1168
        .mhandler.cmd_new = qmp_marshal_input_closefd,
1169
    },
1170

    
1171
SQMP
1172
closefd
1173
-------
1174

    
1175
Close a file descriptor previously passed via SCM rights.
1176

    
1177
Arguments:
1178

    
1179
- "fdname": file descriptor name (json-string)
1180

    
1181
Example:
1182

    
1183
-> { "execute": "closefd", "arguments": { "fdname": "fd1" } }
1184
<- { "return": {} }
1185

    
1186
EQMP
1187

    
1188
     {
1189
        .name       = "add-fd",
1190
        .args_type  = "fdset-id:i?,opaque:s?",
1191
        .params     = "add-fd fdset-id opaque",
1192
        .help       = "Add a file descriptor, that was passed via SCM rights, to an fd set",
1193
        .mhandler.cmd_new = qmp_marshal_input_add_fd,
1194
    },
1195

    
1196
SQMP
1197
add-fd
1198
-------
1199

    
1200
Add a file descriptor, that was passed via SCM rights, to an fd set.
1201

    
1202
Arguments:
1203

    
1204
- "fdset-id": The ID of the fd set to add the file descriptor to.
1205
              (json-int, optional)
1206
- "opaque": A free-form string that can be used to describe the fd.
1207
            (json-string, optional)
1208

    
1209
Return a json-object with the following information:
1210

    
1211
- "fdset-id": The ID of the fd set that the fd was added to. (json-int)
1212
- "fd": The file descriptor that was received via SCM rights and added to the
1213
        fd set. (json-int)
1214

    
1215
Example:
1216

    
1217
-> { "execute": "add-fd", "arguments": { "fdset-id": 1 } }
1218
<- { "return": { "fdset-id": 1, "fd": 3 } }
1219

    
1220
Notes:
1221

    
1222
(1) The list of fd sets is shared by all monitor connections.
1223
(2) If "fdset-id" is not specified, a new fd set will be created.
1224

    
1225
EQMP
1226

    
1227
     {
1228
        .name       = "remove-fd",
1229
        .args_type  = "fdset-id:i,fd:i?",
1230
        .params     = "remove-fd fdset-id fd",
1231
        .help       = "Remove a file descriptor from an fd set",
1232
        .mhandler.cmd_new = qmp_marshal_input_remove_fd,
1233
    },
1234

    
1235
SQMP
1236
remove-fd
1237
---------
1238

    
1239
Remove a file descriptor from an fd set.
1240

    
1241
Arguments:
1242

    
1243
- "fdset-id": The ID of the fd set that the file descriptor belongs to.
1244
              (json-int)
1245
- "fd": The file descriptor that is to be removed. (json-int, optional)
1246

    
1247
Example:
1248

    
1249
-> { "execute": "remove-fd", "arguments": { "fdset-id": 1, "fd": 3 } }
1250
<- { "return": {} }
1251

    
1252
Notes:
1253

    
1254
(1) The list of fd sets is shared by all monitor connections.
1255
(2) If "fd" is not specified, all file descriptors in "fdset-id" will be
1256
    removed.
1257

    
1258
EQMP
1259

    
1260
    {
1261
        .name       = "query-fdsets",
1262
        .args_type  = "",
1263
        .help       = "Return information describing all fd sets",
1264
        .mhandler.cmd_new = qmp_marshal_input_query_fdsets,
1265
    },
1266

    
1267
SQMP
1268
query-fdsets
1269
-------------
1270

    
1271
Return information describing all fd sets.
1272

    
1273
Arguments: None
1274

    
1275
Example:
1276

    
1277
-> { "execute": "query-fdsets" }
1278
<- { "return": [
1279
       {
1280
         "fds": [
1281
           {
1282
             "fd": 30,
1283
             "opaque": "rdonly:/path/to/file"
1284
           },
1285
           {
1286
             "fd": 24,
1287
             "opaque": "rdwr:/path/to/file"
1288
           }
1289
         ],
1290
         "fdset-id": 1
1291
       },
1292
       {
1293
         "fds": [
1294
           {
1295
             "fd": 28
1296
           },
1297
           {
1298
             "fd": 29
1299
           }
1300
         ],
1301
         "fdset-id": 0
1302
       }
1303
     ]
1304
   }
1305

    
1306
Note: The list of fd sets is shared by all monitor connections.
1307

    
1308
EQMP
1309

    
1310
    {
1311
        .name       = "block_passwd",
1312
        .args_type  = "device:B,password:s",
1313
        .mhandler.cmd_new = qmp_marshal_input_block_passwd,
1314
    },
1315

    
1316
SQMP
1317
block_passwd
1318
------------
1319

    
1320
Set the password of encrypted block devices.
1321

    
1322
Arguments:
1323

    
1324
- "device": device name (json-string)
1325
- "password": password (json-string)
1326

    
1327
Example:
1328

    
1329
-> { "execute": "block_passwd", "arguments": { "device": "ide0-hd0",
1330
                                               "password": "12345" } }
1331
<- { "return": {} }
1332

    
1333
EQMP
1334

    
1335
    {
1336
        .name       = "block_set_io_throttle",
1337
        .args_type  = "device:B,bps:l,bps_rd:l,bps_wr:l,iops:l,iops_rd:l,iops_wr:l",
1338
        .mhandler.cmd_new = qmp_marshal_input_block_set_io_throttle,
1339
    },
1340

    
1341
SQMP
1342
block_set_io_throttle
1343
------------
1344

    
1345
Change I/O throttle limits for a block drive.
1346

    
1347
Arguments:
1348

    
1349
- "device": device name (json-string)
1350
- "bps":  total throughput limit in bytes per second(json-int)
1351
- "bps_rd":  read throughput limit in bytes per second(json-int)
1352
- "bps_wr":  read throughput limit in bytes per second(json-int)
1353
- "iops":  total I/O operations per second(json-int)
1354
- "iops_rd":  read I/O operations per second(json-int)
1355
- "iops_wr":  write I/O operations per second(json-int)
1356

    
1357
Example:
1358

    
1359
-> { "execute": "block_set_io_throttle", "arguments": { "device": "virtio0",
1360
                                               "bps": "1000000",
1361
                                               "bps_rd": "0",
1362
                                               "bps_wr": "0",
1363
                                               "iops": "0",
1364
                                               "iops_rd": "0",
1365
                                               "iops_wr": "0" } }
1366
<- { "return": {} }
1367

    
1368
EQMP
1369

    
1370
    {
1371
        .name       = "set_password",
1372
        .args_type  = "protocol:s,password:s,connected:s?",
1373
        .mhandler.cmd_new = qmp_marshal_input_set_password,
1374
    },
1375

    
1376
SQMP
1377
set_password
1378
------------
1379

    
1380
Set the password for vnc/spice protocols.
1381

    
1382
Arguments:
1383

    
1384
- "protocol": protocol name (json-string)
1385
- "password": password (json-string)
1386
- "connected": [ keep | disconnect | fail ] (josn-string, optional)
1387

    
1388
Example:
1389

    
1390
-> { "execute": "set_password", "arguments": { "protocol": "vnc",
1391
                                               "password": "secret" } }
1392
<- { "return": {} }
1393

    
1394
EQMP
1395

    
1396
    {
1397
        .name       = "expire_password",
1398
        .args_type  = "protocol:s,time:s",
1399
        .mhandler.cmd_new = qmp_marshal_input_expire_password,
1400
    },
1401

    
1402
SQMP
1403
expire_password
1404
---------------
1405

    
1406
Set the password expire time for vnc/spice protocols.
1407

    
1408
Arguments:
1409

    
1410
- "protocol": protocol name (json-string)
1411
- "time": [ now | never | +secs | secs ] (json-string)
1412

    
1413
Example:
1414

    
1415
-> { "execute": "expire_password", "arguments": { "protocol": "vnc",
1416
                                                  "time": "+60" } }
1417
<- { "return": {} }
1418

    
1419
EQMP
1420

    
1421
    {
1422
        .name       = "add_client",
1423
        .args_type  = "protocol:s,fdname:s,skipauth:b?,tls:b?",
1424
        .mhandler.cmd_new = qmp_marshal_input_add_client,
1425
    },
1426

    
1427
SQMP
1428
add_client
1429
----------
1430

    
1431
Add a graphics client
1432

    
1433
Arguments:
1434

    
1435
- "protocol": protocol name (json-string)
1436
- "fdname": file descriptor name (json-string)
1437
- "skipauth": whether to skip authentication (json-bool, optional)
1438
- "tls": whether to perform TLS (json-bool, optional)
1439

    
1440
Example:
1441

    
1442
-> { "execute": "add_client", "arguments": { "protocol": "vnc",
1443
                                             "fdname": "myclient" } }
1444
<- { "return": {} }
1445

    
1446
EQMP
1447
    {
1448
        .name       = "qmp_capabilities",
1449
        .args_type  = "",
1450
        .params     = "",
1451
        .help       = "enable QMP capabilities",
1452
        .user_print = monitor_user_noop,
1453
        .mhandler.cmd_new = do_qmp_capabilities,
1454
    },
1455

    
1456
SQMP
1457
qmp_capabilities
1458
----------------
1459

    
1460
Enable QMP capabilities.
1461

    
1462
Arguments: None.
1463

    
1464
Example:
1465

    
1466
-> { "execute": "qmp_capabilities" }
1467
<- { "return": {} }
1468

    
1469
Note: This command must be issued before issuing any other command.
1470

    
1471
EQMP
1472

    
1473
    {
1474
        .name       = "human-monitor-command",
1475
        .args_type  = "command-line:s,cpu-index:i?",
1476
        .mhandler.cmd_new = qmp_marshal_input_human_monitor_command,
1477
    },
1478

    
1479
SQMP
1480
human-monitor-command
1481
---------------------
1482

    
1483
Execute a Human Monitor command.
1484

    
1485
Arguments: 
1486

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

    
1493
Example:
1494

    
1495
-> { "execute": "human-monitor-command", "arguments": { "command-line": "info kvm" } }
1496
<- { "return": "kvm support: enabled\r\n" }
1497

    
1498
Notes:
1499

    
1500
(1) The Human Monitor is NOT an stable interface, this means that command
1501
    names, arguments and responses can change or be removed at ANY time.
1502
    Applications that rely on long term stability guarantees should NOT
1503
    use this command
1504

    
1505
(2) Limitations:
1506

    
1507
    o This command is stateless, this means that commands that depend
1508
      on state information (such as getfd) might not work
1509

    
1510
    o Commands that prompt the user for data (eg. 'cont' when the block
1511
      device is encrypted) don't currently work
1512

    
1513
3. Query Commands
1514
=================
1515

    
1516
HXCOMM Each query command below is inside a SQMP/EQMP section, do NOT change
1517
HXCOMM this! We will possibly move query commands definitions inside those
1518
HXCOMM sections, just like regular commands.
1519

    
1520
EQMP
1521

    
1522
SQMP
1523
query-version
1524
-------------
1525

    
1526
Show QEMU version.
1527

    
1528
Return a json-object with the following information:
1529

    
1530
- "qemu": A json-object containing three integer values:
1531
    - "major": QEMU's major version (json-int)
1532
    - "minor": QEMU's minor version (json-int)
1533
    - "micro": QEMU's micro version (json-int)
1534
- "package": package's version (json-string)
1535

    
1536
Example:
1537

    
1538
-> { "execute": "query-version" }
1539
<- {
1540
      "return":{
1541
         "qemu":{
1542
            "major":0,
1543
            "minor":11,
1544
            "micro":5
1545
         },
1546
         "package":""
1547
      }
1548
   }
1549

    
1550
EQMP
1551

    
1552
    {
1553
        .name       = "query-version",
1554
        .args_type  = "",
1555
        .mhandler.cmd_new = qmp_marshal_input_query_version,
1556
    },
1557

    
1558
SQMP
1559
query-commands
1560
--------------
1561

    
1562
List QMP available commands.
1563

    
1564
Each command is represented by a json-object, the returned value is a json-array
1565
of all commands.
1566

    
1567
Each json-object contain:
1568

    
1569
- "name": command's name (json-string)
1570

    
1571
Example:
1572

    
1573
-> { "execute": "query-commands" }
1574
<- {
1575
      "return":[
1576
         {
1577
            "name":"query-balloon"
1578
         },
1579
         {
1580
            "name":"system_powerdown"
1581
         }
1582
      ]
1583
   }
1584

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

    
1587
EQMP
1588

    
1589
    {
1590
        .name       = "query-commands",
1591
        .args_type  = "",
1592
        .mhandler.cmd_new = qmp_marshal_input_query_commands,
1593
    },
1594

    
1595
SQMP
1596
query-events
1597
--------------
1598

    
1599
List QMP available events.
1600

    
1601
Each event is represented by a json-object, the returned value is a json-array
1602
of all events.
1603

    
1604
Each json-object contains:
1605

    
1606
- "name": event's name (json-string)
1607

    
1608
Example:
1609

    
1610
-> { "execute": "query-events" }
1611
<- {
1612
      "return":[
1613
         {
1614
            "name":"SHUTDOWN"
1615
         },
1616
         {
1617
            "name":"RESET"
1618
         }
1619
      ]
1620
   }
1621

    
1622
Note: This example has been shortened as the real response is too long.
1623

    
1624
EQMP
1625

    
1626
    {
1627
        .name       = "query-events",
1628
        .args_type  = "",
1629
        .mhandler.cmd_new = qmp_marshal_input_query_events,
1630
    },
1631

    
1632
SQMP
1633
query-chardev
1634
-------------
1635

    
1636
Each device is represented by a json-object. The returned value is a json-array
1637
of all devices.
1638

    
1639
Each json-object contain the following:
1640

    
1641
- "label": device's label (json-string)
1642
- "filename": device's file (json-string)
1643

    
1644
Example:
1645

    
1646
-> { "execute": "query-chardev" }
1647
<- {
1648
      "return":[
1649
         {
1650
            "label":"monitor",
1651
            "filename":"stdio"
1652
         },
1653
         {
1654
            "label":"serial0",
1655
            "filename":"vc"
1656
         }
1657
      ]
1658
   }
1659

    
1660
EQMP
1661

    
1662
    {
1663
        .name       = "query-chardev",
1664
        .args_type  = "",
1665
        .mhandler.cmd_new = qmp_marshal_input_query_chardev,
1666
    },
1667

    
1668
SQMP
1669
query-block
1670
-----------
1671

    
1672
Show the block devices.
1673

    
1674
Each block device information is stored in a json-object and the returned value
1675
is a json-array of all devices.
1676

    
1677
Each json-object contain the following:
1678

    
1679
- "device": device name (json-string)
1680
- "type": device type (json-string)
1681
         - deprecated, retained for backward compatibility
1682
         - Possible values: "unknown"
1683
- "removable": true if the device is removable, false otherwise (json-bool)
1684
- "locked": true if the device is locked, false otherwise (json-bool)
1685
- "tray_open": only present if removable, true if the device has a tray,
1686
               and it is open (json-bool)
1687
- "inserted": only present if the device is inserted, it is a json-object
1688
   containing the following:
1689
         - "file": device file name (json-string)
1690
         - "ro": true if read-only, false otherwise (json-bool)
1691
         - "drv": driver format name (json-string)
1692
             - Possible values: "blkdebug", "bochs", "cloop", "cow", "dmg",
1693
                                "file", "file", "ftp", "ftps", "host_cdrom",
1694
                                "host_device", "host_floppy", "http", "https",
1695
                                "nbd", "parallels", "qcow", "qcow2", "raw",
1696
                                "tftp", "vdi", "vmdk", "vpc", "vvfat"
1697
         - "backing_file": backing file name (json-string, optional)
1698
         - "backing_file_depth": number of files in the backing file chain (json-int)
1699
         - "encrypted": true if encrypted, false otherwise (json-bool)
1700
         - "bps": limit total bytes per second (json-int)
1701
         - "bps_rd": limit read bytes per second (json-int)
1702
         - "bps_wr": limit write bytes per second (json-int)
1703
         - "iops": limit total I/O operations per second (json-int)
1704
         - "iops_rd": limit read operations per second (json-int)
1705
         - "iops_wr": limit write operations per second (json-int)
1706

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

    
1712
Example:
1713

    
1714
-> { "execute": "query-block" }
1715
<- {
1716
      "return":[
1717
         {
1718
            "io-status": "ok",
1719
            "device":"ide0-hd0",
1720
            "locked":false,
1721
            "removable":false,
1722
            "inserted":{
1723
               "ro":false,
1724
               "drv":"qcow2",
1725
               "encrypted":false,
1726
               "file":"disks/test.img",
1727
               "backing_file_depth":0,
1728
               "bps":1000000,
1729
               "bps_rd":0,
1730
               "bps_wr":0,
1731
               "iops":1000000,
1732
               "iops_rd":0,
1733
               "iops_wr":0,
1734
            },
1735
            "type":"unknown"
1736
         },
1737
         {
1738
            "io-status": "ok",
1739
            "device":"ide1-cd0",
1740
            "locked":false,
1741
            "removable":true,
1742
            "type":"unknown"
1743
         },
1744
         {
1745
            "device":"floppy0",
1746
            "locked":false,
1747
            "removable":true,
1748
            "type":"unknown"
1749
         },
1750
         {
1751
            "device":"sd0",
1752
            "locked":false,
1753
            "removable":true,
1754
            "type":"unknown"
1755
         }
1756
      ]
1757
   }
1758

    
1759
EQMP
1760

    
1761
    {
1762
        .name       = "query-block",
1763
        .args_type  = "",
1764
        .mhandler.cmd_new = qmp_marshal_input_query_block,
1765
    },
1766

    
1767
SQMP
1768
query-blockstats
1769
----------------
1770

    
1771
Show block device statistics.
1772

    
1773
Each device statistic information is stored in a json-object and the returned
1774
value is a json-array of all devices.
1775

    
1776
Each json-object contain the following:
1777

    
1778
- "device": device name (json-string)
1779
- "stats": A json-object with the statistics information, it contains:
1780
    - "rd_bytes": bytes read (json-int)
1781
    - "wr_bytes": bytes written (json-int)
1782
    - "rd_operations": read operations (json-int)
1783
    - "wr_operations": write operations (json-int)
1784
    - "flush_operations": cache flush operations (json-int)
1785
    - "wr_total_time_ns": total time spend on writes in nano-seconds (json-int)
1786
    - "rd_total_time_ns": total time spend on reads in nano-seconds (json-int)
1787
    - "flush_total_time_ns": total time spend on cache flushes in nano-seconds (json-int)
1788
    - "wr_highest_offset": Highest offset of a sector written since the
1789
                           BlockDriverState has been opened (json-int)
1790
- "parent": Contains recursively the statistics of the underlying
1791
            protocol (e.g. the host file for a qcow2 image). If there is
1792
            no underlying protocol, this field is omitted
1793
            (json-object, optional)
1794

    
1795
Example:
1796

    
1797
-> { "execute": "query-blockstats" }
1798
<- {
1799
      "return":[
1800
         {
1801
            "device":"ide0-hd0",
1802
            "parent":{
1803
               "stats":{
1804
                  "wr_highest_offset":3686448128,
1805
                  "wr_bytes":9786368,
1806
                  "wr_operations":751,
1807
                  "rd_bytes":122567168,
1808
                  "rd_operations":36772
1809
                  "wr_total_times_ns":313253456
1810
                  "rd_total_times_ns":3465673657
1811
                  "flush_total_times_ns":49653
1812
                  "flush_operations":61,
1813
               }
1814
            },
1815
            "stats":{
1816
               "wr_highest_offset":2821110784,
1817
               "wr_bytes":9786368,
1818
               "wr_operations":692,
1819
               "rd_bytes":122739200,
1820
               "rd_operations":36604
1821
               "flush_operations":51,
1822
               "wr_total_times_ns":313253456
1823
               "rd_total_times_ns":3465673657
1824
               "flush_total_times_ns":49653
1825
            }
1826
         },
1827
         {
1828
            "device":"ide1-cd0",
1829
            "stats":{
1830
               "wr_highest_offset":0,
1831
               "wr_bytes":0,
1832
               "wr_operations":0,
1833
               "rd_bytes":0,
1834
               "rd_operations":0
1835
               "flush_operations":0,
1836
               "wr_total_times_ns":0
1837
               "rd_total_times_ns":0
1838
               "flush_total_times_ns":0
1839
            }
1840
         },
1841
         {
1842
            "device":"floppy0",
1843
            "stats":{
1844
               "wr_highest_offset":0,
1845
               "wr_bytes":0,
1846
               "wr_operations":0,
1847
               "rd_bytes":0,
1848
               "rd_operations":0
1849
               "flush_operations":0,
1850
               "wr_total_times_ns":0
1851
               "rd_total_times_ns":0
1852
               "flush_total_times_ns":0
1853
            }
1854
         },
1855
         {
1856
            "device":"sd0",
1857
            "stats":{
1858
               "wr_highest_offset":0,
1859
               "wr_bytes":0,
1860
               "wr_operations":0,
1861
               "rd_bytes":0,
1862
               "rd_operations":0
1863
               "flush_operations":0,
1864
               "wr_total_times_ns":0
1865
               "rd_total_times_ns":0
1866
               "flush_total_times_ns":0
1867
            }
1868
         }
1869
      ]
1870
   }
1871

    
1872
EQMP
1873

    
1874
    {
1875
        .name       = "query-blockstats",
1876
        .args_type  = "",
1877
        .mhandler.cmd_new = qmp_marshal_input_query_blockstats,
1878
    },
1879

    
1880
SQMP
1881
query-cpus
1882
----------
1883

    
1884
Show CPU information.
1885

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

    
1888
- "CPU": CPU index (json-int)
1889
- "current": true if this is the current CPU, false otherwise (json-bool)
1890
- "halted": true if the cpu is halted, false otherwise (json-bool)
1891
- Current program counter. The key's name depends on the architecture:
1892
     "pc": i386/x86_64 (json-int)
1893
     "nip": PPC (json-int)
1894
     "pc" and "npc": sparc (json-int)
1895
     "PC": mips (json-int)
1896
- "thread_id": ID of the underlying host thread (json-int)
1897

    
1898
Example:
1899

    
1900
-> { "execute": "query-cpus" }
1901
<- {
1902
      "return":[
1903
         {
1904
            "CPU":0,
1905
            "current":true,
1906
            "halted":false,
1907
            "pc":3227107138
1908
            "thread_id":3134
1909
         },
1910
         {
1911
            "CPU":1,
1912
            "current":false,
1913
            "halted":true,
1914
            "pc":7108165
1915
            "thread_id":3135
1916
         }
1917
      ]
1918
   }
1919

    
1920
EQMP
1921

    
1922
    {
1923
        .name       = "query-cpus",
1924
        .args_type  = "",
1925
        .mhandler.cmd_new = qmp_marshal_input_query_cpus,
1926
    },
1927

    
1928
SQMP
1929
query-pci
1930
---------
1931

    
1932
PCI buses and devices information.
1933

    
1934
The returned value is a json-array of all buses. Each bus is represented by
1935
a json-object, which has a key with a json-array of all PCI devices attached
1936
to it. Each device is represented by a json-object.
1937

    
1938
The bus json-object contains the following:
1939

    
1940
- "bus": bus number (json-int)
1941
- "devices": a json-array of json-objects, each json-object represents a
1942
             PCI device
1943

    
1944
The PCI device json-object contains the following:
1945

    
1946
- "bus": identical to the parent's bus number (json-int)
1947
- "slot": slot number (json-int)
1948
- "function": function number (json-int)
1949
- "class_info": a json-object containing:
1950
     - "desc": device class description (json-string, optional)
1951
     - "class": device class number (json-int)
1952
- "id": a json-object containing:
1953
     - "device": device ID (json-int)
1954
     - "vendor": vendor ID (json-int)
1955
- "irq": device's IRQ if assigned (json-int, optional)
1956
- "qdev_id": qdev id string (json-string)
1957
- "pci_bridge": It's a json-object, only present if this device is a
1958
                PCI bridge, contains:
1959
     - "bus": bus number (json-int)
1960
     - "secondary": secondary bus number (json-int)
1961
     - "subordinate": subordinate bus number (json-int)
1962
     - "io_range": I/O memory range information, a json-object with the
1963
                   following members:
1964
                 - "base": base address, in bytes (json-int)
1965
                 - "limit": limit address, in bytes (json-int)
1966
     - "memory_range": memory range information, a json-object with the
1967
                       following members:
1968
                 - "base": base address, in bytes (json-int)
1969
                 - "limit": limit address, in bytes (json-int)
1970
     - "prefetchable_range": Prefetchable memory range information, a
1971
                             json-object with the following members:
1972
                 - "base": base address, in bytes (json-int)
1973
                 - "limit": limit address, in bytes (json-int)
1974
     - "devices": a json-array of PCI devices if there's any attached, each
1975
                  each element is represented by a json-object, which contains
1976
                  the same members of the 'PCI device json-object' described
1977
                  above (optional)
1978
- "regions": a json-array of json-objects, each json-object represents a
1979
             memory region of this device
1980

    
1981
The memory range json-object contains the following:
1982

    
1983
- "base": base memory address (json-int)
1984
- "limit": limit value (json-int)
1985

    
1986
The region json-object can be an I/O region or a memory region, an I/O region
1987
json-object contains the following:
1988

    
1989
- "type": "io" (json-string, fixed)
1990
- "bar": BAR number (json-int)
1991
- "address": memory address (json-int)
1992
- "size": memory size (json-int)
1993

    
1994
A memory region json-object contains the following:
1995

    
1996
- "type": "memory" (json-string, fixed)
1997
- "bar": BAR number (json-int)
1998
- "address": memory address (json-int)
1999
- "size": memory size (json-int)
2000
- "mem_type_64": true or false (json-bool)
2001
- "prefetch": true or false (json-bool)
2002

    
2003
Example:
2004

    
2005
-> { "execute": "query-pci" }
2006
<- {
2007
      "return":[
2008
         {
2009
            "bus":0,
2010
            "devices":[
2011
               {
2012
                  "bus":0,
2013
                  "qdev_id":"",
2014
                  "slot":0,
2015
                  "class_info":{
2016
                     "class":1536,
2017
                     "desc":"Host bridge"
2018
                  },
2019
                  "id":{
2020
                     "device":32902,
2021
                     "vendor":4663
2022
                  },
2023
                  "function":0,
2024
                  "regions":[
2025
   
2026
                  ]
2027
               },
2028
               {
2029
                  "bus":0,
2030
                  "qdev_id":"",
2031
                  "slot":1,
2032
                  "class_info":{
2033
                     "class":1537,
2034
                     "desc":"ISA bridge"
2035
                  },
2036
                  "id":{
2037
                     "device":32902,
2038
                     "vendor":28672
2039
                  },
2040
                  "function":0,
2041
                  "regions":[
2042
   
2043
                  ]
2044
               },
2045
               {
2046
                  "bus":0,
2047
                  "qdev_id":"",
2048
                  "slot":1,
2049
                  "class_info":{
2050
                     "class":257,
2051
                     "desc":"IDE controller"
2052
                  },
2053
                  "id":{
2054
                     "device":32902,
2055
                     "vendor":28688
2056
                  },
2057
                  "function":1,
2058
                  "regions":[
2059
                     {
2060
                        "bar":4,
2061
                        "size":16,
2062
                        "address":49152,
2063
                        "type":"io"
2064
                     }
2065
                  ]
2066
               },
2067
               {
2068
                  "bus":0,
2069
                  "qdev_id":"",
2070
                  "slot":2,
2071
                  "class_info":{
2072
                     "class":768,
2073
                     "desc":"VGA controller"
2074
                  },
2075
                  "id":{
2076
                     "device":4115,
2077
                     "vendor":184
2078
                  },
2079
                  "function":0,
2080
                  "regions":[
2081
                     {
2082
                        "prefetch":true,
2083
                        "mem_type_64":false,
2084
                        "bar":0,
2085
                        "size":33554432,
2086
                        "address":4026531840,
2087
                        "type":"memory"
2088
                     },
2089
                     {
2090
                        "prefetch":false,
2091
                        "mem_type_64":false,
2092
                        "bar":1,
2093
                        "size":4096,
2094
                        "address":4060086272,
2095
                        "type":"memory"
2096
                     },
2097
                     {
2098
                        "prefetch":false,
2099
                        "mem_type_64":false,
2100
                        "bar":6,
2101
                        "size":65536,
2102
                        "address":-1,
2103
                        "type":"memory"
2104
                     }
2105
                  ]
2106
               },
2107
               {
2108
                  "bus":0,
2109
                  "qdev_id":"",
2110
                  "irq":11,
2111
                  "slot":4,
2112
                  "class_info":{
2113
                     "class":1280,
2114
                     "desc":"RAM controller"
2115
                  },
2116
                  "id":{
2117
                     "device":6900,
2118
                     "vendor":4098
2119
                  },
2120
                  "function":0,
2121
                  "regions":[
2122
                     {
2123
                        "bar":0,
2124
                        "size":32,
2125
                        "address":49280,
2126
                        "type":"io"
2127
                     }
2128
                  ]
2129
               }
2130
            ]
2131
         }
2132
      ]
2133
   }
2134

    
2135
Note: This example has been shortened as the real response is too long.
2136

    
2137
EQMP
2138

    
2139
    {
2140
        .name       = "query-pci",
2141
        .args_type  = "",
2142
        .mhandler.cmd_new = qmp_marshal_input_query_pci,
2143
    },
2144

    
2145
SQMP
2146
query-kvm
2147
---------
2148

    
2149
Show KVM information.
2150

    
2151
Return a json-object with the following information:
2152

    
2153
- "enabled": true if KVM support is enabled, false otherwise (json-bool)
2154
- "present": true if QEMU has KVM support, false otherwise (json-bool)
2155

    
2156
Example:
2157

    
2158
-> { "execute": "query-kvm" }
2159
<- { "return": { "enabled": true, "present": true } }
2160

    
2161
EQMP
2162

    
2163
    {
2164
        .name       = "query-kvm",
2165
        .args_type  = "",
2166
        .mhandler.cmd_new = qmp_marshal_input_query_kvm,
2167
    },
2168

    
2169
SQMP
2170
query-status
2171
------------
2172

    
2173
Return a json-object with the following information:
2174

    
2175
- "running": true if the VM is running, or false if it is paused (json-bool)
2176
- "singlestep": true if the VM is in single step mode,
2177
                false otherwise (json-bool)
2178
- "status": one of the following values (json-string)
2179
    "debug" - QEMU is running on a debugger
2180
    "inmigrate" - guest is paused waiting for an incoming migration
2181
    "internal-error" - An internal error that prevents further guest
2182
    execution has occurred
2183
    "io-error" - the last IOP has failed and the device is configured
2184
    to pause on I/O errors
2185
    "paused" - guest has been paused via the 'stop' command
2186
    "postmigrate" - guest is paused following a successful 'migrate'
2187
    "prelaunch" - QEMU was started with -S and guest has not started
2188
    "finish-migrate" - guest is paused to finish the migration process
2189
    "restore-vm" - guest is paused to restore VM state
2190
    "running" - guest is actively running
2191
    "save-vm" - guest is paused to save the VM state
2192
    "shutdown" - guest is shut down (and -no-shutdown is in use)
2193
    "watchdog" - the watchdog action is configured to pause and
2194
     has been triggered
2195

    
2196
Example:
2197

    
2198
-> { "execute": "query-status" }
2199
<- { "return": { "running": true, "singlestep": false, "status": "running" } }
2200

    
2201
EQMP
2202
    
2203
    {
2204
        .name       = "query-status",
2205
        .args_type  = "",
2206
        .mhandler.cmd_new = qmp_marshal_input_query_status,
2207
    },
2208

    
2209
SQMP
2210
query-mice
2211
----------
2212

    
2213
Show VM mice information.
2214

    
2215
Each mouse is represented by a json-object, the returned value is a json-array
2216
of all mice.
2217

    
2218
The mouse json-object contains the following:
2219

    
2220
- "name": mouse's name (json-string)
2221
- "index": mouse's index (json-int)
2222
- "current": true if this mouse is receiving events, false otherwise (json-bool)
2223
- "absolute": true if the mouse generates absolute input events (json-bool)
2224

    
2225
Example:
2226

    
2227
-> { "execute": "query-mice" }
2228
<- {
2229
      "return":[
2230
         {
2231
            "name":"QEMU Microsoft Mouse",
2232
            "index":0,
2233
            "current":false,
2234
            "absolute":false
2235
         },
2236
         {
2237
            "name":"QEMU PS/2 Mouse",
2238
            "index":1,
2239
            "current":true,
2240
            "absolute":true
2241
         }
2242
      ]
2243
   }
2244

    
2245
EQMP
2246

    
2247
    {
2248
        .name       = "query-mice",
2249
        .args_type  = "",
2250
        .mhandler.cmd_new = qmp_marshal_input_query_mice,
2251
    },
2252

    
2253
SQMP
2254
query-vnc
2255
---------
2256

    
2257
Show VNC server information.
2258

    
2259
Return a json-object with server information. Connected clients are returned
2260
as a json-array of json-objects.
2261

    
2262
The main json-object contains the following:
2263

    
2264
- "enabled": true or false (json-bool)
2265
- "host": server's IP address (json-string)
2266
- "family": address family (json-string)
2267
         - Possible values: "ipv4", "ipv6", "unix", "unknown"
2268
- "service": server's port number (json-string)
2269
- "auth": authentication method (json-string)
2270
         - Possible values: "invalid", "none", "ra2", "ra2ne", "sasl", "tight",
2271
                            "tls", "ultra", "unknown", "vencrypt", "vencrypt",
2272
                            "vencrypt+plain", "vencrypt+tls+none",
2273
                            "vencrypt+tls+plain", "vencrypt+tls+sasl",
2274
                            "vencrypt+tls+vnc", "vencrypt+x509+none",
2275
                            "vencrypt+x509+plain", "vencrypt+x509+sasl",
2276
                            "vencrypt+x509+vnc", "vnc"
2277
- "clients": a json-array of all connected clients
2278

    
2279
Clients are described by a json-object, each one contain the following:
2280

    
2281
- "host": client's IP address (json-string)
2282
- "family": address family (json-string)
2283
         - Possible values: "ipv4", "ipv6", "unix", "unknown"
2284
- "service": client's port number (json-string)
2285
- "x509_dname": TLS dname (json-string, optional)
2286
- "sasl_username": SASL username (json-string, optional)
2287

    
2288
Example:
2289

    
2290
-> { "execute": "query-vnc" }
2291
<- {
2292
      "return":{
2293
         "enabled":true,
2294
         "host":"0.0.0.0",
2295
         "service":"50402",
2296
         "auth":"vnc",
2297
         "family":"ipv4",
2298
         "clients":[
2299
            {
2300
               "host":"127.0.0.1",
2301
               "service":"50401",
2302
               "family":"ipv4"
2303
            }
2304
         ]
2305
      }
2306
   }
2307

    
2308
EQMP
2309

    
2310
    {
2311
        .name       = "query-vnc",
2312
        .args_type  = "",
2313
        .mhandler.cmd_new = qmp_marshal_input_query_vnc,
2314
    },
2315

    
2316
SQMP
2317
query-spice
2318
-----------
2319

    
2320
Show SPICE server information.
2321

    
2322
Return a json-object with server information. Connected clients are returned
2323
as a json-array of json-objects.
2324

    
2325
The main json-object contains the following:
2326

    
2327
- "enabled": true or false (json-bool)
2328
- "host": server's IP address (json-string)
2329
- "port": server's port number (json-int, optional)
2330
- "tls-port": server's port number (json-int, optional)
2331
- "auth": authentication method (json-string)
2332
         - Possible values: "none", "spice"
2333
- "channels": a json-array of all active channels clients
2334

    
2335
Channels are described by a json-object, each one contain the following:
2336

    
2337
- "host": client's IP address (json-string)
2338
- "family": address family (json-string)
2339
         - Possible values: "ipv4", "ipv6", "unix", "unknown"
2340
- "port": client's port number (json-string)
2341
- "connection-id": spice connection id.  All channels with the same id
2342
                   belong to the same spice session (json-int)
2343
- "channel-type": channel type.  "1" is the main control channel, filter for
2344
                  this one if you want track spice sessions only (json-int)
2345
- "channel-id": channel id.  Usually "0", might be different needed when
2346
                multiple channels of the same type exist, such as multiple
2347
                display channels in a multihead setup (json-int)
2348
- "tls": whevener the channel is encrypted (json-bool)
2349

    
2350
Example:
2351

    
2352
-> { "execute": "query-spice" }
2353
<- {
2354
      "return": {
2355
         "enabled": true,
2356
         "auth": "spice",
2357
         "port": 5920,
2358
         "tls-port": 5921,
2359
         "host": "0.0.0.0",
2360
         "channels": [
2361
            {
2362
               "port": "54924",
2363
               "family": "ipv4",
2364
               "channel-type": 1,
2365
               "connection-id": 1804289383,
2366
               "host": "127.0.0.1",
2367
               "channel-id": 0,
2368
               "tls": true
2369
            },
2370
            {
2371
               "port": "36710",
2372
               "family": "ipv4",
2373
               "channel-type": 4,
2374
               "connection-id": 1804289383,
2375
               "host": "127.0.0.1",
2376
               "channel-id": 0,
2377
               "tls": false
2378
            },
2379
            [ ... more channels follow ... ]
2380
         ]
2381
      }
2382
   }
2383

    
2384
EQMP
2385

    
2386
#if defined(CONFIG_SPICE)
2387
    {
2388
        .name       = "query-spice",
2389
        .args_type  = "",
2390
        .mhandler.cmd_new = qmp_marshal_input_query_spice,
2391
    },
2392
#endif
2393

    
2394
SQMP
2395
query-name
2396
----------
2397

    
2398
Show VM name.
2399

    
2400
Return a json-object with the following information:
2401

    
2402
- "name": VM's name (json-string, optional)
2403

    
2404
Example:
2405

    
2406
-> { "execute": "query-name" }
2407
<- { "return": { "name": "qemu-name" } }
2408

    
2409
EQMP
2410

    
2411
    {
2412
        .name       = "query-name",
2413
        .args_type  = "",
2414
        .mhandler.cmd_new = qmp_marshal_input_query_name,
2415
    },
2416

    
2417
SQMP
2418
query-uuid
2419
----------
2420

    
2421
Show VM UUID.
2422

    
2423
Return a json-object with the following information:
2424

    
2425
- "UUID": Universally Unique Identifier (json-string)
2426

    
2427
Example:
2428

    
2429
-> { "execute": "query-uuid" }
2430
<- { "return": { "UUID": "550e8400-e29b-41d4-a716-446655440000" } }
2431

    
2432
EQMP
2433

    
2434
    {
2435
        .name       = "query-uuid",
2436
        .args_type  = "",
2437
        .mhandler.cmd_new = qmp_marshal_input_query_uuid,
2438
    },
2439

    
2440
SQMP
2441
query-migrate
2442
-------------
2443

    
2444
Migration status.
2445

    
2446
Return a json-object. If migration is active there will be another json-object
2447
with RAM migration status and if block migration is active another one with
2448
block migration status.
2449

    
2450
The main json-object contains the following:
2451

    
2452
- "status": migration status (json-string)
2453
     - Possible values: "active", "completed", "failed", "cancelled"
2454
- "total-time": total amount of ms since migration started.  If
2455
                migration has ended, it returns the total migration
2456
		 time (json-int)
2457
- "downtime": only present when migration has finished correctly
2458
              total amount in ms for downtime that happened (json-int)
2459
- "expected-downtime": only present while migration is active
2460
                total amount in ms for downtime that was calculated on
2461
		the last bitmap round (json-int)
2462
- "ram": only present if "status" is "active", it is a json-object with the
2463
  following RAM information (in bytes):
2464
         - "transferred": amount transferred (json-int)
2465
         - "remaining": amount remaining (json-int)
2466
         - "total": total (json-int)
2467
         - "duplicate": number of duplicated pages (json-int)
2468
         - "normal" : number of normal pages transferred (json-int)
2469
         - "normal-bytes" : number of normal bytes transferred (json-int)
2470
- "disk": only present if "status" is "active" and it is a block migration,
2471
  it is a json-object with the following disk information (in bytes):
2472
         - "transferred": amount transferred (json-int)
2473
         - "remaining": amount remaining (json-int)
2474
         - "total": total (json-int)
2475
- "xbzrle-cache": only present if XBZRLE is active.
2476
  It is a json-object with the following XBZRLE information:
2477
         - "cache-size": XBZRLE cache size
2478
         - "bytes": total XBZRLE bytes transferred
2479
         - "pages": number of XBZRLE compressed pages
2480
         - "cache-miss": number of cache misses
2481
         - "overflow": number of XBZRLE overflows
2482
Examples:
2483

    
2484
1. Before the first migration
2485

    
2486
-> { "execute": "query-migrate" }
2487
<- { "return": {} }
2488

    
2489
2. Migration is done and has succeeded
2490

    
2491
-> { "execute": "query-migrate" }
2492
<- { "return": {
2493
        "status": "completed",
2494
        "ram":{
2495
          "transferred":123,
2496
          "remaining":123,
2497
          "total":246,
2498
          "total-time":12345,
2499
          "downtime":12345,
2500
          "duplicate":123,
2501
          "normal":123,
2502
          "normal-bytes":123456
2503
        }
2504
     }
2505
   }
2506

    
2507
3. Migration is done and has failed
2508

    
2509
-> { "execute": "query-migrate" }
2510
<- { "return": { "status": "failed" } }
2511

    
2512
4. Migration is being performed and is not a block migration:
2513

    
2514
-> { "execute": "query-migrate" }
2515
<- {
2516
      "return":{
2517
         "status":"active",
2518
         "ram":{
2519
            "transferred":123,
2520
            "remaining":123,
2521
            "total":246,
2522
            "total-time":12345,
2523
            "expected-downtime":12345,
2524
            "duplicate":123,
2525
            "normal":123,
2526
            "normal-bytes":123456
2527
         }
2528
      }
2529
   }
2530

    
2531
5. Migration is being performed and is a block migration:
2532

    
2533
-> { "execute": "query-migrate" }
2534
<- {
2535
      "return":{
2536
         "status":"active",
2537
         "ram":{
2538
            "total":1057024,
2539
            "remaining":1053304,
2540
            "transferred":3720,
2541
            "total-time":12345,
2542
            "expected-downtime":12345,
2543
            "duplicate":123,
2544
            "normal":123,
2545
            "normal-bytes":123456
2546
         },
2547
         "disk":{
2548
            "total":20971520,
2549
            "remaining":20880384,
2550
            "transferred":91136
2551
         }
2552
      }
2553
   }
2554

    
2555
6. Migration is being performed and XBZRLE is active:
2556

    
2557
-> { "execute": "query-migrate" }
2558
<- {
2559
      "return":{
2560
         "status":"active",
2561
         "capabilities" : [ { "capability": "xbzrle", "state" : true } ],
2562
         "ram":{
2563
            "total":1057024,
2564
            "remaining":1053304,
2565
            "transferred":3720,
2566
            "total-time":12345,
2567
            "expected-downtime":12345,
2568
            "duplicate":10,
2569
            "normal":3333,
2570
            "normal-bytes":3412992
2571
         },
2572
         "xbzrle-cache":{
2573
            "cache-size":67108864,
2574
            "bytes":20971520,
2575
            "pages":2444343,
2576
            "cache-miss":2244,
2577
            "overflow":34434
2578
         }
2579
      }
2580
   }
2581

    
2582
EQMP
2583

    
2584
    {
2585
        .name       = "query-migrate",
2586
        .args_type  = "",
2587
        .mhandler.cmd_new = qmp_marshal_input_query_migrate,
2588
    },
2589

    
2590
SQMP
2591
migrate-set-capabilities
2592
-------
2593

    
2594
Enable/Disable migration capabilities
2595

    
2596
- "xbzrle": xbzrle support
2597

    
2598
Arguments:
2599

    
2600
Example:
2601

    
2602
-> { "execute": "migrate-set-capabilities" , "arguments":
2603
     { "capabilities": [ { "capability": "xbzrle", "state": true } ] } }
2604

    
2605
EQMP
2606

    
2607
    {
2608
        .name       = "migrate-set-capabilities",
2609
        .args_type  = "capabilities:O",
2610
        .params     = "capability:s,state:b",
2611
	.mhandler.cmd_new = qmp_marshal_input_migrate_set_capabilities,
2612
    },
2613
SQMP
2614
query-migrate-capabilities
2615
-------
2616

    
2617
Query current migration capabilities
2618

    
2619
- "capabilities": migration capabilities state
2620
         - "xbzrle" : XBZRLE state (json-bool)
2621

    
2622
Arguments:
2623

    
2624
Example:
2625

    
2626
-> { "execute": "query-migrate-capabilities" }
2627
<- { "return": [ { "state": false, "capability": "xbzrle" } ] }
2628

    
2629
EQMP
2630

    
2631
    {
2632
        .name       = "query-migrate-capabilities",
2633
        .args_type  = "",
2634
        .mhandler.cmd_new = qmp_marshal_input_query_migrate_capabilities,
2635
    },
2636

    
2637
SQMP
2638
query-balloon
2639
-------------
2640

    
2641
Show balloon information.
2642

    
2643
Make an asynchronous request for balloon info. When the request completes a
2644
json-object will be returned containing the following data:
2645

    
2646
- "actual": current balloon value in bytes (json-int)
2647

    
2648
Example:
2649

    
2650
-> { "execute": "query-balloon" }
2651
<- {
2652
      "return":{
2653
         "actual":1073741824,
2654
      }
2655
   }
2656

    
2657
EQMP
2658

    
2659
    {
2660
        .name       = "query-balloon",
2661
        .args_type  = "",
2662
        .mhandler.cmd_new = qmp_marshal_input_query_balloon,
2663
    },
2664

    
2665
    {
2666
        .name       = "query-block-jobs",
2667
        .args_type  = "",
2668
        .mhandler.cmd_new = qmp_marshal_input_query_block_jobs,
2669
    },
2670

    
2671
    {
2672
        .name       = "qom-list",
2673
        .args_type  = "path:s",
2674
        .mhandler.cmd_new = qmp_marshal_input_qom_list,
2675
    },
2676

    
2677
    {
2678
        .name       = "qom-set",
2679
	.args_type  = "path:s,property:s,value:q",
2680
	.mhandler.cmd_new = qmp_qom_set,
2681
    },
2682

    
2683
    {
2684
        .name       = "qom-get",
2685
	.args_type  = "path:s,property:s",
2686
	.mhandler.cmd_new = qmp_qom_get,
2687
    },
2688

    
2689
    {
2690
        .name       = "nbd-server-start",
2691
        .args_type  = "addr:q",
2692
        .mhandler.cmd_new = qmp_marshal_input_nbd_server_start,
2693
    },
2694
    {
2695
        .name       = "nbd-server-add",
2696
        .args_type  = "device:B,writable:b?",
2697
        .mhandler.cmd_new = qmp_marshal_input_nbd_server_add,
2698
    },
2699
    {
2700
        .name       = "nbd-server-stop",
2701
        .args_type  = "",
2702
        .mhandler.cmd_new = qmp_marshal_input_nbd_server_stop,
2703
    },
2704

    
2705
    {
2706
        .name       = "change-vnc-password",
2707
        .args_type  = "password:s",
2708
        .mhandler.cmd_new = qmp_marshal_input_change_vnc_password,
2709
    },
2710
    {
2711
        .name       = "qom-list-types",
2712
        .args_type  = "implements:s?,abstract:b?",
2713
        .mhandler.cmd_new = qmp_marshal_input_qom_list_types,
2714
    },
2715

    
2716
    {
2717
        .name       = "device-list-properties",
2718
        .args_type  = "typename:s",
2719
        .mhandler.cmd_new = qmp_marshal_input_device_list_properties,
2720
    },
2721

    
2722
    {
2723
        .name       = "query-machines",
2724
        .args_type  = "",
2725
        .mhandler.cmd_new = qmp_marshal_input_query_machines,
2726
    },
2727

    
2728
    {
2729
        .name       = "query-cpu-definitions",
2730
        .args_type  = "",
2731
        .mhandler.cmd_new = qmp_marshal_input_query_cpu_definitions,
2732
    },
2733

    
2734
    {
2735
        .name       = "query-target",
2736
        .args_type  = "",
2737
        .mhandler.cmd_new = qmp_marshal_input_query_target,
2738
    },
2739

    
2740
    {
2741
        .name       = "query-tpm",
2742
        .args_type  = "",
2743
        .mhandler.cmd_new = qmp_marshal_input_query_tpm,
2744
    },
2745

    
2746
SQMP
2747
query-tpm
2748
---------
2749

    
2750
Return information about the TPM device.
2751

    
2752
Arguments: None
2753

    
2754
Example:
2755

    
2756
-> { "execute": "query-tpm" }
2757
<- { "return":
2758
     [
2759
       { "model": "tpm-tis",
2760
         "options":
2761
           { "type": "passthrough",
2762
             "data":
2763
               { "cancel-path": "/sys/class/misc/tpm0/device/cancel",
2764
                 "path": "/dev/tpm0"
2765
               }
2766
           },
2767
         "id": "tpm0"
2768
       }
2769
     ]
2770
   }
2771

    
2772
EQMP
2773

    
2774
    {
2775
        .name       = "query-tpm-models",
2776
        .args_type  = "",
2777
        .mhandler.cmd_new = qmp_marshal_input_query_tpm_models,
2778
    },
2779

    
2780
SQMP
2781
query-tpm-models
2782
----------------
2783

    
2784
Return a list of supported TPM models.
2785

    
2786
Arguments: None
2787

    
2788
Example:
2789

    
2790
-> { "execute": "query-tpm-models" }
2791
<- { "return": [ "tpm-tis" ] }
2792

    
2793
EQMP
2794

    
2795
    {
2796
        .name       = "query-tpm-types",
2797
        .args_type  = "",
2798
        .mhandler.cmd_new = qmp_marshal_input_query_tpm_types,
2799
    },
2800

    
2801
SQMP
2802
query-tpm-types
2803
---------------
2804

    
2805
Return a list of supported TPM types.
2806

    
2807
Arguments: None
2808

    
2809
Example:
2810

    
2811
-> { "execute": "query-tpm-types" }
2812
<- { "return": [ "passthrough" ] }
2813

    
2814
EQMP
2815

    
2816
    {
2817
        .name       = "chardev-add",
2818
        .args_type  = "id:s,backend:q",
2819
        .mhandler.cmd_new = qmp_marshal_input_chardev_add,
2820
    },
2821

    
2822
SQMP
2823
chardev-add
2824
----------------
2825

    
2826
Add a chardev.
2827

    
2828
Arguments:
2829

    
2830
- "id": the chardev's ID, must be unique (json-string)
2831
- "backend": chardev backend type + parameters
2832

    
2833
Examples:
2834

    
2835
-> { "execute" : "chardev-add",
2836
     "arguments" : { "id" : "foo",
2837
                     "backend" : { "type" : "null", "data" : {} } } }
2838
<- { "return": {} }
2839

    
2840
-> { "execute" : "chardev-add",
2841
     "arguments" : { "id" : "bar",
2842
                     "backend" : { "type" : "file",
2843
                                   "data" : { "out" : "/tmp/bar.log" } } } }
2844
<- { "return": {} }
2845

    
2846
-> { "execute" : "chardev-add",
2847
     "arguments" : { "id" : "baz",
2848
                     "backend" : { "type" : "pty", "data" : {} } } }
2849
<- { "return": { "pty" : "/dev/pty/42" } }
2850

    
2851
EQMP
2852

    
2853
    {
2854
        .name       = "chardev-remove",
2855
        .args_type  = "id:s",
2856
        .mhandler.cmd_new = qmp_marshal_input_chardev_remove,
2857
    },
2858

    
2859

    
2860
SQMP
2861
chardev-remove
2862
--------------
2863

    
2864
Remove a chardev.
2865

    
2866
Arguments:
2867

    
2868
- "id": the chardev's ID, must exist and not be in use (json-string)
2869

    
2870
Example:
2871

    
2872
-> { "execute": "chardev-remove", "arguments": { "id" : "foo" } }
2873
<- { "return": {} }
2874

    
2875
EQMP