qemu/qmp-commands.hx
<<
>>
Prefs
   1HXCOMM QMP dispatch table and documentation
   2HXCOMM Text between SQMP and EQMP is copied to the QMP documention file and
   3HXCOMM does not show up in the other formats.
   4
   5SQMP
   6                        QMP Supported Commands
   7                        ----------------------
   8
   9This document describes all commands currently supported by QMP.
  10
  11Most of the time their usage is exactly the same as in the user Monitor, this
  12means that any other document which also describe commands (the manpage,
  13QEMU's manual, etc) can and should be consulted.
  14
  15QMP has two types of commands: regular and query commands. Regular commands
  16usually change the Virtual Machine's state someway, while query commands just
  17return information. The sections below are divided accordingly.
  18
  19It's important to observe that all communication examples are formatted in
  20a reader-friendly way, so that they're easier to understand. However, in real
  21protocol usage, they're emitted as a single line.
  22
  23Also, the following notation is used to denote data flow:
  24
  25-> data issued by the Client
  26<- Server data response
  27
  28Please, refer to the QMP specification (QMP/qmp-spec.txt) for detailed
  29information on the Server command and response formats.
  30
  31NOTE: This document is temporary and will be replaced soon.
  32
  331. Stability Considerations
  34===========================
  35
  36The current QMP command set (described in this file) may be useful for a
  37number of use cases, however it's limited and several commands have bad
  38defined semantics, specially with regard to command completion.
  39
  40These problems are going to be solved incrementally in the next QEMU releases
  41and we're going to establish a deprecation policy for badly defined commands.
  42
  43If 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
  552. Regular Commands
  56===================
  57
  58Server's responses in the examples below are always a success response, please
  59refer to the QMP specification for more details on error responses.
  60
  61EQMP
  62
  63    {
  64        .name       = "quit",
  65        .args_type  = "",
  66        .mhandler.cmd_new = qmp_marshal_input_quit,
  67    },
  68
  69SQMP
  70quit
  71----
  72
  73Quit the emulator.
  74
  75Arguments: None.
  76
  77Example:
  78
  79-> { "execute": "quit" }
  80<- { "return": {} }
  81
  82EQMP
  83
  84    {
  85        .name       = "eject",
  86        .args_type  = "force:-f,device:B",
  87        .mhandler.cmd_new = qmp_marshal_input_eject,
  88    },
  89
  90SQMP
  91eject
  92-----
  93
  94Eject a removable medium.
  95
  96Arguments: 
  97
  98- force: force ejection (json-bool, optional)
  99- device: device name (json-string)
 100
 101Example:
 102
 103-> { "execute": "eject", "arguments": { "device": "ide1-cd0" } }
 104<- { "return": {} }
 105
 106Note: The "force" argument defaults to false.
 107
 108EQMP
 109
 110    {
 111        .name       = "change",
 112        .args_type  = "device:B,target:F,arg:s?",
 113        .mhandler.cmd_new = qmp_marshal_input_change,
 114    },
 115
 116SQMP
 117change
 118------
 119
 120Change a removable medium or VNC configuration.
 121
 122Arguments:
 123
 124- "device": device name (json-string)
 125- "target": filename or item (json-string)
 126- "arg": additional argument (json-string, optional)
 127
 128Examples:
 129
 1301. 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
 1372. Change VNC password
 138
 139-> { "execute": "change",
 140             "arguments": { "device": "vnc", "target": "password",
 141                            "arg": "foobar1" } }
 142<- { "return": {} }
 143
 144EQMP
 145
 146    {
 147        .name       = "screendump",
 148        .args_type  = "filename:F",
 149        .mhandler.cmd_new = qmp_marshal_input_screendump,
 150    },
 151
 152SQMP
 153screendump
 154----------
 155
 156Save screen into PPM image.
 157
 158Arguments:
 159
 160- "filename": file path (json-string)
 161
 162Example:
 163
 164-> { "execute": "screendump", "arguments": { "filename": "/tmp/image" } }
 165<- { "return": {} }
 166
 167EQMP
 168
 169    {
 170        .name       = "stop",
 171        .args_type  = "",
 172        .mhandler.cmd_new = qmp_marshal_input_stop,
 173    },
 174
 175SQMP
 176stop
 177----
 178
 179Stop the emulator.
 180
 181Arguments: None.
 182
 183Example:
 184
 185-> { "execute": "stop" }
 186<- { "return": {} }
 187
 188EQMP
 189
 190    {
 191        .name       = "cont",
 192        .args_type  = "",
 193        .mhandler.cmd_new = qmp_marshal_input_cont,
 194    },
 195
 196SQMP
 197cont
 198----
 199
 200Resume emulation.
 201
 202Arguments: None.
 203
 204Example:
 205
 206-> { "execute": "cont" }
 207<- { "return": {} }
 208
 209EQMP
 210
 211    {
 212        .name       = "system_wakeup",
 213        .args_type  = "",
 214        .mhandler.cmd_new = qmp_marshal_input_system_wakeup,
 215    },
 216
 217SQMP
 218system_wakeup
 219-------------
 220
 221Wakeup guest from suspend.
 222
 223Arguments: None.
 224
 225Example:
 226
 227-> { "execute": "system_wakeup" }
 228<- { "return": {} }
 229
 230EQMP
 231
 232    {
 233        .name       = "system_reset",
 234        .args_type  = "",
 235        .mhandler.cmd_new = qmp_marshal_input_system_reset,
 236    },
 237
 238SQMP
 239system_reset
 240------------
 241
 242Reset the system.
 243
 244Arguments: None.
 245
 246Example:
 247
 248-> { "execute": "system_reset" }
 249<- { "return": {} }
 250
 251EQMP
 252
 253    {
 254        .name       = "system_powerdown",
 255        .args_type  = "",
 256        .mhandler.cmd_new = qmp_marshal_input_system_powerdown,
 257    },
 258
 259SQMP
 260system_powerdown
 261----------------
 262
 263Send system power down event.
 264
 265Arguments: None.
 266
 267Example:
 268
 269-> { "execute": "system_powerdown" }
 270<- { "return": {} }
 271
 272EQMP
 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
 283SQMP
 284device_add
 285----------
 286
 287Add a device.
 288
 289Arguments:
 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
 296Example:
 297
 298-> { "execute": "device_add", "arguments": { "driver": "e1000", "id": "net1" } }
 299<- { "return": {} }
 300
 301Notes:
 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
 309EQMP
 310
 311    {
 312        .name       = "device_del",
 313        .args_type  = "id:s",
 314        .mhandler.cmd_new = qmp_marshal_input_device_del,
 315    },
 316
 317SQMP
 318device_del
 319----------
 320
 321Remove a device.
 322
 323Arguments:
 324
 325- "id": the device's ID (json-string)
 326
 327Example:
 328
 329-> { "execute": "device_del", "arguments": { "id": "net1" } }
 330<- { "return": {} }
 331
 332EQMP
 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
 340SQMP
 341send-key
 342----------
 343
 344Send keys to VM.
 345
 346Arguments:
 347
 348keys array:
 349    - "key": key sequence (a json-array of key union values,
 350             union can be number or qcode enum)
 351
 352- hold-time: time to delay key up events, milliseconds. Defaults to 100
 353             (json-int, optional)
 354
 355Example:
 356
 357-> { "execute": "send-key",
 358     "arguments": { "keys": [ { "type": "qcode", "data": "ctrl" },
 359                              { "type": "qcode", "data": "alt" },
 360                              { "type": "qcode", "data": "delete" } ] } }
 361<- { "return": {} }
 362
 363EQMP
 364
 365    {
 366        .name       = "cpu",
 367        .args_type  = "index:i",
 368        .mhandler.cmd_new = qmp_marshal_input_cpu,
 369    },
 370
 371SQMP
 372cpu
 373---
 374
 375Set the default CPU.
 376
 377Arguments:
 378
 379- "index": the CPU's index (json-int)
 380
 381Example:
 382
 383-> { "execute": "cpu", "arguments": { "index": 0 } }
 384<- { "return": {} }
 385
 386Note: CPUs' indexes are obtained with the 'query-cpus' command.
 387
 388EQMP
 389
 390    {
 391        .name       = "cpu-add",
 392        .args_type  = "id:i",
 393        .mhandler.cmd_new = qmp_marshal_input_cpu_add,
 394    },
 395
 396SQMP
 397cpu-add
 398-------
 399
 400Adds virtual cpu
 401
 402Arguments:
 403
 404- "id": cpu id (json-int)
 405
 406Example:
 407
 408-> { "execute": "cpu-add", "arguments": { "id": 2 } }
 409<- { "return": {} }
 410
 411EQMP
 412
 413    {
 414        .name       = "memsave",
 415        .args_type  = "val:l,size:i,filename:s,cpu:i?",
 416        .mhandler.cmd_new = qmp_marshal_input_memsave,
 417    },
 418
 419SQMP
 420memsave
 421-------
 422
 423Save to disk virtual memory dump starting at 'val' of size 'size'.
 424
 425Arguments:
 426
 427- "val": the starting address (json-int)
 428- "size": the memory size, in bytes (json-int)
 429- "filename": file path (json-string)
 430- "cpu": virtual CPU index (json-int, optional)
 431
 432Example:
 433
 434-> { "execute": "memsave",
 435             "arguments": { "val": 10,
 436                            "size": 100,
 437                            "filename": "/tmp/virtual-mem-dump" } }
 438<- { "return": {} }
 439
 440EQMP
 441
 442    {
 443        .name       = "pmemsave",
 444        .args_type  = "val:l,size:i,filename:s",
 445        .mhandler.cmd_new = qmp_marshal_input_pmemsave,
 446    },
 447
 448SQMP
 449pmemsave
 450--------
 451
 452Save to disk physical memory dump starting at 'val' of size 'size'.
 453
 454Arguments:
 455
 456- "val": the starting address (json-int)
 457- "size": the memory size, in bytes (json-int)
 458- "filename": file path (json-string)
 459
 460Example:
 461
 462-> { "execute": "pmemsave",
 463             "arguments": { "val": 10,
 464                            "size": 100,
 465                            "filename": "/tmp/physical-mem-dump" } }
 466<- { "return": {} }
 467
 468EQMP
 469
 470    {
 471        .name       = "inject-nmi",
 472        .args_type  = "",
 473        .mhandler.cmd_new = qmp_marshal_input_inject_nmi,
 474    },
 475
 476SQMP
 477inject-nmi
 478----------
 479
 480Inject an NMI on guest's CPUs.
 481
 482Arguments: None.
 483
 484Example:
 485
 486-> { "execute": "inject-nmi" }
 487<- { "return": {} }
 488
 489Note: inject-nmi fails when the guest doesn't support injecting.
 490      Currently, only x86 guests do.
 491
 492EQMP
 493
 494    {
 495        .name       = "ringbuf-write",
 496        .args_type  = "device:s,data:s,format:s?",
 497        .mhandler.cmd_new = qmp_marshal_input_ringbuf_write,
 498    },
 499
 500SQMP
 501ringbuf-write
 502-------------
 503
 504Write to a ring buffer character device.
 505
 506Arguments:
 507
 508- "device": ring buffer character device name (json-string)
 509- "data": data to write (json-string)
 510- "format": data format (json-string, optional)
 511          - Possible values: "utf8" (default), "base64"
 512            Bug: invalid base64 is currently not rejected.
 513            Whitespace *is* invalid.
 514
 515Example:
 516
 517-> { "execute": "ringbuf-write",
 518                "arguments": { "device": "foo",
 519                               "data": "abcdefgh",
 520                               "format": "utf8" } }
 521<- { "return": {} }
 522
 523EQMP
 524
 525    {
 526        .name       = "ringbuf-read",
 527        .args_type  = "device:s,size:i,format:s?",
 528        .mhandler.cmd_new = qmp_marshal_input_ringbuf_read,
 529    },
 530
 531SQMP
 532ringbuf-read
 533-------------
 534
 535Read from a ring buffer character device.
 536
 537Arguments:
 538
 539- "device": ring buffer character device name (json-string)
 540- "size": how many bytes to read at most (json-int)
 541          - Number of data bytes, not number of characters in encoded data
 542- "format": data format (json-string, optional)
 543          - Possible values: "utf8" (default), "base64"
 544          - Naturally, format "utf8" works only when the ring buffer
 545            contains valid UTF-8 text.  Invalid UTF-8 sequences get
 546            replaced.  Bug: replacement doesn't work.  Bug: can screw
 547            up on encountering NUL characters, after the ring buffer
 548            lost data, and when reading stops because the size limit
 549            is reached.
 550
 551Example:
 552
 553-> { "execute": "ringbuf-read",
 554                "arguments": { "device": "foo",
 555                               "size": 1000,
 556                               "format": "utf8" } }
 557<- {"return": "abcdefgh"}
 558
 559EQMP
 560
 561    {
 562        .name       = "xen-save-devices-state",
 563        .args_type  = "filename:F",
 564    .mhandler.cmd_new = qmp_marshal_input_xen_save_devices_state,
 565    },
 566
 567SQMP
 568xen-save-devices-state
 569-------
 570
 571Save the state of all devices to file. The RAM and the block devices
 572of the VM are not saved by this command.
 573
 574Arguments:
 575
 576- "filename": the file to save the state of the devices to as binary
 577data. See xen-save-devices-state.txt for a description of the binary
 578format.
 579
 580Example:
 581
 582-> { "execute": "xen-save-devices-state",
 583     "arguments": { "filename": "/tmp/save" } }
 584<- { "return": {} }
 585
 586EQMP
 587
 588    {
 589        .name       = "xen-set-global-dirty-log",
 590        .args_type  = "enable:b",
 591        .mhandler.cmd_new = qmp_marshal_input_xen_set_global_dirty_log,
 592    },
 593
 594SQMP
 595xen-set-global-dirty-log
 596-------
 597
 598Enable or disable the global dirty log mode.
 599
 600Arguments:
 601
 602- "enable": Enable it or disable it.
 603
 604Example:
 605
 606-> { "execute": "xen-set-global-dirty-log",
 607     "arguments": { "enable": true } }
 608<- { "return": {} }
 609
 610EQMP
 611
 612    {
 613        .name       = "migrate",
 614        .args_type  = "detach:-d,blk:-b,inc:-i,uri:s",
 615        .mhandler.cmd_new = qmp_marshal_input_migrate,
 616    },
 617
 618SQMP
 619migrate
 620-------
 621
 622Migrate to URI.
 623
 624Arguments:
 625
 626- "blk": block migration, full disk copy (json-bool, optional)
 627- "inc": incremental disk copy (json-bool, optional)
 628- "uri": Destination URI (json-string)
 629
 630Example:
 631
 632-> { "execute": "migrate", "arguments": { "uri": "tcp:0:4446" } }
 633<- { "return": {} }
 634
 635Notes:
 636
 637(1) The 'query-migrate' command should be used to check migration's progress
 638    and final result (this information is provided by the 'status' member)
 639(2) All boolean arguments default to false
 640(3) The user Monitor's "detach" argument is invalid in QMP and should not
 641    be used
 642
 643EQMP
 644
 645    {
 646        .name       = "migrate_cancel",
 647        .args_type  = "",
 648        .mhandler.cmd_new = qmp_marshal_input_migrate_cancel,
 649    },
 650
 651SQMP
 652migrate_cancel
 653--------------
 654
 655Cancel the current migration.
 656
 657Arguments: None.
 658
 659Example:
 660
 661-> { "execute": "migrate_cancel" }
 662<- { "return": {} }
 663
 664EQMP
 665{
 666        .name       = "migrate-set-cache-size",
 667        .args_type  = "value:o",
 668        .mhandler.cmd_new = qmp_marshal_input_migrate_set_cache_size,
 669    },
 670
 671SQMP
 672migrate-set-cache-size
 673----------------------
 674
 675Set cache size to be used by XBZRLE migration, the cache size will be rounded
 676down to the nearest power of 2
 677
 678Arguments:
 679
 680- "value": cache size in bytes (json-int)
 681
 682Example:
 683
 684-> { "execute": "migrate-set-cache-size", "arguments": { "value": 536870912 } }
 685<- { "return": {} }
 686
 687EQMP
 688    {
 689        .name       = "query-migrate-cache-size",
 690        .args_type  = "",
 691        .mhandler.cmd_new = qmp_marshal_input_query_migrate_cache_size,
 692    },
 693
 694SQMP
 695query-migrate-cache-size
 696------------------------
 697
 698Show cache size to be used by XBZRLE migration
 699
 700returns a json-object with the following information:
 701- "size" : json-int
 702
 703Example:
 704
 705-> { "execute": "query-migrate-cache-size" }
 706<- { "return": 67108864 }
 707
 708EQMP
 709
 710    {
 711        .name       = "migrate_set_speed",
 712        .args_type  = "value:o",
 713        .mhandler.cmd_new = qmp_marshal_input_migrate_set_speed,
 714    },
 715
 716SQMP
 717migrate_set_speed
 718-----------------
 719
 720Set maximum speed for migrations.
 721
 722Arguments:
 723
 724- "value": maximum speed, in bytes per second (json-int)
 725
 726Example:
 727
 728-> { "execute": "migrate_set_speed", "arguments": { "value": 1024 } }
 729<- { "return": {} }
 730
 731EQMP
 732
 733    {
 734        .name       = "migrate_set_downtime",
 735        .args_type  = "value:T",
 736        .mhandler.cmd_new = qmp_marshal_input_migrate_set_downtime,
 737    },
 738
 739SQMP
 740migrate_set_downtime
 741--------------------
 742
 743Set maximum tolerated downtime (in seconds) for migrations.
 744
 745Arguments:
 746
 747- "value": maximum downtime (json-number)
 748
 749Example:
 750
 751-> { "execute": "migrate_set_downtime", "arguments": { "value": 0.1 } }
 752<- { "return": {} }
 753
 754EQMP
 755
 756    {
 757        .name       = "client_migrate_info",
 758        .args_type  = "protocol:s,hostname:s,port:i?,tls-port:i?,cert-subject:s?",
 759        .params     = "protocol hostname port tls-port cert-subject",
 760        .help       = "send migration info to spice/vnc client",
 761        .user_print = monitor_user_noop,
 762        .mhandler.cmd_async = client_migrate_info,
 763        .flags      = MONITOR_CMD_ASYNC,
 764    },
 765
 766SQMP
 767client_migrate_info
 768------------------
 769
 770Set the spice/vnc connection info for the migration target.  The spice/vnc
 771server will ask the spice/vnc client to automatically reconnect using the
 772new parameters (if specified) once the vm migration finished successfully.
 773
 774Arguments:
 775
 776- "protocol":     protocol: "spice" or "vnc" (json-string)
 777- "hostname":     migration target hostname (json-string)
 778- "port":         spice/vnc tcp port for plaintext channels (json-int, optional)
 779- "tls-port":     spice tcp port for tls-secured channels (json-int, optional)
 780- "cert-subject": server certificate subject (json-string, optional)
 781
 782Example:
 783
 784-> { "execute": "client_migrate_info",
 785     "arguments": { "protocol": "spice",
 786                    "hostname": "virt42.lab.kraxel.org",
 787                    "port": 1234 } }
 788<- { "return": {} }
 789
 790EQMP
 791
 792    {
 793        .name       = "dump-guest-memory",
 794        .args_type  = "paging:b,protocol:s,begin:i?,end:i?",
 795        .params     = "-p protocol [begin] [length]",
 796        .help       = "dump guest memory to file",
 797        .user_print = monitor_user_noop,
 798        .mhandler.cmd_new = qmp_marshal_input_dump_guest_memory,
 799    },
 800
 801SQMP
 802dump
 803
 804
 805Dump guest memory to file. The file can be processed with crash or gdb.
 806
 807Arguments:
 808
 809- "paging": do paging to get guest's memory mapping (json-bool)
 810- "protocol": destination file(started with "file:") or destination file
 811              descriptor (started with "fd:") (json-string)
 812- "begin": the starting physical address. It's optional, and should be specified
 813           with length together (json-int)
 814- "length": the memory size, in bytes. It's optional, and should be specified
 815            with begin together (json-int)
 816
 817Example:
 818
 819-> { "execute": "dump-guest-memory", "arguments": { "protocol": "fd:dump" } }
 820<- { "return": {} }
 821
 822Notes:
 823
 824(1) All boolean arguments default to false
 825
 826EQMP
 827
 828    {
 829        .name       = "netdev_add",
 830        .args_type  = "netdev:O",
 831        .mhandler.cmd_new = qmp_netdev_add,
 832    },
 833
 834SQMP
 835netdev_add
 836----------
 837
 838Add host network device.
 839
 840Arguments:
 841
 842- "type": the device type, "tap", "user", ... (json-string)
 843- "id": the device's ID, must be unique (json-string)
 844- device options
 845
 846Example:
 847
 848-> { "execute": "netdev_add", "arguments": { "type": "user", "id": "netdev1" } }
 849<- { "return": {} }
 850
 851Note: The supported device options are the same ones supported by the '-netdev'
 852      command-line argument, which are listed in the '-help' output or QEMU's
 853      manual
 854
 855EQMP
 856
 857    {
 858        .name       = "netdev_del",
 859        .args_type  = "id:s",
 860        .mhandler.cmd_new = qmp_marshal_input_netdev_del,
 861    },
 862
 863SQMP
 864netdev_del
 865----------
 866
 867Remove host network device.
 868
 869Arguments:
 870
 871- "id": the device's ID, must be unique (json-string)
 872
 873Example:
 874
 875-> { "execute": "netdev_del", "arguments": { "id": "netdev1" } }
 876<- { "return": {} }
 877
 878
 879EQMP
 880
 881    {
 882        .name       = "block_resize",
 883        .args_type  = "device:B,size:o",
 884        .mhandler.cmd_new = qmp_marshal_input_block_resize,
 885    },
 886
 887SQMP
 888block_resize
 889------------
 890
 891Resize a block image while a guest is running.
 892
 893Arguments:
 894
 895- "device": the device's ID, must be unique (json-string)
 896- "size": new size
 897
 898Example:
 899
 900-> { "execute": "block_resize", "arguments": { "device": "scratch", "size": 1073741824 } }
 901<- { "return": {} }
 902
 903EQMP
 904
 905    {
 906        .name       = "block-stream",
 907        .args_type  = "device:B,base:s?,speed:o?,on-error:s?",
 908        .mhandler.cmd_new = qmp_marshal_input_block_stream,
 909    },
 910
 911    {
 912        .name       = "block-commit",
 913        .args_type  = "device:B,base:s?,top:s,speed:o?",
 914        .mhandler.cmd_new = qmp_marshal_input_block_commit,
 915    },
 916
 917    {
 918        .name       = "drive-backup",
 919        .args_type  = "sync:s,device:B,target:s,speed:i?,mode:s?,format:s?,"
 920                      "on-source-error:s?,on-target-error:s?",
 921        .mhandler.cmd_new = qmp_marshal_input_drive_backup,
 922    },
 923
 924SQMP
 925drive-backup
 926------------
 927
 928Start a point-in-time copy of a block device to a new destination.  The
 929status of ongoing drive-backup operations can be checked with
 930query-block-jobs where the BlockJobInfo.type field has the value 'backup'.
 931The operation can be stopped before it has completed using the
 932block-job-cancel command.
 933
 934Arguments:
 935
 936- "device": the name of the device which should be copied.
 937            (json-string)
 938- "target": the target of the new image. If the file exists, or if it is a
 939            device, the existing file/device will be used as the new
 940            destination.  If it does not exist, a new file will be created.
 941            (json-string)
 942- "format": the format of the new destination, default is to probe if 'mode' is
 943            'existing', else the format of the source
 944            (json-string, optional)
 945- "sync": what parts of the disk image should be copied to the destination;
 946  possibilities include "full" for all the disk, "top" for only the sectors
 947  allocated in the topmost image, or "none" to only replicate new I/O
 948  (MirrorSyncMode).
 949- "mode": whether and how QEMU should create a new image
 950          (NewImageMode, optional, default 'absolute-paths')
 951- "speed": the maximum speed, in bytes per second (json-int, optional)
 952- "on-source-error": the action to take on an error on the source, default
 953                     'report'.  'stop' and 'enospc' can only be used
 954                     if the block device supports io-status.
 955                     (BlockdevOnError, optional)
 956- "on-target-error": the action to take on an error on the target, default
 957                     'report' (no limitations, since this applies to
 958                     a different block device than device).
 959                     (BlockdevOnError, optional)
 960
 961Example:
 962-> { "execute": "drive-backup", "arguments": { "device": "drive0",
 963                                               "sync": "full",
 964                                               "target": "backup.img" } }
 965<- { "return": {} }
 966EQMP
 967
 968    {
 969        .name       = "block-job-set-speed",
 970        .args_type  = "device:B,speed:o",
 971        .mhandler.cmd_new = qmp_marshal_input_block_job_set_speed,
 972    },
 973
 974    {
 975        .name       = "block-job-cancel",
 976        .args_type  = "device:B,force:b?",
 977        .mhandler.cmd_new = qmp_marshal_input_block_job_cancel,
 978    },
 979    {
 980        .name       = "block-job-pause",
 981        .args_type  = "device:B",
 982        .mhandler.cmd_new = qmp_marshal_input_block_job_pause,
 983    },
 984    {
 985        .name       = "block-job-resume",
 986        .args_type  = "device:B",
 987        .mhandler.cmd_new = qmp_marshal_input_block_job_resume,
 988    },
 989    {
 990        .name       = "block-job-complete",
 991        .args_type  = "device:B",
 992        .mhandler.cmd_new = qmp_marshal_input_block_job_complete,
 993    },
 994    {
 995        .name       = "transaction",
 996        .args_type  = "actions:q",
 997        .mhandler.cmd_new = qmp_marshal_input_transaction,
 998    },
 999
1000SQMP
1001transaction
1002-----------
1003
1004Atomically operate on one or more block devices.  The only supported
1005operation for now is snapshotting.  If there is any failure performing
1006any of the operations, all snapshots for the group are abandoned, and
1007the original disks pre-snapshot attempt are used.
1008
1009A list of dictionaries is accepted, that contains the actions to be performed.
1010For snapshots this is the device, the file to use for the new snapshot,
1011and the format.  The default format, if not specified, is qcow2.
1012
1013Each new snapshot defaults to being created by QEMU (wiping any
1014contents if the file already exists), but it is also possible to reuse
1015an externally-created file.  In the latter case, you should ensure that
1016the new image file has the same contents as the current one; QEMU cannot
1017perform any meaningful check.  Typically this is achieved by using the
1018current image file as the backing file for the new image.
1019
1020Arguments:
1021
1022actions array:
1023    - "type": the operation to perform.  The only supported
1024      value is "blockdev-snapshot-sync". (json-string)
1025    - "data": a dictionary.  The contents depend on the value
1026      of "type".  When "type" is "blockdev-snapshot-sync":
1027      - "device": device name to snapshot (json-string)
1028      - "snapshot-file": name of new image file (json-string)
1029      - "format": format of new image (json-string, optional)
1030      - "mode": whether and how QEMU should create the snapshot file
1031        (NewImageMode, optional, default "absolute-paths")
1032
1033Example:
1034
1035-> { "execute": "transaction",
1036     "arguments": { "actions": [
1037         { 'type': 'blockdev-snapshot-sync', 'data' : { "device": "ide-hd0",
1038                                         "snapshot-file": "/some/place/my-image",
1039                                         "format": "qcow2" } },
1040         { 'type': 'blockdev-snapshot-sync', 'data' : { "device": "ide-hd1",
1041                                         "snapshot-file": "/some/place/my-image2",
1042                                         "mode": "existing",
1043                                         "format": "qcow2" } } ] } }
1044<- { "return": {} }
1045
1046EQMP
1047
1048    {
1049        .name       = "blockdev-snapshot-sync",
1050        .args_type  = "device:B,snapshot-file:s,format:s?,mode:s?",
1051        .mhandler.cmd_new = qmp_marshal_input_blockdev_snapshot_sync,
1052    },
1053
1054SQMP
1055blockdev-snapshot-sync
1056----------------------
1057
1058Synchronous snapshot of a block device. snapshot-file specifies the
1059target of the new image. If the file exists, or if it is a device, the
1060snapshot will be created in the existing file/device. If does not
1061exist, a new file will be created. format specifies the format of the
1062snapshot image, default is qcow2.
1063
1064Arguments:
1065
1066- "device": device name to snapshot (json-string)
1067- "snapshot-file": name of new image file (json-string)
1068- "mode": whether and how QEMU should create the snapshot file
1069  (NewImageMode, optional, default "absolute-paths")
1070- "format": format of new image (json-string, optional)
1071
1072Example:
1073
1074-> { "execute": "blockdev-snapshot-sync", "arguments": { "device": "ide-hd0",
1075                                                         "snapshot-file":
1076                                                        "/some/place/my-image",
1077                                                        "format": "qcow2" } }
1078<- { "return": {} }
1079
1080EQMP
1081
1082    {
1083        .name       = "drive-mirror",
1084        .args_type  = "sync:s,device:B,target:s,speed:i?,mode:s?,format:s?,"
1085                      "on-source-error:s?,on-target-error:s?,"
1086                      "granularity:i?,buf-size:i?",
1087        .mhandler.cmd_new = qmp_marshal_input_drive_mirror,
1088    },
1089
1090SQMP
1091drive-mirror
1092------------
1093
1094Start mirroring a block device's writes to a new destination. target
1095specifies the target of the new image. If the file exists, or if it is
1096a device, it will be used as the new destination for writes. If it does not
1097exist, a new file will be created. format specifies the format of the
1098mirror image, default is to probe if mode='existing', else the format
1099of the source.
1100
1101Arguments:
1102
1103- "device": device name to operate on (json-string)
1104- "target": name of new image file (json-string)
1105- "format": format of new image (json-string, optional)
1106- "mode": how an image file should be created into the target
1107  file/device (NewImageMode, optional, default 'absolute-paths')
1108- "speed": maximum speed of the streaming job, in bytes per second
1109  (json-int)
1110- "granularity": granularity of the dirty bitmap, in bytes (json-int, optional)
1111- "buf_size": maximum amount of data in flight from source to target, in bytes
1112  (json-int, default 10M)
1113- "sync": what parts of the disk image should be copied to the destination;
1114  possibilities include "full" for all the disk, "top" for only the sectors
1115  allocated in the topmost image, or "none" to only replicate new I/O
1116  (MirrorSyncMode).
1117- "on-source-error": the action to take on an error on the source
1118  (BlockdevOnError, default 'report')
1119- "on-target-error": the action to take on an error on the target
1120  (BlockdevOnError, default 'report')
1121
1122The default value of the granularity is the image cluster size clamped
1123between 4096 and 65536, if the image format defines one.  If the format
1124does not define a cluster size, the default value of the granularity
1125is 65536.
1126
1127
1128Example:
1129
1130-> { "execute": "drive-mirror", "arguments": { "device": "ide-hd0",
1131                                               "target": "/some/place/my-image",
1132                                               "sync": "full",
1133                                               "format": "qcow2" } }
1134<- { "return": {} }
1135
1136EQMP
1137
1138    {
1139        .name       = "balloon",
1140        .args_type  = "value:M",
1141        .mhandler.cmd_new = qmp_marshal_input_balloon,
1142    },
1143
1144SQMP
1145balloon
1146-------
1147
1148Request VM to change its memory allocation (in bytes).
1149
1150Arguments:
1151
1152- "value": New memory allocation (json-int)
1153
1154Example:
1155
1156-> { "execute": "balloon", "arguments": { "value": 536870912 } }
1157<- { "return": {} }
1158
1159EQMP
1160
1161    {
1162        .name       = "set_link",
1163        .args_type  = "name:s,up:b",
1164        .mhandler.cmd_new = qmp_marshal_input_set_link,
1165    },
1166
1167SQMP
1168set_link
1169--------
1170
1171Change the link status of a network adapter.
1172
1173Arguments:
1174
1175- "name": network device name (json-string)
1176- "up": status is up (json-bool)
1177
1178Example:
1179
1180-> { "execute": "set_link", "arguments": { "name": "e1000.0", "up": false } }
1181<- { "return": {} }
1182
1183EQMP
1184
1185    {
1186        .name       = "getfd",
1187        .args_type  = "fdname:s",
1188        .params     = "getfd name",
1189        .help       = "receive a file descriptor via SCM rights and assign it a name",
1190        .mhandler.cmd_new = qmp_marshal_input_getfd,
1191    },
1192
1193SQMP
1194getfd
1195-----
1196
1197Receive a file descriptor via SCM rights and assign it a name.
1198
1199Arguments:
1200
1201- "fdname": file descriptor name (json-string)
1202
1203Example:
1204
1205-> { "execute": "getfd", "arguments": { "fdname": "fd1" } }
1206<- { "return": {} }
1207
1208Notes:
1209
1210(1) If the name specified by the "fdname" argument already exists,
1211    the file descriptor assigned to it will be closed and replaced
1212    by the received file descriptor.
1213(2) The 'closefd' command can be used to explicitly close the file
1214    descriptor when it is no longer needed.
1215
1216EQMP
1217
1218    {
1219        .name       = "closefd",
1220        .args_type  = "fdname:s",
1221        .params     = "closefd name",
1222        .help       = "close a file descriptor previously passed via SCM rights",
1223        .mhandler.cmd_new = qmp_marshal_input_closefd,
1224    },
1225
1226SQMP
1227closefd
1228-------
1229
1230Close a file descriptor previously passed via SCM rights.
1231
1232Arguments:
1233
1234- "fdname": file descriptor name (json-string)
1235
1236Example:
1237
1238-> { "execute": "closefd", "arguments": { "fdname": "fd1" } }
1239<- { "return": {} }
1240
1241EQMP
1242
1243     {
1244        .name       = "add-fd",
1245        .args_type  = "fdset-id:i?,opaque:s?",
1246        .params     = "add-fd fdset-id opaque",
1247        .help       = "Add a file descriptor, that was passed via SCM rights, to an fd set",
1248        .mhandler.cmd_new = qmp_marshal_input_add_fd,
1249    },
1250
1251SQMP
1252add-fd
1253-------
1254
1255Add a file descriptor, that was passed via SCM rights, to an fd set.
1256
1257Arguments:
1258
1259- "fdset-id": The ID of the fd set to add the file descriptor to.
1260              (json-int, optional)
1261- "opaque": A free-form string that can be used to describe the fd.
1262            (json-string, optional)
1263
1264Return a json-object with the following information:
1265
1266- "fdset-id": The ID of the fd set that the fd was added to. (json-int)
1267- "fd": The file descriptor that was received via SCM rights and added to the
1268        fd set. (json-int)
1269
1270Example:
1271
1272-> { "execute": "add-fd", "arguments": { "fdset-id": 1 } }
1273<- { "return": { "fdset-id": 1, "fd": 3 } }
1274
1275Notes:
1276
1277(1) The list of fd sets is shared by all monitor connections.
1278(2) If "fdset-id" is not specified, a new fd set will be created.
1279
1280EQMP
1281
1282     {
1283        .name       = "remove-fd",
1284        .args_type  = "fdset-id:i,fd:i?",
1285        .params     = "remove-fd fdset-id fd",
1286        .help       = "Remove a file descriptor from an fd set",
1287        .mhandler.cmd_new = qmp_marshal_input_remove_fd,
1288    },
1289
1290SQMP
1291remove-fd
1292---------
1293
1294Remove a file descriptor from an fd set.
1295
1296Arguments:
1297
1298- "fdset-id": The ID of the fd set that the file descriptor belongs to.
1299              (json-int)
1300- "fd": The file descriptor that is to be removed. (json-int, optional)
1301
1302Example:
1303
1304-> { "execute": "remove-fd", "arguments": { "fdset-id": 1, "fd": 3 } }
1305<- { "return": {} }
1306
1307Notes:
1308
1309(1) The list of fd sets is shared by all monitor connections.
1310(2) If "fd" is not specified, all file descriptors in "fdset-id" will be
1311    removed.
1312
1313EQMP
1314
1315    {
1316        .name       = "query-fdsets",
1317        .args_type  = "",
1318        .help       = "Return information describing all fd sets",
1319        .mhandler.cmd_new = qmp_marshal_input_query_fdsets,
1320    },
1321
1322SQMP
1323query-fdsets
1324-------------
1325
1326Return information describing all fd sets.
1327
1328Arguments: None
1329
1330Example:
1331
1332-> { "execute": "query-fdsets" }
1333<- { "return": [
1334       {
1335         "fds": [
1336           {
1337             "fd": 30,
1338             "opaque": "rdonly:/path/to/file"
1339           },
1340           {
1341             "fd": 24,
1342             "opaque": "rdwr:/path/to/file"
1343           }
1344         ],
1345         "fdset-id": 1
1346       },
1347       {
1348         "fds": [
1349           {
1350             "fd": 28
1351           },
1352           {
1353             "fd": 29
1354           }
1355         ],
1356         "fdset-id": 0
1357       }
1358     ]
1359   }
1360
1361Note: The list of fd sets is shared by all monitor connections.
1362
1363EQMP
1364
1365    {
1366        .name       = "block_passwd",
1367        .args_type  = "device:B,password:s",
1368        .mhandler.cmd_new = qmp_marshal_input_block_passwd,
1369    },
1370
1371SQMP
1372block_passwd
1373------------
1374
1375Set the password of encrypted block devices.
1376
1377Arguments:
1378
1379- "device": device name (json-string)
1380- "password": password (json-string)
1381
1382Example:
1383
1384-> { "execute": "block_passwd", "arguments": { "device": "ide0-hd0",
1385                                               "password": "12345" } }
1386<- { "return": {} }
1387
1388EQMP
1389
1390    {
1391        .name       = "block_set_io_throttle",
1392        .args_type  = "device:B,bps:l,bps_rd:l,bps_wr:l,iops:l,iops_rd:l,iops_wr:l",
1393        .mhandler.cmd_new = qmp_marshal_input_block_set_io_throttle,
1394    },
1395
1396SQMP
1397block_set_io_throttle
1398------------
1399
1400Change I/O throttle limits for a block drive.
1401
1402Arguments:
1403
1404- "device": device name (json-string)
1405- "bps":  total throughput limit in bytes per second(json-int)
1406- "bps_rd":  read throughput limit in bytes per second(json-int)
1407- "bps_wr":  read throughput limit in bytes per second(json-int)
1408- "iops":  total I/O operations per second(json-int)
1409- "iops_rd":  read I/O operations per second(json-int)
1410- "iops_wr":  write I/O operations per second(json-int)
1411
1412Example:
1413
1414-> { "execute": "block_set_io_throttle", "arguments": { "device": "virtio0",
1415                                               "bps": "1000000",
1416                                               "bps_rd": "0",
1417                                               "bps_wr": "0",
1418                                               "iops": "0",
1419                                               "iops_rd": "0",
1420                                               "iops_wr": "0" } }
1421<- { "return": {} }
1422
1423EQMP
1424
1425    {
1426        .name       = "set_password",
1427        .args_type  = "protocol:s,password:s,connected:s?",
1428        .mhandler.cmd_new = qmp_marshal_input_set_password,
1429    },
1430
1431SQMP
1432set_password
1433------------
1434
1435Set the password for vnc/spice protocols.
1436
1437Arguments:
1438
1439- "protocol": protocol name (json-string)
1440- "password": password (json-string)
1441- "connected": [ keep | disconnect | fail ] (josn-string, optional)
1442
1443Example:
1444
1445-> { "execute": "set_password", "arguments": { "protocol": "vnc",
1446                                               "password": "secret" } }
1447<- { "return": {} }
1448
1449EQMP
1450
1451    {
1452        .name       = "expire_password",
1453        .args_type  = "protocol:s,time:s",
1454        .mhandler.cmd_new = qmp_marshal_input_expire_password,
1455    },
1456
1457SQMP
1458expire_password
1459---------------
1460
1461Set the password expire time for vnc/spice protocols.
1462
1463Arguments:
1464
1465- "protocol": protocol name (json-string)
1466- "time": [ now | never | +secs | secs ] (json-string)
1467
1468Example:
1469
1470-> { "execute": "expire_password", "arguments": { "protocol": "vnc",
1471                                                  "time": "+60" } }
1472<- { "return": {} }
1473
1474EQMP
1475
1476    {
1477        .name       = "add_client",
1478        .args_type  = "protocol:s,fdname:s,skipauth:b?,tls:b?",
1479        .mhandler.cmd_new = qmp_marshal_input_add_client,
1480    },
1481
1482SQMP
1483add_client
1484----------
1485
1486Add a graphics client
1487
1488Arguments:
1489
1490- "protocol": protocol name (json-string)
1491- "fdname": file descriptor name (json-string)
1492- "skipauth": whether to skip authentication (json-bool, optional)
1493- "tls": whether to perform TLS (json-bool, optional)
1494
1495Example:
1496
1497-> { "execute": "add_client", "arguments": { "protocol": "vnc",
1498                                             "fdname": "myclient" } }
1499<- { "return": {} }
1500
1501EQMP
1502    {
1503        .name       = "qmp_capabilities",
1504        .args_type  = "",
1505        .params     = "",
1506        .help       = "enable QMP capabilities",
1507        .user_print = monitor_user_noop,
1508        .mhandler.cmd_new = do_qmp_capabilities,
1509    },
1510
1511SQMP
1512qmp_capabilities
1513----------------
1514
1515Enable QMP capabilities.
1516
1517Arguments: None.
1518
1519Example:
1520
1521-> { "execute": "qmp_capabilities" }
1522<- { "return": {} }
1523
1524Note: This command must be issued before issuing any other command.
1525
1526EQMP
1527
1528    {
1529        .name       = "human-monitor-command",
1530        .args_type  = "command-line:s,cpu-index:i?",
1531        .mhandler.cmd_new = qmp_marshal_input_human_monitor_command,
1532    },
1533
1534SQMP
1535human-monitor-command
1536---------------------
1537
1538Execute a Human Monitor command.
1539
1540Arguments: 
1541
1542- command-line: the command name and its arguments, just like the
1543                Human Monitor's shell (json-string)
1544- cpu-index: select the CPU number to be used by commands which access CPU
1545             data, like 'info registers'. The Monitor selects CPU 0 if this
1546             argument is not provided (json-int, optional)
1547
1548Example:
1549
1550-> { "execute": "human-monitor-command", "arguments": { "command-line": "info kvm" } }
1551<- { "return": "kvm support: enabled\r\n" }
1552
1553Notes:
1554
1555(1) The Human Monitor is NOT an stable interface, this means that command
1556    names, arguments and responses can change or be removed at ANY time.
1557    Applications that rely on long term stability guarantees should NOT
1558    use this command
1559
1560(2) Limitations:
1561
1562    o This command is stateless, this means that commands that depend
1563      on state information (such as getfd) might not work
1564
1565    o Commands that prompt the user for data (eg. 'cont' when the block
1566      device is encrypted) don't currently work
1567
15683. Query Commands
1569=================
1570
1571HXCOMM Each query command below is inside a SQMP/EQMP section, do NOT change
1572HXCOMM this! We will possibly move query commands definitions inside those
1573HXCOMM sections, just like regular commands.
1574
1575EQMP
1576
1577SQMP
1578query-version
1579-------------
1580
1581Show QEMU version.
1582
1583Return a json-object with the following information:
1584
1585- "qemu": A json-object containing three integer values:
1586    - "major": QEMU's major version (json-int)
1587    - "minor": QEMU's minor version (json-int)
1588    - "micro": QEMU's micro version (json-int)
1589- "package": package's version (json-string)
1590
1591Example:
1592
1593-> { "execute": "query-version" }
1594<- {
1595      "return":{
1596         "qemu":{
1597            "major":0,
1598            "minor":11,
1599            "micro":5
1600         },
1601         "package":""
1602      }
1603   }
1604
1605EQMP
1606
1607    {
1608        .name       = "query-version",
1609        .args_type  = "",
1610        .mhandler.cmd_new = qmp_marshal_input_query_version,
1611    },
1612
1613SQMP
1614query-commands
1615--------------
1616
1617List QMP available commands.
1618
1619Each command is represented by a json-object, the returned value is a json-array
1620of all commands.
1621
1622Each json-object contain:
1623
1624- "name": command's name (json-string)
1625
1626Example:
1627
1628-> { "execute": "query-commands" }
1629<- {
1630      "return":[
1631         {
1632            "name":"query-balloon"
1633         },
1634         {
1635            "name":"system_powerdown"
1636         }
1637      ]
1638   }
1639
1640Note: This example has been shortened as the real response is too long.
1641
1642EQMP
1643
1644    {
1645        .name       = "query-commands",
1646        .args_type  = "",
1647        .mhandler.cmd_new = qmp_marshal_input_query_commands,
1648    },
1649
1650SQMP
1651query-events
1652--------------
1653
1654List QMP available events.
1655
1656Each event is represented by a json-object, the returned value is a json-array
1657of all events.
1658
1659Each json-object contains:
1660
1661- "name": event's name (json-string)
1662
1663Example:
1664
1665-> { "execute": "query-events" }
1666<- {
1667      "return":[
1668         {
1669            "name":"SHUTDOWN"
1670         },
1671         {
1672            "name":"RESET"
1673         }
1674      ]
1675   }
1676
1677Note: This example has been shortened as the real response is too long.
1678
1679EQMP
1680
1681    {
1682        .name       = "query-events",
1683        .args_type  = "",
1684        .mhandler.cmd_new = qmp_marshal_input_query_events,
1685    },
1686
1687SQMP
1688query-chardev
1689-------------
1690
1691Each device is represented by a json-object. The returned value is a json-array
1692of all devices.
1693
1694Each json-object contain the following:
1695
1696- "label": device's label (json-string)
1697- "filename": device's file (json-string)
1698
1699Example:
1700
1701-> { "execute": "query-chardev" }
1702<- {
1703      "return":[
1704         {
1705            "label":"monitor",
1706            "filename":"stdio"
1707         },
1708         {
1709            "label":"serial0",
1710            "filename":"vc"
1711         }
1712      ]
1713   }
1714
1715EQMP
1716
1717    {
1718        .name       = "query-chardev",
1719        .args_type  = "",
1720        .mhandler.cmd_new = qmp_marshal_input_query_chardev,
1721    },
1722
1723SQMP
1724query-block
1725-----------
1726
1727Show the block devices.
1728
1729Each block device information is stored in a json-object and the returned value
1730is a json-array of all devices.
1731
1732Each json-object contain the following:
1733
1734- "device": device name (json-string)
1735- "type": device type (json-string)
1736         - deprecated, retained for backward compatibility
1737         - Possible values: "unknown"
1738- "removable": true if the device is removable, false otherwise (json-bool)
1739- "locked": true if the device is locked, false otherwise (json-bool)
1740- "tray_open": only present if removable, true if the device has a tray,
1741               and it is open (json-bool)
1742- "inserted": only present if the device is inserted, it is a json-object
1743   containing the following:
1744         - "file": device file name (json-string)
1745         - "ro": true if read-only, false otherwise (json-bool)
1746         - "drv": driver format name (json-string)
1747             - Possible values: "blkdebug", "bochs", "cloop", "cow", "dmg",
1748                                "file", "file", "ftp", "ftps", "host_cdrom",
1749                                "host_device", "host_floppy", "http", "https",
1750                                "nbd", "parallels", "qcow", "qcow2", "raw",
1751                                "tftp", "vdi", "vmdk", "vpc", "vvfat"
1752         - "backing_file": backing file name (json-string, optional)
1753         - "backing_file_depth": number of files in the backing file chain (json-int)
1754         - "encrypted": true if encrypted, false otherwise (json-bool)
1755         - "bps": limit total bytes per second (json-int)
1756         - "bps_rd": limit read bytes per second (json-int)
1757         - "bps_wr": limit write bytes per second (json-int)
1758         - "iops": limit total I/O operations per second (json-int)
1759         - "iops_rd": limit read operations per second (json-int)
1760         - "iops_wr": limit write operations per second (json-int)
1761         - "image": the detail of the image, it is a json-object containing
1762            the following:
1763             - "filename": image file name (json-string)
1764             - "format": image format (json-string)
1765             - "virtual-size": image capacity in bytes (json-int)
1766             - "dirty-flag": true if image is not cleanly closed, not present
1767                             means clean (json-bool, optional)
1768             - "actual-size": actual size on disk in bytes of the image, not
1769                              present when image does not support thin
1770                              provision (json-int, optional)
1771             - "cluster-size": size of a cluster in bytes, not present if image
1772                               format does not support it (json-int, optional)
1773             - "encrypted": true if the image is encrypted, not present means
1774                            false or the image format does not support
1775                            encryption (json-bool, optional)
1776             - "backing_file": backing file name, not present means no backing
1777                               file is used or the image format does not
1778                               support backing file chain
1779                               (json-string, optional)
1780             - "full-backing-filename": full path of the backing file, not
1781                                        present if it equals backing_file or no
1782                                        backing file is used
1783                                        (json-string, optional)
1784             - "backing-filename-format": the format of the backing file, not
1785                                          present means unknown or no backing
1786                                          file (json-string, optional)
1787             - "snapshots": the internal snapshot info, it is an optional list
1788                of json-object containing the following:
1789                 - "id": unique snapshot id (json-string)
1790                 - "name": snapshot name (json-string)
1791                 - "vm-state-size": size of the VM state in bytes (json-int)
1792                 - "date-sec": UTC date of the snapshot in seconds (json-int)
1793                 - "date-nsec": fractional part in nanoseconds to be used with
1794                                date-sec(json-int)
1795                 - "vm-clock-sec": VM clock relative to boot in seconds
1796                                   (json-int)
1797                 - "vm-clock-nsec": fractional part in nanoseconds to be used
1798                                    with vm-clock-sec (json-int)
1799             - "backing-image": the detail of the backing image, it is an
1800                                optional json-object only present when a
1801                                backing image present for this image
1802
1803- "io-status": I/O operation status, only present if the device supports it
1804               and the VM is configured to stop on errors. It's always reset
1805               to "ok" when the "cont" command is issued (json_string, optional)
1806             - Possible values: "ok", "failed", "nospace"
1807
1808Example:
1809
1810-> { "execute": "query-block" }
1811<- {
1812      "return":[
1813         {
1814            "io-status": "ok",
1815            "device":"ide0-hd0",
1816            "locked":false,
1817            "removable":false,
1818            "inserted":{
1819               "ro":false,
1820               "drv":"qcow2",
1821               "encrypted":false,
1822               "file":"disks/test.qcow2",
1823               "backing_file_depth":1,
1824               "bps":1000000,
1825               "bps_rd":0,
1826               "bps_wr":0,
1827               "iops":1000000,
1828               "iops_rd":0,
1829               "iops_wr":0,
1830               "image":{
1831                  "filename":"disks/test.qcow2",
1832                  "format":"qcow2",
1833                  "virtual-size":2048000,
1834                  "backing_file":"base.qcow2",
1835                  "full-backing-filename":"disks/base.qcow2",
1836                  "backing-filename-format:"qcow2",
1837                  "snapshots":[
1838                     {
1839                        "id": "1",
1840                        "name": "snapshot1",
1841                        "vm-state-size": 0,
1842                        "date-sec": 10000200,
1843                        "date-nsec": 12,
1844                        "vm-clock-sec": 206,
1845                        "vm-clock-nsec": 30
1846                     }
1847                  ],
1848                  "backing-image":{
1849                      "filename":"disks/base.qcow2",
1850                      "format":"qcow2",
1851                      "virtual-size":2048000
1852                  }
1853               }
1854            },
1855            "type":"unknown"
1856         },
1857         {
1858            "io-status": "ok",
1859            "device":"ide1-cd0",
1860            "locked":false,
1861            "removable":true,
1862            "type":"unknown"
1863         },
1864         {
1865            "device":"floppy0",
1866            "locked":false,
1867            "removable":true,
1868            "type":"unknown"
1869         },
1870         {
1871            "device":"sd0",
1872            "locked":false,
1873            "removable":true,
1874            "type":"unknown"
1875         }
1876      ]
1877   }
1878
1879EQMP
1880
1881    {
1882        .name       = "query-block",
1883        .args_type  = "",
1884        .mhandler.cmd_new = qmp_marshal_input_query_block,
1885    },
1886
1887SQMP
1888query-blockstats
1889----------------
1890
1891Show block device statistics.
1892
1893Each device statistic information is stored in a json-object and the returned
1894value is a json-array of all devices.
1895
1896Each json-object contain the following:
1897
1898- "device": device name (json-string)
1899- "stats": A json-object with the statistics information, it contains:
1900    - "rd_bytes": bytes read (json-int)
1901    - "wr_bytes": bytes written (json-int)
1902    - "rd_operations": read operations (json-int)
1903    - "wr_operations": write operations (json-int)
1904    - "flush_operations": cache flush operations (json-int)
1905    - "wr_total_time_ns": total time spend on writes in nano-seconds (json-int)
1906    - "rd_total_time_ns": total time spend on reads in nano-seconds (json-int)
1907    - "flush_total_time_ns": total time spend on cache flushes in nano-seconds (json-int)
1908    - "wr_highest_offset": Highest offset of a sector written since the
1909                           BlockDriverState has been opened (json-int)
1910- "parent": Contains recursively the statistics of the underlying
1911            protocol (e.g. the host file for a qcow2 image). If there is
1912            no underlying protocol, this field is omitted
1913            (json-object, optional)
1914
1915Example:
1916
1917-> { "execute": "query-blockstats" }
1918<- {
1919      "return":[
1920         {
1921            "device":"ide0-hd0",
1922            "parent":{
1923               "stats":{
1924                  "wr_highest_offset":3686448128,
1925                  "wr_bytes":9786368,
1926                  "wr_operations":751,
1927                  "rd_bytes":122567168,
1928                  "rd_operations":36772
1929                  "wr_total_times_ns":313253456
1930                  "rd_total_times_ns":3465673657
1931                  "flush_total_times_ns":49653
1932                  "flush_operations":61,
1933               }
1934            },
1935            "stats":{
1936               "wr_highest_offset":2821110784,
1937               "wr_bytes":9786368,
1938               "wr_operations":692,
1939               "rd_bytes":122739200,
1940               "rd_operations":36604
1941               "flush_operations":51,
1942               "wr_total_times_ns":313253456
1943               "rd_total_times_ns":3465673657
1944               "flush_total_times_ns":49653
1945            }
1946         },
1947         {
1948            "device":"ide1-cd0",
1949            "stats":{
1950               "wr_highest_offset":0,
1951               "wr_bytes":0,
1952               "wr_operations":0,
1953               "rd_bytes":0,
1954               "rd_operations":0
1955               "flush_operations":0,
1956               "wr_total_times_ns":0
1957               "rd_total_times_ns":0
1958               "flush_total_times_ns":0
1959            }
1960         },
1961         {
1962            "device":"floppy0",
1963            "stats":{
1964               "wr_highest_offset":0,
1965               "wr_bytes":0,
1966               "wr_operations":0,
1967               "rd_bytes":0,
1968               "rd_operations":0
1969               "flush_operations":0,
1970               "wr_total_times_ns":0
1971               "rd_total_times_ns":0
1972               "flush_total_times_ns":0
1973            }
1974         },
1975         {
1976            "device":"sd0",
1977            "stats":{
1978               "wr_highest_offset":0,
1979               "wr_bytes":0,
1980               "wr_operations":0,
1981               "rd_bytes":0,
1982               "rd_operations":0
1983               "flush_operations":0,
1984               "wr_total_times_ns":0
1985               "rd_total_times_ns":0
1986               "flush_total_times_ns":0
1987            }
1988         }
1989      ]
1990   }
1991
1992EQMP
1993
1994    {
1995        .name       = "query-blockstats",
1996        .args_type  = "",
1997        .mhandler.cmd_new = qmp_marshal_input_query_blockstats,
1998    },
1999
2000SQMP
2001query-cpus
2002----------
2003
2004Show CPU information.
2005
2006Return a json-array. Each CPU is represented by a json-object, which contains:
2007
2008- "CPU": CPU index (json-int)
2009- "current": true if this is the current CPU, false otherwise (json-bool)
2010- "halted": true if the cpu is halted, false otherwise (json-bool)
2011- Current program counter. The key's name depends on the architecture:
2012     "pc": i386/x86_64 (json-int)
2013     "nip": PPC (json-int)
2014     "pc" and "npc": sparc (json-int)
2015     "PC": mips (json-int)
2016- "thread_id": ID of the underlying host thread (json-int)
2017
2018Example:
2019
2020-> { "execute": "query-cpus" }
2021<- {
2022      "return":[
2023         {
2024            "CPU":0,
2025            "current":true,
2026            "halted":false,
2027            "pc":3227107138
2028            "thread_id":3134
2029         },
2030         {
2031            "CPU":1,
2032            "current":false,
2033            "halted":true,
2034            "pc":7108165
2035            "thread_id":3135
2036         }
2037      ]
2038   }
2039
2040EQMP
2041
2042    {
2043        .name       = "query-cpus",
2044        .args_type  = "",
2045        .mhandler.cmd_new = qmp_marshal_input_query_cpus,
2046    },
2047
2048SQMP
2049query-pci
2050---------
2051
2052PCI buses and devices information.
2053
2054The returned value is a json-array of all buses. Each bus is represented by
2055a json-object, which has a key with a json-array of all PCI devices attached
2056to it. Each device is represented by a json-object.
2057
2058The bus json-object contains the following:
2059
2060- "bus": bus number (json-int)
2061- "devices": a json-array of json-objects, each json-object represents a
2062             PCI device
2063
2064The PCI device json-object contains the following:
2065
2066- "bus": identical to the parent's bus number (json-int)
2067- "slot": slot number (json-int)
2068- "function": function number (json-int)
2069- "class_info": a json-object containing:
2070     - "desc": device class description (json-string, optional)
2071     - "class": device class number (json-int)
2072- "id": a json-object containing:
2073     - "device": device ID (json-int)
2074     - "vendor": vendor ID (json-int)
2075- "irq": device's IRQ if assigned (json-int, optional)
2076- "qdev_id": qdev id string (json-string)
2077- "pci_bridge": It's a json-object, only present if this device is a
2078                PCI bridge, contains:
2079     - "bus": bus number (json-int)
2080     - "secondary": secondary bus number (json-int)
2081     - "subordinate": subordinate bus number (json-int)
2082     - "io_range": I/O memory range information, a json-object with the
2083                   following members:
2084                 - "base": base address, in bytes (json-int)
2085                 - "limit": limit address, in bytes (json-int)
2086     - "memory_range": memory range information, a json-object with the
2087                       following members:
2088                 - "base": base address, in bytes (json-int)
2089                 - "limit": limit address, in bytes (json-int)
2090     - "prefetchable_range": Prefetchable memory range information, a
2091                             json-object with the following members:
2092                 - "base": base address, in bytes (json-int)
2093                 - "limit": limit address, in bytes (json-int)
2094     - "devices": a json-array of PCI devices if there's any attached, each
2095                  each element is represented by a json-object, which contains
2096                  the same members of the 'PCI device json-object' described
2097                  above (optional)
2098- "regions": a json-array of json-objects, each json-object represents a
2099             memory region of this device
2100
2101The memory range json-object contains the following:
2102
2103- "base": base memory address (json-int)
2104- "limit": limit value (json-int)
2105
2106The region json-object can be an I/O region or a memory region, an I/O region
2107json-object contains the following:
2108
2109- "type": "io" (json-string, fixed)
2110- "bar": BAR number (json-int)
2111- "address": memory address (json-int)
2112- "size": memory size (json-int)
2113
2114A memory region json-object contains the following:
2115
2116- "type": "memory" (json-string, fixed)
2117- "bar": BAR number (json-int)
2118- "address": memory address (json-int)
2119- "size": memory size (json-int)
2120- "mem_type_64": true or false (json-bool)
2121- "prefetch": true or false (json-bool)
2122
2123Example:
2124
2125-> { "execute": "query-pci" }
2126<- {
2127      "return":[
2128         {
2129            "bus":0,
2130            "devices":[
2131               {
2132                  "bus":0,
2133                  "qdev_id":"",
2134                  "slot":0,
2135                  "class_info":{
2136                     "class":1536,
2137                     "desc":"Host bridge"
2138                  },
2139                  "id":{
2140                     "device":32902,
2141                     "vendor":4663
2142                  },
2143                  "function":0,
2144                  "regions":[
2145   
2146                  ]
2147               },
2148               {
2149                  "bus":0,
2150                  "qdev_id":"",
2151                  "slot":1,
2152                  "class_info":{
2153                     "class":1537,
2154                     "desc":"ISA bridge"
2155                  },
2156                  "id":{
2157                     "device":32902,
2158                     "vendor":28672
2159                  },
2160                  "function":0,
2161                  "regions":[
2162   
2163                  ]
2164               },
2165               {
2166                  "bus":0,
2167                  "qdev_id":"",
2168                  "slot":1,
2169                  "class_info":{
2170                     "class":257,
2171                     "desc":"IDE controller"
2172                  },
2173                  "id":{
2174                     "device":32902,
2175                     "vendor":28688
2176                  },
2177                  "function":1,
2178                  "regions":[
2179                     {
2180                        "bar":4,
2181                        "size":16,
2182                        "address":49152,
2183                        "type":"io"
2184                     }
2185                  ]
2186               },
2187               {
2188                  "bus":0,
2189                  "qdev_id":"",
2190                  "slot":2,
2191                  "class_info":{
2192                     "class":768,
2193                     "desc":"VGA controller"
2194                  },
2195                  "id":{
2196                     "device":4115,
2197                     "vendor":184
2198                  },
2199                  "function":0,
2200                  "regions":[
2201                     {
2202                        "prefetch":true,
2203                        "mem_type_64":false,
2204                        "bar":0,
2205                        "size":33554432,
2206                        "address":4026531840,
2207                        "type":"memory"
2208                     },
2209                     {
2210                        "prefetch":false,
2211                        "mem_type_64":false,
2212                        "bar":1,
2213                        "size":4096,
2214                        "address":4060086272,
2215                        "type":"memory"
2216                     },
2217                     {
2218                        "prefetch":false,
2219                        "mem_type_64":false,
2220                        "bar":6,
2221                        "size":65536,
2222                        "address":-1,
2223                        "type":"memory"
2224                     }
2225                  ]
2226               },
2227               {
2228                  "bus":0,
2229                  "qdev_id":"",
2230                  "irq":11,
2231                  "slot":4,
2232                  "class_info":{
2233                     "class":1280,
2234                     "desc":"RAM controller"
2235                  },
2236                  "id":{
2237                     "device":6900,
2238                     "vendor":4098
2239                  },
2240                  "function":0,
2241                  "regions":[
2242                     {
2243                        "bar":0,
2244                        "size":32,
2245                        "address":49280,
2246                        "type":"io"
2247                     }
2248                  ]
2249               }
2250            ]
2251         }
2252      ]
2253   }
2254
2255Note: This example has been shortened as the real response is too long.
2256
2257EQMP
2258
2259    {
2260        .name       = "query-pci",
2261        .args_type  = "",
2262        .mhandler.cmd_new = qmp_marshal_input_query_pci,
2263    },
2264
2265SQMP
2266query-kvm
2267---------
2268
2269Show KVM information.
2270
2271Return a json-object with the following information:
2272
2273- "enabled": true if KVM support is enabled, false otherwise (json-bool)
2274- "present": true if QEMU has KVM support, false otherwise (json-bool)
2275
2276Example:
2277
2278-> { "execute": "query-kvm" }
2279<- { "return": { "enabled": true, "present": true } }
2280
2281EQMP
2282
2283    {
2284        .name       = "query-kvm",
2285        .args_type  = "",
2286        .mhandler.cmd_new = qmp_marshal_input_query_kvm,
2287    },
2288
2289SQMP
2290query-status
2291------------
2292
2293Return a json-object with the following information:
2294
2295- "running": true if the VM is running, or false if it is paused (json-bool)
2296- "singlestep": true if the VM is in single step mode,
2297                false otherwise (json-bool)
2298- "status": one of the following values (json-string)
2299    "debug" - QEMU is running on a debugger
2300    "inmigrate" - guest is paused waiting for an incoming migration
2301    "internal-error" - An internal error that prevents further guest
2302    execution has occurred
2303    "io-error" - the last IOP has failed and the device is configured
2304    to pause on I/O errors
2305    "paused" - guest has been paused via the 'stop' command
2306    "postmigrate" - guest is paused following a successful 'migrate'
2307    "prelaunch" - QEMU was started with -S and guest has not started
2308    "finish-migrate" - guest is paused to finish the migration process
2309    "restore-vm" - guest is paused to restore VM state
2310    "running" - guest is actively running
2311    "save-vm" - guest is paused to save the VM state
2312    "shutdown" - guest is shut down (and -no-shutdown is in use)
2313    "watchdog" - the watchdog action is configured to pause and
2314     has been triggered
2315
2316Example:
2317
2318-> { "execute": "query-status" }
2319<- { "return": { "running": true, "singlestep": false, "status": "running" } }
2320
2321EQMP
2322    
2323    {
2324        .name       = "query-status",
2325        .args_type  = "",
2326        .mhandler.cmd_new = qmp_marshal_input_query_status,
2327    },
2328
2329SQMP
2330query-mice
2331----------
2332
2333Show VM mice information.
2334
2335Each mouse is represented by a json-object, the returned value is a json-array
2336of all mice.
2337
2338The mouse json-object contains the following:
2339
2340- "name": mouse's name (json-string)
2341- "index": mouse's index (json-int)
2342- "current": true if this mouse is receiving events, false otherwise (json-bool)
2343- "absolute": true if the mouse generates absolute input events (json-bool)
2344
2345Example:
2346
2347-> { "execute": "query-mice" }
2348<- {
2349      "return":[
2350         {
2351            "name":"QEMU Microsoft Mouse",
2352            "index":0,
2353            "current":false,
2354            "absolute":false
2355         },
2356         {
2357            "name":"QEMU PS/2 Mouse",
2358            "index":1,
2359            "current":true,
2360            "absolute":true
2361         }
2362      ]
2363   }
2364
2365EQMP
2366
2367    {
2368        .name       = "query-mice",
2369        .args_type  = "",
2370        .mhandler.cmd_new = qmp_marshal_input_query_mice,
2371    },
2372
2373SQMP
2374query-vnc
2375---------
2376
2377Show VNC server information.
2378
2379Return a json-object with server information. Connected clients are returned
2380as a json-array of json-objects.
2381
2382The main json-object contains the following:
2383
2384- "enabled": true or false (json-bool)
2385- "host": server's IP address (json-string)
2386- "family": address family (json-string)
2387         - Possible values: "ipv4", "ipv6", "unix", "unknown"
2388- "service": server's port number (json-string)
2389- "auth": authentication method (json-string)
2390         - Possible values: "invalid", "none", "ra2", "ra2ne", "sasl", "tight",
2391                            "tls", "ultra", "unknown", "vencrypt", "vencrypt",
2392                            "vencrypt+plain", "vencrypt+tls+none",
2393                            "vencrypt+tls+plain", "vencrypt+tls+sasl",
2394                            "vencrypt+tls+vnc", "vencrypt+x509+none",
2395                            "vencrypt+x509+plain", "vencrypt+x509+sasl",
2396                            "vencrypt+x509+vnc", "vnc"
2397- "clients": a json-array of all connected clients
2398
2399Clients are described by a json-object, each one contain the following:
2400
2401- "host": client's IP address (json-string)
2402- "family": address family (json-string)
2403         - Possible values: "ipv4", "ipv6", "unix", "unknown"
2404- "service": client's port number (json-string)
2405- "x509_dname": TLS dname (json-string, optional)
2406- "sasl_username": SASL username (json-string, optional)
2407
2408Example:
2409
2410-> { "execute": "query-vnc" }
2411<- {
2412      "return":{
2413         "enabled":true,
2414         "host":"0.0.0.0",
2415         "service":"50402",
2416         "auth":"vnc",
2417         "family":"ipv4",
2418         "clients":[
2419            {
2420               "host":"127.0.0.1",
2421               "service":"50401",
2422               "family":"ipv4"
2423            }
2424         ]
2425      }
2426   }
2427
2428EQMP
2429
2430    {
2431        .name       = "query-vnc",
2432        .args_type  = "",
2433        .mhandler.cmd_new = qmp_marshal_input_query_vnc,
2434    },
2435
2436SQMP
2437query-spice
2438-----------
2439
2440Show SPICE server information.
2441
2442Return a json-object with server information. Connected clients are returned
2443as a json-array of json-objects.
2444
2445The main json-object contains the following:
2446
2447- "enabled": true or false (json-bool)
2448- "host": server's IP address (json-string)
2449- "port": server's port number (json-int, optional)
2450- "tls-port": server's port number (json-int, optional)
2451- "auth": authentication method (json-string)
2452         - Possible values: "none", "spice"
2453- "channels": a json-array of all active channels clients
2454
2455Channels are described by a json-object, each one contain the following:
2456
2457- "host": client's IP address (json-string)
2458- "family": address family (json-string)
2459         - Possible values: "ipv4", "ipv6", "unix", "unknown"
2460- "port": client's port number (json-string)
2461- "connection-id": spice connection id.  All channels with the same id
2462                   belong to the same spice session (json-int)
2463- "channel-type": channel type.  "1" is the main control channel, filter for
2464                  this one if you want track spice sessions only (json-int)
2465- "channel-id": channel id.  Usually "0", might be different needed when
2466                multiple channels of the same type exist, such as multiple
2467                display channels in a multihead setup (json-int)
2468- "tls": whevener the channel is encrypted (json-bool)
2469
2470Example:
2471
2472-> { "execute": "query-spice" }
2473<- {
2474      "return": {
2475         "enabled": true,
2476         "auth": "spice",
2477         "port": 5920,
2478         "tls-port": 5921,
2479         "host": "0.0.0.0",
2480         "channels": [
2481            {
2482               "port": "54924",
2483               "family": "ipv4",
2484               "channel-type": 1,
2485               "connection-id": 1804289383,
2486               "host": "127.0.0.1",
2487               "channel-id": 0,
2488               "tls": true
2489            },
2490            {
2491               "port": "36710",
2492               "family": "ipv4",
2493               "channel-type": 4,
2494               "connection-id": 1804289383,
2495               "host": "127.0.0.1",
2496               "channel-id": 0,
2497               "tls": false
2498            },
2499            [ ... more channels follow ... ]
2500         ]
2501      }
2502   }
2503
2504EQMP
2505
2506#if defined(CONFIG_SPICE)
2507    {
2508        .name       = "query-spice",
2509        .args_type  = "",
2510        .mhandler.cmd_new = qmp_marshal_input_query_spice,
2511    },
2512#endif
2513
2514SQMP
2515query-name
2516----------
2517
2518Show VM name.
2519
2520Return a json-object with the following information:
2521
2522- "name": VM's name (json-string, optional)
2523
2524Example:
2525
2526-> { "execute": "query-name" }
2527<- { "return": { "name": "qemu-name" } }
2528
2529EQMP
2530
2531    {
2532        .name       = "query-name",
2533        .args_type  = "",
2534        .mhandler.cmd_new = qmp_marshal_input_query_name,
2535    },
2536
2537SQMP
2538query-uuid
2539----------
2540
2541Show VM UUID.
2542
2543Return a json-object with the following information:
2544
2545- "UUID": Universally Unique Identifier (json-string)
2546
2547Example:
2548
2549-> { "execute": "query-uuid" }
2550<- { "return": { "UUID": "550e8400-e29b-41d4-a716-446655440000" } }
2551
2552EQMP
2553
2554    {
2555        .name       = "query-uuid",
2556        .args_type  = "",
2557        .mhandler.cmd_new = qmp_marshal_input_query_uuid,
2558    },
2559
2560SQMP
2561query-command-line-options
2562--------------------------
2563
2564Show command line option schema.
2565
2566Return a json-array of command line option schema for all options (or for
2567the given option), returning an error if the given option doesn't exist.
2568
2569Each array entry contains the following:
2570
2571- "option": option name (json-string)
2572- "parameters": a json-array describes all parameters of the option:
2573    - "name": parameter name (json-string)
2574    - "type": parameter type (one of 'string', 'boolean', 'number',
2575              or 'size')
2576    - "help": human readable description of the parameter
2577              (json-string, optional)
2578
2579Example:
2580
2581-> { "execute": "query-command-line-options", "arguments": { "option": "option-rom" } }
2582<- { "return": [
2583        {
2584            "parameters": [
2585                {
2586                    "name": "romfile",
2587                    "type": "string"
2588                },
2589                {
2590                    "name": "bootindex",
2591                    "type": "number"
2592                }
2593            ],
2594            "option": "option-rom"
2595        }
2596     ]
2597   }
2598
2599EQMP
2600
2601    {
2602        .name       = "query-command-line-options",
2603        .args_type  = "option:s?",
2604        .mhandler.cmd_new = qmp_marshal_input_query_command_line_options,
2605    },
2606
2607SQMP
2608query-migrate
2609-------------
2610
2611Migration status.
2612
2613Return a json-object. If migration is active there will be another json-object
2614with RAM migration status and if block migration is active another one with
2615block migration status.
2616
2617The main json-object contains the following:
2618
2619- "status": migration status (json-string)
2620     - Possible values: "active", "completed", "failed", "cancelled"
2621- "total-time": total amount of ms since migration started.  If
2622                migration has ended, it returns the total migration
2623                time (json-int)
2624- "setup-time" amount of setup time in milliseconds _before_ the
2625               iterations begin but _after_ the QMP command is issued.
2626               This is designed to provide an accounting of any activities
2627               (such as RDMA pinning) which may be expensive, but do not 
2628               actually occur during the iterative migration rounds 
2629               themselves. (json-int)
2630- "downtime": only present when migration has finished correctly
2631              total amount in ms for downtime that happened (json-int)
2632- "expected-downtime": only present while migration is active
2633                total amount in ms for downtime that was calculated on
2634                the last bitmap round (json-int)
2635- "ram": only present if "status" is "active", it is a json-object with the
2636  following RAM information:
2637         - "transferred": amount transferred in bytes (json-int)
2638         - "remaining": amount remaining to transfer in bytes (json-int)
2639         - "total": total amount of memory in bytes (json-int)
2640         - "duplicate": number of pages filled entirely with the same
2641            byte (json-int)
2642            These are sent over the wire much more efficiently.
2643         - "skipped": number of skipped zero pages (json-int)
2644         - "normal" : number of whole pages transferred.  I.e. they
2645            were not sent as duplicate or xbzrle pages (json-int)
2646         - "normal-bytes" : number of bytes transferred in whole
2647            pages. This is just normal pages times size of one page,
2648            but this way upper levels don't need to care about page
2649            size (json-int)
2650- "disk": only present if "status" is "active" and it is a block migration,
2651  it is a json-object with the following disk information:
2652         - "transferred": amount transferred in bytes (json-int)
2653         - "remaining": amount remaining to transfer in bytes json-int)
2654         - "total": total disk size in bytes (json-int)
2655- "xbzrle-cache": only present if XBZRLE is active.
2656  It is a json-object with the following XBZRLE information:
2657         - "cache-size": XBZRLE cache size in bytes
2658         - "bytes": number of bytes transferred for XBZRLE compressed pages
2659         - "pages": number of XBZRLE compressed pages
2660         - "cache-miss": number of XBRZRLE page cache misses
2661         - "overflow": number of times XBZRLE overflows.  This means
2662           that the XBZRLE encoding was bigger than just sent the
2663           whole page, and then we sent the whole page instead (as as
2664           normal page).
2665
2666Examples:
2667
26681. Before the first migration
2669
2670-> { "execute": "query-migrate" }
2671<- { "return": {} }
2672
26732. Migration is done and has succeeded
2674
2675-> { "execute": "query-migrate" }
2676<- { "return": {
2677        "status": "completed",
2678        "ram":{
2679          "transferred":123,
2680          "remaining":123,
2681          "total":246,
2682          "total-time":12345,
2683          "setup-time":12345,
2684          "downtime":12345,
2685          "duplicate":123,
2686          "normal":123,
2687          "normal-bytes":123456
2688        }
2689     }
2690   }
2691
26923. Migration is done and has failed
2693
2694-> { "execute": "query-migrate" }
2695<- { "return": { "status": "failed" } }
2696
26974. Migration is being performed and is not a block migration:
2698
2699-> { "execute": "query-migrate" }
2700<- {
2701      "return":{
2702         "status":"active",
2703         "ram":{
2704            "transferred":123,
2705            "remaining":123,
2706            "total":246,
2707            "total-time":12345,
2708            "setup-time":12345,
2709            "expected-downtime":12345,
2710            "duplicate":123,
2711            "normal":123,
2712            "normal-bytes":123456
2713         }
2714      }
2715   }
2716
27175. Migration is being performed and is a block migration:
2718
2719-> { "execute": "query-migrate" }
2720<- {
2721      "return":{
2722         "status":"active",
2723         "ram":{
2724            "total":1057024,
2725            "remaining":1053304,
2726            "transferred":3720,
2727            "total-time":12345,
2728            "setup-time":12345,
2729            "expected-downtime":12345,
2730            "duplicate":123,
2731            "normal":123,
2732            "normal-bytes":123456
2733         },
2734         "disk":{
2735            "total":20971520,
2736            "remaining":20880384,
2737            "transferred":91136
2738         }
2739      }
2740   }
2741
27426. Migration is being performed and XBZRLE is active:
2743
2744-> { "execute": "query-migrate" }
2745<- {
2746      "return":{
2747         "status":"active",
2748         "capabilities" : [ { "capability": "xbzrle", "state" : true } ],
2749         "ram":{
2750            "total":1057024,
2751            "remaining":1053304,
2752            "transferred":3720,
2753            "total-time":12345,
2754            "setup-time":12345,
2755            "expected-downtime":12345,
2756            "duplicate":10,
2757            "normal":3333,
2758            "normal-bytes":3412992
2759         },
2760         "xbzrle-cache":{
2761            "cache-size":67108864,
2762            "bytes":20971520,
2763            "pages":2444343,
2764            "cache-miss":2244,
2765            "overflow":34434
2766         }
2767      }
2768   }
2769
2770EQMP
2771
2772    {
2773        .name       = "query-migrate",
2774        .args_type  = "",
2775        .mhandler.cmd_new = qmp_marshal_input_query_migrate,
2776    },
2777
2778SQMP
2779migrate-set-capabilities
2780------------------------
2781
2782Enable/Disable migration capabilities
2783
2784- "xbzrle": XBZRLE support
2785
2786Arguments:
2787
2788Example:
2789
2790-> { "execute": "migrate-set-capabilities" , "arguments":
2791     { "capabilities": [ { "capability": "xbzrle", "state": true } ] } }
2792
2793EQMP
2794
2795    {
2796        .name       = "migrate-set-capabilities",
2797        .args_type  = "capabilities:O",
2798        .params     = "capability:s,state:b",
2799        .mhandler.cmd_new = qmp_marshal_input_migrate_set_capabilities,
2800    },
2801SQMP
2802query-migrate-capabilities
2803--------------------------
2804
2805Query current migration capabilities
2806
2807- "capabilities": migration capabilities state
2808         - "xbzrle" : XBZRLE state (json-bool)
2809
2810Arguments:
2811
2812Example:
2813
2814-> { "execute": "query-migrate-capabilities" }
2815<- { "return": [ { "state": false, "capability": "xbzrle" } ] }
2816
2817EQMP
2818
2819    {
2820        .name       = "query-migrate-capabilities",
2821        .args_type  = "",
2822        .mhandler.cmd_new = qmp_marshal_input_query_migrate_capabilities,
2823    },
2824
2825SQMP
2826query-balloon
2827-------------
2828
2829Show balloon information.
2830
2831Make an asynchronous request for balloon info. When the request completes a
2832json-object will be returned containing the following data:
2833
2834- "actual": current balloon value in bytes (json-int)
2835
2836Example:
2837
2838-> { "execute": "query-balloon" }
2839<- {
2840      "return":{
2841         "actual":1073741824,
2842      }
2843   }
2844
2845EQMP
2846
2847    {
2848        .name       = "query-balloon",
2849        .args_type  = "",
2850        .mhandler.cmd_new = qmp_marshal_input_query_balloon,
2851    },
2852
2853    {
2854        .name       = "query-block-jobs",
2855        .args_type  = "",
2856        .mhandler.cmd_new = qmp_marshal_input_query_block_jobs,
2857    },
2858
2859    {
2860        .name       = "qom-list",
2861        .args_type  = "path:s",
2862        .mhandler.cmd_new = qmp_marshal_input_qom_list,
2863    },
2864
2865    {
2866        .name       = "qom-set",
2867        .args_type  = "path:s,property:s,value:q",
2868        .mhandler.cmd_new = qmp_qom_set,
2869    },
2870
2871    {
2872        .name       = "qom-get",
2873        .args_type  = "path:s,property:s",
2874        .mhandler.cmd_new = qmp_qom_get,
2875    },
2876
2877    {
2878        .name       = "nbd-server-start",
2879        .args_type  = "addr:q",
2880        .mhandler.cmd_new = qmp_marshal_input_nbd_server_start,
2881    },
2882    {
2883        .name       = "nbd-server-add",
2884        .args_type  = "device:B,writable:b?",
2885        .mhandler.cmd_new = qmp_marshal_input_nbd_server_add,
2886    },
2887    {
2888        .name       = "nbd-server-stop",
2889        .args_type  = "",
2890        .mhandler.cmd_new = qmp_marshal_input_nbd_server_stop,
2891    },
2892
2893    {
2894        .name       = "change-vnc-password",
2895        .args_type  = "password:s",
2896        .mhandler.cmd_new = qmp_marshal_input_change_vnc_password,
2897    },
2898    {
2899        .name       = "qom-list-types",
2900        .args_type  = "implements:s?,abstract:b?",
2901        .mhandler.cmd_new = qmp_marshal_input_qom_list_types,
2902    },
2903
2904    {
2905        .name       = "device-list-properties",
2906        .args_type  = "typename:s",
2907        .mhandler.cmd_new = qmp_marshal_input_device_list_properties,
2908    },
2909
2910    {
2911        .name       = "query-machines",
2912        .args_type  = "",
2913        .mhandler.cmd_new = qmp_marshal_input_query_machines,
2914    },
2915
2916    {
2917        .name       = "query-cpu-definitions",
2918        .args_type  = "",
2919        .mhandler.cmd_new = qmp_marshal_input_query_cpu_definitions,
2920    },
2921
2922    {
2923        .name       = "query-target",
2924        .args_type  = "",
2925        .mhandler.cmd_new = qmp_marshal_input_query_target,
2926    },
2927
2928    {
2929        .name       = "query-tpm",
2930        .args_type  = "",
2931        .mhandler.cmd_new = qmp_marshal_input_query_tpm,
2932    },
2933
2934SQMP
2935query-tpm
2936---------
2937
2938Return information about the TPM device.
2939
2940Arguments: None
2941
2942Example:
2943
2944-> { "execute": "query-tpm" }
2945<- { "return":
2946     [
2947       { "model": "tpm-tis",
2948         "options":
2949           { "type": "passthrough",
2950             "data":
2951               { "cancel-path": "/sys/class/misc/tpm0/device/cancel",
2952                 "path": "/dev/tpm0"
2953               }
2954           },
2955         "id": "tpm0"
2956       }
2957     ]
2958   }
2959
2960EQMP
2961
2962    {
2963        .name       = "query-tpm-models",
2964        .args_type  = "",
2965        .mhandler.cmd_new = qmp_marshal_input_query_tpm_models,
2966    },
2967
2968SQMP
2969query-tpm-models
2970----------------
2971
2972Return a list of supported TPM models.
2973
2974Arguments: None
2975
2976Example:
2977
2978-> { "execute": "query-tpm-models" }
2979<- { "return": [ "tpm-tis" ] }
2980
2981EQMP
2982
2983    {
2984        .name       = "query-tpm-types",
2985        .args_type  = "",
2986        .mhandler.cmd_new = qmp_marshal_input_query_tpm_types,
2987    },
2988
2989SQMP
2990query-tpm-types
2991---------------
2992
2993Return a list of supported TPM types.
2994
2995Arguments: None
2996
2997Example:
2998
2999-> { "execute": "query-tpm-types" }
3000<- { "return": [ "passthrough" ] }
3001
3002EQMP
3003
3004    {
3005        .name       = "chardev-add",
3006        .args_type  = "id:s,backend:q",
3007        .mhandler.cmd_new = qmp_marshal_input_chardev_add,
3008    },
3009
3010SQMP
3011chardev-add
3012----------------
3013
3014Add a chardev.
3015
3016Arguments:
3017
3018- "id": the chardev's ID, must be unique (json-string)
3019- "backend": chardev backend type + parameters
3020
3021Examples:
3022
3023-> { "execute" : "chardev-add",
3024     "arguments" : { "id" : "foo",
3025                     "backend" : { "type" : "null", "data" : {} } } }
3026<- { "return": {} }
3027
3028-> { "execute" : "chardev-add",
3029     "arguments" : { "id" : "bar",
3030                     "backend" : { "type" : "file",
3031                                   "data" : { "out" : "/tmp/bar.log" } } } }
3032<- { "return": {} }
3033
3034-> { "execute" : "chardev-add",
3035     "arguments" : { "id" : "baz",
3036                     "backend" : { "type" : "pty", "data" : {} } } }
3037<- { "return": { "pty" : "/dev/pty/42" } }
3038
3039EQMP
3040
3041    {
3042        .name       = "chardev-remove",
3043        .args_type  = "id:s",
3044        .mhandler.cmd_new = qmp_marshal_input_chardev_remove,
3045    },
3046
3047
3048SQMP
3049chardev-remove
3050--------------
3051
3052Remove a chardev.
3053
3054Arguments:
3055
3056- "id": the chardev's ID, must exist and not be in use (json-string)
3057
3058Example:
3059
3060-> { "execute": "chardev-remove", "arguments": { "id" : "foo" } }
3061<- { "return": {} }
3062
3063EQMP
3064    {
3065        .name       = "query-rx-filter",
3066        .args_type  = "name:s?",
3067        .mhandler.cmd_new = qmp_marshal_input_query_rx_filter,
3068    },
3069
3070SQMP
3071query-rx-filter
3072---------------
3073
3074Show rx-filter information.
3075
3076Returns a json-array of rx-filter information for all NICs (or for the
3077given NIC), returning an error if the given NIC doesn't exist, or
3078given NIC doesn't support rx-filter querying, or given net client
3079isn't a NIC.
3080
3081The query will clear the event notification flag of each NIC, then qemu
3082will start to emit event to QMP monitor.
3083
3084Each array entry contains the following:
3085
3086- "name": net client name (json-string)
3087- "promiscuous": promiscuous mode is enabled (json-bool)
3088- "multicast": multicast receive state (one of 'normal', 'none', 'all')
3089- "unicast": unicast receive state  (one of 'normal', 'none', 'all')
3090- "broadcast-allowed": allow to receive broadcast (json-bool)
3091- "multicast-overflow": multicast table is overflowed (json-bool)
3092- "unicast-overflow": unicast table is overflowed (json-bool)
3093- "main-mac": main macaddr string (json-string)
3094- "vlan-table": a json-array of active vlan id
3095- "unicast-table": a json-array of unicast macaddr string
3096- "multicast-table": a json-array of multicast macaddr string
3097
3098Example:
3099
3100-> { "execute": "query-rx-filter", "arguments": { "name": "vnet0" } }
3101<- { "return": [
3102        {
3103            "promiscuous": true,
3104            "name": "vnet0",
3105            "main-mac": "52:54:00:12:34:56",
3106            "unicast": "normal",
3107            "vlan-table": [
3108                4,
3109                0
3110            ],
3111            "unicast-table": [
3112            ],
3113            "multicast": "normal",
3114            "multicast-overflow": false,
3115            "unicast-overflow": false,
3116            "multicast-table": [
3117                "01:00:5e:00:00:01",
3118                "33:33:00:00:00:01",
3119                "33:33:ff:12:34:56"
3120            ],
3121            "broadcast-allowed": false
3122        }
3123      ]
3124   }
3125
3126EQMP
3127