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