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 efect 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        .params     = "",
  67        .help       = "quit the emulator",
  68        .user_print = monitor_user_noop,
  69        .mhandler.cmd_new = do_quit,
  70    },
  71
  72SQMP
  73quit
  74----
  75
  76Quit the emulator.
  77
  78Arguments: None.
  79
  80Example:
  81
  82-> { "execute": "quit" }
  83<- { "return": {} }
  84
  85EQMP
  86
  87    {
  88        .name       = "eject",
  89        .args_type  = "force:-f,device:B",
  90        .params     = "[-f] device",
  91        .help       = "eject a removable medium (use -f to force it)",
  92        .user_print = monitor_user_noop,
  93        .mhandler.cmd_new = do_eject,
  94    },
  95
  96SQMP
  97eject
  98-----
  99
 100Eject a removable medium.
 101
 102Arguments: 
 103
 104- force: force ejection (json-bool, optional)
 105- device: device name (json-string)
 106
 107Example:
 108
 109-> { "execute": "eject", "arguments": { "device": "ide1-cd0" } }
 110<- { "return": {} }
 111
 112Note: The "force" argument defaults to false.
 113
 114EQMP
 115
 116    {
 117        .name       = "change",
 118        .args_type  = "device:B,target:F,arg:s?",
 119        .params     = "device filename [format]",
 120        .help       = "change a removable medium, optional format",
 121        .user_print = monitor_user_noop,
 122        .mhandler.cmd_new = do_change,
 123    },
 124
 125SQMP
 126change
 127------
 128
 129Change a removable medium or VNC configuration.
 130
 131Arguments:
 132
 133- "device": device name (json-string)
 134- "target": filename or item (json-string)
 135- "arg": additional argument (json-string, optional)
 136
 137Examples:
 138
 1391. Change a removable medium
 140
 141-> { "execute": "change",
 142             "arguments": { "device": "ide1-cd0",
 143                            "target": "/srv/images/Fedora-12-x86_64-DVD.iso" } }
 144<- { "return": {} }
 145
 1462. Change VNC password
 147
 148-> { "execute": "change",
 149             "arguments": { "device": "vnc", "target": "password",
 150                            "arg": "foobar1" } }
 151<- { "return": {} }
 152
 153EQMP
 154
 155    {
 156        .name       = "screendump",
 157        .args_type  = "filename:F",
 158        .params     = "filename",
 159        .help       = "save screen into PPM image 'filename'",
 160        .user_print = monitor_user_noop,
 161        .mhandler.cmd_new = do_screen_dump,
 162    },
 163
 164SQMP
 165screendump
 166----------
 167
 168Save screen into PPM image.
 169
 170Arguments:
 171
 172- "filename": file path (json-string)
 173
 174Example:
 175
 176-> { "execute": "screendump", "arguments": { "filename": "/tmp/image" } }
 177<- { "return": {} }
 178
 179EQMP
 180
 181    {
 182        .name       = "stop",
 183        .args_type  = "",
 184        .params     = "",
 185        .help       = "stop emulation",
 186        .user_print = monitor_user_noop,
 187        .mhandler.cmd_new = do_stop,
 188    },
 189
 190SQMP
 191stop
 192----
 193
 194Stop the emulator.
 195
 196Arguments: None.
 197
 198Example:
 199
 200-> { "execute": "stop" }
 201<- { "return": {} }
 202
 203EQMP
 204
 205    {
 206        .name       = "cont",
 207        .args_type  = "",
 208        .params     = "",
 209        .help       = "resume emulation",
 210        .user_print = monitor_user_noop,
 211        .mhandler.cmd_new = do_cont,
 212    },
 213
 214SQMP
 215cont
 216----
 217
 218Resume emulation.
 219
 220Arguments: None.
 221
 222Example:
 223
 224-> { "execute": "cont" }
 225<- { "return": {} }
 226
 227EQMP
 228
 229    {
 230        .name       = "system_reset",
 231        .args_type  = "",
 232        .params     = "",
 233        .help       = "reset the system",
 234        .user_print = monitor_user_noop,
 235        .mhandler.cmd_new = do_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        .params     = "",
 257        .help       = "send system power down event",
 258        .user_print = monitor_user_noop,
 259        .mhandler.cmd_new = do_system_powerdown,
 260    },
 261
 262SQMP
 263system_powerdown
 264----------------
 265
 266Send system power down event.
 267
 268Arguments: None.
 269
 270Example:
 271
 272-> { "execute": "system_powerdown" }
 273<- { "return": {} }
 274
 275EQMP
 276
 277    {
 278        .name       = "device_add",
 279        .args_type  = "device:O",
 280        .params     = "driver[,prop=value][,...]",
 281        .help       = "add device, like -device on the command line",
 282        .user_print = monitor_user_noop,
 283        .mhandler.cmd_new = do_device_add,
 284    },
 285
 286SQMP
 287device_add
 288----------
 289
 290Add a device.
 291
 292Arguments:
 293
 294- "driver": the name of the new device's driver (json-string)
 295- "bus": the device's parent bus (device tree path, json-string, optional)
 296- "id": the device's ID, must be unique (json-string)
 297- device properties
 298
 299Example:
 300
 301-> { "execute": "device_add", "arguments": { "driver": "e1000", "id": "net1" } }
 302<- { "return": {} }
 303
 304Notes:
 305
 306(1) For detailed information about this command, please refer to the
 307    'docs/qdev-device-use.txt' file.
 308
 309(2) It's possible to list device properties by running QEMU with the
 310    "-device DEVICE,\?" command-line argument, where DEVICE is the device's name
 311
 312EQMP
 313
 314    {
 315        .name       = "device_del",
 316        .args_type  = "id:s",
 317        .params     = "device",
 318        .help       = "remove device",
 319        .user_print = monitor_user_noop,
 320        .mhandler.cmd_new = do_device_del,
 321    },
 322
 323SQMP
 324device_del
 325----------
 326
 327Remove a device.
 328
 329Arguments:
 330
 331- "id": the device's ID (json-string)
 332
 333Example:
 334
 335-> { "execute": "device_del", "arguments": { "id": "net1" } }
 336<- { "return": {} }
 337
 338EQMP
 339
 340    {
 341        .name       = "cpu",
 342        .args_type  = "index:i",
 343        .params     = "index",
 344        .help       = "set the default CPU",
 345        .user_print = monitor_user_noop,
 346        .mhandler.cmd_new = do_cpu_set,
 347    },
 348
 349SQMP
 350cpu
 351---
 352
 353Set the default CPU.
 354
 355Arguments:
 356
 357- "index": the CPU's index (json-int)
 358
 359Example:
 360
 361-> { "execute": "cpu", "arguments": { "index": 0 } }
 362<- { "return": {} }
 363
 364Note: CPUs' indexes are obtained with the 'query-cpus' command.
 365
 366EQMP
 367
 368    {
 369        .name       = "memsave",
 370        .args_type  = "val:l,size:i,filename:s",
 371        .params     = "addr size file",
 372        .help       = "save to disk virtual memory dump starting at 'addr' of size 'size'",
 373        .user_print = monitor_user_noop,
 374        .mhandler.cmd_new = do_memory_save,
 375    },
 376
 377SQMP
 378memsave
 379-------
 380
 381Save to disk virtual memory dump starting at 'val' of size 'size'.
 382
 383Arguments:
 384
 385- "val": the starting address (json-int)
 386- "size": the memory size, in bytes (json-int)
 387- "filename": file path (json-string)
 388
 389Example:
 390
 391-> { "execute": "memsave",
 392             "arguments": { "val": 10,
 393                            "size": 100,
 394                            "filename": "/tmp/virtual-mem-dump" } }
 395<- { "return": {} }
 396
 397Note: Depends on the current CPU.
 398
 399EQMP
 400
 401    {
 402        .name       = "pmemsave",
 403        .args_type  = "val:l,size:i,filename:s",
 404        .params     = "addr size file",
 405        .help       = "save to disk physical memory dump starting at 'addr' of size 'size'",
 406        .user_print = monitor_user_noop,
 407        .mhandler.cmd_new = do_physical_memory_save,
 408    },
 409
 410SQMP
 411pmemsave
 412--------
 413
 414Save to disk physical memory dump starting at 'val' of size 'size'.
 415
 416Arguments:
 417
 418- "val": the starting address (json-int)
 419- "size": the memory size, in bytes (json-int)
 420- "filename": file path (json-string)
 421
 422Example:
 423
 424-> { "execute": "pmemsave",
 425             "arguments": { "val": 10,
 426                            "size": 100,
 427                            "filename": "/tmp/physical-mem-dump" } }
 428<- { "return": {} }
 429
 430EQMP
 431
 432    {
 433        .name       = "migrate",
 434        .args_type  = "detach:-d,blk:-b,inc:-i,uri:s",
 435        .params     = "[-d] [-b] [-i] uri",
 436        .help       = "migrate to URI (using -d to not wait for completion)"
 437                      "\n\t\t\t -b for migration without shared storage with"
 438                      " full copy of disk\n\t\t\t -i for migration without "
 439                      "shared storage with incremental copy of disk "
 440                      "(base image shared between src and destination)",
 441        .user_print = monitor_user_noop,        
 442        .mhandler.cmd_new = do_migrate,
 443    },
 444
 445SQMP
 446migrate
 447-------
 448
 449Migrate to URI.
 450
 451Arguments:
 452
 453- "blk": block migration, full disk copy (json-bool, optional)
 454- "inc": incremental disk copy (json-bool, optional)
 455- "uri": Destination URI (json-string)
 456
 457Example:
 458
 459-> { "execute": "migrate", "arguments": { "uri": "tcp:0:4446" } }
 460<- { "return": {} }
 461
 462Notes:
 463
 464(1) The 'query-migrate' command should be used to check migration's progress
 465    and final result (this information is provided by the 'status' member)
 466(2) All boolean arguments default to false
 467(3) The user Monitor's "detach" argument is invalid in QMP and should not
 468    be used
 469
 470EQMP
 471
 472    {
 473        .name       = "migrate_cancel",
 474        .args_type  = "",
 475        .params     = "",
 476        .help       = "cancel the current VM migration",
 477        .user_print = monitor_user_noop,
 478        .mhandler.cmd_new = do_migrate_cancel,
 479    },
 480
 481SQMP
 482migrate_cancel
 483--------------
 484
 485Cancel the current migration.
 486
 487Arguments: None.
 488
 489Example:
 490
 491-> { "execute": "migrate_cancel" }
 492<- { "return": {} }
 493
 494EQMP
 495
 496    {
 497        .name       = "migrate_set_speed",
 498        .args_type  = "value:o",
 499        .params     = "value",
 500        .help       = "set maximum speed (in bytes) for migrations",
 501        .user_print = monitor_user_noop,
 502        .mhandler.cmd_new = do_migrate_set_speed,
 503    },
 504
 505SQMP
 506client_migrate_info
 507------------------
 508
 509Set the spice/vnc connection info for the migration target.  The spice/vnc
 510server will ask the spice/vnc client to automatically reconnect using the
 511new parameters (if specified) once the vm migration finished successfully.
 512
 513Arguments:
 514
 515- "protocol":     protocol: "spice" or "vnc" (json-string)
 516- "hostname":     migration target hostname (json-string)
 517- "port":         spice/vnc tcp port for plaintext channels (json-int, optional)
 518- "tls-port":     spice tcp port for tls-secured channels (json-int, optional)
 519- "cert-subject": server certificate subject (json-string, optional)
 520
 521Example:
 522
 523-> { "execute": "client_migrate_info",
 524     "arguments": { "protocol": "spice",
 525                    "hostname": "virt42.lab.kraxel.org",
 526                    "port": 1234 } }
 527<- { "return": {} }
 528
 529EQMP
 530
 531    {
 532        .name       = "client_migrate_info",
 533        .args_type  = "protocol:s,hostname:s,port:i?,tls-port:i?,cert-subject:s?",
 534        .params     = "protocol hostname port tls-port cert-subject",
 535        .help       = "send migration info to spice/vnc client",
 536        .user_print = monitor_user_noop,
 537        .mhandler.cmd_new = client_migrate_info,
 538    },
 539
 540SQMP
 541migrate_set_speed
 542-----------------
 543
 544Set maximum speed for migrations.
 545
 546Arguments:
 547
 548- "value": maximum speed, in bytes per second (json-int)
 549
 550Example:
 551
 552-> { "execute": "migrate_set_speed", "arguments": { "value": 1024 } }
 553<- { "return": {} }
 554
 555EQMP
 556
 557    {
 558        .name       = "migrate_set_downtime",
 559        .args_type  = "value:T",
 560        .params     = "value",
 561        .help       = "set maximum tolerated downtime (in seconds) for migrations",
 562        .user_print = monitor_user_noop,
 563        .mhandler.cmd_new = do_migrate_set_downtime,
 564    },
 565
 566SQMP
 567migrate_set_downtime
 568--------------------
 569
 570Set maximum tolerated downtime (in seconds) for migrations.
 571
 572Arguments:
 573
 574- "value": maximum downtime (json-number)
 575
 576Example:
 577
 578-> { "execute": "migrate_set_downtime", "arguments": { "value": 0.1 } }
 579<- { "return": {} }
 580
 581EQMP
 582
 583    {
 584        .name       = "netdev_add",
 585        .args_type  = "netdev:O",
 586        .params     = "[user|tap|socket],id=str[,prop=value][,...]",
 587        .help       = "add host network device",
 588        .user_print = monitor_user_noop,
 589        .mhandler.cmd_new = do_netdev_add,
 590    },
 591
 592SQMP
 593netdev_add
 594----------
 595
 596Add host network device.
 597
 598Arguments:
 599
 600- "type": the device type, "tap", "user", ... (json-string)
 601- "id": the device's ID, must be unique (json-string)
 602- device options
 603
 604Example:
 605
 606-> { "execute": "netdev_add", "arguments": { "type": "user", "id": "netdev1" } }
 607<- { "return": {} }
 608
 609Note: The supported device options are the same ones supported by the '-net'
 610      command-line argument, which are listed in the '-help' output or QEMU's
 611      manual
 612
 613EQMP
 614
 615    {
 616        .name       = "netdev_del",
 617        .args_type  = "id:s",
 618        .params     = "id",
 619        .help       = "remove host network device",
 620        .user_print = monitor_user_noop,
 621        .mhandler.cmd_new = do_netdev_del,
 622    },
 623
 624SQMP
 625netdev_del
 626----------
 627
 628Remove host network device.
 629
 630Arguments:
 631
 632- "id": the device's ID, must be unique (json-string)
 633
 634Example:
 635
 636-> { "execute": "netdev_del", "arguments": { "id": "netdev1" } }
 637<- { "return": {} }
 638
 639
 640EQMP
 641
 642    {
 643        .name       = "block_resize",
 644        .args_type  = "device:B,size:o",
 645        .params     = "device size",
 646        .help       = "resize a block image",
 647        .user_print = monitor_user_noop,
 648        .mhandler.cmd_new = do_block_resize,
 649    },
 650
 651SQMP
 652block_resize
 653------------
 654
 655Resize a block image while a guest is running.
 656
 657Arguments:
 658
 659- "device": the device's ID, must be unique (json-string)
 660- "size": new size
 661
 662Example:
 663
 664-> { "execute": "block_resize", "arguments": { "device": "scratch", "size": 1073741824 } }
 665<- { "return": {} }
 666
 667EQMP
 668
 669    {
 670        .name       = "balloon",
 671        .args_type  = "value:M",
 672        .params     = "target",
 673        .help       = "request VM to change its memory allocation (in MB)",
 674        .user_print = monitor_user_noop,
 675        .mhandler.cmd_async = do_balloon,
 676        .flags      = MONITOR_CMD_ASYNC,
 677    },
 678
 679SQMP
 680balloon
 681-------
 682
 683Request VM to change its memory allocation (in bytes).
 684
 685Arguments:
 686
 687- "value": New memory allocation (json-int)
 688
 689Example:
 690
 691-> { "execute": "balloon", "arguments": { "value": 536870912 } }
 692<- { "return": {} }
 693
 694EQMP
 695
 696    {
 697        .name       = "set_link",
 698        .args_type  = "name:s,up:b",
 699        .params     = "name on|off",
 700        .help       = "change the link status of a network adapter",
 701        .user_print = monitor_user_noop,
 702        .mhandler.cmd_new = do_set_link,
 703    },
 704
 705SQMP
 706set_link
 707--------
 708
 709Change the link status of a network adapter.
 710
 711Arguments:
 712
 713- "name": network device name (json-string)
 714- "up": status is up (json-bool)
 715
 716Example:
 717
 718-> { "execute": "set_link", "arguments": { "name": "e1000.0", "up": false } }
 719<- { "return": {} }
 720
 721EQMP
 722
 723    {
 724        .name       = "getfd",
 725        .args_type  = "fdname:s",
 726        .params     = "getfd name",
 727        .help       = "receive a file descriptor via SCM rights and assign it a name",
 728        .user_print = monitor_user_noop,
 729        .mhandler.cmd_new = do_getfd,
 730    },
 731
 732SQMP
 733getfd
 734-----
 735
 736Receive a file descriptor via SCM rights and assign it a name.
 737
 738Arguments:
 739
 740- "fdname": file descriptor name (json-string)
 741
 742Example:
 743
 744-> { "execute": "getfd", "arguments": { "fdname": "fd1" } }
 745<- { "return": {} }
 746
 747EQMP
 748
 749    {
 750        .name       = "closefd",
 751        .args_type  = "fdname:s",
 752        .params     = "closefd name",
 753        .help       = "close a file descriptor previously passed via SCM rights",
 754        .user_print = monitor_user_noop,
 755        .mhandler.cmd_new = do_closefd,
 756    },
 757
 758SQMP
 759closefd
 760-------
 761
 762Close a file descriptor previously passed via SCM rights.
 763
 764Arguments:
 765
 766- "fdname": file descriptor name (json-string)
 767
 768Example:
 769
 770-> { "execute": "closefd", "arguments": { "fdname": "fd1" } }
 771<- { "return": {} }
 772
 773EQMP
 774
 775    {
 776        .name       = "block_passwd",
 777        .args_type  = "device:B,password:s",
 778        .params     = "block_passwd device password",
 779        .help       = "set the password of encrypted block devices",
 780        .user_print = monitor_user_noop,
 781        .mhandler.cmd_new = do_block_set_passwd,
 782    },
 783
 784SQMP
 785block_passwd
 786------------
 787
 788Set the password of encrypted block devices.
 789
 790Arguments:
 791
 792- "device": device name (json-string)
 793- "password": password (json-string)
 794
 795Example:
 796
 797-> { "execute": "block_passwd", "arguments": { "device": "ide0-hd0",
 798                                               "password": "12345" } }
 799<- { "return": {} }
 800
 801EQMP
 802
 803    {
 804        .name       = "set_password",
 805        .args_type  = "protocol:s,password:s,connected:s?",
 806        .params     = "protocol password action-if-connected",
 807        .help       = "set spice/vnc password",
 808        .user_print = monitor_user_noop,
 809        .mhandler.cmd_new = set_password,
 810    },
 811
 812SQMP
 813set_password
 814------------
 815
 816Set the password for vnc/spice protocols.
 817
 818Arguments:
 819
 820- "protocol": protocol name (json-string)
 821- "password": password (json-string)
 822- "connected": [ keep | disconnect | fail ] (josn-string, optional)
 823
 824Example:
 825
 826-> { "execute": "set_password", "arguments": { "protocol": "vnc",
 827                                               "password": "secret" } }
 828<- { "return": {} }
 829
 830EQMP
 831
 832    {
 833        .name       = "expire_password",
 834        .args_type  = "protocol:s,time:s",
 835        .params     = "protocol time",
 836        .help       = "set spice/vnc password expire-time",
 837        .user_print = monitor_user_noop,
 838        .mhandler.cmd_new = expire_password,
 839    },
 840
 841SQMP
 842expire_password
 843---------------
 844
 845Set the password expire time for vnc/spice protocols.
 846
 847Arguments:
 848
 849- "protocol": protocol name (json-string)
 850- "time": [ now | never | +secs | secs ] (json-string)
 851
 852Example:
 853
 854-> { "execute": "expire_password", "arguments": { "protocol": "vnc",
 855                                                  "time": "+60" } }
 856<- { "return": {} }
 857
 858EQMP
 859
 860    {
 861        .name       = "qmp_capabilities",
 862        .args_type  = "",
 863        .params     = "",
 864        .help       = "enable QMP capabilities",
 865        .user_print = monitor_user_noop,
 866        .mhandler.cmd_new = do_qmp_capabilities,
 867    },
 868
 869SQMP
 870qmp_capabilities
 871----------------
 872
 873Enable QMP capabilities.
 874
 875Arguments: None.
 876
 877Example:
 878
 879-> { "execute": "qmp_capabilities" }
 880<- { "return": {} }
 881
 882Note: This command must be issued before issuing any other command.
 883
 884EQMP
 885
 886    {
 887        .name       = "human-monitor-command",
 888        .args_type  = "command-line:s,cpu-index:i?",
 889        .params     = "",
 890        .help       = "",
 891        .user_print = monitor_user_noop,
 892        .mhandler.cmd_new = do_hmp_passthrough,
 893    },
 894
 895SQMP
 896human-monitor-command
 897---------------------
 898
 899Execute a Human Monitor command.
 900
 901Arguments: 
 902
 903- command-line: the command name and its arguments, just like the
 904                Human Monitor's shell (json-string)
 905- cpu-index: select the CPU number to be used by commands which access CPU
 906             data, like 'info registers'. The Monitor selects CPU 0 if this
 907             argument is not provided (json-int, optional)
 908
 909Example:
 910
 911-> { "execute": "human-monitor-command", "arguments": { "command-line": "info kvm" } }
 912<- { "return": "kvm support: enabled\r\n" }
 913
 914Notes:
 915
 916(1) The Human Monitor is NOT an stable interface, this means that command
 917    names, arguments and responses can change or be removed at ANY time.
 918    Applications that rely on long term stability guarantees should NOT
 919    use this command
 920
 921(2) Limitations:
 922
 923    o This command is stateless, this means that commands that depend
 924      on state information (such as getfd) might not work
 925
 926    o Commands that prompt the user for data (eg. 'cont' when the block
 927      device is encrypted) don't currently work
 928
 9293. Query Commands
 930=================
 931
 932HXCOMM Each query command below is inside a SQMP/EQMP section, do NOT change
 933HXCOMM this! We will possibly move query commands definitions inside those
 934HXCOMM sections, just like regular commands.
 935
 936EQMP
 937
 938SQMP
 939query-version
 940-------------
 941
 942Show QEMU version.
 943
 944Return a json-object with the following information:
 945
 946- "qemu": A json-object containing three integer values:
 947    - "major": QEMU's major version (json-int)
 948    - "minor": QEMU's minor version (json-int)
 949    - "micro": QEMU's micro version (json-int)
 950- "package": package's version (json-string)
 951
 952Example:
 953
 954-> { "execute": "query-version" }
 955<- {
 956      "return":{
 957         "qemu":{
 958            "major":0,
 959            "minor":11,
 960            "micro":5
 961         },
 962         "package":""
 963      }
 964   }
 965
 966EQMP
 967
 968SQMP
 969query-commands
 970--------------
 971
 972List QMP available commands.
 973
 974Each command is represented by a json-object, the returned value is a json-array
 975of all commands.
 976
 977Each json-object contain:
 978
 979- "name": command's name (json-string)
 980
 981Example:
 982
 983-> { "execute": "query-commands" }
 984<- {
 985      "return":[
 986         {
 987            "name":"query-balloon"
 988         },
 989         {
 990            "name":"system_powerdown"
 991         }
 992      ]
 993   }
 994
 995Note: This example has been shortened as the real response is too long.
 996
 997EQMP
 998
 999SQMP
1000query-chardev
1001-------------
1002
1003Each device is represented by a json-object. The returned value is a json-array
1004of all devices.
1005
1006Each json-object contain the following:
1007
1008- "label": device's label (json-string)
1009- "filename": device's file (json-string)
1010
1011Example:
1012
1013-> { "execute": "query-chardev" }
1014<- {
1015      "return":[
1016         {
1017            "label":"monitor",
1018            "filename":"stdio"
1019         },
1020         {
1021            "label":"serial0",
1022            "filename":"vc"
1023         }
1024      ]
1025   }
1026
1027EQMP
1028
1029SQMP
1030query-block
1031-----------
1032
1033Show the block devices.
1034
1035Each block device information is stored in a json-object and the returned value
1036is a json-array of all devices.
1037
1038Each json-object contain the following:
1039
1040- "device": device name (json-string)
1041- "type": device type (json-string)
1042         - Possible values: "hd", "cdrom", "floppy", "unknown"
1043- "removable": true if the device is removable, false otherwise (json-bool)
1044- "locked": true if the device is locked, false otherwise (json-bool)
1045- "inserted": only present if the device is inserted, it is a json-object
1046   containing the following:
1047         - "file": device file name (json-string)
1048         - "ro": true if read-only, false otherwise (json-bool)
1049         - "drv": driver format name (json-string)
1050             - Possible values: "blkdebug", "bochs", "cloop", "cow", "dmg",
1051                                "file", "file", "ftp", "ftps", "host_cdrom",
1052                                "host_device", "host_floppy", "http", "https",
1053                                "nbd", "parallels", "qcow", "qcow2", "raw",
1054                                "tftp", "vdi", "vmdk", "vpc", "vvfat"
1055         - "backing_file": backing file name (json-string, optional)
1056         - "encrypted": true if encrypted, false otherwise (json-bool)
1057
1058Example:
1059
1060-> { "execute": "query-block" }
1061<- {
1062      "return":[
1063         {
1064            "device":"ide0-hd0",
1065            "locked":false,
1066            "removable":false,
1067            "inserted":{
1068               "ro":false,
1069               "drv":"qcow2",
1070               "encrypted":false,
1071               "file":"disks/test.img"
1072            },
1073            "type":"hd"
1074         },
1075         {
1076            "device":"ide1-cd0",
1077            "locked":false,
1078            "removable":true,
1079            "type":"cdrom"
1080         },
1081         {
1082            "device":"floppy0",
1083            "locked":false,
1084            "removable":true,
1085            "type": "floppy"
1086         },
1087         {
1088            "device":"sd0",
1089            "locked":false,
1090            "removable":true,
1091            "type":"floppy"
1092         }
1093      ]
1094   }
1095
1096EQMP
1097
1098SQMP
1099query-blockstats
1100----------------
1101
1102Show block device statistics.
1103
1104Each device statistic information is stored in a json-object and the returned
1105value is a json-array of all devices.
1106
1107Each json-object contain the following:
1108
1109- "device": device name (json-string)
1110- "stats": A json-object with the statistics information, it contains:
1111    - "rd_bytes": bytes read (json-int)
1112    - "wr_bytes": bytes written (json-int)
1113    - "rd_operations": read operations (json-int)
1114    - "wr_operations": write operations (json-int)
1115    - "wr_highest_offset": Highest offset of a sector written since the
1116                           BlockDriverState has been opened (json-int)
1117- "parent": Contains recursively the statistics of the underlying
1118            protocol (e.g. the host file for a qcow2 image). If there is
1119            no underlying protocol, this field is omitted
1120            (json-object, optional)
1121
1122Example:
1123
1124-> { "execute": "query-blockstats" }
1125<- {
1126      "return":[
1127         {
1128            "device":"ide0-hd0",
1129            "parent":{
1130               "stats":{
1131                  "wr_highest_offset":3686448128,
1132                  "wr_bytes":9786368,
1133                  "wr_operations":751,
1134                  "rd_bytes":122567168,
1135                  "rd_operations":36772
1136               }
1137            },
1138            "stats":{
1139               "wr_highest_offset":2821110784,
1140               "wr_bytes":9786368,
1141               "wr_operations":692,
1142               "rd_bytes":122739200,
1143               "rd_operations":36604
1144            }
1145         },
1146         {
1147            "device":"ide1-cd0",
1148            "stats":{
1149               "wr_highest_offset":0,
1150               "wr_bytes":0,
1151               "wr_operations":0,
1152               "rd_bytes":0,
1153               "rd_operations":0
1154            }
1155         },
1156         {
1157            "device":"floppy0",
1158            "stats":{
1159               "wr_highest_offset":0,
1160               "wr_bytes":0,
1161               "wr_operations":0,
1162               "rd_bytes":0,
1163               "rd_operations":0
1164            }
1165         },
1166         {
1167            "device":"sd0",
1168            "stats":{
1169               "wr_highest_offset":0,
1170               "wr_bytes":0,
1171               "wr_operations":0,
1172               "rd_bytes":0,
1173               "rd_operations":0
1174            }
1175         }
1176      ]
1177   }
1178
1179EQMP
1180
1181SQMP
1182query-cpus
1183----------
1184
1185Show CPU information.
1186
1187Return a json-array. Each CPU is represented by a json-object, which contains:
1188
1189- "CPU": CPU index (json-int)
1190- "current": true if this is the current CPU, false otherwise (json-bool)
1191- "halted": true if the cpu is halted, false otherwise (json-bool)
1192- Current program counter. The key's name depends on the architecture:
1193     "pc": i386/x86_64 (json-int)
1194     "nip": PPC (json-int)
1195     "pc" and "npc": sparc (json-int)
1196     "PC": mips (json-int)
1197
1198Example:
1199
1200-> { "execute": "query-cpus" }
1201<- {
1202      "return":[
1203         {
1204            "CPU":0,
1205            "current":true,
1206            "halted":false,
1207            "pc":3227107138
1208         },
1209         {
1210            "CPU":1,
1211            "current":false,
1212            "halted":true,
1213            "pc":7108165
1214         }
1215      ]
1216   }
1217
1218EQMP
1219
1220SQMP
1221query-pci
1222---------
1223
1224PCI buses and devices information.
1225
1226The returned value is a json-array of all buses. Each bus is represented by
1227a json-object, which has a key with a json-array of all PCI devices attached
1228to it. Each device is represented by a json-object.
1229
1230The bus json-object contains the following:
1231
1232- "bus": bus number (json-int)
1233- "devices": a json-array of json-objects, each json-object represents a
1234             PCI device
1235
1236The PCI device json-object contains the following:
1237
1238- "bus": identical to the parent's bus number (json-int)
1239- "slot": slot number (json-int)
1240- "function": function number (json-int)
1241- "class_info": a json-object containing:
1242     - "desc": device class description (json-string, optional)
1243     - "class": device class number (json-int)
1244- "id": a json-object containing:
1245     - "device": device ID (json-int)
1246     - "vendor": vendor ID (json-int)
1247- "irq": device's IRQ if assigned (json-int, optional)
1248- "qdev_id": qdev id string (json-string)
1249- "pci_bridge": It's a json-object, only present if this device is a
1250                PCI bridge, contains:
1251     - "bus": bus number (json-int)
1252     - "secondary": secondary bus number (json-int)
1253     - "subordinate": subordinate bus number (json-int)
1254     - "io_range": I/O memory range information, a json-object with the
1255                   following members:
1256                 - "base": base address, in bytes (json-int)
1257                 - "limit": limit address, in bytes (json-int)
1258     - "memory_range": memory range information, a json-object with the
1259                       following members:
1260                 - "base": base address, in bytes (json-int)
1261                 - "limit": limit address, in bytes (json-int)
1262     - "prefetchable_range": Prefetchable memory range information, a
1263                             json-object with the following members:
1264                 - "base": base address, in bytes (json-int)
1265                 - "limit": limit address, in bytes (json-int)
1266     - "devices": a json-array of PCI devices if there's any attached, each
1267                  each element is represented by a json-object, which contains
1268                  the same members of the 'PCI device json-object' described
1269                  above (optional)
1270- "regions": a json-array of json-objects, each json-object represents a
1271             memory region of this device
1272
1273The memory range json-object contains the following:
1274
1275- "base": base memory address (json-int)
1276- "limit": limit value (json-int)
1277
1278The region json-object can be an I/O region or a memory region, an I/O region
1279json-object contains the following:
1280
1281- "type": "io" (json-string, fixed)
1282- "bar": BAR number (json-int)
1283- "address": memory address (json-int)
1284- "size": memory size (json-int)
1285
1286A memory region json-object contains the following:
1287
1288- "type": "memory" (json-string, fixed)
1289- "bar": BAR number (json-int)
1290- "address": memory address (json-int)
1291- "size": memory size (json-int)
1292- "mem_type_64": true or false (json-bool)
1293- "prefetch": true or false (json-bool)
1294
1295Example:
1296
1297-> { "execute": "query-pci" }
1298<- {
1299      "return":[
1300         {
1301            "bus":0,
1302            "devices":[
1303               {
1304                  "bus":0,
1305                  "qdev_id":"",
1306                  "slot":0,
1307                  "class_info":{
1308                     "class":1536,
1309                     "desc":"Host bridge"
1310                  },
1311                  "id":{
1312                     "device":32902,
1313                     "vendor":4663
1314                  },
1315                  "function":0,
1316                  "regions":[
1317   
1318                  ]
1319               },
1320               {
1321                  "bus":0,
1322                  "qdev_id":"",
1323                  "slot":1,
1324                  "class_info":{
1325                     "class":1537,
1326                     "desc":"ISA bridge"
1327                  },
1328                  "id":{
1329                     "device":32902,
1330                     "vendor":28672
1331                  },
1332                  "function":0,
1333                  "regions":[
1334   
1335                  ]
1336               },
1337               {
1338                  "bus":0,
1339                  "qdev_id":"",
1340                  "slot":1,
1341                  "class_info":{
1342                     "class":257,
1343                     "desc":"IDE controller"
1344                  },
1345                  "id":{
1346                     "device":32902,
1347                     "vendor":28688
1348                  },
1349                  "function":1,
1350                  "regions":[
1351                     {
1352                        "bar":4,
1353                        "size":16,
1354                        "address":49152,
1355                        "type":"io"
1356                     }
1357                  ]
1358               },
1359               {
1360                  "bus":0,
1361                  "qdev_id":"",
1362                  "slot":2,
1363                  "class_info":{
1364                     "class":768,
1365                     "desc":"VGA controller"
1366                  },
1367                  "id":{
1368                     "device":4115,
1369                     "vendor":184
1370                  },
1371                  "function":0,
1372                  "regions":[
1373                     {
1374                        "prefetch":true,
1375                        "mem_type_64":false,
1376                        "bar":0,
1377                        "size":33554432,
1378                        "address":4026531840,
1379                        "type":"memory"
1380                     },
1381                     {
1382                        "prefetch":false,
1383                        "mem_type_64":false,
1384                        "bar":1,
1385                        "size":4096,
1386                        "address":4060086272,
1387                        "type":"memory"
1388                     },
1389                     {
1390                        "prefetch":false,
1391                        "mem_type_64":false,
1392                        "bar":6,
1393                        "size":65536,
1394                        "address":-1,
1395                        "type":"memory"
1396                     }
1397                  ]
1398               },
1399               {
1400                  "bus":0,
1401                  "qdev_id":"",
1402                  "irq":11,
1403                  "slot":4,
1404                  "class_info":{
1405                     "class":1280,
1406                     "desc":"RAM controller"
1407                  },
1408                  "id":{
1409                     "device":6900,
1410                     "vendor":4098
1411                  },
1412                  "function":0,
1413                  "regions":[
1414                     {
1415                        "bar":0,
1416                        "size":32,
1417                        "address":49280,
1418                        "type":"io"
1419                     }
1420                  ]
1421               }
1422            ]
1423         }
1424      ]
1425   }
1426
1427Note: This example has been shortened as the real response is too long.
1428
1429EQMP
1430
1431SQMP
1432query-kvm
1433---------
1434
1435Show KVM information.
1436
1437Return a json-object with the following information:
1438
1439- "enabled": true if KVM support is enabled, false otherwise (json-bool)
1440- "present": true if QEMU has KVM support, false otherwise (json-bool)
1441
1442Example:
1443
1444-> { "execute": "query-kvm" }
1445<- { "return": { "enabled": true, "present": true } }
1446
1447EQMP
1448
1449SQMP
1450query-status
1451------------
1452
1453Return a json-object with the following information:
1454
1455- "running": true if the VM is running, or false if it is paused (json-bool)
1456- "singlestep": true if the VM is in single step mode,
1457                false otherwise (json-bool)
1458
1459Example:
1460
1461-> { "execute": "query-status" }
1462<- { "return": { "running": true, "singlestep": false } }
1463
1464EQMP
1465
1466SQMP
1467query-mice
1468----------
1469
1470Show VM mice information.
1471
1472Each mouse is represented by a json-object, the returned value is a json-array
1473of all mice.
1474
1475The mouse json-object contains the following:
1476
1477- "name": mouse's name (json-string)
1478- "index": mouse's index (json-int)
1479- "current": true if this mouse is receiving events, false otherwise (json-bool)
1480- "absolute": true if the mouse generates absolute input events (json-bool)
1481
1482Example:
1483
1484-> { "execute": "query-mice" }
1485<- {
1486      "return":[
1487         {
1488            "name":"QEMU Microsoft Mouse",
1489            "index":0,
1490            "current":false,
1491            "absolute":false
1492         },
1493         {
1494            "name":"QEMU PS/2 Mouse",
1495            "index":1,
1496            "current":true,
1497            "absolute":true
1498         }
1499      ]
1500   }
1501
1502EQMP
1503
1504SQMP
1505query-vnc
1506---------
1507
1508Show VNC server information.
1509
1510Return a json-object with server information. Connected clients are returned
1511as a json-array of json-objects.
1512
1513The main json-object contains the following:
1514
1515- "enabled": true or false (json-bool)
1516- "host": server's IP address (json-string)
1517- "family": address family (json-string)
1518         - Possible values: "ipv4", "ipv6", "unix", "unknown"
1519- "service": server's port number (json-string)
1520- "auth": authentication method (json-string)
1521         - Possible values: "invalid", "none", "ra2", "ra2ne", "sasl", "tight",
1522                            "tls", "ultra", "unknown", "vencrypt", "vencrypt",
1523                            "vencrypt+plain", "vencrypt+tls+none",
1524                            "vencrypt+tls+plain", "vencrypt+tls+sasl",
1525                            "vencrypt+tls+vnc", "vencrypt+x509+none",
1526                            "vencrypt+x509+plain", "vencrypt+x509+sasl",
1527                            "vencrypt+x509+vnc", "vnc"
1528- "clients": a json-array of all connected clients
1529
1530Clients are described by a json-object, each one contain the following:
1531
1532- "host": client's IP address (json-string)
1533- "family": address family (json-string)
1534         - Possible values: "ipv4", "ipv6", "unix", "unknown"
1535- "service": client's port number (json-string)
1536- "x509_dname": TLS dname (json-string, optional)
1537- "sasl_username": SASL username (json-string, optional)
1538
1539Example:
1540
1541-> { "execute": "query-vnc" }
1542<- {
1543      "return":{
1544         "enabled":true,
1545         "host":"0.0.0.0",
1546         "service":"50402",
1547         "auth":"vnc",
1548         "family":"ipv4",
1549         "clients":[
1550            {
1551               "host":"127.0.0.1",
1552               "service":"50401",
1553               "family":"ipv4"
1554            }
1555         ]
1556      }
1557   }
1558
1559EQMP
1560
1561SQMP
1562query-spice
1563-----------
1564
1565Show SPICE server information.
1566
1567Return a json-object with server information. Connected clients are returned
1568as a json-array of json-objects.
1569
1570The main json-object contains the following:
1571
1572- "enabled": true or false (json-bool)
1573- "host": server's IP address (json-string)
1574- "port": server's port number (json-int, optional)
1575- "tls-port": server's port number (json-int, optional)
1576- "auth": authentication method (json-string)
1577         - Possible values: "none", "spice"
1578- "channels": a json-array of all active channels clients
1579
1580Channels are described by a json-object, each one contain the following:
1581
1582- "host": client's IP address (json-string)
1583- "family": address family (json-string)
1584         - Possible values: "ipv4", "ipv6", "unix", "unknown"
1585- "port": client's port number (json-string)
1586- "connection-id": spice connection id.  All channels with the same id
1587                   belong to the same spice session (json-int)
1588- "channel-type": channel type.  "1" is the main control channel, filter for
1589                  this one if you want track spice sessions only (json-int)
1590- "channel-id": channel id.  Usually "0", might be different needed when
1591                multiple channels of the same type exist, such as multiple
1592                display channels in a multihead setup (json-int)
1593- "tls": whevener the channel is encrypted (json-bool)
1594
1595Example:
1596
1597-> { "execute": "query-spice" }
1598<- {
1599      "return": {
1600         "enabled": true,
1601         "auth": "spice",
1602         "port": 5920,
1603         "tls-port": 5921,
1604         "host": "0.0.0.0",
1605         "channels": [
1606            {
1607               "port": "54924",
1608               "family": "ipv4",
1609               "channel-type": 1,
1610               "connection-id": 1804289383,
1611               "host": "127.0.0.1",
1612               "channel-id": 0,
1613               "tls": true
1614            },
1615            {
1616               "port": "36710",
1617               "family": "ipv4",
1618               "channel-type": 4,
1619               "connection-id": 1804289383,
1620               "host": "127.0.0.1",
1621               "channel-id": 0,
1622               "tls": false
1623            },
1624            [ ... more channels follow ... ]
1625         ]
1626      }
1627   }
1628
1629EQMP
1630
1631SQMP
1632query-name
1633----------
1634
1635Show VM name.
1636
1637Return a json-object with the following information:
1638
1639- "name": VM's name (json-string, optional)
1640
1641Example:
1642
1643-> { "execute": "query-name" }
1644<- { "return": { "name": "qemu-name" } }
1645
1646EQMP
1647
1648SQMP
1649query-uuid
1650----------
1651
1652Show VM UUID.
1653
1654Return a json-object with the following information:
1655
1656- "UUID": Universally Unique Identifier (json-string)
1657
1658Example:
1659
1660-> { "execute": "query-uuid" }
1661<- { "return": { "UUID": "550e8400-e29b-41d4-a716-446655440000" } }
1662
1663EQMP
1664
1665SQMP
1666query-migrate
1667-------------
1668
1669Migration status.
1670
1671Return a json-object. If migration is active there will be another json-object
1672with RAM migration status and if block migration is active another one with
1673block migration status.
1674
1675The main json-object contains the following:
1676
1677- "status": migration status (json-string)
1678     - Possible values: "active", "completed", "failed", "cancelled"
1679- "ram": only present if "status" is "active", it is a json-object with the
1680  following RAM information (in bytes):
1681         - "transferred": amount transferred (json-int)
1682         - "remaining": amount remaining (json-int)
1683         - "total": total (json-int)
1684- "disk": only present if "status" is "active" and it is a block migration,
1685  it is a json-object with the following disk information (in bytes):
1686         - "transferred": amount transferred (json-int)
1687         - "remaining": amount remaining (json-int)
1688         - "total": total (json-int)
1689
1690Examples:
1691
16921. Before the first migration
1693
1694-> { "execute": "query-migrate" }
1695<- { "return": {} }
1696
16972. Migration is done and has succeeded
1698
1699-> { "execute": "query-migrate" }
1700<- { "return": { "status": "completed" } }
1701
17023. Migration is done and has failed
1703
1704-> { "execute": "query-migrate" }
1705<- { "return": { "status": "failed" } }
1706
17074. Migration is being performed and is not a block migration:
1708
1709-> { "execute": "query-migrate" }
1710<- {
1711      "return":{
1712         "status":"active",
1713         "ram":{
1714            "transferred":123,
1715            "remaining":123,
1716            "total":246
1717         }
1718      }
1719   }
1720
17215. Migration is being performed and is a block migration:
1722
1723-> { "execute": "query-migrate" }
1724<- {
1725      "return":{
1726         "status":"active",
1727         "ram":{
1728            "total":1057024,
1729            "remaining":1053304,
1730            "transferred":3720
1731         },
1732         "disk":{
1733            "total":20971520,
1734            "remaining":20880384,
1735            "transferred":91136
1736         }
1737      }
1738   }
1739
1740EQMP
1741
1742SQMP
1743query-balloon
1744-------------
1745
1746Show balloon information.
1747
1748Make an asynchronous request for balloon info. When the request completes a
1749json-object will be returned containing the following data:
1750
1751- "actual": current balloon value in bytes (json-int)
1752- "mem_swapped_in": Amount of memory swapped in bytes (json-int, optional)
1753- "mem_swapped_out": Amount of memory swapped out in bytes (json-int, optional)
1754- "major_page_faults": Number of major faults (json-int, optional)
1755- "minor_page_faults": Number of minor faults (json-int, optional)
1756- "free_mem": Total amount of free and unused memory in
1757              bytes (json-int, optional)
1758- "total_mem": Total amount of available memory in bytes (json-int, optional)
1759
1760Example:
1761
1762-> { "execute": "query-balloon" }
1763<- {
1764      "return":{
1765         "actual":1073741824,
1766         "mem_swapped_in":0,
1767         "mem_swapped_out":0,
1768         "major_page_faults":142,
1769         "minor_page_faults":239245,
1770         "free_mem":1014185984,
1771         "total_mem":1044668416
1772      }
1773   }
1774
1775EQMP
1776
1777