qemu/qapi-schema.json
<<
>>
Prefs
   1# -*- Mode: Python -*-
   2#
   3# QAPI Schema
   4
   5# QAPI common definitions
   6{ 'include': 'qapi/common.json' }
   7
   8# QAPI crypto definitions
   9{ 'include': 'qapi/crypto.json' }
  10
  11# QAPI block definitions
  12{ 'include': 'qapi/block.json' }
  13
  14# QAPI event definitions
  15{ 'include': 'qapi/event.json' }
  16
  17# Tracing commands
  18{ 'include': 'qapi/trace.json' }
  19
  20# QAPI introspection
  21{ 'include': 'qapi/introspect.json' }
  22
  23##
  24# @qmp_capabilities:
  25#
  26# Enable QMP capabilities.
  27#
  28# Arguments: None.
  29#
  30# Example:
  31#
  32# -> { "execute": "qmp_capabilities" }
  33# <- { "return": {} }
  34#
  35# Notes: This command is valid exactly when first connecting: it must be
  36# issued before any other command will be accepted, and will fail once the
  37# monitor is accepting other commands. (see qemu docs/qmp-spec.txt)
  38#
  39# Since: 0.13
  40#
  41##
  42{ 'command': 'qmp_capabilities' }
  43
  44##
  45# @LostTickPolicy:
  46#
  47# Policy for handling lost ticks in timer devices.
  48#
  49# @discard: throw away the missed tick(s) and continue with future injection
  50#           normally.  Guest time may be delayed, unless the OS has explicit
  51#           handling of lost ticks
  52#
  53# @delay: continue to deliver ticks at the normal rate.  Guest time will be
  54#         delayed due to the late tick
  55#
  56# @merge: merge the missed tick(s) into one tick and inject.  Guest time
  57#         may be delayed, depending on how the OS reacts to the merging
  58#         of ticks
  59#
  60# @slew: deliver ticks at a higher rate to catch up with the missed tick. The
  61#        guest time should not be delayed once catchup is complete.
  62#
  63# Since: 2.0
  64##
  65{ 'enum': 'LostTickPolicy',
  66  'data': ['discard', 'delay', 'merge', 'slew' ] }
  67
  68##
  69# @add_client:
  70#
  71# Allow client connections for VNC, Spice and socket based
  72# character devices to be passed in to QEMU via SCM_RIGHTS.
  73#
  74# @protocol: protocol name. Valid names are "vnc", "spice" or the
  75#            name of a character device (eg. from -chardev id=XXXX)
  76#
  77# @fdname: file descriptor name previously passed via 'getfd' command
  78#
  79# @skipauth: #optional whether to skip authentication. Only applies
  80#            to "vnc" and "spice" protocols
  81#
  82# @tls: #optional whether to perform TLS. Only applies to the "spice"
  83#       protocol
  84#
  85# Returns: nothing on success.
  86#
  87# Since: 0.14.0
  88##
  89{ 'command': 'add_client',
  90  'data': { 'protocol': 'str', 'fdname': 'str', '*skipauth': 'bool',
  91            '*tls': 'bool' } }
  92
  93##
  94# @NameInfo:
  95#
  96# Guest name information.
  97#
  98# @name: #optional The name of the guest
  99#
 100# Since: 0.14.0
 101##
 102{ 'struct': 'NameInfo', 'data': {'*name': 'str'} }
 103
 104##
 105# @query-name:
 106#
 107# Return the name information of a guest.
 108#
 109# Returns: @NameInfo of the guest
 110#
 111# Since: 0.14.0
 112##
 113{ 'command': 'query-name', 'returns': 'NameInfo' }
 114
 115##
 116# @KvmInfo:
 117#
 118# Information about support for KVM acceleration
 119#
 120# @enabled: true if KVM acceleration is active
 121#
 122# @present: true if KVM acceleration is built into this executable
 123#
 124# Since: 0.14.0
 125##
 126{ 'struct': 'KvmInfo', 'data': {'enabled': 'bool', 'present': 'bool'} }
 127
 128##
 129# @query-kvm:
 130#
 131# Returns information about KVM acceleration
 132#
 133# Returns: @KvmInfo
 134#
 135# Since: 0.14.0
 136##
 137{ 'command': 'query-kvm', 'returns': 'KvmInfo' }
 138
 139##
 140# @RunState:
 141#
 142# An enumeration of VM run states.
 143#
 144# @debug: QEMU is running on a debugger
 145#
 146# @finish-migrate: guest is paused to finish the migration process
 147#
 148# @inmigrate: guest is paused waiting for an incoming migration.  Note
 149# that this state does not tell whether the machine will start at the
 150# end of the migration.  This depends on the command-line -S option and
 151# any invocation of 'stop' or 'cont' that has happened since QEMU was
 152# started.
 153#
 154# @internal-error: An internal error that prevents further guest execution
 155# has occurred
 156#
 157# @io-error: the last IOP has failed and the device is configured to pause
 158# on I/O errors
 159#
 160# @paused: guest has been paused via the 'stop' command
 161#
 162# @postmigrate: guest is paused following a successful 'migrate'
 163#
 164# @prelaunch: QEMU was started with -S and guest has not started
 165#
 166# @restore-vm: guest is paused to restore VM state
 167#
 168# @running: guest is actively running
 169#
 170# @save-vm: guest is paused to save the VM state
 171#
 172# @shutdown: guest is shut down (and -no-shutdown is in use)
 173#
 174# @suspended: guest is suspended (ACPI S3)
 175#
 176# @watchdog: the watchdog action is configured to pause and has been triggered
 177#
 178# @guest-panicked: guest has been panicked as a result of guest OS panic
 179#
 180# @colo: guest is paused to save/restore VM state under colo checkpoint,
 181#        VM can not get into this state unless colo capability is enabled
 182#        for migration. (since 2.8)
 183##
 184{ 'enum': 'RunState',
 185  'data': [ 'debug', 'inmigrate', 'internal-error', 'io-error', 'paused',
 186            'postmigrate', 'prelaunch', 'finish-migrate', 'restore-vm',
 187            'running', 'save-vm', 'shutdown', 'suspended', 'watchdog',
 188            'guest-panicked', 'colo' ] }
 189
 190##
 191# @StatusInfo:
 192#
 193# Information about VCPU run state
 194#
 195# @running: true if all VCPUs are runnable, false if not runnable
 196#
 197# @singlestep: true if VCPUs are in single-step mode
 198#
 199# @status: the virtual machine @RunState
 200#
 201# Since:  0.14.0
 202#
 203# Notes: @singlestep is enabled through the GDB stub
 204##
 205{ 'struct': 'StatusInfo',
 206  'data': {'running': 'bool', 'singlestep': 'bool', 'status': 'RunState'} }
 207
 208##
 209# @query-status:
 210#
 211# Query the run status of all VCPUs
 212#
 213# Returns: @StatusInfo reflecting all VCPUs
 214#
 215# Since:  0.14.0
 216##
 217{ 'command': 'query-status', 'returns': 'StatusInfo' }
 218
 219##
 220# @UuidInfo:
 221#
 222# Guest UUID information.
 223#
 224# @UUID: the UUID of the guest
 225#
 226# Since: 0.14.0
 227#
 228# Notes: If no UUID was specified for the guest, a null UUID is returned.
 229##
 230{ 'struct': 'UuidInfo', 'data': {'UUID': 'str'} }
 231
 232##
 233# @query-uuid:
 234#
 235# Query the guest UUID information.
 236#
 237# Returns: The @UuidInfo for the guest
 238#
 239# Since: 0.14.0
 240##
 241{ 'command': 'query-uuid', 'returns': 'UuidInfo' }
 242
 243##
 244# @ChardevInfo:
 245#
 246# Information about a character device.
 247#
 248# @label: the label of the character device
 249#
 250# @filename: the filename of the character device
 251#
 252# @frontend-open: shows whether the frontend device attached to this backend
 253#                 (eg. with the chardev=... option) is in open or closed state
 254#                 (since 2.1)
 255#
 256# Notes: @filename is encoded using the QEMU command line character device
 257#        encoding.  See the QEMU man page for details.
 258#
 259# Since: 0.14.0
 260##
 261{ 'struct': 'ChardevInfo', 'data': {'label': 'str',
 262                                  'filename': 'str',
 263                                  'frontend-open': 'bool'} }
 264
 265##
 266# @query-chardev:
 267#
 268# Returns information about current character devices.
 269#
 270# Returns: a list of @ChardevInfo
 271#
 272# Since: 0.14.0
 273##
 274{ 'command': 'query-chardev', 'returns': ['ChardevInfo'] }
 275
 276##
 277# @ChardevBackendInfo:
 278#
 279# Information about a character device backend
 280#
 281# @name: The backend name
 282#
 283# Since: 2.0
 284##
 285{ 'struct': 'ChardevBackendInfo', 'data': {'name': 'str'} }
 286
 287##
 288# @query-chardev-backends:
 289#
 290# Returns information about character device backends.
 291#
 292# Returns: a list of @ChardevBackendInfo
 293#
 294# Since: 2.0
 295##
 296{ 'command': 'query-chardev-backends', 'returns': ['ChardevBackendInfo'] }
 297
 298##
 299# @DataFormat:
 300#
 301# An enumeration of data format.
 302#
 303# @utf8: Data is a UTF-8 string (RFC 3629)
 304#
 305# @base64: Data is Base64 encoded binary (RFC 3548)
 306#
 307# Since: 1.4
 308##
 309{ 'enum': 'DataFormat',
 310  'data': [ 'utf8', 'base64' ] }
 311
 312##
 313# @ringbuf-write:
 314#
 315# Write to a ring buffer character device.
 316#
 317# @device: the ring buffer character device name
 318#
 319# @data: data to write
 320#
 321# @format: #optional data encoding (default 'utf8').
 322#          - base64: data must be base64 encoded text.  Its binary
 323#            decoding gets written.
 324#          - utf8: data's UTF-8 encoding is written
 325#          - data itself is always Unicode regardless of format, like
 326#            any other string.
 327#
 328# Returns: Nothing on success
 329#
 330# Since: 1.4
 331##
 332{ 'command': 'ringbuf-write',
 333  'data': {'device': 'str', 'data': 'str',
 334           '*format': 'DataFormat'} }
 335
 336##
 337# @ringbuf-read:
 338#
 339# Read from a ring buffer character device.
 340#
 341# @device: the ring buffer character device name
 342#
 343# @size: how many bytes to read at most
 344#
 345# @format: #optional data encoding (default 'utf8').
 346#          - base64: the data read is returned in base64 encoding.
 347#          - utf8: the data read is interpreted as UTF-8.
 348#            Bug: can screw up when the buffer contains invalid UTF-8
 349#            sequences, NUL characters, after the ring buffer lost
 350#            data, and when reading stops because the size limit is
 351#            reached.
 352#          - The return value is always Unicode regardless of format,
 353#            like any other string.
 354#
 355# Returns: data read from the device
 356#
 357# Since: 1.4
 358##
 359{ 'command': 'ringbuf-read',
 360  'data': {'device': 'str', 'size': 'int', '*format': 'DataFormat'},
 361  'returns': 'str' }
 362
 363##
 364# @EventInfo:
 365#
 366# Information about a QMP event
 367#
 368# @name: The event name
 369#
 370# Since: 1.2.0
 371##
 372{ 'struct': 'EventInfo', 'data': {'name': 'str'} }
 373
 374##
 375# @query-events:
 376#
 377# Return a list of supported QMP events by this server
 378#
 379# Returns: A list of @EventInfo for all supported events
 380#
 381# Since: 1.2.0
 382##
 383{ 'command': 'query-events', 'returns': ['EventInfo'] }
 384
 385##
 386# @MigrationStats:
 387#
 388# Detailed migration status.
 389#
 390# @transferred: amount of bytes already transferred to the target VM
 391#
 392# @remaining: amount of bytes remaining to be transferred to the target VM
 393#
 394# @total: total amount of bytes involved in the migration process
 395#
 396# @duplicate: number of duplicate (zero) pages (since 1.2)
 397#
 398# @skipped: number of skipped zero pages (since 1.5)
 399#
 400# @normal: number of normal pages (since 1.2)
 401#
 402# @normal-bytes: number of normal bytes sent (since 1.2)
 403#
 404# @dirty-pages-rate: number of pages dirtied by second by the
 405#        guest (since 1.3)
 406#
 407# @mbps: throughput in megabits/sec. (since 1.6)
 408#
 409# @dirty-sync-count: number of times that dirty ram was synchronized (since 2.1)
 410#
 411# @postcopy-requests: The number of page requests received from the destination
 412#        (since 2.7)
 413#
 414# Since: 0.14.0
 415##
 416{ 'struct': 'MigrationStats',
 417  'data': {'transferred': 'int', 'remaining': 'int', 'total': 'int' ,
 418           'duplicate': 'int', 'skipped': 'int', 'normal': 'int',
 419           'normal-bytes': 'int', 'dirty-pages-rate' : 'int',
 420           'mbps' : 'number', 'dirty-sync-count' : 'int',
 421           'postcopy-requests' : 'int' } }
 422
 423##
 424# @XBZRLECacheStats:
 425#
 426# Detailed XBZRLE migration cache statistics
 427#
 428# @cache-size: XBZRLE cache size
 429#
 430# @bytes: amount of bytes already transferred to the target VM
 431#
 432# @pages: amount of pages transferred to the target VM
 433#
 434# @cache-miss: number of cache miss
 435#
 436# @cache-miss-rate: rate of cache miss (since 2.1)
 437#
 438# @overflow: number of overflows
 439#
 440# Since: 1.2
 441##
 442{ 'struct': 'XBZRLECacheStats',
 443  'data': {'cache-size': 'int', 'bytes': 'int', 'pages': 'int',
 444           'cache-miss': 'int', 'cache-miss-rate': 'number',
 445           'overflow': 'int' } }
 446
 447##
 448# @MigrationStatus:
 449#
 450# An enumeration of migration status.
 451#
 452# @none: no migration has ever happened.
 453#
 454# @setup: migration process has been initiated.
 455#
 456# @cancelling: in the process of cancelling migration.
 457#
 458# @cancelled: cancelling migration is finished.
 459#
 460# @active: in the process of doing migration.
 461#
 462# @postcopy-active: like active, but now in postcopy mode. (since 2.5)
 463#
 464# @completed: migration is finished.
 465#
 466# @failed: some error occurred during migration process.
 467#
 468# @colo: VM is in the process of fault tolerance, VM can not get into this
 469#        state unless colo capability is enabled for migration. (since 2.8)
 470#
 471# Since: 2.3
 472#
 473##
 474{ 'enum': 'MigrationStatus',
 475  'data': [ 'none', 'setup', 'cancelling', 'cancelled',
 476            'active', 'postcopy-active', 'completed', 'failed', 'colo' ] }
 477
 478##
 479# @MigrationInfo:
 480#
 481# Information about current migration process.
 482#
 483# @status: #optional @MigrationStatus describing the current migration status.
 484#          If this field is not returned, no migration process
 485#          has been initiated
 486#
 487# @ram: #optional @MigrationStats containing detailed migration
 488#       status, only returned if status is 'active' or
 489#       'completed'(since 1.2)
 490#
 491# @disk: #optional @MigrationStats containing detailed disk migration
 492#        status, only returned if status is 'active' and it is a block
 493#        migration
 494#
 495# @xbzrle-cache: #optional @XBZRLECacheStats containing detailed XBZRLE
 496#                migration statistics, only returned if XBZRLE feature is on and
 497#                status is 'active' or 'completed' (since 1.2)
 498#
 499# @total-time: #optional total amount of milliseconds since migration started.
 500#        If migration has ended, it returns the total migration
 501#        time. (since 1.2)
 502#
 503# @downtime: #optional only present when migration finishes correctly
 504#        total downtime in milliseconds for the guest.
 505#        (since 1.3)
 506#
 507# @expected-downtime: #optional only present while migration is active
 508#        expected downtime in milliseconds for the guest in last walk
 509#        of the dirty bitmap. (since 1.3)
 510#
 511# @setup-time: #optional amount of setup time in milliseconds _before_ the
 512#        iterations begin but _after_ the QMP command is issued. This is designed
 513#        to provide an accounting of any activities (such as RDMA pinning) which
 514#        may be expensive, but do not actually occur during the iterative
 515#        migration rounds themselves. (since 1.6)
 516#
 517# @cpu-throttle-percentage: #optional percentage of time guest cpus are being
 518#        throttled during auto-converge. This is only present when auto-converge
 519#        has started throttling guest cpus. (Since 2.7)
 520#
 521# @error-desc: #optional the human readable error description string, when
 522#              @status is 'failed'. Clients should not attempt to parse the
 523#              error strings. (Since 2.7)
 524#
 525# Since: 0.14.0
 526##
 527{ 'struct': 'MigrationInfo',
 528  'data': {'*status': 'MigrationStatus', '*ram': 'MigrationStats',
 529           '*disk': 'MigrationStats',
 530           '*xbzrle-cache': 'XBZRLECacheStats',
 531           '*total-time': 'int',
 532           '*expected-downtime': 'int',
 533           '*downtime': 'int',
 534           '*setup-time': 'int',
 535           '*cpu-throttle-percentage': 'int',
 536           '*error-desc': 'str'} }
 537
 538##
 539# @query-migrate:
 540#
 541# Returns information about current migration process.
 542#
 543# Returns: @MigrationInfo
 544#
 545# Since: 0.14.0
 546##
 547{ 'command': 'query-migrate', 'returns': 'MigrationInfo' }
 548
 549##
 550# @MigrationCapability:
 551#
 552# Migration capabilities enumeration
 553#
 554# @xbzrle: Migration supports xbzrle (Xor Based Zero Run Length Encoding).
 555#          This feature allows us to minimize migration traffic for certain work
 556#          loads, by sending compressed difference of the pages
 557#
 558# @rdma-pin-all: Controls whether or not the entire VM memory footprint is
 559#          mlock()'d on demand or all at once. Refer to docs/rdma.txt for usage.
 560#          Disabled by default. (since 2.0)
 561#
 562# @zero-blocks: During storage migration encode blocks of zeroes efficiently. This
 563#          essentially saves 1MB of zeroes per block on the wire. Enabling requires
 564#          source and target VM to support this feature. To enable it is sufficient
 565#          to enable the capability on the source VM. The feature is disabled by
 566#          default. (since 1.6)
 567#
 568# @compress: Use multiple compression threads to accelerate live migration.
 569#          This feature can help to reduce the migration traffic, by sending
 570#          compressed pages. Please note that if compress and xbzrle are both
 571#          on, compress only takes effect in the ram bulk stage, after that,
 572#          it will be disabled and only xbzrle takes effect, this can help to
 573#          minimize migration traffic. The feature is disabled by default.
 574#          (since 2.4 )
 575#
 576# @events: generate events for each migration state change
 577#          (since 2.4 )
 578#
 579# @auto-converge: If enabled, QEMU will automatically throttle down the guest
 580#          to speed up convergence of RAM migration. (since 1.6)
 581#
 582# @postcopy-ram: Start executing on the migration target before all of RAM has
 583#          been migrated, pulling the remaining pages along as needed. NOTE: If
 584#          the migration fails during postcopy the VM will fail.  (since 2.6)
 585#
 586# @x-colo: If enabled, migration will never end, and the state of the VM on the
 587#        primary side will be migrated continuously to the VM on secondary
 588#        side, this process is called COarse-Grain LOck Stepping (COLO) for
 589#        Non-stop Service. (since 2.8)
 590#
 591# Since: 1.2
 592##
 593{ 'enum': 'MigrationCapability',
 594  'data': ['xbzrle', 'rdma-pin-all', 'auto-converge', 'zero-blocks',
 595           'compress', 'events', 'postcopy-ram', 'x-colo'] }
 596
 597##
 598# @MigrationCapabilityStatus:
 599#
 600# Migration capability information
 601#
 602# @capability: capability enum
 603#
 604# @state: capability state bool
 605#
 606# Since: 1.2
 607##
 608{ 'struct': 'MigrationCapabilityStatus',
 609  'data': { 'capability' : 'MigrationCapability', 'state' : 'bool' } }
 610
 611##
 612# @migrate-set-capabilities:
 613#
 614# Enable/Disable the following migration capabilities (like xbzrle)
 615#
 616# @capabilities: json array of capability modifications to make
 617#
 618# Since: 1.2
 619##
 620{ 'command': 'migrate-set-capabilities',
 621  'data': { 'capabilities': ['MigrationCapabilityStatus'] } }
 622
 623##
 624# @query-migrate-capabilities:
 625#
 626# Returns information about the current migration capabilities status
 627#
 628# Returns: @MigrationCapabilitiesStatus
 629#
 630# Since: 1.2
 631##
 632{ 'command': 'query-migrate-capabilities', 'returns':   ['MigrationCapabilityStatus']}
 633
 634##
 635# @MigrationParameter:
 636#
 637# Migration parameters enumeration
 638#
 639# @compress-level: Set the compression level to be used in live migration,
 640#          the compression level is an integer between 0 and 9, where 0 means
 641#          no compression, 1 means the best compression speed, and 9 means best
 642#          compression ratio which will consume more CPU.
 643#
 644# @compress-threads: Set compression thread count to be used in live migration,
 645#          the compression thread count is an integer between 1 and 255.
 646#
 647# @decompress-threads: Set decompression thread count to be used in live
 648#          migration, the decompression thread count is an integer between 1
 649#          and 255. Usually, decompression is at least 4 times as fast as
 650#          compression, so set the decompress-threads to the number about 1/4
 651#          of compress-threads is adequate.
 652#
 653# @cpu-throttle-initial: Initial percentage of time guest cpus are throttled
 654#                        when migration auto-converge is activated. The
 655#                        default value is 20. (Since 2.7)
 656#
 657# @cpu-throttle-increment: throttle percentage increase each time
 658#                          auto-converge detects that migration is not making
 659#                          progress. The default value is 10. (Since 2.7)
 660#
 661# @tls-creds: ID of the 'tls-creds' object that provides credentials for
 662#             establishing a TLS connection over the migration data channel.
 663#             On the outgoing side of the migration, the credentials must
 664#             be for a 'client' endpoint, while for the incoming side the
 665#             credentials must be for a 'server' endpoint. Setting this
 666#             will enable TLS for all migrations. The default is unset,
 667#             resulting in unsecured migration at the QEMU level. (Since 2.7)
 668#
 669# @tls-hostname: hostname of the target host for the migration. This is
 670#                required when using x509 based TLS credentials and the
 671#                migration URI does not already include a hostname. For
 672#                example if using fd: or exec: based migration, the
 673#                hostname must be provided so that the server's x509
 674#                certificate identity can be validated. (Since 2.7)
 675#
 676# @max-bandwidth: to set maximum speed for migration. maximum speed in
 677#                 bytes per second. (Since 2.8)
 678#
 679# @downtime-limit: set maximum tolerated downtime for migration. maximum
 680#                  downtime in milliseconds (Since 2.8)
 681#
 682# @x-checkpoint-delay: The delay time (in ms) between two COLO checkpoints in
 683#          periodic mode. (Since 2.8)
 684#
 685# Since: 2.4
 686##
 687{ 'enum': 'MigrationParameter',
 688  'data': ['compress-level', 'compress-threads', 'decompress-threads',
 689           'cpu-throttle-initial', 'cpu-throttle-increment',
 690           'tls-creds', 'tls-hostname', 'max-bandwidth',
 691           'downtime-limit', 'x-checkpoint-delay' ] }
 692
 693##
 694# @migrate-set-parameters:
 695#
 696# Set various migration parameters.  See MigrationParameters for details.
 697#
 698# Since: 2.4
 699##
 700{ 'command': 'migrate-set-parameters', 'boxed': true,
 701  'data': 'MigrationParameters' }
 702
 703##
 704# @MigrationParameters:
 705#
 706# Optional members can be omitted on input ('migrate-set-parameters')
 707# but most members will always be present on output
 708# ('query-migrate-parameters'), with the exception of tls-creds and
 709# tls-hostname.
 710#
 711# @compress-level: #optional compression level
 712#
 713# @compress-threads: #optional compression thread count
 714#
 715# @decompress-threads: #optional decompression thread count
 716#
 717# @cpu-throttle-initial: #optional Initial percentage of time guest cpus are
 718#                        throttledwhen migration auto-converge is activated.
 719#                        The default value is 20. (Since 2.7)
 720#
 721# @cpu-throttle-increment: #optional throttle percentage increase each time
 722#                          auto-converge detects that migration is not making
 723#                          progress. The default value is 10. (Since 2.7)
 724#
 725# @tls-creds: #optional ID of the 'tls-creds' object that provides credentials
 726#             for establishing a TLS connection over the migration data
 727#             channel. On the outgoing side of the migration, the credentials
 728#             must be for a 'client' endpoint, while for the incoming side the
 729#             credentials must be for a 'server' endpoint. Setting this
 730#             will enable TLS for all migrations. The default is unset,
 731#             resulting in unsecured migration at the QEMU level. (Since 2.7)
 732#
 733# @tls-hostname: #optional hostname of the target host for the migration. This
 734#                is required when using x509 based TLS credentials and the
 735#                migration URI does not already include a hostname. For
 736#                example if using fd: or exec: based migration, the
 737#                hostname must be provided so that the server's x509
 738#                certificate identity can be validated. (Since 2.7)
 739#
 740# @max-bandwidth: to set maximum speed for migration. maximum speed in
 741#                 bytes per second. (Since 2.8)
 742#
 743# @downtime-limit: set maximum tolerated downtime for migration. maximum
 744#                  downtime in milliseconds (Since 2.8)
 745#
 746# @x-checkpoint-delay: the delay time between two COLO checkpoints. (Since 2.8)
 747#
 748# Since: 2.4
 749##
 750{ 'struct': 'MigrationParameters',
 751  'data': { '*compress-level': 'int',
 752            '*compress-threads': 'int',
 753            '*decompress-threads': 'int',
 754            '*cpu-throttle-initial': 'int',
 755            '*cpu-throttle-increment': 'int',
 756            '*tls-creds': 'str',
 757            '*tls-hostname': 'str',
 758            '*max-bandwidth': 'int',
 759            '*downtime-limit': 'int',
 760            '*x-checkpoint-delay': 'int'} }
 761
 762##
 763# @query-migrate-parameters:
 764#
 765# Returns information about the current migration parameters
 766#
 767# Returns: @MigrationParameters
 768#
 769# Since: 2.4
 770##
 771{ 'command': 'query-migrate-parameters',
 772  'returns': 'MigrationParameters' }
 773
 774##
 775# @client_migrate_info:
 776#
 777# Set migration information for remote display.  This makes the server
 778# ask the client to automatically reconnect using the new parameters
 779# once migration finished successfully.  Only implemented for SPICE.
 780#
 781# @protocol:     must be "spice"
 782# @hostname:     migration target hostname
 783# @port:         #optional spice tcp port for plaintext channels
 784# @tls-port:     #optional spice tcp port for tls-secured channels
 785# @cert-subject: #optional server certificate subject
 786#
 787# Since: 0.14.0
 788##
 789{ 'command': 'client_migrate_info',
 790  'data': { 'protocol': 'str', 'hostname': 'str', '*port': 'int',
 791            '*tls-port': 'int', '*cert-subject': 'str' } }
 792
 793##
 794# @migrate-start-postcopy:
 795#
 796# Followup to a migration command to switch the migration to postcopy mode.
 797# The postcopy-ram capability must be set before the original migration
 798# command.
 799#
 800# Since: 2.5
 801##
 802{ 'command': 'migrate-start-postcopy' }
 803
 804##
 805# @COLOMessage:
 806#
 807# The message transmission between Primary side and Secondary side.
 808#
 809# @checkpoint-ready: Secondary VM (SVM) is ready for checkpointing
 810#
 811# @checkpoint-request: Primary VM (PVM) tells SVM to prepare for checkpointing
 812#
 813# @checkpoint-reply: SVM gets PVM's checkpoint request
 814#
 815# @vmstate-send: VM's state will be sent by PVM.
 816#
 817# @vmstate-size: The total size of VMstate.
 818#
 819# @vmstate-received: VM's state has been received by SVM.
 820#
 821# @vmstate-loaded: VM's state has been loaded by SVM.
 822#
 823# Since: 2.8
 824##
 825{ 'enum': 'COLOMessage',
 826  'data': [ 'checkpoint-ready', 'checkpoint-request', 'checkpoint-reply',
 827            'vmstate-send', 'vmstate-size', 'vmstate-received',
 828            'vmstate-loaded' ] }
 829
 830##
 831# @COLOMode:
 832#
 833# The colo mode
 834#
 835# @unknown: unknown mode
 836#
 837# @primary: master side
 838#
 839# @secondary: slave side
 840#
 841# Since: 2.8
 842##
 843{ 'enum': 'COLOMode',
 844  'data': [ 'unknown', 'primary', 'secondary'] }
 845
 846##
 847# @FailoverStatus:
 848#
 849# An enumeration of COLO failover status
 850#
 851# @none: no failover has ever happened
 852#
 853# @require: got failover requirement but not handled
 854#
 855# @active: in the process of doing failover
 856#
 857# @completed: finish the process of failover
 858#
 859# Since: 2.8
 860##
 861{ 'enum': 'FailoverStatus',
 862  'data': [ 'none', 'require', 'active', 'completed'] }
 863
 864##
 865# @x-colo-lost-heartbeat:
 866#
 867# Tell qemu that heartbeat is lost, request it to do takeover procedures.
 868# If this command is sent to the PVM, the Primary side will exit COLO mode.
 869# If sent to the Secondary, the Secondary side will run failover work,
 870# then takes over server operation to become the service VM.
 871#
 872# Since: 2.8
 873##
 874{ 'command': 'x-colo-lost-heartbeat' }
 875
 876##
 877# @MouseInfo:
 878#
 879# Information about a mouse device.
 880#
 881# @name: the name of the mouse device
 882#
 883# @index: the index of the mouse device
 884#
 885# @current: true if this device is currently receiving mouse events
 886#
 887# @absolute: true if this device supports absolute coordinates as input
 888#
 889# Since: 0.14.0
 890##
 891{ 'struct': 'MouseInfo',
 892  'data': {'name': 'str', 'index': 'int', 'current': 'bool',
 893           'absolute': 'bool'} }
 894
 895##
 896# @query-mice:
 897#
 898# Returns information about each active mouse device
 899#
 900# Returns: a list of @MouseInfo for each device
 901#
 902# Since: 0.14.0
 903##
 904{ 'command': 'query-mice', 'returns': ['MouseInfo'] }
 905
 906##
 907# @CpuInfoArch:
 908#
 909# An enumeration of cpu types that enable additional information during
 910# @query-cpus.
 911#
 912# Since: 2.6
 913##
 914{ 'enum': 'CpuInfoArch',
 915  'data': ['x86', 'sparc', 'ppc', 'mips', 'tricore', 'other' ] }
 916
 917##
 918# @CpuInfo:
 919#
 920# Information about a virtual CPU
 921#
 922# @CPU: the index of the virtual CPU
 923#
 924# @current: this only exists for backwards compatibility and should be ignored
 925#
 926# @halted: true if the virtual CPU is in the halt state.  Halt usually refers
 927#          to a processor specific low power mode.
 928#
 929# @qom_path: path to the CPU object in the QOM tree (since 2.4)
 930#
 931# @thread_id: ID of the underlying host thread
 932#
 933# @arch: architecture of the cpu, which determines which additional fields
 934#        will be listed (since 2.6)
 935#
 936# Since: 0.14.0
 937#
 938# Notes: @halted is a transient state that changes frequently.  By the time the
 939#        data is sent to the client, the guest may no longer be halted.
 940##
 941{ 'union': 'CpuInfo',
 942  'base': {'CPU': 'int', 'current': 'bool', 'halted': 'bool',
 943           'qom_path': 'str', 'thread_id': 'int', 'arch': 'CpuInfoArch' },
 944  'discriminator': 'arch',
 945  'data': { 'x86': 'CpuInfoX86',
 946            'sparc': 'CpuInfoSPARC',
 947            'ppc': 'CpuInfoPPC',
 948            'mips': 'CpuInfoMIPS',
 949            'tricore': 'CpuInfoTricore',
 950            'other': 'CpuInfoOther' } }
 951
 952##
 953# @CpuInfoX86:
 954#
 955# Additional information about a virtual i386 or x86_64 CPU
 956#
 957# @pc: the 64-bit instruction pointer
 958#
 959# Since: 2.6
 960##
 961{ 'struct': 'CpuInfoX86', 'data': { 'pc': 'int' } }
 962
 963##
 964# @CpuInfoSPARC:
 965#
 966# Additional information about a virtual SPARC CPU
 967#
 968# @pc: the PC component of the instruction pointer
 969#
 970# @npc: the NPC component of the instruction pointer
 971#
 972# Since: 2.6
 973##
 974{ 'struct': 'CpuInfoSPARC', 'data': { 'pc': 'int', 'npc': 'int' } }
 975
 976##
 977# @CpuInfoPPC:
 978#
 979# Additional information about a virtual PPC CPU
 980#
 981# @nip: the instruction pointer
 982#
 983# Since: 2.6
 984##
 985{ 'struct': 'CpuInfoPPC', 'data': { 'nip': 'int' } }
 986
 987##
 988# @CpuInfoMIPS:
 989#
 990# Additional information about a virtual MIPS CPU
 991#
 992# @PC: the instruction pointer
 993#
 994# Since: 2.6
 995##
 996{ 'struct': 'CpuInfoMIPS', 'data': { 'PC': 'int' } }
 997
 998##
 999# @CpuInfoTricore:
1000#
1001# Additional information about a virtual Tricore CPU
1002#
1003# @PC: the instruction pointer
1004#
1005# Since: 2.6
1006##
1007{ 'struct': 'CpuInfoTricore', 'data': { 'PC': 'int' } }
1008
1009##
1010# @CpuInfoOther:
1011#
1012# No additional information is available about the virtual CPU
1013#
1014# Since: 2.6
1015#
1016##
1017{ 'struct': 'CpuInfoOther', 'data': { } }
1018
1019##
1020# @query-cpus:
1021#
1022# Returns a list of information about each virtual CPU.
1023#
1024# Returns: a list of @CpuInfo for each virtual CPU
1025#
1026# Since: 0.14.0
1027##
1028{ 'command': 'query-cpus', 'returns': ['CpuInfo'] }
1029
1030##
1031# @IOThreadInfo:
1032#
1033# Information about an iothread
1034#
1035# @id: the identifier of the iothread
1036#
1037# @thread-id: ID of the underlying host thread
1038#
1039# Since: 2.0
1040##
1041{ 'struct': 'IOThreadInfo',
1042  'data': {'id': 'str', 'thread-id': 'int'} }
1043
1044##
1045# @query-iothreads:
1046#
1047# Returns a list of information about each iothread.
1048#
1049# Note: this list excludes the QEMU main loop thread, which is not declared
1050# using the -object iothread command-line option.  It is always the main thread
1051# of the process.
1052#
1053# Returns: a list of @IOThreadInfo for each iothread
1054#
1055# Since: 2.0
1056##
1057{ 'command': 'query-iothreads', 'returns': ['IOThreadInfo'] }
1058
1059##
1060# @NetworkAddressFamily:
1061#
1062# The network address family
1063#
1064# @ipv4: IPV4 family
1065#
1066# @ipv6: IPV6 family
1067#
1068# @unix: unix socket
1069#
1070# @vsock: vsock family (since 2.8)
1071#
1072# @unknown: otherwise
1073#
1074# Since: 2.1
1075##
1076{ 'enum': 'NetworkAddressFamily',
1077  'data': [ 'ipv4', 'ipv6', 'unix', 'vsock', 'unknown' ] }
1078
1079##
1080# @VncBasicInfo:
1081#
1082# The basic information for vnc network connection
1083#
1084# @host: IP address
1085#
1086# @service: The service name of the vnc port. This may depend on the host
1087#           system's service database so symbolic names should not be relied
1088#           on.
1089#
1090# @family: address family
1091#
1092# @websocket: true in case the socket is a websocket (since 2.3).
1093#
1094# Since: 2.1
1095##
1096{ 'struct': 'VncBasicInfo',
1097  'data': { 'host': 'str',
1098            'service': 'str',
1099            'family': 'NetworkAddressFamily',
1100            'websocket': 'bool' } }
1101
1102##
1103# @VncServerInfo:
1104#
1105# The network connection information for server
1106#
1107# @auth: #optional, authentication method
1108#
1109# Since: 2.1
1110##
1111{ 'struct': 'VncServerInfo',
1112  'base': 'VncBasicInfo',
1113  'data': { '*auth': 'str' } }
1114
1115##
1116# @VncClientInfo:
1117#
1118# Information about a connected VNC client.
1119#
1120# @x509_dname: #optional If x509 authentication is in use, the Distinguished
1121#              Name of the client.
1122#
1123# @sasl_username: #optional If SASL authentication is in use, the SASL username
1124#                 used for authentication.
1125#
1126# Since: 0.14.0
1127##
1128{ 'struct': 'VncClientInfo',
1129  'base': 'VncBasicInfo',
1130  'data': { '*x509_dname': 'str', '*sasl_username': 'str' } }
1131
1132##
1133# @VncInfo:
1134#
1135# Information about the VNC session.
1136#
1137# @enabled: true if the VNC server is enabled, false otherwise
1138#
1139# @host: #optional The hostname the VNC server is bound to.  This depends on
1140#        the name resolution on the host and may be an IP address.
1141#
1142# @family: #optional 'ipv6' if the host is listening for IPv6 connections
1143#                    'ipv4' if the host is listening for IPv4 connections
1144#                    'unix' if the host is listening on a unix domain socket
1145#                    'unknown' otherwise
1146#
1147# @service: #optional The service name of the server's port.  This may depends
1148#           on the host system's service database so symbolic names should not
1149#           be relied on.
1150#
1151# @auth: #optional the current authentication type used by the server
1152#        'none' if no authentication is being used
1153#        'vnc' if VNC authentication is being used
1154#        'vencrypt+plain' if VEncrypt is used with plain text authentication
1155#        'vencrypt+tls+none' if VEncrypt is used with TLS and no authentication
1156#        'vencrypt+tls+vnc' if VEncrypt is used with TLS and VNC authentication
1157#        'vencrypt+tls+plain' if VEncrypt is used with TLS and plain text auth
1158#        'vencrypt+x509+none' if VEncrypt is used with x509 and no auth
1159#        'vencrypt+x509+vnc' if VEncrypt is used with x509 and VNC auth
1160#        'vencrypt+x509+plain' if VEncrypt is used with x509 and plain text auth
1161#        'vencrypt+tls+sasl' if VEncrypt is used with TLS and SASL auth
1162#        'vencrypt+x509+sasl' if VEncrypt is used with x509 and SASL auth
1163#
1164# @clients: a list of @VncClientInfo of all currently connected clients
1165#
1166# Since: 0.14.0
1167##
1168{ 'struct': 'VncInfo',
1169  'data': {'enabled': 'bool', '*host': 'str',
1170           '*family': 'NetworkAddressFamily',
1171           '*service': 'str', '*auth': 'str', '*clients': ['VncClientInfo']} }
1172
1173##
1174# @VncPrimaryAuth:
1175#
1176# vnc primary authentication method.
1177#
1178# Since: 2.3
1179##
1180{ 'enum': 'VncPrimaryAuth',
1181  'data': [ 'none', 'vnc', 'ra2', 'ra2ne', 'tight', 'ultra',
1182            'tls', 'vencrypt', 'sasl' ] }
1183
1184##
1185# @VncVencryptSubAuth:
1186#
1187# vnc sub authentication method with vencrypt.
1188#
1189# Since: 2.3
1190##
1191{ 'enum': 'VncVencryptSubAuth',
1192  'data': [ 'plain',
1193            'tls-none',  'x509-none',
1194            'tls-vnc',   'x509-vnc',
1195            'tls-plain', 'x509-plain',
1196            'tls-sasl',  'x509-sasl' ] }
1197
1198##
1199# @VncInfo2:
1200#
1201# Information about a vnc server
1202#
1203# @id: vnc server name.
1204#
1205# @server: A list of @VncBasincInfo describing all listening sockets.
1206#          The list can be empty (in case the vnc server is disabled).
1207#          It also may have multiple entries: normal + websocket,
1208#          possibly also ipv4 + ipv6 in the future.
1209#
1210# @clients: A list of @VncClientInfo of all currently connected clients.
1211#           The list can be empty, for obvious reasons.
1212#
1213# @auth: The current authentication type used by the server
1214#
1215# @vencrypt: #optional The vencrypt sub authentication type used by the server,
1216#            only specified in case auth == vencrypt.
1217#
1218# @display: #optional The display device the vnc server is linked to.
1219#
1220# Since: 2.3
1221##
1222{ 'struct': 'VncInfo2',
1223  'data': { 'id'        : 'str',
1224            'server'    : ['VncBasicInfo'],
1225            'clients'   : ['VncClientInfo'],
1226            'auth'      : 'VncPrimaryAuth',
1227            '*vencrypt' : 'VncVencryptSubAuth',
1228            '*display'  : 'str' } }
1229
1230##
1231# @query-vnc:
1232#
1233# Returns information about the current VNC server
1234#
1235# Returns: @VncInfo
1236#
1237# Since: 0.14.0
1238##
1239{ 'command': 'query-vnc', 'returns': 'VncInfo' }
1240
1241##
1242# @query-vnc-servers:
1243#
1244# Returns a list of vnc servers.  The list can be empty.
1245#
1246# Returns: a list of @VncInfo2
1247#
1248# Since: 2.3
1249##
1250{ 'command': 'query-vnc-servers', 'returns': ['VncInfo2'] }
1251
1252##
1253# @SpiceBasicInfo:
1254#
1255# The basic information for SPICE network connection
1256#
1257# @host: IP address
1258#
1259# @port: port number
1260#
1261# @family: address family
1262#
1263# Since: 2.1
1264##
1265{ 'struct': 'SpiceBasicInfo',
1266  'data': { 'host': 'str',
1267            'port': 'str',
1268            'family': 'NetworkAddressFamily' } }
1269
1270##
1271# @SpiceServerInfo:
1272#
1273# Information about a SPICE server
1274#
1275# @auth: #optional, authentication method
1276#
1277# Since: 2.1
1278##
1279{ 'struct': 'SpiceServerInfo',
1280  'base': 'SpiceBasicInfo',
1281  'data': { '*auth': 'str' } }
1282
1283##
1284# @SpiceChannel:
1285#
1286# Information about a SPICE client channel.
1287#
1288# @connection-id: SPICE connection id number.  All channels with the same id
1289#                 belong to the same SPICE session.
1290#
1291# @channel-type: SPICE channel type number.  "1" is the main control
1292#                channel, filter for this one if you want to track spice
1293#                sessions only
1294#
1295# @channel-id: SPICE channel ID number.  Usually "0", might be different when
1296#              multiple channels of the same type exist, such as multiple
1297#              display channels in a multihead setup
1298#
1299# @tls: true if the channel is encrypted, false otherwise.
1300#
1301# Since: 0.14.0
1302##
1303{ 'struct': 'SpiceChannel',
1304  'base': 'SpiceBasicInfo',
1305  'data': {'connection-id': 'int', 'channel-type': 'int', 'channel-id': 'int',
1306           'tls': 'bool'} }
1307
1308##
1309# @SpiceQueryMouseMode:
1310#
1311# An enumeration of Spice mouse states.
1312#
1313# @client: Mouse cursor position is determined by the client.
1314#
1315# @server: Mouse cursor position is determined by the server.
1316#
1317# @unknown: No information is available about mouse mode used by
1318#           the spice server.
1319#
1320# Note: spice/enums.h has a SpiceMouseMode already, hence the name.
1321#
1322# Since: 1.1
1323##
1324{ 'enum': 'SpiceQueryMouseMode',
1325  'data': [ 'client', 'server', 'unknown' ] }
1326
1327##
1328# @SpiceInfo:
1329#
1330# Information about the SPICE session.
1331#
1332# @enabled: true if the SPICE server is enabled, false otherwise
1333#
1334# @migrated: true if the last guest migration completed and spice
1335#            migration had completed as well. false otherwise.
1336#
1337# @host: #optional The hostname the SPICE server is bound to.  This depends on
1338#        the name resolution on the host and may be an IP address.
1339#
1340# @port: #optional The SPICE server's port number.
1341#
1342# @compiled-version: #optional SPICE server version.
1343#
1344# @tls-port: #optional The SPICE server's TLS port number.
1345#
1346# @auth: #optional the current authentication type used by the server
1347#        'none'  if no authentication is being used
1348#        'spice' uses SASL or direct TLS authentication, depending on command
1349#                line options
1350#
1351# @mouse-mode: The mode in which the mouse cursor is displayed currently. Can
1352#              be determined by the client or the server, or unknown if spice
1353#              server doesn't provide this information.
1354#
1355#              Since: 1.1
1356#
1357# @channels: a list of @SpiceChannel for each active spice channel
1358#
1359# Since: 0.14.0
1360##
1361{ 'struct': 'SpiceInfo',
1362  'data': {'enabled': 'bool', 'migrated': 'bool', '*host': 'str', '*port': 'int',
1363           '*tls-port': 'int', '*auth': 'str', '*compiled-version': 'str',
1364           'mouse-mode': 'SpiceQueryMouseMode', '*channels': ['SpiceChannel']} }
1365
1366##
1367# @query-spice:
1368#
1369# Returns information about the current SPICE server
1370#
1371# Returns: @SpiceInfo
1372#
1373# Since: 0.14.0
1374##
1375{ 'command': 'query-spice', 'returns': 'SpiceInfo' }
1376
1377##
1378# @BalloonInfo:
1379#
1380# Information about the guest balloon device.
1381#
1382# @actual: the number of bytes the balloon currently contains
1383#
1384# Since: 0.14.0
1385#
1386##
1387{ 'struct': 'BalloonInfo', 'data': {'actual': 'int' } }
1388
1389##
1390# @query-balloon:
1391#
1392# Return information about the balloon device.
1393#
1394# Returns: @BalloonInfo on success
1395#          If the balloon driver is enabled but not functional because the KVM
1396#          kernel module cannot support it, KvmMissingCap
1397#          If no balloon device is present, DeviceNotActive
1398#
1399# Since: 0.14.0
1400##
1401{ 'command': 'query-balloon', 'returns': 'BalloonInfo' }
1402
1403##
1404# @PciMemoryRange:
1405#
1406# A PCI device memory region
1407#
1408# @base: the starting address (guest physical)
1409#
1410# @limit: the ending address (guest physical)
1411#
1412# Since: 0.14.0
1413##
1414{ 'struct': 'PciMemoryRange', 'data': {'base': 'int', 'limit': 'int'} }
1415
1416##
1417# @PciMemoryRegion:
1418#
1419# Information about a PCI device I/O region.
1420#
1421# @bar: the index of the Base Address Register for this region
1422#
1423# @type: 'io' if the region is a PIO region
1424#        'memory' if the region is a MMIO region
1425#
1426# @prefetch: #optional if @type is 'memory', true if the memory is prefetchable
1427#
1428# @mem_type_64: #optional if @type is 'memory', true if the BAR is 64-bit
1429#
1430# Since: 0.14.0
1431##
1432{ 'struct': 'PciMemoryRegion',
1433  'data': {'bar': 'int', 'type': 'str', 'address': 'int', 'size': 'int',
1434           '*prefetch': 'bool', '*mem_type_64': 'bool' } }
1435
1436##
1437# @PciBusInfo:
1438#
1439# Information about a bus of a PCI Bridge device
1440#
1441# @number: primary bus interface number.  This should be the number of the
1442#          bus the device resides on.
1443#
1444# @secondary: secondary bus interface number.  This is the number of the
1445#             main bus for the bridge
1446#
1447# @subordinate: This is the highest number bus that resides below the
1448#               bridge.
1449#
1450# @io_range: The PIO range for all devices on this bridge
1451#
1452# @memory_range: The MMIO range for all devices on this bridge
1453#
1454# @prefetchable_range: The range of prefetchable MMIO for all devices on
1455#                      this bridge
1456#
1457# Since: 2.4
1458##
1459{ 'struct': 'PciBusInfo',
1460  'data': {'number': 'int', 'secondary': 'int', 'subordinate': 'int',
1461           'io_range': 'PciMemoryRange',
1462           'memory_range': 'PciMemoryRange',
1463           'prefetchable_range': 'PciMemoryRange' } }
1464
1465##
1466# @PciBridgeInfo:
1467#
1468# Information about a PCI Bridge device
1469#
1470# @bus: information about the bus the device resides on
1471#
1472# @devices: a list of @PciDeviceInfo for each device on this bridge
1473#
1474# Since: 0.14.0
1475##
1476{ 'struct': 'PciBridgeInfo',
1477  'data': {'bus': 'PciBusInfo', '*devices': ['PciDeviceInfo']} }
1478
1479##
1480# @PciDeviceClass:
1481#
1482# Information about the Class of a PCI device
1483#
1484# @desc: #optional a string description of the device's class
1485#
1486# @class: the class code of the device
1487#
1488# Since: 2.4
1489##
1490{ 'struct': 'PciDeviceClass',
1491  'data': {'*desc': 'str', 'class': 'int'} }
1492
1493##
1494# @PciDeviceId:
1495#
1496# Information about the Id of a PCI device
1497#
1498# @device: the PCI device id
1499#
1500# @vendor: the PCI vendor id
1501#
1502# Since: 2.4
1503##
1504{ 'struct': 'PciDeviceId',
1505  'data': {'device': 'int', 'vendor': 'int'} }
1506
1507##
1508# @PciDeviceInfo:
1509#
1510# Information about a PCI device
1511#
1512# @bus: the bus number of the device
1513#
1514# @slot: the slot the device is located in
1515#
1516# @function: the function of the slot used by the device
1517#
1518# @class_info: the class of the device
1519#
1520# @id: the PCI device id
1521#
1522# @irq: #optional if an IRQ is assigned to the device, the IRQ number
1523#
1524# @qdev_id: the device name of the PCI device
1525#
1526# @pci_bridge: if the device is a PCI bridge, the bridge information
1527#
1528# @regions: a list of the PCI I/O regions associated with the device
1529#
1530# Notes: the contents of @class_info.desc are not stable and should only be
1531#        treated as informational.
1532#
1533# Since: 0.14.0
1534##
1535{ 'struct': 'PciDeviceInfo',
1536  'data': {'bus': 'int', 'slot': 'int', 'function': 'int',
1537           'class_info': 'PciDeviceClass', 'id': 'PciDeviceId',
1538           '*irq': 'int', 'qdev_id': 'str', '*pci_bridge': 'PciBridgeInfo',
1539           'regions': ['PciMemoryRegion']} }
1540
1541##
1542# @PciInfo:
1543#
1544# Information about a PCI bus
1545#
1546# @bus: the bus index
1547#
1548# @devices: a list of devices on this bus
1549#
1550# Since: 0.14.0
1551##
1552{ 'struct': 'PciInfo', 'data': {'bus': 'int', 'devices': ['PciDeviceInfo']} }
1553
1554##
1555# @query-pci:
1556#
1557# Return information about the PCI bus topology of the guest.
1558#
1559# Returns: a list of @PciInfo for each PCI bus
1560#
1561# Since: 0.14.0
1562##
1563{ 'command': 'query-pci', 'returns': ['PciInfo'] }
1564
1565##
1566# @quit:
1567#
1568# This command will cause the QEMU process to exit gracefully.  While every
1569# attempt is made to send the QMP response before terminating, this is not
1570# guaranteed.  When using this interface, a premature EOF would not be
1571# unexpected.
1572#
1573# Since: 0.14.0
1574##
1575{ 'command': 'quit' }
1576
1577##
1578# @stop:
1579#
1580# Stop all guest VCPU execution.
1581#
1582# Since:  0.14.0
1583#
1584# Notes:  This function will succeed even if the guest is already in the stopped
1585#         state.  In "inmigrate" state, it will ensure that the guest
1586#         remains paused once migration finishes, as if the -S option was
1587#         passed on the command line.
1588##
1589{ 'command': 'stop' }
1590
1591##
1592# @system_reset:
1593#
1594# Performs a hard reset of a guest.
1595#
1596# Since: 0.14.0
1597##
1598{ 'command': 'system_reset' }
1599
1600##
1601# @system_powerdown:
1602#
1603# Requests that a guest perform a powerdown operation.
1604#
1605# Since: 0.14.0
1606#
1607# Notes: A guest may or may not respond to this command.  This command
1608#        returning does not indicate that a guest has accepted the request or
1609#        that it has shut down.  Many guests will respond to this command by
1610#        prompting the user in some way.
1611##
1612{ 'command': 'system_powerdown' }
1613
1614##
1615# @cpu:
1616#
1617# This command is a nop that is only provided for the purposes of compatibility.
1618#
1619# Since: 0.14.0
1620#
1621# Notes: Do not use this command.
1622##
1623{ 'command': 'cpu', 'data': {'index': 'int'} }
1624
1625##
1626# @cpu-add:
1627#
1628# Adds CPU with specified ID
1629#
1630# @id: ID of CPU to be created, valid values [0..max_cpus)
1631#
1632# Returns: Nothing on success
1633#
1634# Since: 1.5
1635##
1636{ 'command': 'cpu-add', 'data': {'id': 'int'} }
1637
1638##
1639# @memsave:
1640#
1641# Save a portion of guest memory to a file.
1642#
1643# @val: the virtual address of the guest to start from
1644#
1645# @size: the size of memory region to save
1646#
1647# @filename: the file to save the memory to as binary data
1648#
1649# @cpu-index: #optional the index of the virtual CPU to use for translating the
1650#                       virtual address (defaults to CPU 0)
1651#
1652# Returns: Nothing on success
1653#
1654# Since: 0.14.0
1655#
1656# Notes: Errors were not reliably returned until 1.1
1657##
1658{ 'command': 'memsave',
1659  'data': {'val': 'int', 'size': 'int', 'filename': 'str', '*cpu-index': 'int'} }
1660
1661##
1662# @pmemsave:
1663#
1664# Save a portion of guest physical memory to a file.
1665#
1666# @val: the physical address of the guest to start from
1667#
1668# @size: the size of memory region to save
1669#
1670# @filename: the file to save the memory to as binary data
1671#
1672# Returns: Nothing on success
1673#
1674# Since: 0.14.0
1675#
1676# Notes: Errors were not reliably returned until 1.1
1677##
1678{ 'command': 'pmemsave',
1679  'data': {'val': 'int', 'size': 'int', 'filename': 'str'} }
1680
1681##
1682# @cont:
1683#
1684# Resume guest VCPU execution.
1685#
1686# Since:  0.14.0
1687#
1688# Returns:  If successful, nothing
1689#           If QEMU was started with an encrypted block device and a key has
1690#              not yet been set, DeviceEncrypted.
1691#
1692# Notes:  This command will succeed if the guest is currently running.  It
1693#         will also succeed if the guest is in the "inmigrate" state; in
1694#         this case, the effect of the command is to make sure the guest
1695#         starts once migration finishes, removing the effect of the -S
1696#         command line option if it was passed.
1697##
1698{ 'command': 'cont' }
1699
1700##
1701# @system_wakeup:
1702#
1703# Wakeup guest from suspend.  Does nothing in case the guest isn't suspended.
1704#
1705# Since:  1.1
1706#
1707# Returns:  nothing.
1708##
1709{ 'command': 'system_wakeup' }
1710
1711##
1712# @inject-nmi:
1713#
1714# Injects a Non-Maskable Interrupt into the default CPU (x86/s390) or all CPUs (ppc64).
1715#
1716# Returns:  If successful, nothing
1717#
1718# Since:  0.14.0
1719#
1720# Note: prior to 2.1, this command was only supported for x86 and s390 VMs
1721##
1722{ 'command': 'inject-nmi' }
1723
1724##
1725# @set_link:
1726#
1727# Sets the link status of a virtual network adapter.
1728#
1729# @name: the device name of the virtual network adapter
1730#
1731# @up: true to set the link status to be up
1732#
1733# Returns: Nothing on success
1734#          If @name is not a valid network device, DeviceNotFound
1735#
1736# Since: 0.14.0
1737#
1738# Notes: Not all network adapters support setting link status.  This command
1739#        will succeed even if the network adapter does not support link status
1740#        notification.
1741##
1742{ 'command': 'set_link', 'data': {'name': 'str', 'up': 'bool'} }
1743
1744##
1745# @balloon:
1746#
1747# Request the balloon driver to change its balloon size.
1748#
1749# @value: the target size of the balloon in bytes
1750#
1751# Returns: Nothing on success
1752#          If the balloon driver is enabled but not functional because the KVM
1753#            kernel module cannot support it, KvmMissingCap
1754#          If no balloon device is present, DeviceNotActive
1755#
1756# Notes: This command just issues a request to the guest.  When it returns,
1757#        the balloon size may not have changed.  A guest can change the balloon
1758#        size independent of this command.
1759#
1760# Since: 0.14.0
1761##
1762{ 'command': 'balloon', 'data': {'value': 'int'} }
1763
1764##
1765# @Abort:
1766#
1767# This action can be used to test transaction failure.
1768#
1769# Since: 1.6
1770##
1771{ 'struct': 'Abort',
1772  'data': { } }
1773
1774##
1775# @ActionCompletionMode:
1776#
1777# An enumeration of Transactional completion modes.
1778#
1779# @individual: Do not attempt to cancel any other Actions if any Actions fail
1780#              after the Transaction request succeeds. All Actions that
1781#              can complete successfully will do so without waiting on others.
1782#              This is the default.
1783#
1784# @grouped: If any Action fails after the Transaction succeeds, cancel all
1785#           Actions. Actions do not complete until all Actions are ready to
1786#           complete. May be rejected by Actions that do not support this
1787#           completion mode.
1788#
1789# Since: 2.5
1790##
1791{ 'enum': 'ActionCompletionMode',
1792  'data': [ 'individual', 'grouped' ] }
1793
1794##
1795# @TransactionAction:
1796#
1797# A discriminated record of operations that can be performed with
1798# @transaction.
1799#
1800# Since: 1.1
1801#
1802# drive-backup since 1.6
1803# abort since 1.6
1804# blockdev-snapshot-internal-sync since 1.7
1805# blockdev-backup since 2.3
1806# blockdev-snapshot since 2.5
1807# block-dirty-bitmap-add since 2.5
1808# block-dirty-bitmap-clear since 2.5
1809##
1810{ 'union': 'TransactionAction',
1811  'data': {
1812       'blockdev-snapshot': 'BlockdevSnapshot',
1813       'blockdev-snapshot-sync': 'BlockdevSnapshotSync',
1814       'drive-backup': 'DriveBackup',
1815       'blockdev-backup': 'BlockdevBackup',
1816       'abort': 'Abort',
1817       'blockdev-snapshot-internal-sync': 'BlockdevSnapshotInternal',
1818       'block-dirty-bitmap-add': 'BlockDirtyBitmapAdd',
1819       'block-dirty-bitmap-clear': 'BlockDirtyBitmap'
1820   } }
1821
1822##
1823# @TransactionProperties:
1824#
1825# Optional arguments to modify the behavior of a Transaction.
1826#
1827# @completion-mode: #optional Controls how jobs launched asynchronously by
1828#                   Actions will complete or fail as a group.
1829#                   See @ActionCompletionMode for details.
1830#
1831# Since: 2.5
1832##
1833{ 'struct': 'TransactionProperties',
1834  'data': {
1835       '*completion-mode': 'ActionCompletionMode'
1836  }
1837}
1838
1839##
1840# @transaction:
1841#
1842# Executes a number of transactionable QMP commands atomically. If any
1843# operation fails, then the entire set of actions will be abandoned and the
1844# appropriate error returned.
1845#
1846# @actions: List of @TransactionAction;
1847#           information needed for the respective operations.
1848#
1849# @properties: #optional structure of additional options to control the
1850#              execution of the transaction. See @TransactionProperties
1851#              for additional detail.
1852#
1853# Returns: nothing on success
1854#          Errors depend on the operations of the transaction
1855#
1856# Note: The transaction aborts on the first failure.  Therefore, there will be
1857# information on only one failed operation returned in an error condition, and
1858# subsequent actions will not have been attempted.
1859#
1860# Since: 1.1
1861##
1862{ 'command': 'transaction',
1863  'data': { 'actions': [ 'TransactionAction' ],
1864            '*properties': 'TransactionProperties'
1865          }
1866}
1867
1868##
1869# @human-monitor-command:
1870#
1871# Execute a command on the human monitor and return the output.
1872#
1873# @command-line: the command to execute in the human monitor
1874#
1875# @cpu-index: #optional The CPU to use for commands that require an implicit CPU
1876#
1877# Returns: the output of the command as a string
1878#
1879# Since: 0.14.0
1880#
1881# Notes: This command only exists as a stop-gap.  Its use is highly
1882#        discouraged.  The semantics of this command are not guaranteed.
1883#
1884#        Known limitations:
1885#
1886#        o This command is stateless, this means that commands that depend
1887#          on state information (such as getfd) might not work
1888#
1889#       o Commands that prompt the user for data (eg. 'cont' when the block
1890#         device is encrypted) don't currently work
1891##
1892{ 'command': 'human-monitor-command',
1893  'data': {'command-line': 'str', '*cpu-index': 'int'},
1894  'returns': 'str' }
1895
1896##
1897# @migrate_cancel:
1898#
1899# Cancel the current executing migration process.
1900#
1901# Returns: nothing on success
1902#
1903# Notes: This command succeeds even if there is no migration process running.
1904#
1905# Since: 0.14.0
1906##
1907{ 'command': 'migrate_cancel' }
1908
1909##
1910# @migrate_set_downtime:
1911#
1912# Set maximum tolerated downtime for migration.
1913#
1914# @value: maximum downtime in seconds
1915#
1916# Returns: nothing on success
1917#
1918# Notes: This command is deprecated in favor of 'migrate-set-parameters'
1919#
1920# Since: 0.14.0
1921##
1922{ 'command': 'migrate_set_downtime', 'data': {'value': 'number'} }
1923
1924##
1925# @migrate_set_speed:
1926#
1927# Set maximum speed for migration.
1928#
1929# @value: maximum speed in bytes.
1930#
1931# Returns: nothing on success
1932#
1933# Notes: This command is deprecated in favor of 'migrate-set-parameters'
1934#
1935# Since: 0.14.0
1936##
1937{ 'command': 'migrate_set_speed', 'data': {'value': 'int'} }
1938
1939##
1940# @migrate-set-cache-size:
1941#
1942# Set XBZRLE cache size
1943#
1944# @value: cache size in bytes
1945#
1946# The size will be rounded down to the nearest power of 2.
1947# The cache size can be modified before and during ongoing migration
1948#
1949# Returns: nothing on success
1950#
1951# Since: 1.2
1952##
1953{ 'command': 'migrate-set-cache-size', 'data': {'value': 'int'} }
1954
1955##
1956# @query-migrate-cache-size:
1957#
1958# query XBZRLE cache size
1959#
1960# Returns: XBZRLE cache size in bytes
1961#
1962# Since: 1.2
1963##
1964{ 'command': 'query-migrate-cache-size', 'returns': 'int' }
1965
1966##
1967# @ObjectPropertyInfo:
1968#
1969# @name: the name of the property
1970#
1971# @type: the type of the property.  This will typically come in one of four
1972#        forms:
1973#
1974#        1) A primitive type such as 'u8', 'u16', 'bool', 'str', or 'double'.
1975#           These types are mapped to the appropriate JSON type.
1976#
1977#        2) A child type in the form 'child<subtype>' where subtype is a qdev
1978#           device type name.  Child properties create the composition tree.
1979#
1980#        3) A link type in the form 'link<subtype>' where subtype is a qdev
1981#           device type name.  Link properties form the device model graph.
1982#
1983# Since: 1.2
1984##
1985{ 'struct': 'ObjectPropertyInfo',
1986  'data': { 'name': 'str', 'type': 'str' } }
1987
1988##
1989# @qom-list:
1990#
1991# This command will list any properties of a object given a path in the object
1992# model.
1993#
1994# @path: the path within the object model.  See @qom-get for a description of
1995#        this parameter.
1996#
1997# Returns: a list of @ObjectPropertyInfo that describe the properties of the
1998#          object.
1999#
2000# Since: 1.2
2001##
2002{ 'command': 'qom-list',
2003  'data': { 'path': 'str' },
2004  'returns': [ 'ObjectPropertyInfo' ] }
2005
2006##
2007# @qom-get:
2008#
2009# This command will get a property from a object model path and return the
2010# value.
2011#
2012# @path: The path within the object model.  There are two forms of supported
2013#        paths--absolute and partial paths.
2014#
2015#        Absolute paths are derived from the root object and can follow child<>
2016#        or link<> properties.  Since they can follow link<> properties, they
2017#        can be arbitrarily long.  Absolute paths look like absolute filenames
2018#        and are prefixed  with a leading slash.
2019#
2020#        Partial paths look like relative filenames.  They do not begin
2021#        with a prefix.  The matching rules for partial paths are subtle but
2022#        designed to make specifying objects easy.  At each level of the
2023#        composition tree, the partial path is matched as an absolute path.
2024#        The first match is not returned.  At least two matches are searched
2025#        for.  A successful result is only returned if only one match is
2026#        found.  If more than one match is found, a flag is return to
2027#        indicate that the match was ambiguous.
2028#
2029# @property: The property name to read
2030#
2031# Returns: The property value.  The type depends on the property
2032#          type. child<> and link<> properties are returned as #str
2033#          pathnames.  All integer property types (u8, u16, etc) are
2034#          returned as #int.
2035#
2036# Since: 1.2
2037##
2038{ 'command': 'qom-get',
2039  'data': { 'path': 'str', 'property': 'str' },
2040  'returns': 'any' }
2041
2042##
2043# @qom-set:
2044#
2045# This command will set a property from a object model path.
2046#
2047# @path: see @qom-get for a description of this parameter
2048#
2049# @property: the property name to set
2050#
2051# @value: a value who's type is appropriate for the property type.  See @qom-get
2052#         for a description of type mapping.
2053#
2054# Since: 1.2
2055##
2056{ 'command': 'qom-set',
2057  'data': { 'path': 'str', 'property': 'str', 'value': 'any' } }
2058
2059##
2060# @set_password:
2061#
2062# Sets the password of a remote display session.
2063#
2064# @protocol: `vnc' to modify the VNC server password
2065#            `spice' to modify the Spice server password
2066#
2067# @password: the new password
2068#
2069# @connected: #optional how to handle existing clients when changing the
2070#                       password.  If nothing is specified, defaults to `keep'
2071#                       `fail' to fail the command if clients are connected
2072#                       `disconnect' to disconnect existing clients
2073#                       `keep' to maintain existing clients
2074#
2075# Returns: Nothing on success
2076#          If Spice is not enabled, DeviceNotFound
2077#
2078# Since: 0.14.0
2079##
2080{ 'command': 'set_password',
2081  'data': {'protocol': 'str', 'password': 'str', '*connected': 'str'} }
2082
2083##
2084# @expire_password:
2085#
2086# Expire the password of a remote display server.
2087#
2088# @protocol: the name of the remote display protocol `vnc' or `spice'
2089#
2090# @time: when to expire the password.
2091#        `now' to expire the password immediately
2092#        `never' to cancel password expiration
2093#        `+INT' where INT is the number of seconds from now (integer)
2094#        `INT' where INT is the absolute time in seconds
2095#
2096# Returns: Nothing on success
2097#          If @protocol is `spice' and Spice is not active, DeviceNotFound
2098#
2099# Since: 0.14.0
2100#
2101# Notes: Time is relative to the server and currently there is no way to
2102#        coordinate server time with client time.  It is not recommended to
2103#        use the absolute time version of the @time parameter unless you're
2104#        sure you are on the same machine as the QEMU instance.
2105##
2106{ 'command': 'expire_password', 'data': {'protocol': 'str', 'time': 'str'} }
2107
2108##
2109# @change-vnc-password:
2110#
2111# Change the VNC server password.
2112#
2113# @password:  the new password to use with VNC authentication
2114#
2115# Since: 1.1
2116#
2117# Notes:  An empty password in this command will set the password to the empty
2118#         string.  Existing clients are unaffected by executing this command.
2119##
2120{ 'command': 'change-vnc-password', 'data': {'password': 'str'} }
2121
2122##
2123# @change:
2124#
2125# This command is multiple commands multiplexed together.
2126#
2127# @device: This is normally the name of a block device but it may also be 'vnc'.
2128#          when it's 'vnc', then sub command depends on @target
2129#
2130# @target: If @device is a block device, then this is the new filename.
2131#          If @device is 'vnc', then if the value 'password' selects the vnc
2132#          change password command.   Otherwise, this specifies a new server URI
2133#          address to listen to for VNC connections.
2134#
2135# @arg:    If @device is a block device, then this is an optional format to open
2136#          the device with.
2137#          If @device is 'vnc' and @target is 'password', this is the new VNC
2138#          password to set.  If this argument is an empty string, then no future
2139#          logins will be allowed.
2140#
2141# Returns: Nothing on success.
2142#          If @device is not a valid block device, DeviceNotFound
2143#          If the new block device is encrypted, DeviceEncrypted.  Note that
2144#          if this error is returned, the device has been opened successfully
2145#          and an additional call to @block_passwd is required to set the
2146#          device's password.  The behavior of reads and writes to the block
2147#          device between when these calls are executed is undefined.
2148#
2149# Notes:  This interface is deprecated, and it is strongly recommended that you
2150#         avoid using it.  For changing block devices, use
2151#         blockdev-change-medium; for changing VNC parameters, use
2152#         change-vnc-password.
2153#
2154# Since: 0.14.0
2155##
2156{ 'command': 'change',
2157  'data': {'device': 'str', 'target': 'str', '*arg': 'str'} }
2158
2159##
2160# @ObjectTypeInfo:
2161#
2162# This structure describes a search result from @qom-list-types
2163#
2164# @name: the type name found in the search
2165#
2166# Since: 1.1
2167#
2168# Notes: This command is experimental and may change syntax in future releases.
2169##
2170{ 'struct': 'ObjectTypeInfo',
2171  'data': { 'name': 'str' } }
2172
2173##
2174# @qom-list-types:
2175#
2176# This command will return a list of types given search parameters
2177#
2178# @implements: if specified, only return types that implement this type name
2179#
2180# @abstract: if true, include abstract types in the results
2181#
2182# Returns: a list of @ObjectTypeInfo or an empty list if no results are found
2183#
2184# Since: 1.1
2185##
2186{ 'command': 'qom-list-types',
2187  'data': { '*implements': 'str', '*abstract': 'bool' },
2188  'returns': [ 'ObjectTypeInfo' ] }
2189
2190##
2191# @DevicePropertyInfo:
2192#
2193# Information about device properties.
2194#
2195# @name: the name of the property
2196# @type: the typename of the property
2197# @description: #optional if specified, the description of the property.
2198#               (since 2.2)
2199#
2200# Since: 1.2
2201##
2202{ 'struct': 'DevicePropertyInfo',
2203  'data': { 'name': 'str', 'type': 'str', '*description': 'str' } }
2204
2205##
2206# @device-list-properties:
2207#
2208# List properties associated with a device.
2209#
2210# @typename: the type name of a device
2211#
2212# Returns: a list of DevicePropertyInfo describing a devices properties
2213#
2214# Since: 1.2
2215##
2216{ 'command': 'device-list-properties',
2217  'data': { 'typename': 'str'},
2218  'returns': [ 'DevicePropertyInfo' ] }
2219
2220##
2221# @migrate:
2222#
2223# Migrates the current running guest to another Virtual Machine.
2224#
2225# @uri: the Uniform Resource Identifier of the destination VM
2226#
2227# @blk: #optional do block migration (full disk copy)
2228#
2229# @inc: #optional incremental disk copy migration
2230#
2231# @detach: this argument exists only for compatibility reasons and
2232#          is ignored by QEMU
2233#
2234# Returns: nothing on success
2235#
2236# Since: 0.14.0
2237##
2238{ 'command': 'migrate',
2239  'data': {'uri': 'str', '*blk': 'bool', '*inc': 'bool', '*detach': 'bool' } }
2240
2241##
2242# @migrate-incoming:
2243#
2244# Start an incoming migration, the qemu must have been started
2245# with -incoming defer
2246#
2247# @uri: The Uniform Resource Identifier identifying the source or
2248#       address to listen on
2249#
2250# Returns: nothing on success
2251#
2252# Since: 2.3
2253# Note: It's a bad idea to use a string for the uri, but it needs to stay
2254# compatible with -incoming and the format of the uri is already exposed
2255# above libvirt
2256##
2257{ 'command': 'migrate-incoming', 'data': {'uri': 'str' } }
2258
2259##
2260# @xen-save-devices-state:
2261#
2262# Save the state of all devices to file. The RAM and the block devices
2263# of the VM are not saved by this command.
2264#
2265# @filename: the file to save the state of the devices to as binary
2266# data. See xen-save-devices-state.txt for a description of the binary
2267# format.
2268#
2269# Returns: Nothing on success
2270#
2271# Since: 1.1
2272##
2273{ 'command': 'xen-save-devices-state', 'data': {'filename': 'str'} }
2274
2275##
2276# @xen-set-global-dirty-log:
2277#
2278# Enable or disable the global dirty log mode.
2279#
2280# @enable: true to enable, false to disable.
2281#
2282# Returns: nothing
2283#
2284# Since: 1.3
2285##
2286{ 'command': 'xen-set-global-dirty-log', 'data': { 'enable': 'bool' } }
2287
2288##
2289# @device_add:
2290#
2291# @driver: the name of the new device's driver
2292#
2293# @bus: #optional the device's parent bus (device tree path)
2294#
2295# @id: the device's ID, must be unique
2296#
2297# Additional arguments depend on the type.
2298#
2299# Add a device.
2300#
2301# Notes:
2302# 1. For detailed information about this command, please refer to the
2303#    'docs/qdev-device-use.txt' file.
2304#
2305# 2. It's possible to list device properties by running QEMU with the
2306#    "-device DEVICE,help" command-line argument, where DEVICE is the
2307#    device's name
2308#
2309# Example:
2310#
2311# -> { "execute": "device_add",
2312#      "arguments": { "driver": "e1000", "id": "net1",
2313#                     "bus": "pci.0",
2314#                     "mac": "52:54:00:12:34:56" } }
2315# <- { "return": {} }
2316#
2317# TODO This command effectively bypasses QAPI completely due to its
2318# "additional arguments" business.  It shouldn't have been added to
2319# the schema in this form.  It should be qapified properly, or
2320# replaced by a properly qapified command.
2321#
2322# Since: 0.13
2323##
2324{ 'command': 'device_add',
2325  'data': {'driver': 'str', 'id': 'str'},
2326  'gen': false } # so we can get the additional arguments
2327
2328##
2329# @device_del:
2330#
2331# Remove a device from a guest
2332#
2333# @id: the name or QOM path of the device
2334#
2335# Returns: Nothing on success
2336#          If @id is not a valid device, DeviceNotFound
2337#
2338# Notes: When this command completes, the device may not be removed from the
2339#        guest.  Hot removal is an operation that requires guest cooperation.
2340#        This command merely requests that the guest begin the hot removal
2341#        process.  Completion of the device removal process is signaled with a
2342#        DEVICE_DELETED event. Guest reset will automatically complete removal
2343#        for all devices.
2344#
2345# Since: 0.14.0
2346##
2347{ 'command': 'device_del', 'data': {'id': 'str'} }
2348
2349##
2350# @DumpGuestMemoryFormat:
2351#
2352# An enumeration of guest-memory-dump's format.
2353#
2354# @elf: elf format
2355#
2356# @kdump-zlib: kdump-compressed format with zlib-compressed
2357#
2358# @kdump-lzo: kdump-compressed format with lzo-compressed
2359#
2360# @kdump-snappy: kdump-compressed format with snappy-compressed
2361#
2362# Since: 2.0
2363##
2364{ 'enum': 'DumpGuestMemoryFormat',
2365  'data': [ 'elf', 'kdump-zlib', 'kdump-lzo', 'kdump-snappy' ] }
2366
2367##
2368# @dump-guest-memory:
2369#
2370# Dump guest's memory to vmcore. It is a synchronous operation that can take
2371# very long depending on the amount of guest memory.
2372#
2373# @paging: if true, do paging to get guest's memory mapping. This allows
2374#          using gdb to process the core file.
2375#
2376#          IMPORTANT: this option can make QEMU allocate several gigabytes
2377#                     of RAM. This can happen for a large guest, or a
2378#                     malicious guest pretending to be large.
2379#
2380#          Also, paging=true has the following limitations:
2381#
2382#             1. The guest may be in a catastrophic state or can have corrupted
2383#                memory, which cannot be trusted
2384#             2. The guest can be in real-mode even if paging is enabled. For
2385#                example, the guest uses ACPI to sleep, and ACPI sleep state
2386#                goes in real-mode
2387#             3. Currently only supported on i386 and x86_64.
2388#
2389# @protocol: the filename or file descriptor of the vmcore. The supported
2390#            protocols are:
2391#
2392#            1. file: the protocol starts with "file:", and the following
2393#               string is the file's path.
2394#            2. fd: the protocol starts with "fd:", and the following string
2395#               is the fd's name.
2396#
2397# @detach: #optional if true, QMP will return immediately rather than
2398#          waiting for the dump to finish. The user can track progress
2399#          using "query-dump". (since 2.6).
2400#
2401# @begin: #optional if specified, the starting physical address.
2402#
2403# @length: #optional if specified, the memory size, in bytes. If you don't
2404#          want to dump all guest's memory, please specify the start @begin
2405#          and @length
2406#
2407# @format: #optional if specified, the format of guest memory dump. But non-elf
2408#          format is conflict with paging and filter, ie. @paging, @begin and
2409#          @length is not allowed to be specified with non-elf @format at the
2410#          same time (since 2.0)
2411#
2412# Returns: nothing on success
2413#
2414# Since: 1.2
2415##
2416{ 'command': 'dump-guest-memory',
2417  'data': { 'paging': 'bool', 'protocol': 'str', '*detach': 'bool',
2418            '*begin': 'int', '*length': 'int',
2419            '*format': 'DumpGuestMemoryFormat'} }
2420
2421##
2422# @DumpStatus:
2423#
2424# Describe the status of a long-running background guest memory dump.
2425#
2426# @none: no dump-guest-memory has started yet.
2427#
2428# @active: there is one dump running in background.
2429#
2430# @completed: the last dump has finished successfully.
2431#
2432# @failed: the last dump has failed.
2433#
2434# Since: 2.6
2435##
2436{ 'enum': 'DumpStatus',
2437  'data': [ 'none', 'active', 'completed', 'failed' ] }
2438
2439##
2440# @DumpQueryResult:
2441#
2442# The result format for 'query-dump'.
2443#
2444# @status: enum of @DumpStatus, which shows current dump status
2445#
2446# @completed: bytes written in latest dump (uncompressed)
2447#
2448# @total: total bytes to be written in latest dump (uncompressed)
2449#
2450# Since: 2.6
2451##
2452{ 'struct': 'DumpQueryResult',
2453  'data': { 'status': 'DumpStatus',
2454            'completed': 'int',
2455            'total': 'int' } }
2456
2457##
2458# @query-dump:
2459#
2460# Query latest dump status.
2461#
2462# Returns: A @DumpStatus object showing the dump status.
2463#
2464# Since: 2.6
2465##
2466{ 'command': 'query-dump', 'returns': 'DumpQueryResult' }
2467
2468##
2469# @DumpGuestMemoryCapability:
2470#
2471# A list of the available formats for dump-guest-memory
2472#
2473# Since: 2.0
2474##
2475{ 'struct': 'DumpGuestMemoryCapability',
2476  'data': {
2477      'formats': ['DumpGuestMemoryFormat'] } }
2478
2479##
2480# @query-dump-guest-memory-capability:
2481#
2482# Returns the available formats for dump-guest-memory
2483#
2484# Returns:  A @DumpGuestMemoryCapability object listing available formats for
2485#           dump-guest-memory
2486#
2487# Since: 2.0
2488##
2489{ 'command': 'query-dump-guest-memory-capability',
2490  'returns': 'DumpGuestMemoryCapability' }
2491
2492##
2493# @dump-skeys:
2494#
2495# Dump guest's storage keys
2496#
2497# @filename: the path to the file to dump to
2498#
2499# This command is only supported on s390 architecture.
2500#
2501# Since: 2.5
2502##
2503{ 'command': 'dump-skeys',
2504  'data': { 'filename': 'str' } }
2505
2506##
2507# @netdev_add:
2508#
2509# Add a network backend.
2510#
2511# @type: the type of network backend.  Current valid values are 'user', 'tap',
2512#        'vde', 'socket', 'dump' and 'bridge'
2513#
2514# @id: the name of the new network backend
2515#
2516# Additional arguments depend on the type.
2517#
2518# TODO This command effectively bypasses QAPI completely due to its
2519# "additional arguments" business.  It shouldn't have been added to
2520# the schema in this form.  It should be qapified properly, or
2521# replaced by a properly qapified command.
2522#
2523# Since: 0.14.0
2524#
2525# Returns: Nothing on success
2526#          If @type is not a valid network backend, DeviceNotFound
2527##
2528{ 'command': 'netdev_add',
2529  'data': {'type': 'str', 'id': 'str'},
2530  'gen': false }                # so we can get the additional arguments
2531
2532##
2533# @netdev_del:
2534#
2535# Remove a network backend.
2536#
2537# @id: the name of the network backend to remove
2538#
2539# Returns: Nothing on success
2540#          If @id is not a valid network backend, DeviceNotFound
2541#
2542# Since: 0.14.0
2543##
2544{ 'command': 'netdev_del', 'data': {'id': 'str'} }
2545
2546##
2547# @object-add:
2548#
2549# Create a QOM object.
2550#
2551# @qom-type: the class name for the object to be created
2552#
2553# @id: the name of the new object
2554#
2555# @props: #optional a dictionary of properties to be passed to the backend
2556#
2557# Returns: Nothing on success
2558#          Error if @qom-type is not a valid class name
2559#
2560# Since: 2.0
2561##
2562{ 'command': 'object-add',
2563  'data': {'qom-type': 'str', 'id': 'str', '*props': 'any'} }
2564
2565##
2566# @object-del:
2567#
2568# Remove a QOM object.
2569#
2570# @id: the name of the QOM object to remove
2571#
2572# Returns: Nothing on success
2573#          Error if @id is not a valid id for a QOM object
2574#
2575# Since: 2.0
2576##
2577{ 'command': 'object-del', 'data': {'id': 'str'} }
2578
2579##
2580# @NetdevNoneOptions:
2581#
2582# Use it alone to have zero network devices.
2583#
2584# Since: 1.2
2585##
2586{ 'struct': 'NetdevNoneOptions',
2587  'data': { } }
2588
2589##
2590# @NetLegacyNicOptions:
2591#
2592# Create a new Network Interface Card.
2593#
2594# @netdev: #optional id of -netdev to connect to
2595#
2596# @macaddr: #optional MAC address
2597#
2598# @model: #optional device model (e1000, rtl8139, virtio etc.)
2599#
2600# @addr: #optional PCI device address
2601#
2602# @vectors: #optional number of MSI-x vectors, 0 to disable MSI-X
2603#
2604# Since: 1.2
2605##
2606{ 'struct': 'NetLegacyNicOptions',
2607  'data': {
2608    '*netdev':  'str',
2609    '*macaddr': 'str',
2610    '*model':   'str',
2611    '*addr':    'str',
2612    '*vectors': 'uint32' } }
2613
2614##
2615# @String:
2616#
2617# A fat type wrapping 'str', to be embedded in lists.
2618#
2619# Since: 1.2
2620##
2621{ 'struct': 'String',
2622  'data': {
2623    'str': 'str' } }
2624
2625##
2626# @NetdevUserOptions:
2627#
2628# Use the user mode network stack which requires no administrator privilege to
2629# run.
2630#
2631# @hostname: #optional client hostname reported by the builtin DHCP server
2632#
2633# @restrict: #optional isolate the guest from the host
2634#
2635# @ipv4: #optional whether to support IPv4, default true for enabled
2636#        (since 2.6)
2637#
2638# @ipv6: #optional whether to support IPv6, default true for enabled
2639#        (since 2.6)
2640#
2641# @ip: #optional legacy parameter, use net= instead
2642#
2643# @net: #optional IP network address that the guest will see, in the
2644#       form addr[/netmask] The netmask is optional, and can be
2645#       either in the form a.b.c.d or as a number of valid top-most
2646#       bits. Default is 10.0.2.0/24.
2647#
2648# @host: #optional guest-visible address of the host
2649#
2650# @tftp: #optional root directory of the built-in TFTP server
2651#
2652# @bootfile: #optional BOOTP filename, for use with tftp=
2653#
2654# @dhcpstart: #optional the first of the 16 IPs the built-in DHCP server can
2655#             assign
2656#
2657# @dns: #optional guest-visible address of the virtual nameserver
2658#
2659# @dnssearch: #optional list of DNS suffixes to search, passed as DHCP option
2660#             to the guest
2661#
2662# @ipv6-prefix: #optional IPv6 network prefix (default is fec0::) (since
2663#               2.6). The network prefix is given in the usual
2664#               hexadecimal IPv6 address notation.
2665#
2666# @ipv6-prefixlen: #optional IPv6 network prefix length (default is 64)
2667#                  (since 2.6)
2668#
2669# @ipv6-host: #optional guest-visible IPv6 address of the host (since 2.6)
2670#
2671# @ipv6-dns: #optional guest-visible IPv6 address of the virtual
2672#            nameserver (since 2.6)
2673#
2674# @smb: #optional root directory of the built-in SMB server
2675#
2676# @smbserver: #optional IP address of the built-in SMB server
2677#
2678# @hostfwd: #optional redirect incoming TCP or UDP host connections to guest
2679#           endpoints
2680#
2681# @guestfwd: #optional forward guest TCP connections
2682#
2683# Since: 1.2
2684##
2685{ 'struct': 'NetdevUserOptions',
2686  'data': {
2687    '*hostname':  'str',
2688    '*restrict':  'bool',
2689    '*ipv4':      'bool',
2690    '*ipv6':      'bool',
2691    '*ip':        'str',
2692    '*net':       'str',
2693    '*host':      'str',
2694    '*tftp':      'str',
2695    '*bootfile':  'str',
2696    '*dhcpstart': 'str',
2697    '*dns':       'str',
2698    '*dnssearch': ['String'],
2699    '*ipv6-prefix':      'str',
2700    '*ipv6-prefixlen':   'int',
2701    '*ipv6-host':        'str',
2702    '*ipv6-dns':         'str',
2703    '*smb':       'str',
2704    '*smbserver': 'str',
2705    '*hostfwd':   ['String'],
2706    '*guestfwd':  ['String'] } }
2707
2708##
2709# @NetdevTapOptions:
2710#
2711# Connect the host TAP network interface name to the VLAN.
2712#
2713# @ifname: #optional interface name
2714#
2715# @fd: #optional file descriptor of an already opened tap
2716#
2717# @fds: #optional multiple file descriptors of already opened multiqueue capable
2718# tap
2719#
2720# @script: #optional script to initialize the interface
2721#
2722# @downscript: #optional script to shut down the interface
2723#
2724# @br: #optional bridge name (since 2.8)
2725#
2726# @helper: #optional command to execute to configure bridge
2727#
2728# @sndbuf: #optional send buffer limit. Understands [TGMKkb] suffixes.
2729#
2730# @vnet_hdr: #optional enable the IFF_VNET_HDR flag on the tap interface
2731#
2732# @vhost: #optional enable vhost-net network accelerator
2733#
2734# @vhostfd: #optional file descriptor of an already opened vhost net device
2735#
2736# @vhostfds: #optional file descriptors of multiple already opened vhost net
2737# devices
2738#
2739# @vhostforce: #optional vhost on for non-MSIX virtio guests
2740#
2741# @queues: #optional number of queues to be created for multiqueue capable tap
2742#
2743# @poll-us: #optional maximum number of microseconds that could
2744# be spent on busy polling for tap (since 2.7)
2745#
2746# Since: 1.2
2747##
2748{ 'struct': 'NetdevTapOptions',
2749  'data': {
2750    '*ifname':     'str',
2751    '*fd':         'str',
2752    '*fds':        'str',
2753    '*script':     'str',
2754    '*downscript': 'str',
2755    '*br':         'str',
2756    '*helper':     'str',
2757    '*sndbuf':     'size',
2758    '*vnet_hdr':   'bool',
2759    '*vhost':      'bool',
2760    '*vhostfd':    'str',
2761    '*vhostfds':   'str',
2762    '*vhostforce': 'bool',
2763    '*queues':     'uint32',
2764    '*poll-us':    'uint32'} }
2765
2766##
2767# @NetdevSocketOptions:
2768#
2769# Connect the VLAN to a remote VLAN in another QEMU virtual machine using a TCP
2770# socket connection.
2771#
2772# @fd: #optional file descriptor of an already opened socket
2773#
2774# @listen: #optional port number, and optional hostname, to listen on
2775#
2776# @connect: #optional port number, and optional hostname, to connect to
2777#
2778# @mcast: #optional UDP multicast address and port number
2779#
2780# @localaddr: #optional source address and port for multicast and udp packets
2781#
2782# @udp: #optional UDP unicast address and port number
2783#
2784# Since: 1.2
2785##
2786{ 'struct': 'NetdevSocketOptions',
2787  'data': {
2788    '*fd':        'str',
2789    '*listen':    'str',
2790    '*connect':   'str',
2791    '*mcast':     'str',
2792    '*localaddr': 'str',
2793    '*udp':       'str' } }
2794
2795##
2796# @NetdevL2TPv3Options:
2797#
2798# Connect the VLAN to Ethernet over L2TPv3 Static tunnel
2799#
2800# @src: source address
2801#
2802# @dst: destination address
2803#
2804# @srcport: #optional source port - mandatory for udp, optional for ip
2805#
2806# @dstport: #optional destination port - mandatory for udp, optional for ip
2807#
2808# @ipv6: #optional - force the use of ipv6
2809#
2810# @udp: #optional - use the udp version of l2tpv3 encapsulation
2811#
2812# @cookie64: #optional - use 64 bit coookies
2813#
2814# @counter: #optional have sequence counter
2815#
2816# @pincounter: #optional pin sequence counter to zero -
2817#              workaround for buggy implementations or
2818#              networks with packet reorder
2819#
2820# @txcookie: #optional 32 or 64 bit transmit cookie
2821#
2822# @rxcookie: #optional 32 or 64 bit receive cookie
2823#
2824# @txsession: 32 bit transmit session
2825#
2826# @rxsession: #optional 32 bit receive session - if not specified
2827#             set to the same value as transmit
2828#
2829# @offset: #optional additional offset - allows the insertion of
2830#          additional application-specific data before the packet payload
2831#
2832# Since: 2.1
2833##
2834{ 'struct': 'NetdevL2TPv3Options',
2835  'data': {
2836    'src':          'str',
2837    'dst':          'str',
2838    '*srcport':     'str',
2839    '*dstport':     'str',
2840    '*ipv6':        'bool',
2841    '*udp':         'bool',
2842    '*cookie64':    'bool',
2843    '*counter':     'bool',
2844    '*pincounter':  'bool',
2845    '*txcookie':    'uint64',
2846    '*rxcookie':    'uint64',
2847    'txsession':    'uint32',
2848    '*rxsession':   'uint32',
2849    '*offset':      'uint32' } }
2850
2851##
2852# @NetdevVdeOptions:
2853#
2854# Connect the VLAN to a vde switch running on the host.
2855#
2856# @sock: #optional socket path
2857#
2858# @port: #optional port number
2859#
2860# @group: #optional group owner of socket
2861#
2862# @mode: #optional permissions for socket
2863#
2864# Since: 1.2
2865##
2866{ 'struct': 'NetdevVdeOptions',
2867  'data': {
2868    '*sock':  'str',
2869    '*port':  'uint16',
2870    '*group': 'str',
2871    '*mode':  'uint16' } }
2872
2873##
2874# @NetdevDumpOptions:
2875#
2876# Dump VLAN network traffic to a file.
2877#
2878# @len: #optional per-packet size limit (64k default). Understands [TGMKkb]
2879# suffixes.
2880#
2881# @file: #optional dump file path (default is qemu-vlan0.pcap)
2882#
2883# Since: 1.2
2884##
2885{ 'struct': 'NetdevDumpOptions',
2886  'data': {
2887    '*len':  'size',
2888    '*file': 'str' } }
2889
2890##
2891# @NetdevBridgeOptions:
2892#
2893# Connect a host TAP network interface to a host bridge device.
2894#
2895# @br: #optional bridge name
2896#
2897# @helper: #optional command to execute to configure bridge
2898#
2899# Since: 1.2
2900##
2901{ 'struct': 'NetdevBridgeOptions',
2902  'data': {
2903    '*br':     'str',
2904    '*helper': 'str' } }
2905
2906##
2907# @NetdevHubPortOptions:
2908#
2909# Connect two or more net clients through a software hub.
2910#
2911# @hubid: hub identifier number
2912#
2913# Since: 1.2
2914##
2915{ 'struct': 'NetdevHubPortOptions',
2916  'data': {
2917    'hubid':     'int32' } }
2918
2919##
2920# @NetdevNetmapOptions:
2921#
2922# Connect a client to a netmap-enabled NIC or to a VALE switch port
2923#
2924# @ifname: Either the name of an existing network interface supported by
2925#          netmap, or the name of a VALE port (created on the fly).
2926#          A VALE port name is in the form 'valeXXX:YYY', where XXX and
2927#          YYY are non-negative integers. XXX identifies a switch and
2928#          YYY identifies a port of the switch. VALE ports having the
2929#          same XXX are therefore connected to the same switch.
2930#
2931# @devname: #optional path of the netmap device (default: '/dev/netmap').
2932#
2933# Since: 2.0
2934##
2935{ 'struct': 'NetdevNetmapOptions',
2936  'data': {
2937    'ifname':     'str',
2938    '*devname':    'str' } }
2939
2940##
2941# @NetdevVhostUserOptions:
2942#
2943# Vhost-user network backend
2944#
2945# @chardev: name of a unix socket chardev
2946#
2947# @vhostforce: #optional vhost on for non-MSIX virtio guests (default: false).
2948#
2949# @queues: #optional number of queues to be created for multiqueue vhost-user
2950#          (default: 1) (Since 2.5)
2951#
2952# Since: 2.1
2953##
2954{ 'struct': 'NetdevVhostUserOptions',
2955  'data': {
2956    'chardev':        'str',
2957    '*vhostforce':    'bool',
2958    '*queues':        'int' } }
2959
2960##
2961# @NetClientDriver:
2962#
2963# Available netdev drivers.
2964#
2965# Since: 2.7
2966##
2967{ 'enum': 'NetClientDriver',
2968  'data': [ 'none', 'nic', 'user', 'tap', 'l2tpv3', 'socket', 'vde', 'dump',
2969            'bridge', 'hubport', 'netmap', 'vhost-user' ] }
2970
2971##
2972# @Netdev:
2973#
2974# Captures the configuration of a network device.
2975#
2976# @id: identifier for monitor commands.
2977#
2978# @type: Specify the driver used for interpreting remaining arguments.
2979#
2980# Since: 1.2
2981#
2982# 'l2tpv3' - since 2.1
2983##
2984{ 'union': 'Netdev',
2985  'base': { 'id': 'str', 'type': 'NetClientDriver' },
2986  'discriminator': 'type',
2987  'data': {
2988    'none':     'NetdevNoneOptions',
2989    'nic':      'NetLegacyNicOptions',
2990    'user':     'NetdevUserOptions',
2991    'tap':      'NetdevTapOptions',
2992    'l2tpv3':   'NetdevL2TPv3Options',
2993    'socket':   'NetdevSocketOptions',
2994    'vde':      'NetdevVdeOptions',
2995    'dump':     'NetdevDumpOptions',
2996    'bridge':   'NetdevBridgeOptions',
2997    'hubport':  'NetdevHubPortOptions',
2998    'netmap':   'NetdevNetmapOptions',
2999    'vhost-user': 'NetdevVhostUserOptions' } }
3000
3001##
3002# @NetLegacy:
3003#
3004# Captures the configuration of a network device; legacy.
3005#
3006# @vlan: #optional vlan number
3007#
3008# @id: #optional identifier for monitor commands
3009#
3010# @name: #optional identifier for monitor commands, ignored if @id is present
3011#
3012# @opts: device type specific properties (legacy)
3013#
3014# Since: 1.2
3015##
3016{ 'struct': 'NetLegacy',
3017  'data': {
3018    '*vlan': 'int32',
3019    '*id':   'str',
3020    '*name': 'str',
3021    'opts':  'NetLegacyOptions' } }
3022
3023##
3024# @NetLegacyOptions:
3025#
3026# Like Netdev, but for use only by the legacy command line options
3027#
3028# Since: 1.2
3029##
3030{ 'union': 'NetLegacyOptions',
3031  'data': {
3032    'none':     'NetdevNoneOptions',
3033    'nic':      'NetLegacyNicOptions',
3034    'user':     'NetdevUserOptions',
3035    'tap':      'NetdevTapOptions',
3036    'l2tpv3':   'NetdevL2TPv3Options',
3037    'socket':   'NetdevSocketOptions',
3038    'vde':      'NetdevVdeOptions',
3039    'dump':     'NetdevDumpOptions',
3040    'bridge':   'NetdevBridgeOptions',
3041    'netmap':   'NetdevNetmapOptions',
3042    'vhost-user': 'NetdevVhostUserOptions' } }
3043
3044##
3045# @NetFilterDirection:
3046#
3047# Indicates whether a netfilter is attached to a netdev's transmit queue or
3048# receive queue or both.
3049#
3050# @all: the filter is attached both to the receive and the transmit
3051#       queue of the netdev (default).
3052#
3053# @rx: the filter is attached to the receive queue of the netdev,
3054#      where it will receive packets sent to the netdev.
3055#
3056# @tx: the filter is attached to the transmit queue of the netdev,
3057#      where it will receive packets sent by the netdev.
3058#
3059# Since: 2.5
3060##
3061{ 'enum': 'NetFilterDirection',
3062  'data': [ 'all', 'rx', 'tx' ] }
3063
3064##
3065# @InetSocketAddress:
3066#
3067# Captures a socket address or address range in the Internet namespace.
3068#
3069# @host: host part of the address
3070#
3071# @port: port part of the address, or lowest port if @to is present
3072#
3073# @to: highest port to try
3074#
3075# @ipv4: whether to accept IPv4 addresses, default try both IPv4 and IPv6
3076#        #optional
3077#
3078# @ipv6: whether to accept IPv6 addresses, default try both IPv4 and IPv6
3079#        #optional
3080#
3081# Since: 1.3
3082##
3083{ 'struct': 'InetSocketAddress',
3084  'data': {
3085    'host': 'str',
3086    'port': 'str',
3087    '*to': 'uint16',
3088    '*ipv4': 'bool',
3089    '*ipv6': 'bool' } }
3090
3091##
3092# @UnixSocketAddress:
3093#
3094# Captures a socket address in the local ("Unix socket") namespace.
3095#
3096# @path: filesystem path to use
3097#
3098# Since: 1.3
3099##
3100{ 'struct': 'UnixSocketAddress',
3101  'data': {
3102    'path': 'str' } }
3103
3104##
3105# @VsockSocketAddress:
3106#
3107# Captures a socket address in the vsock namespace.
3108#
3109# @cid: unique host identifier
3110# @port: port
3111#
3112# Note: string types are used to allow for possible future hostname or
3113# service resolution support.
3114#
3115# Since: 2.8
3116##
3117{ 'struct': 'VsockSocketAddress',
3118  'data': {
3119    'cid': 'str',
3120    'port': 'str' } }
3121
3122##
3123# @SocketAddress:
3124#
3125# Captures the address of a socket, which could also be a named file descriptor
3126#
3127# Since: 1.3
3128##
3129{ 'union': 'SocketAddress',
3130  'data': {
3131    'inet': 'InetSocketAddress',
3132    'unix': 'UnixSocketAddress',
3133    'vsock': 'VsockSocketAddress',
3134    'fd': 'String' } }
3135
3136##
3137# @getfd:
3138#
3139# Receive a file descriptor via SCM rights and assign it a name
3140#
3141# @fdname: file descriptor name
3142#
3143# Returns: Nothing on success
3144#
3145# Since: 0.14.0
3146#
3147# Notes: If @fdname already exists, the file descriptor assigned to
3148#        it will be closed and replaced by the received file
3149#        descriptor.
3150#        The 'closefd' command can be used to explicitly close the
3151#        file descriptor when it is no longer needed.
3152##
3153{ 'command': 'getfd', 'data': {'fdname': 'str'} }
3154
3155##
3156# @closefd:
3157#
3158# Close a file descriptor previously passed via SCM rights
3159#
3160# @fdname: file descriptor name
3161#
3162# Returns: Nothing on success
3163#
3164# Since: 0.14.0
3165##
3166{ 'command': 'closefd', 'data': {'fdname': 'str'} }
3167
3168##
3169# @MachineInfo:
3170#
3171# Information describing a machine.
3172#
3173# @name: the name of the machine
3174#
3175# @alias: #optional an alias for the machine name
3176#
3177# @is-default: #optional whether the machine is default
3178#
3179# @cpu-max: maximum number of CPUs supported by the machine type
3180#           (since 1.5.0)
3181#
3182# @hotpluggable-cpus: cpu hotplug via -device is supported (since 2.7.0)
3183#
3184# Since: 1.2.0
3185##
3186{ 'struct': 'MachineInfo',
3187  'data': { 'name': 'str', '*alias': 'str',
3188            '*is-default': 'bool', 'cpu-max': 'int',
3189            'hotpluggable-cpus': 'bool'} }
3190
3191##
3192# @query-machines:
3193#
3194# Return a list of supported machines
3195#
3196# Returns: a list of MachineInfo
3197#
3198# Since: 1.2.0
3199##
3200{ 'command': 'query-machines', 'returns': ['MachineInfo'] }
3201
3202##
3203# @CpuDefinitionInfo:
3204#
3205# Virtual CPU definition.
3206#
3207# @name: the name of the CPU definition
3208#
3209# @migration-safe: #optional whether a CPU definition can be safely used for
3210#                  migration in combination with a QEMU compatibility machine
3211#                  when migrating between different QMU versions and between
3212#                  hosts with different sets of (hardware or software)
3213#                  capabilities. If not provided, information is not available
3214#                  and callers should not assume the CPU definition to be
3215#                  migration-safe. (since 2.8)
3216#
3217# @static: whether a CPU definition is static and will not change depending on
3218#          QEMU version, machine type, machine options and accelerator options.
3219#          A static model is always migration-safe. (since 2.8)
3220#
3221# @unavailable-features: #optional List of properties that prevent
3222#                        the CPU model from running in the current
3223#                        host. (since 2.8)
3224#
3225# @unavailable-features is a list of QOM property names that
3226# represent CPU model attributes that prevent the CPU from running.
3227# If the QOM property is read-only, that means there's no known
3228# way to make the CPU model run in the current host. Implementations
3229# that choose not to provide specific information return the
3230# property name "type".
3231# If the property is read-write, it means that it MAY be possible
3232# to run the CPU model in the current host if that property is
3233# changed. Management software can use it as hints to suggest or
3234# choose an alternative for the user, or just to generate meaningful
3235# error messages explaining why the CPU model can't be used.
3236# If @unavailable-features is an empty list, the CPU model is
3237# runnable using the current host and machine-type.
3238# If @unavailable-features is not present, runnability
3239# information for the CPU is not available.
3240#
3241# Since: 1.2.0
3242##
3243{ 'struct': 'CpuDefinitionInfo',
3244  'data': { 'name': 'str', '*migration-safe': 'bool', 'static': 'bool',
3245            '*unavailable-features': [ 'str' ] } }
3246
3247##
3248# @query-cpu-definitions:
3249#
3250# Return a list of supported virtual CPU definitions
3251#
3252# Returns: a list of CpuDefInfo
3253#
3254# Since: 1.2.0
3255##
3256{ 'command': 'query-cpu-definitions', 'returns': ['CpuDefinitionInfo'] }
3257
3258##
3259# @CpuModelInfo:
3260#
3261# Virtual CPU model.
3262#
3263# A CPU model consists of the name of a CPU definition, to which
3264# delta changes are applied (e.g. features added/removed). Most magic values
3265# that an architecture might require should be hidden behind the name.
3266# However, if required, architectures can expose relevant properties.
3267#
3268# @name: the name of the CPU definition the model is based on
3269# @props: #optional a dictionary of QOM properties to be applied
3270#
3271# Since: 2.8.0
3272##
3273{ 'struct': 'CpuModelInfo',
3274  'data': { 'name': 'str',
3275            '*props': 'any' } }
3276
3277##
3278# @CpuModelExpansionType:
3279#
3280# An enumeration of CPU model expansion types.
3281#
3282# @static: Expand to a static CPU model, a combination of a static base
3283#          model name and property delta changes. As the static base model will
3284#          never change, the expanded CPU model will be the same, independant of
3285#          independent of QEMU version, machine type, machine options, and
3286#          accelerator options. Therefore, the resulting model can be used by
3287#          tooling without having to specify a compatibility machine - e.g. when
3288#          displaying the "host" model. static CPU models are migration-safe.
3289#
3290# @full: Expand all properties. The produced model is not guaranteed to be
3291#        migration-safe, but allows tooling to get an insight and work with
3292#        model details.
3293#
3294# Since: 2.8.0
3295##
3296{ 'enum': 'CpuModelExpansionType',
3297  'data': [ 'static', 'full' ] }
3298
3299
3300##
3301# @CpuModelExpansionInfo:
3302#
3303# The result of a cpu model expansion.
3304#
3305# @model: the expanded CpuModelInfo.
3306#
3307# Since: 2.8.0
3308##
3309{ 'struct': 'CpuModelExpansionInfo',
3310  'data': { 'model': 'CpuModelInfo' } }
3311
3312
3313##
3314# @query-cpu-model-expansion:
3315#
3316# Expands a given CPU model (or a combination of CPU model + additional options)
3317# to different granularities, allowing tooling to get an understanding what a
3318# specific CPU model looks like in QEMU under a certain configuration.
3319#
3320# This interface can be used to query the "host" CPU model.
3321#
3322# The data returned by this command may be affected by:
3323#
3324# * QEMU version: CPU models may look different depending on the QEMU version.
3325#   (Except for CPU models reported as "static" in query-cpu-definitions.)
3326# * machine-type: CPU model  may look different depending on the machine-type.
3327#   (Except for CPU models reported as "static" in query-cpu-definitions.)
3328# * machine options (including accelerator): in some architectures, CPU models
3329#   may look different depending on machine and accelerator options. (Except for
3330#   CPU models reported as "static" in query-cpu-definitions.)
3331# * "-cpu" arguments and global properties: arguments to the -cpu option and
3332#   global properties may affect expansion of CPU models. Using
3333#   query-cpu-model-expansion while using these is not advised.
3334#
3335# Some architectures may not support all expansion types. s390x supports
3336# "full" and "static".
3337#
3338# Returns: a CpuModelExpansionInfo. Returns an error if expanding CPU models is
3339#          not supported, if the model cannot be expanded, if the model contains
3340#          an unknown CPU definition name, unknown properties or properties
3341#          with a wrong type. Also returns an error if an expansion type is
3342#          not supported.
3343#
3344# Since: 2.8.0
3345##
3346{ 'command': 'query-cpu-model-expansion',
3347  'data': { 'type': 'CpuModelExpansionType',
3348            'model': 'CpuModelInfo' },
3349  'returns': 'CpuModelExpansionInfo' }
3350
3351##
3352# @CpuModelCompareResult:
3353#
3354# An enumeration of CPU model comparation results. The result is usually
3355# calculated using e.g. CPU features or CPU generations.
3356#
3357# @incompatible: If model A is incompatible to model B, model A is not
3358#                guaranteed to run where model B runs and the other way around.
3359#
3360# @identical: If model A is identical to model B, model A is guaranteed to run
3361#             where model B runs and the other way around.
3362#
3363# @superset: If model A is a superset of model B, model B is guaranteed to run
3364#            where model A runs. There are no guarantees about the other way.
3365#
3366# @subset: If model A is a subset of model B, model A is guaranteed to run
3367#          where model B runs. There are no guarantees about the other way.
3368#
3369# Since: 2.8.0
3370##
3371{ 'enum': 'CpuModelCompareResult',
3372  'data': [ 'incompatible', 'identical', 'superset', 'subset' ] }
3373
3374##
3375# @CpuModelCompareInfo:
3376#
3377# The result of a CPU model comparison.
3378#
3379# @result: The result of the compare operation.
3380# @responsible-properties: List of properties that led to the comparison result
3381#                          not being identical.
3382#
3383# @responsible-properties is a list of QOM property names that led to
3384# both CPUs not being detected as identical. For identical models, this
3385# list is empty.
3386# If a QOM property is read-only, that means there's no known way to make the
3387# CPU models identical. If the special property name "type" is included, the
3388# models are by definition not identical and cannot be made identical.
3389#
3390# Since: 2.8.0
3391##
3392{ 'struct': 'CpuModelCompareInfo',
3393  'data': {'result': 'CpuModelCompareResult',
3394           'responsible-properties': ['str']
3395          }
3396}
3397
3398##
3399# @query-cpu-model-comparison:
3400#
3401# Compares two CPU models, returning how they compare in a specific
3402# configuration. The results indicates how both models compare regarding
3403# runnability. This result can be used by tooling to make decisions if a
3404# certain CPU model will run in a certain configuration or if a compatible
3405# CPU model has to be created by baselining.
3406#
3407# Usually, a CPU model is compared against the maximum possible CPU model
3408# of a certain configuration (e.g. the "host" model for KVM). If that CPU
3409# model is identical or a subset, it will run in that configuration.
3410#
3411# The result returned by this command may be affected by:
3412#
3413# * QEMU version: CPU models may look different depending on the QEMU version.
3414#   (Except for CPU models reported as "static" in query-cpu-definitions.)
3415# * machine-type: CPU model may look different depending on the machine-type.
3416#   (Except for CPU models reported as "static" in query-cpu-definitions.)
3417# * machine options (including accelerator): in some architectures, CPU models
3418#   may look different depending on machine and accelerator options. (Except for
3419#   CPU models reported as "static" in query-cpu-definitions.)
3420# * "-cpu" arguments and global properties: arguments to the -cpu option and
3421#   global properties may affect expansion of CPU models. Using
3422#   query-cpu-model-expansion while using these is not advised.
3423#
3424# Some architectures may not support comparing CPU models. s390x supports
3425# comparing CPU models.
3426#
3427# Returns: a CpuModelBaselineInfo. Returns an error if comparing CPU models is
3428#          not supported, if a model cannot be used, if a model contains
3429#          an unknown cpu definition name, unknown properties or properties
3430#          with wrong types.
3431#
3432# Since: 2.8.0
3433##
3434{ 'command': 'query-cpu-model-comparison',
3435  'data': { 'modela': 'CpuModelInfo', 'modelb': 'CpuModelInfo' },
3436  'returns': 'CpuModelCompareInfo' }
3437
3438##
3439# @CpuModelBaselineInfo:
3440#
3441# The result of a CPU model baseline.
3442#
3443# @model: the baselined CpuModelInfo.
3444#
3445# Since: 2.8.0
3446##
3447{ 'struct': 'CpuModelBaselineInfo',
3448  'data': { 'model': 'CpuModelInfo' } }
3449
3450##
3451# @query-cpu-model-baseline:
3452#
3453# Baseline two CPU models, creating a compatible third model. The created
3454# model will always be a static, migration-safe CPU model (see "static"
3455# CPU model expansion for details).
3456#
3457# This interface can be used by tooling to create a compatible CPU model out
3458# two CPU models. The created CPU model will be identical to or a subset of
3459# both CPU models when comparing them. Therefore, the created CPU model is
3460# guaranteed to run where the given CPU models run.
3461#
3462# The result returned by this command may be affected by:
3463#
3464# * QEMU version: CPU models may look different depending on the QEMU version.
3465#   (Except for CPU models reported as "static" in query-cpu-definitions.)
3466# * machine-type: CPU model may look different depending on the machine-type.
3467#   (Except for CPU models reported as "static" in query-cpu-definitions.)
3468# * machine options (including accelerator): in some architectures, CPU models
3469#   may look different depending on machine and accelerator options. (Except for
3470#   CPU models reported as "static" in query-cpu-definitions.)
3471# * "-cpu" arguments and global properties: arguments to the -cpu option and
3472#   global properties may affect expansion of CPU models. Using
3473#   query-cpu-model-expansion while using these is not advised.
3474#
3475# Some architectures may not support baselining CPU models. s390x supports
3476# baselining CPU models.
3477#
3478# Returns: a CpuModelBaselineInfo. Returns an error if baselining CPU models is
3479#          not supported, if a model cannot be used, if a model contains
3480#          an unknown cpu definition name, unknown properties or properties
3481#          with wrong types.
3482#
3483# Since: 2.8.0
3484##
3485{ 'command': 'query-cpu-model-baseline',
3486  'data': { 'modela': 'CpuModelInfo',
3487            'modelb': 'CpuModelInfo' },
3488  'returns': 'CpuModelBaselineInfo' }
3489
3490##
3491# @AddfdInfo:
3492#
3493# Information about a file descriptor that was added to an fd set.
3494#
3495# @fdset-id: The ID of the fd set that @fd was added to.
3496#
3497# @fd: The file descriptor that was received via SCM rights and
3498#      added to the fd set.
3499#
3500# Since: 1.2.0
3501##
3502{ 'struct': 'AddfdInfo', 'data': {'fdset-id': 'int', 'fd': 'int'} }
3503
3504##
3505# @add-fd:
3506#
3507# Add a file descriptor, that was passed via SCM rights, to an fd set.
3508#
3509# @fdset-id: #optional The ID of the fd set to add the file descriptor to.
3510#
3511# @opaque: #optional A free-form string that can be used to describe the fd.
3512#
3513# Returns: @AddfdInfo on success
3514#          If file descriptor was not received, FdNotSupplied
3515#          If @fdset-id is a negative value, InvalidParameterValue
3516#
3517# Notes: The list of fd sets is shared by all monitor connections.
3518#
3519#        If @fdset-id is not specified, a new fd set will be created.
3520#
3521# Since: 1.2.0
3522##
3523{ 'command': 'add-fd', 'data': {'*fdset-id': 'int', '*opaque': 'str'},
3524  'returns': 'AddfdInfo' }
3525
3526##
3527# @remove-fd:
3528#
3529# Remove a file descriptor from an fd set.
3530#
3531# @fdset-id: The ID of the fd set that the file descriptor belongs to.
3532#
3533# @fd: #optional The file descriptor that is to be removed.
3534#
3535# Returns: Nothing on success
3536#          If @fdset-id or @fd is not found, FdNotFound
3537#
3538# Since: 1.2.0
3539#
3540# Notes: The list of fd sets is shared by all monitor connections.
3541#
3542#        If @fd is not specified, all file descriptors in @fdset-id
3543#        will be removed.
3544##
3545{ 'command': 'remove-fd', 'data': {'fdset-id': 'int', '*fd': 'int'} }
3546
3547##
3548# @FdsetFdInfo:
3549#
3550# Information about a file descriptor that belongs to an fd set.
3551#
3552# @fd: The file descriptor value.
3553#
3554# @opaque: #optional A free-form string that can be used to describe the fd.
3555#
3556# Since: 1.2.0
3557##
3558{ 'struct': 'FdsetFdInfo',
3559  'data': {'fd': 'int', '*opaque': 'str'} }
3560
3561##
3562# @FdsetInfo:
3563#
3564# Information about an fd set.
3565#
3566# @fdset-id: The ID of the fd set.
3567#
3568# @fds: A list of file descriptors that belong to this fd set.
3569#
3570# Since: 1.2.0
3571##
3572{ 'struct': 'FdsetInfo',
3573  'data': {'fdset-id': 'int', 'fds': ['FdsetFdInfo']} }
3574
3575##
3576# @query-fdsets:
3577#
3578# Return information describing all fd sets.
3579#
3580# Returns: A list of @FdsetInfo
3581#
3582# Since: 1.2.0
3583#
3584# Note: The list of fd sets is shared by all monitor connections.
3585#
3586##
3587{ 'command': 'query-fdsets', 'returns': ['FdsetInfo'] }
3588
3589##
3590# @TargetInfo:
3591#
3592# Information describing the QEMU target.
3593#
3594# @arch: the target architecture (eg "x86_64", "i386", etc)
3595#
3596# Since: 1.2.0
3597##
3598{ 'struct': 'TargetInfo',
3599  'data': { 'arch': 'str' } }
3600
3601##
3602# @query-target:
3603#
3604# Return information about the target for this QEMU
3605#
3606# Returns: TargetInfo
3607#
3608# Since: 1.2.0
3609##
3610{ 'command': 'query-target', 'returns': 'TargetInfo' }
3611
3612##
3613# @QKeyCode:
3614#
3615# @unmapped: since 2.0
3616# @pause: since 2.0
3617# @ro: since 2.4
3618# @kp_comma: since 2.4
3619# @kp_equals: since 2.6
3620# @power: since 2.6
3621#
3622# An enumeration of key name.
3623#
3624# This is used by the send-key command.
3625#
3626# Since: 1.3.0
3627#
3628##
3629{ 'enum': 'QKeyCode',
3630  'data': [ 'unmapped',
3631            'shift', 'shift_r', 'alt', 'alt_r', 'altgr', 'altgr_r', 'ctrl',
3632            'ctrl_r', 'menu', 'esc', '1', '2', '3', '4', '5', '6', '7', '8',
3633            '9', '0', 'minus', 'equal', 'backspace', 'tab', 'q', 'w', 'e',
3634            'r', 't', 'y', 'u', 'i', 'o', 'p', 'bracket_left', 'bracket_right',
3635            'ret', 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'semicolon',
3636            'apostrophe', 'grave_accent', 'backslash', 'z', 'x', 'c', 'v', 'b',
3637            'n', 'm', 'comma', 'dot', 'slash', 'asterisk', 'spc', 'caps_lock',
3638            'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'f10',
3639            'num_lock', 'scroll_lock', 'kp_divide', 'kp_multiply',
3640            'kp_subtract', 'kp_add', 'kp_enter', 'kp_decimal', 'sysrq', 'kp_0',
3641            'kp_1', 'kp_2', 'kp_3', 'kp_4', 'kp_5', 'kp_6', 'kp_7', 'kp_8',
3642            'kp_9', 'less', 'f11', 'f12', 'print', 'home', 'pgup', 'pgdn', 'end',
3643            'left', 'up', 'down', 'right', 'insert', 'delete', 'stop', 'again',
3644            'props', 'undo', 'front', 'copy', 'open', 'paste', 'find', 'cut',
3645            'lf', 'help', 'meta_l', 'meta_r', 'compose', 'pause', 'ro',
3646            'kp_comma', 'kp_equals', 'power' ] }
3647
3648##
3649# @KeyValue:
3650#
3651# Represents a keyboard key.
3652#
3653# Since: 1.3.0
3654##
3655{ 'union': 'KeyValue',
3656  'data': {
3657    'number': 'int',
3658    'qcode': 'QKeyCode' } }
3659
3660##
3661# @send-key:
3662#
3663# Send keys to guest.
3664#
3665# @keys: An array of @KeyValue elements. All @KeyValues in this array are
3666#        simultaneously sent to the guest. A @KeyValue.number value is sent
3667#        directly to the guest, while @KeyValue.qcode must be a valid
3668#        @QKeyCode value
3669#
3670# @hold-time: #optional time to delay key up events, milliseconds. Defaults
3671#             to 100
3672#
3673# Returns: Nothing on success
3674#          If key is unknown or redundant, InvalidParameter
3675#
3676# Since: 1.3.0
3677#
3678##
3679{ 'command': 'send-key',
3680  'data': { 'keys': ['KeyValue'], '*hold-time': 'int' } }
3681
3682##
3683# @screendump:
3684#
3685# Write a PPM of the VGA screen to a file.
3686#
3687# @filename: the path of a new PPM file to store the image
3688#
3689# Returns: Nothing on success
3690#
3691# Since: 0.14.0
3692##
3693{ 'command': 'screendump', 'data': {'filename': 'str'} }
3694
3695
3696##
3697# @ChardevCommon:
3698#
3699# Configuration shared across all chardev backends
3700#
3701# @logfile: #optional The name of a logfile to save output
3702# @logappend: #optional true to append instead of truncate
3703#             (default to false to truncate)
3704#
3705# Since: 2.6
3706##
3707{ 'struct': 'ChardevCommon', 'data': { '*logfile': 'str',
3708                                       '*logappend': 'bool' } }
3709
3710##
3711# @ChardevFile:
3712#
3713# Configuration info for file chardevs.
3714#
3715# @in:  #optional The name of the input file
3716# @out: The name of the output file
3717# @append: #optional Open the file in append mode (default false to
3718#          truncate) (Since 2.6)
3719#
3720# Since: 1.4
3721##
3722{ 'struct': 'ChardevFile', 'data': { '*in' : 'str',
3723                                   'out' : 'str',
3724                                   '*append': 'bool' },
3725  'base': 'ChardevCommon' }
3726
3727##
3728# @ChardevHostdev:
3729#
3730# Configuration info for device and pipe chardevs.
3731#
3732# @device: The name of the special file for the device,
3733#          i.e. /dev/ttyS0 on Unix or COM1: on Windows
3734#
3735# Since: 1.4
3736##
3737{ 'struct': 'ChardevHostdev', 'data': { 'device' : 'str' },
3738  'base': 'ChardevCommon' }
3739
3740##
3741# @ChardevSocket:
3742#
3743# Configuration info for (stream) socket chardevs.
3744#
3745# @addr: socket address to listen on (server=true)
3746#        or connect to (server=false)
3747# @tls-creds: #optional the ID of the TLS credentials object (since 2.6)
3748# @server: #optional create server socket (default: true)
3749# @wait: #optional wait for incoming connection on server
3750#        sockets (default: false).
3751# @nodelay: #optional set TCP_NODELAY socket option (default: false)
3752# @telnet: #optional enable telnet protocol on server
3753#          sockets (default: false)
3754# @reconnect: #optional For a client socket, if a socket is disconnected,
3755#          then attempt a reconnect after the given number of seconds.
3756#          Setting this to zero disables this function. (default: 0)
3757#          (Since: 2.2)
3758#
3759# Since: 1.4
3760##
3761{ 'struct': 'ChardevSocket', 'data': { 'addr'       : 'SocketAddress',
3762                                     '*tls-creds'  : 'str',
3763                                     '*server'    : 'bool',
3764                                     '*wait'      : 'bool',
3765                                     '*nodelay'   : 'bool',
3766                                     '*telnet'    : 'bool',
3767                                     '*reconnect' : 'int' },
3768  'base': 'ChardevCommon' }
3769
3770##
3771# @ChardevUdp:
3772#
3773# Configuration info for datagram socket chardevs.
3774#
3775# @remote: remote address
3776# @local: #optional local address
3777#
3778# Since: 1.5
3779##
3780{ 'struct': 'ChardevUdp', 'data': { 'remote' : 'SocketAddress',
3781                                  '*local' : 'SocketAddress' },
3782  'base': 'ChardevCommon' }
3783
3784##
3785# @ChardevMux:
3786#
3787# Configuration info for mux chardevs.
3788#
3789# @chardev: name of the base chardev.
3790#
3791# Since: 1.5
3792##
3793{ 'struct': 'ChardevMux', 'data': { 'chardev' : 'str' },
3794  'base': 'ChardevCommon' }
3795
3796##
3797# @ChardevStdio:
3798#
3799# Configuration info for stdio chardevs.
3800#
3801# @signal: #optional Allow signals (such as SIGINT triggered by ^C)
3802#          be delivered to qemu.  Default: true in -nographic mode,
3803#          false otherwise.
3804#
3805# Since: 1.5
3806##
3807{ 'struct': 'ChardevStdio', 'data': { '*signal' : 'bool' },
3808  'base': 'ChardevCommon' }
3809
3810
3811##
3812# @ChardevSpiceChannel:
3813#
3814# Configuration info for spice vm channel chardevs.
3815#
3816# @type: kind of channel (for example vdagent).
3817#
3818# Since: 1.5
3819##
3820{ 'struct': 'ChardevSpiceChannel', 'data': { 'type'  : 'str' },
3821  'base': 'ChardevCommon' }
3822
3823##
3824# @ChardevSpicePort:
3825#
3826# Configuration info for spice port chardevs.
3827#
3828# @fqdn: name of the channel (see docs/spice-port-fqdn.txt)
3829#
3830# Since: 1.5
3831##
3832{ 'struct': 'ChardevSpicePort', 'data': { 'fqdn'  : 'str' },
3833  'base': 'ChardevCommon' }
3834
3835##
3836# @ChardevVC:
3837#
3838# Configuration info for virtual console chardevs.
3839#
3840# @width:  console width,  in pixels
3841# @height: console height, in pixels
3842# @cols:   console width,  in chars
3843# @rows:   console height, in chars
3844#
3845# Since: 1.5
3846##
3847{ 'struct': 'ChardevVC', 'data': { '*width'  : 'int',
3848                                 '*height' : 'int',
3849                                 '*cols'   : 'int',
3850                                 '*rows'   : 'int' },
3851  'base': 'ChardevCommon' }
3852
3853##
3854# @ChardevRingbuf:
3855#
3856# Configuration info for ring buffer chardevs.
3857#
3858# @size: #optional ring buffer size, must be power of two, default is 65536
3859#
3860# Since: 1.5
3861##
3862{ 'struct': 'ChardevRingbuf', 'data': { '*size'  : 'int' },
3863  'base': 'ChardevCommon' }
3864
3865##
3866# @ChardevBackend:
3867#
3868# Configuration info for the new chardev backend.
3869#
3870# Since: 1.4 (testdev since 2.2)
3871##
3872{ 'union': 'ChardevBackend', 'data': { 'file'   : 'ChardevFile',
3873                                       'serial' : 'ChardevHostdev',
3874                                       'parallel': 'ChardevHostdev',
3875                                       'pipe'   : 'ChardevHostdev',
3876                                       'socket' : 'ChardevSocket',
3877                                       'udp'    : 'ChardevUdp',
3878                                       'pty'    : 'ChardevCommon',
3879                                       'null'   : 'ChardevCommon',
3880                                       'mux'    : 'ChardevMux',
3881                                       'msmouse': 'ChardevCommon',
3882                                       'braille': 'ChardevCommon',
3883                                       'testdev': 'ChardevCommon',
3884                                       'stdio'  : 'ChardevStdio',
3885                                       'console': 'ChardevCommon',
3886                                       'spicevmc' : 'ChardevSpiceChannel',
3887                                       'spiceport' : 'ChardevSpicePort',
3888                                       'vc'     : 'ChardevVC',
3889                                       'ringbuf': 'ChardevRingbuf',
3890                                       # next one is just for compatibility
3891                                       'memory' : 'ChardevRingbuf' } }
3892
3893##
3894# @ChardevReturn:
3895#
3896# Return info about the chardev backend just created.
3897#
3898# @pty: #optional name of the slave pseudoterminal device, present if
3899#       and only if a chardev of type 'pty' was created
3900#
3901# Since: 1.4
3902##
3903{ 'struct' : 'ChardevReturn', 'data': { '*pty' : 'str' } }
3904
3905##
3906# @chardev-add:
3907#
3908# Add a character device backend
3909#
3910# @id: the chardev's ID, must be unique
3911# @backend: backend type and parameters
3912#
3913# Returns: ChardevReturn.
3914#
3915# Since: 1.4
3916##
3917{ 'command': 'chardev-add', 'data': {'id'      : 'str',
3918                                     'backend' : 'ChardevBackend' },
3919  'returns': 'ChardevReturn' }
3920
3921##
3922# @chardev-remove:
3923#
3924# Remove a character device backend
3925#
3926# @id: the chardev's ID, must exist and not be in use
3927#
3928# Returns: Nothing on success
3929#
3930# Since: 1.4
3931##
3932{ 'command': 'chardev-remove', 'data': {'id': 'str'} }
3933
3934##
3935# @TpmModel:
3936#
3937# An enumeration of TPM models
3938#
3939# @tpm-tis: TPM TIS model
3940#
3941# Since: 1.5
3942##
3943{ 'enum': 'TpmModel', 'data': [ 'tpm-tis' ] }
3944
3945##
3946# @query-tpm-models:
3947#
3948# Return a list of supported TPM models
3949#
3950# Returns: a list of TpmModel
3951#
3952# Since: 1.5
3953##
3954{ 'command': 'query-tpm-models', 'returns': ['TpmModel'] }
3955
3956##
3957# @TpmType:
3958#
3959# An enumeration of TPM types
3960#
3961# @passthrough: TPM passthrough type
3962#
3963# Since: 1.5
3964##
3965{ 'enum': 'TpmType', 'data': [ 'passthrough' ] }
3966
3967##
3968# @query-tpm-types:
3969#
3970# Return a list of supported TPM types
3971#
3972# Returns: a list of TpmType
3973#
3974# Since: 1.5
3975##
3976{ 'command': 'query-tpm-types', 'returns': ['TpmType'] }
3977
3978##
3979# @TPMPassthroughOptions:
3980#
3981# Information about the TPM passthrough type
3982#
3983# @path: #optional string describing the path used for accessing the TPM device
3984#
3985# @cancel-path: #optional string showing the TPM's sysfs cancel file
3986#               for cancellation of TPM commands while they are executing
3987#
3988# Since: 1.5
3989##
3990{ 'struct': 'TPMPassthroughOptions', 'data': { '*path' : 'str',
3991                                             '*cancel-path' : 'str'} }
3992
3993##
3994# @TpmTypeOptions:
3995#
3996# A union referencing different TPM backend types' configuration options
3997#
3998# @type: 'passthrough' The configuration options for the TPM passthrough type
3999#
4000# Since: 1.5
4001##
4002{ 'union': 'TpmTypeOptions',
4003   'data': { 'passthrough' : 'TPMPassthroughOptions' } }
4004
4005##
4006# @TPMInfo:
4007#
4008# Information about the TPM
4009#
4010# @id: The Id of the TPM
4011#
4012# @model: The TPM frontend model
4013#
4014# @options: The TPM (backend) type configuration options
4015#
4016# Since: 1.5
4017##
4018{ 'struct': 'TPMInfo',
4019  'data': {'id': 'str',
4020           'model': 'TpmModel',
4021           'options': 'TpmTypeOptions' } }
4022
4023##
4024# @query-tpm:
4025#
4026# Return information about the TPM device
4027#
4028# Returns: @TPMInfo on success
4029#
4030# Since: 1.5
4031##
4032{ 'command': 'query-tpm', 'returns': ['TPMInfo'] }
4033
4034##
4035# @AcpiTableOptions:
4036#
4037# Specify an ACPI table on the command line to load.
4038#
4039# At most one of @file and @data can be specified. The list of files specified
4040# by any one of them is loaded and concatenated in order. If both are omitted,
4041# @data is implied.
4042#
4043# Other fields / optargs can be used to override fields of the generic ACPI
4044# table header; refer to the ACPI specification 5.0, section 5.2.6 System
4045# Description Table Header. If a header field is not overridden, then the
4046# corresponding value from the concatenated blob is used (in case of @file), or
4047# it is filled in with a hard-coded value (in case of @data).
4048#
4049# String fields are copied into the matching ACPI member from lowest address
4050# upwards, and silently truncated / NUL-padded to length.
4051#
4052# @sig: #optional table signature / identifier (4 bytes)
4053#
4054# @rev: #optional table revision number (dependent on signature, 1 byte)
4055#
4056# @oem_id: #optional OEM identifier (6 bytes)
4057#
4058# @oem_table_id: #optional OEM table identifier (8 bytes)
4059#
4060# @oem_rev: #optional OEM-supplied revision number (4 bytes)
4061#
4062# @asl_compiler_id: #optional identifier of the utility that created the table
4063#                   (4 bytes)
4064#
4065# @asl_compiler_rev: #optional revision number of the utility that created the
4066#                    table (4 bytes)
4067#
4068# @file: #optional colon (:) separated list of pathnames to load and
4069#        concatenate as table data. The resultant binary blob is expected to
4070#        have an ACPI table header. At least one file is required. This field
4071#        excludes @data.
4072#
4073# @data: #optional colon (:) separated list of pathnames to load and
4074#        concatenate as table data. The resultant binary blob must not have an
4075#        ACPI table header. At least one file is required. This field excludes
4076#        @file.
4077#
4078# Since: 1.5
4079##
4080{ 'struct': 'AcpiTableOptions',
4081  'data': {
4082    '*sig':               'str',
4083    '*rev':               'uint8',
4084    '*oem_id':            'str',
4085    '*oem_table_id':      'str',
4086    '*oem_rev':           'uint32',
4087    '*asl_compiler_id':   'str',
4088    '*asl_compiler_rev':  'uint32',
4089    '*file':              'str',
4090    '*data':              'str' }}
4091
4092##
4093# @CommandLineParameterType:
4094#
4095# Possible types for an option parameter.
4096#
4097# @string: accepts a character string
4098#
4099# @boolean: accepts "on" or "off"
4100#
4101# @number: accepts a number
4102#
4103# @size: accepts a number followed by an optional suffix (K)ilo,
4104#        (M)ega, (G)iga, (T)era
4105#
4106# Since: 1.5
4107##
4108{ 'enum': 'CommandLineParameterType',
4109  'data': ['string', 'boolean', 'number', 'size'] }
4110
4111##
4112# @CommandLineParameterInfo:
4113#
4114# Details about a single parameter of a command line option.
4115#
4116# @name: parameter name
4117#
4118# @type: parameter @CommandLineParameterType
4119#
4120# @help: #optional human readable text string, not suitable for parsing.
4121#
4122# @default: #optional default value string (since 2.1)
4123#
4124# Since: 1.5
4125##
4126{ 'struct': 'CommandLineParameterInfo',
4127  'data': { 'name': 'str',
4128            'type': 'CommandLineParameterType',
4129            '*help': 'str',
4130            '*default': 'str' } }
4131
4132##
4133# @CommandLineOptionInfo:
4134#
4135# Details about a command line option, including its list of parameter details
4136#
4137# @option: option name
4138#
4139# @parameters: an array of @CommandLineParameterInfo
4140#
4141# Since: 1.5
4142##
4143{ 'struct': 'CommandLineOptionInfo',
4144  'data': { 'option': 'str', 'parameters': ['CommandLineParameterInfo'] } }
4145
4146##
4147# @query-command-line-options:
4148#
4149# Query command line option schema.
4150#
4151# @option: #optional option name
4152#
4153# Returns: list of @CommandLineOptionInfo for all options (or for the given
4154#          @option).  Returns an error if the given @option doesn't exist.
4155#
4156# Since: 1.5
4157##
4158{'command': 'query-command-line-options', 'data': { '*option': 'str' },
4159 'returns': ['CommandLineOptionInfo'] }
4160
4161##
4162# @X86CPURegister32:
4163#
4164# A X86 32-bit register
4165#
4166# Since: 1.5
4167##
4168{ 'enum': 'X86CPURegister32',
4169  'data': [ 'EAX', 'EBX', 'ECX', 'EDX', 'ESP', 'EBP', 'ESI', 'EDI' ] }
4170
4171##
4172# @X86CPUFeatureWordInfo:
4173#
4174# Information about a X86 CPU feature word
4175#
4176# @cpuid-input-eax: Input EAX value for CPUID instruction for that feature word
4177#
4178# @cpuid-input-ecx: #optional Input ECX value for CPUID instruction for that
4179#                   feature word
4180#
4181# @cpuid-register: Output register containing the feature bits
4182#
4183# @features: value of output register, containing the feature bits
4184#
4185# Since: 1.5
4186##
4187{ 'struct': 'X86CPUFeatureWordInfo',
4188  'data': { 'cpuid-input-eax': 'int',
4189            '*cpuid-input-ecx': 'int',
4190            'cpuid-register': 'X86CPURegister32',
4191            'features': 'int' } }
4192
4193##
4194# @DummyForceArrays:
4195#
4196# Not used by QMP; hack to let us use X86CPUFeatureWordInfoList internally
4197#
4198# Since: 2.5
4199##
4200{ 'struct': 'DummyForceArrays',
4201  'data': { 'unused': ['X86CPUFeatureWordInfo'] } }
4202
4203
4204##
4205# @RxState:
4206#
4207# Packets receiving state
4208#
4209# @normal: filter assigned packets according to the mac-table
4210#
4211# @none: don't receive any assigned packet
4212#
4213# @all: receive all assigned packets
4214#
4215# Since: 1.6
4216##
4217{ 'enum': 'RxState', 'data': [ 'normal', 'none', 'all' ] }
4218
4219##
4220# @RxFilterInfo:
4221#
4222# Rx-filter information for a NIC.
4223#
4224# @name: net client name
4225#
4226# @promiscuous: whether promiscuous mode is enabled
4227#
4228# @multicast: multicast receive state
4229#
4230# @unicast: unicast receive state
4231#
4232# @vlan: vlan receive state (Since 2.0)
4233#
4234# @broadcast-allowed: whether to receive broadcast
4235#
4236# @multicast-overflow: multicast table is overflowed or not
4237#
4238# @unicast-overflow: unicast table is overflowed or not
4239#
4240# @main-mac: the main macaddr string
4241#
4242# @vlan-table: a list of active vlan id
4243#
4244# @unicast-table: a list of unicast macaddr string
4245#
4246# @multicast-table: a list of multicast macaddr string
4247#
4248# Since: 1.6
4249##
4250{ 'struct': 'RxFilterInfo',
4251  'data': {
4252    'name':               'str',
4253    'promiscuous':        'bool',
4254    'multicast':          'RxState',
4255    'unicast':            'RxState',
4256    'vlan':               'RxState',
4257    'broadcast-allowed':  'bool',
4258    'multicast-overflow': 'bool',
4259    'unicast-overflow':   'bool',
4260    'main-mac':           'str',
4261    'vlan-table':         ['int'],
4262    'unicast-table':      ['str'],
4263    'multicast-table':    ['str'] }}
4264
4265##
4266# @query-rx-filter:
4267#
4268# Return rx-filter information for all NICs (or for the given NIC).
4269#
4270# @name: #optional net client name
4271#
4272# Returns: list of @RxFilterInfo for all NICs (or for the given NIC).
4273#          Returns an error if the given @name doesn't exist, or given
4274#          NIC doesn't support rx-filter querying, or given net client
4275#          isn't a NIC.
4276#
4277# Since: 1.6
4278##
4279{ 'command': 'query-rx-filter', 'data': { '*name': 'str' },
4280  'returns': ['RxFilterInfo'] }
4281
4282##
4283# @InputButton:
4284#
4285# Button of a pointer input device (mouse, tablet).
4286#
4287# Since: 2.0
4288##
4289{ 'enum'  : 'InputButton',
4290  'data'  : [ 'left', 'middle', 'right', 'wheel-up', 'wheel-down' ] }
4291
4292##
4293# @InputAxis:
4294#
4295# Position axis of a pointer input device (mouse, tablet).
4296#
4297# Since: 2.0
4298##
4299{ 'enum'  : 'InputAxis',
4300  'data'  : [ 'x', 'y' ] }
4301
4302##
4303# @InputKeyEvent:
4304#
4305# Keyboard input event.
4306#
4307# @key:    Which key this event is for.
4308# @down:   True for key-down and false for key-up events.
4309#
4310# Since: 2.0
4311##
4312{ 'struct'  : 'InputKeyEvent',
4313  'data'  : { 'key'     : 'KeyValue',
4314              'down'    : 'bool' } }
4315
4316##
4317# @InputBtnEvent:
4318#
4319# Pointer button input event.
4320#
4321# @button: Which button this event is for.
4322# @down:   True for key-down and false for key-up events.
4323#
4324# Since: 2.0
4325##
4326{ 'struct'  : 'InputBtnEvent',
4327  'data'  : { 'button'  : 'InputButton',
4328              'down'    : 'bool' } }
4329
4330##
4331# @InputMoveEvent:
4332#
4333# Pointer motion input event.
4334#
4335# @axis:   Which axis is referenced by @value.
4336# @value:  Pointer position.  For absolute coordinates the
4337#          valid range is 0 -> 0x7ffff
4338#
4339# Since: 2.0
4340##
4341{ 'struct'  : 'InputMoveEvent',
4342  'data'  : { 'axis'    : 'InputAxis',
4343              'value'   : 'int' } }
4344
4345##
4346# @InputEvent:
4347#
4348# Input event union.
4349#
4350# @type: the input type, one of:
4351#  - 'key': Input event of Keyboard
4352#  - 'btn': Input event of pointer buttons
4353#  - 'rel': Input event of relative pointer motion
4354#  - 'abs': Input event of absolute pointer motion
4355#
4356# Since: 2.0
4357##
4358{ 'union' : 'InputEvent',
4359  'data'  : { 'key'     : 'InputKeyEvent',
4360              'btn'     : 'InputBtnEvent',
4361              'rel'     : 'InputMoveEvent',
4362              'abs'     : 'InputMoveEvent' } }
4363
4364##
4365# @input-send-event:
4366#
4367# Send input event(s) to guest.
4368#
4369# @device: #optional display device to send event(s) to.
4370# @head: #optional head to send event(s) to, in case the
4371#        display device supports multiple scanouts.
4372# @events: List of InputEvent union.
4373#
4374# Returns: Nothing on success.
4375#
4376# The @display and @head parameters can be used to send the input
4377# event to specific input devices in case (a) multiple input devices
4378# of the same kind are added to the virtual machine and (b) you have
4379# configured input routing (see docs/multiseat.txt) for those input
4380# devices.  The parameters work exactly like the device and head
4381# properties of input devices.  If @device is missing, only devices
4382# that have no input routing config are admissible.  If @device is
4383# specified, both input devices with and without input routing config
4384# are admissible, but devices with input routing config take
4385# precedence.
4386#
4387# Since: 2.6
4388##
4389{ 'command': 'input-send-event',
4390  'data': { '*device': 'str',
4391            '*head'  : 'int',
4392            'events' : [ 'InputEvent' ] } }
4393
4394##
4395# @NumaOptions:
4396#
4397# A discriminated record of NUMA options. (for OptsVisitor)
4398#
4399# Since: 2.1
4400##
4401{ 'union': 'NumaOptions',
4402  'data': {
4403    'node': 'NumaNodeOptions' }}
4404
4405##
4406# @NumaNodeOptions:
4407#
4408# Create a guest NUMA node. (for OptsVisitor)
4409#
4410# @nodeid: #optional NUMA node ID (increase by 1 from 0 if omitted)
4411#
4412# @cpus: #optional VCPUs belonging to this node (assign VCPUS round-robin
4413#         if omitted)
4414#
4415# @mem: #optional memory size of this node; mutually exclusive with @memdev.
4416#       Equally divide total memory among nodes if both @mem and @memdev are
4417#       omitted.
4418#
4419# @memdev: #optional memory backend object.  If specified for one node,
4420#          it must be specified for all nodes.
4421#
4422# Since: 2.1
4423##
4424{ 'struct': 'NumaNodeOptions',
4425  'data': {
4426   '*nodeid': 'uint16',
4427   '*cpus':   ['uint16'],
4428   '*mem':    'size',
4429   '*memdev': 'str' }}
4430
4431##
4432# @HostMemPolicy:
4433#
4434# Host memory policy types
4435#
4436# @default: restore default policy, remove any nondefault policy
4437#
4438# @preferred: set the preferred host nodes for allocation
4439#
4440# @bind: a strict policy that restricts memory allocation to the
4441#        host nodes specified
4442#
4443# @interleave: memory allocations are interleaved across the set
4444#              of host nodes specified
4445#
4446# Since: 2.1
4447##
4448{ 'enum': 'HostMemPolicy',
4449  'data': [ 'default', 'preferred', 'bind', 'interleave' ] }
4450
4451##
4452# @Memdev:
4453#
4454# Information about memory backend
4455#
4456# @size: memory backend size
4457#
4458# @merge: enables or disables memory merge support
4459#
4460# @dump: includes memory backend's memory in a core dump or not
4461#
4462# @prealloc: enables or disables memory preallocation
4463#
4464# @host-nodes: host nodes for its memory policy
4465#
4466# @policy: memory policy of memory backend
4467#
4468# Since: 2.1
4469##
4470{ 'struct': 'Memdev',
4471  'data': {
4472    'size':       'size',
4473    'merge':      'bool',
4474    'dump':       'bool',
4475    'prealloc':   'bool',
4476    'host-nodes': ['uint16'],
4477    'policy':     'HostMemPolicy' }}
4478
4479##
4480# @query-memdev:
4481#
4482# Returns information for all memory backends.
4483#
4484# Returns: a list of @Memdev.
4485#
4486# Since: 2.1
4487##
4488{ 'command': 'query-memdev', 'returns': ['Memdev'] }
4489
4490##
4491# @PCDIMMDeviceInfo:
4492#
4493# PCDIMMDevice state information
4494#
4495# @id: #optional device's ID
4496#
4497# @addr: physical address, where device is mapped
4498#
4499# @size: size of memory that the device provides
4500#
4501# @slot: slot number at which device is plugged in
4502#
4503# @node: NUMA node number where device is plugged in
4504#
4505# @memdev: memory backend linked with device
4506#
4507# @hotplugged: true if device was hotplugged
4508#
4509# @hotpluggable: true if device if could be added/removed while machine is running
4510#
4511# Since: 2.1
4512##
4513{ 'struct': 'PCDIMMDeviceInfo',
4514  'data': { '*id': 'str',
4515            'addr': 'int',
4516            'size': 'int',
4517            'slot': 'int',
4518            'node': 'int',
4519            'memdev': 'str',
4520            'hotplugged': 'bool',
4521            'hotpluggable': 'bool'
4522          }
4523}
4524
4525##
4526# @MemoryDeviceInfo:
4527#
4528# Union containing information about a memory device
4529#
4530# Since: 2.1
4531##
4532{ 'union': 'MemoryDeviceInfo', 'data': {'dimm': 'PCDIMMDeviceInfo'} }
4533
4534##
4535# @query-memory-devices:
4536#
4537# Lists available memory devices and their state
4538#
4539# Since: 2.1
4540##
4541{ 'command': 'query-memory-devices', 'returns': ['MemoryDeviceInfo'] }
4542
4543##
4544# @ACPISlotType:
4545#
4546# @DIMM: memory slot
4547# @CPU: logical CPU slot (since 2.7)
4548##
4549{ 'enum': 'ACPISlotType', 'data': [ 'DIMM', 'CPU' ] }
4550
4551##
4552# @ACPIOSTInfo:
4553#
4554# OSPM Status Indication for a device
4555# For description of possible values of @source and @status fields
4556# see "_OST (OSPM Status Indication)" chapter of ACPI5.0 spec.
4557#
4558# @device: #optional device ID associated with slot
4559#
4560# @slot: slot ID, unique per slot of a given @slot-type
4561#
4562# @slot-type: type of the slot
4563#
4564# @source: an integer containing the source event
4565#
4566# @status: an integer containing the status code
4567#
4568# Since: 2.1
4569##
4570{ 'struct': 'ACPIOSTInfo',
4571  'data'  : { '*device': 'str',
4572              'slot': 'str',
4573              'slot-type': 'ACPISlotType',
4574              'source': 'int',
4575              'status': 'int' } }
4576
4577##
4578# @query-acpi-ospm-status:
4579#
4580# Lists ACPI OSPM status of ACPI device objects,
4581# which might be reported via _OST method
4582#
4583# Since: 2.1
4584##
4585{ 'command': 'query-acpi-ospm-status', 'returns': ['ACPIOSTInfo'] }
4586
4587##
4588# @WatchdogExpirationAction:
4589#
4590# An enumeration of the actions taken when the watchdog device's timer is
4591# expired
4592#
4593# @reset: system resets
4594#
4595# @shutdown: system shutdown, note that it is similar to @powerdown, which
4596#            tries to set to system status and notify guest
4597#
4598# @poweroff: system poweroff, the emulator program exits
4599#
4600# @pause: system pauses, similar to @stop
4601#
4602# @debug: system enters debug state
4603#
4604# @none: nothing is done
4605#
4606# @inject-nmi: a non-maskable interrupt is injected into the first VCPU (all
4607#              VCPUS on x86) (since 2.4)
4608#
4609# Since: 2.1
4610##
4611{ 'enum': 'WatchdogExpirationAction',
4612  'data': [ 'reset', 'shutdown', 'poweroff', 'pause', 'debug', 'none',
4613            'inject-nmi' ] }
4614
4615##
4616# @IoOperationType:
4617#
4618# An enumeration of the I/O operation types
4619#
4620# @read: read operation
4621#
4622# @write: write operation
4623#
4624# Since: 2.1
4625##
4626{ 'enum': 'IoOperationType',
4627  'data': [ 'read', 'write' ] }
4628
4629##
4630# @GuestPanicAction:
4631#
4632# An enumeration of the actions taken when guest OS panic is detected
4633#
4634# @pause: system pauses
4635#
4636# Since: 2.1 (poweroff since 2.8)
4637##
4638{ 'enum': 'GuestPanicAction',
4639  'data': [ 'pause', 'poweroff' ] }
4640
4641##
4642# @rtc-reset-reinjection:
4643#
4644# This command will reset the RTC interrupt reinjection backlog.
4645# Can be used if another mechanism to synchronize guest time
4646# is in effect, for example QEMU guest agent's guest-set-time
4647# command.
4648#
4649# Since: 2.1
4650##
4651{ 'command': 'rtc-reset-reinjection' }
4652
4653# Rocker ethernet network switch
4654{ 'include': 'qapi/rocker.json' }
4655
4656##
4657# @ReplayMode:
4658#
4659# Mode of the replay subsystem.
4660#
4661# @none: normal execution mode. Replay or record are not enabled.
4662#
4663# @record: record mode. All non-deterministic data is written into the
4664#          replay log.
4665#
4666# @play: replay mode. Non-deterministic data required for system execution
4667#        is read from the log.
4668#
4669# Since: 2.5
4670##
4671{ 'enum': 'ReplayMode',
4672  'data': [ 'none', 'record', 'play' ] }
4673
4674##
4675# @xen-load-devices-state:
4676#
4677# Load the state of all devices from file. The RAM and the block devices
4678# of the VM are not loaded by this command.
4679#
4680# @filename: the file to load the state of the devices from as binary
4681# data. See xen-save-devices-state.txt for a description of the binary
4682# format.
4683#
4684# Since: 2.7
4685##
4686{ 'command': 'xen-load-devices-state', 'data': {'filename': 'str'} }
4687
4688##
4689# @GICCapability:
4690#
4691# The struct describes capability for a specific GIC (Generic
4692# Interrupt Controller) version. These bits are not only decided by
4693# QEMU/KVM software version, but also decided by the hardware that
4694# the program is running upon.
4695#
4696# @version:  version of GIC to be described. Currently, only 2 and 3
4697#            are supported.
4698#
4699# @emulated: whether current QEMU/hardware supports emulated GIC
4700#            device in user space.
4701#
4702# @kernel:   whether current QEMU/hardware supports hardware
4703#            accelerated GIC device in kernel.
4704#
4705# Since: 2.6
4706##
4707{ 'struct': 'GICCapability',
4708  'data': { 'version': 'int',
4709            'emulated': 'bool',
4710            'kernel': 'bool' } }
4711
4712##
4713# @query-gic-capabilities:
4714#
4715# This command is ARM-only. It will return a list of GICCapability
4716# objects that describe its capability bits.
4717#
4718# Returns: a list of GICCapability objects.
4719#
4720# Since: 2.6
4721##
4722{ 'command': 'query-gic-capabilities', 'returns': ['GICCapability'] }
4723
4724##
4725# @CpuInstanceProperties:
4726#
4727# List of properties to be used for hotplugging a CPU instance,
4728# it should be passed by management with device_add command when
4729# a CPU is being hotplugged.
4730#
4731# Note: currently there are 4 properties that could be present
4732# but management should be prepared to pass through other
4733# properties with device_add command to allow for future
4734# interface extension. This also requires the filed names to be kept in
4735# sync with the properties passed to -device/device_add.
4736#
4737# @node-id: #optional NUMA node ID the CPU belongs to
4738# @socket-id: #optional socket number within node/board the CPU belongs to
4739# @core-id: #optional core number within socket the CPU belongs to
4740# @thread-id: #optional thread number within core the CPU belongs to
4741#
4742# Since: 2.7
4743##
4744{ 'struct': 'CpuInstanceProperties',
4745  'data': { '*node-id': 'int',
4746            '*socket-id': 'int',
4747            '*core-id': 'int',
4748            '*thread-id': 'int'
4749  }
4750}
4751
4752##
4753# @HotpluggableCPU:
4754#
4755# @type: CPU object type for usage with device_add command
4756# @props: list of properties to be used for hotplugging CPU
4757# @vcpus-count: number of logical VCPU threads @HotpluggableCPU provides
4758# @qom-path: #optional link to existing CPU object if CPU is present or
4759#            omitted if CPU is not present.
4760#
4761# Since: 2.7
4762##
4763{ 'struct': 'HotpluggableCPU',
4764  'data': { 'type': 'str',
4765            'vcpus-count': 'int',
4766            'props': 'CpuInstanceProperties',
4767            '*qom-path': 'str'
4768          }
4769}
4770
4771##
4772# @query-hotpluggable-cpus:
4773#
4774# Returns: a list of HotpluggableCPU objects.
4775#
4776# Since: 2.7
4777##
4778{ 'command': 'query-hotpluggable-cpus', 'returns': ['HotpluggableCPU'] }
4779