cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

block-core.json (177623B)


      1# -*- Mode: Python -*-
      2# vim: filetype=python
      3
      4##
      5# == Block core (VM unrelated)
      6##
      7
      8{ 'include': 'common.json' }
      9{ 'include': 'crypto.json' }
     10{ 'include': 'job.json' }
     11{ 'include': 'sockets.json' }
     12
     13##
     14# @SnapshotInfo:
     15#
     16# @id: unique snapshot id
     17#
     18# @name: user chosen name
     19#
     20# @vm-state-size: size of the VM state
     21#
     22# @date-sec: UTC date of the snapshot in seconds
     23#
     24# @date-nsec: fractional part in nano seconds to be used with date-sec
     25#
     26# @vm-clock-sec: VM clock relative to boot in seconds
     27#
     28# @vm-clock-nsec: fractional part in nano seconds to be used with vm-clock-sec
     29#
     30# @icount: Current instruction count. Appears when execution record/replay
     31#          is enabled. Used for "time-traveling" to match the moment
     32#          in the recorded execution with the snapshots. This counter may
     33#          be obtained through @query-replay command (since 5.2)
     34#
     35# Since: 1.3
     36#
     37##
     38{ 'struct': 'SnapshotInfo',
     39  'data': { 'id': 'str', 'name': 'str', 'vm-state-size': 'int',
     40            'date-sec': 'int', 'date-nsec': 'int',
     41            'vm-clock-sec': 'int', 'vm-clock-nsec': 'int',
     42            '*icount': 'int' } }
     43
     44##
     45# @ImageInfoSpecificQCow2EncryptionBase:
     46#
     47# @format: The encryption format
     48#
     49# Since: 2.10
     50##
     51{ 'struct': 'ImageInfoSpecificQCow2EncryptionBase',
     52  'data': { 'format': 'BlockdevQcow2EncryptionFormat'}}
     53
     54##
     55# @ImageInfoSpecificQCow2Encryption:
     56#
     57# Since: 2.10
     58##
     59{ 'union': 'ImageInfoSpecificQCow2Encryption',
     60  'base': 'ImageInfoSpecificQCow2EncryptionBase',
     61  'discriminator': 'format',
     62  'data': { 'luks': 'QCryptoBlockInfoLUKS' } }
     63
     64##
     65# @ImageInfoSpecificQCow2:
     66#
     67# @compat: compatibility level
     68#
     69# @data-file: the filename of the external data file that is stored in the
     70#             image and used as a default for opening the image (since: 4.0)
     71#
     72# @data-file-raw: True if the external data file must stay valid as a
     73#                 standalone (read-only) raw image without looking at qcow2
     74#                 metadata (since: 4.0)
     75#
     76# @extended-l2: true if the image has extended L2 entries; only valid for
     77#               compat >= 1.1 (since 5.2)
     78#
     79# @lazy-refcounts: on or off; only valid for compat >= 1.1
     80#
     81# @corrupt: true if the image has been marked corrupt; only valid for
     82#           compat >= 1.1 (since 2.2)
     83#
     84# @refcount-bits: width of a refcount entry in bits (since 2.3)
     85#
     86# @encrypt: details about encryption parameters; only set if image
     87#           is encrypted (since 2.10)
     88#
     89# @bitmaps: A list of qcow2 bitmap details (since 4.0)
     90#
     91# @compression-type: the image cluster compression method (since 5.1)
     92#
     93# Since: 1.7
     94##
     95{ 'struct': 'ImageInfoSpecificQCow2',
     96  'data': {
     97      'compat': 'str',
     98      '*data-file': 'str',
     99      '*data-file-raw': 'bool',
    100      '*extended-l2': 'bool',
    101      '*lazy-refcounts': 'bool',
    102      '*corrupt': 'bool',
    103      'refcount-bits': 'int',
    104      '*encrypt': 'ImageInfoSpecificQCow2Encryption',
    105      '*bitmaps': ['Qcow2BitmapInfo'],
    106      'compression-type': 'Qcow2CompressionType'
    107  } }
    108
    109##
    110# @ImageInfoSpecificVmdk:
    111#
    112# @create-type: The create type of VMDK image
    113#
    114# @cid: Content id of image
    115#
    116# @parent-cid: Parent VMDK image's cid
    117#
    118# @extents: List of extent files
    119#
    120# Since: 1.7
    121##
    122{ 'struct': 'ImageInfoSpecificVmdk',
    123  'data': {
    124      'create-type': 'str',
    125      'cid': 'int',
    126      'parent-cid': 'int',
    127      'extents': ['ImageInfo']
    128  } }
    129
    130##
    131# @ImageInfoSpecificRbd:
    132#
    133# @encryption-format: Image encryption format
    134#
    135# Since: 6.1
    136##
    137{ 'struct': 'ImageInfoSpecificRbd',
    138  'data': {
    139      '*encryption-format': 'RbdImageEncryptionFormat'
    140  } }
    141
    142##
    143# @ImageInfoSpecificKind:
    144#
    145# @luks: Since 2.7
    146# @rbd: Since 6.1
    147#
    148# Since: 1.7
    149##
    150{ 'enum': 'ImageInfoSpecificKind',
    151  'data': [ 'qcow2', 'vmdk', 'luks', 'rbd' ] }
    152
    153##
    154# @ImageInfoSpecificQCow2Wrapper:
    155#
    156# Since: 1.7
    157##
    158{ 'struct': 'ImageInfoSpecificQCow2Wrapper',
    159  'data': { 'data': 'ImageInfoSpecificQCow2' } }
    160
    161##
    162# @ImageInfoSpecificVmdkWrapper:
    163#
    164# Since: 6.1
    165##
    166{ 'struct': 'ImageInfoSpecificVmdkWrapper',
    167  'data': { 'data': 'ImageInfoSpecificVmdk' } }
    168
    169##
    170# @ImageInfoSpecificLUKSWrapper:
    171#
    172# Since: 2.7
    173##
    174{ 'struct': 'ImageInfoSpecificLUKSWrapper',
    175  'data': { 'data': 'QCryptoBlockInfoLUKS' } }
    176# If we need to add block driver specific parameters for
    177# LUKS in future, then we'll subclass QCryptoBlockInfoLUKS
    178# to define a ImageInfoSpecificLUKS
    179
    180##
    181# @ImageInfoSpecificRbdWrapper:
    182#
    183# Since: 6.1
    184##
    185{ 'struct': 'ImageInfoSpecificRbdWrapper',
    186  'data': { 'data': 'ImageInfoSpecificRbd' } }
    187
    188##
    189# @ImageInfoSpecific:
    190#
    191# A discriminated record of image format specific information structures.
    192#
    193# Since: 1.7
    194##
    195{ 'union': 'ImageInfoSpecific',
    196  'base': { 'type': 'ImageInfoSpecificKind' },
    197  'discriminator': 'type',
    198  'data': {
    199      'qcow2': 'ImageInfoSpecificQCow2Wrapper',
    200      'vmdk': 'ImageInfoSpecificVmdkWrapper',
    201      'luks': 'ImageInfoSpecificLUKSWrapper',
    202      'rbd': 'ImageInfoSpecificRbdWrapper'
    203  } }
    204
    205##
    206# @ImageInfo:
    207#
    208# Information about a QEMU image file
    209#
    210# @filename: name of the image file
    211#
    212# @format: format of the image file
    213#
    214# @virtual-size: maximum capacity in bytes of the image
    215#
    216# @actual-size: actual size on disk in bytes of the image
    217#
    218# @dirty-flag: true if image is not cleanly closed
    219#
    220# @cluster-size: size of a cluster in bytes
    221#
    222# @encrypted: true if the image is encrypted
    223#
    224# @compressed: true if the image is compressed (Since 1.7)
    225#
    226# @backing-filename: name of the backing file
    227#
    228# @full-backing-filename: full path of the backing file
    229#
    230# @backing-filename-format: the format of the backing file
    231#
    232# @snapshots: list of VM snapshots
    233#
    234# @backing-image: info of the backing image (since 1.6)
    235#
    236# @format-specific: structure supplying additional format-specific
    237#                   information (since 1.7)
    238#
    239# Since: 1.3
    240#
    241##
    242{ 'struct': 'ImageInfo',
    243  'data': {'filename': 'str', 'format': 'str', '*dirty-flag': 'bool',
    244           '*actual-size': 'int', 'virtual-size': 'int',
    245           '*cluster-size': 'int', '*encrypted': 'bool', '*compressed': 'bool',
    246           '*backing-filename': 'str', '*full-backing-filename': 'str',
    247           '*backing-filename-format': 'str', '*snapshots': ['SnapshotInfo'],
    248           '*backing-image': 'ImageInfo',
    249           '*format-specific': 'ImageInfoSpecific' } }
    250
    251##
    252# @ImageCheck:
    253#
    254# Information about a QEMU image file check
    255#
    256# @filename: name of the image file checked
    257#
    258# @format: format of the image file checked
    259#
    260# @check-errors: number of unexpected errors occurred during check
    261#
    262# @image-end-offset: offset (in bytes) where the image ends, this
    263#                    field is present if the driver for the image format
    264#                    supports it
    265#
    266# @corruptions: number of corruptions found during the check if any
    267#
    268# @leaks: number of leaks found during the check if any
    269#
    270# @corruptions-fixed: number of corruptions fixed during the check
    271#                     if any
    272#
    273# @leaks-fixed: number of leaks fixed during the check if any
    274#
    275# @total-clusters: total number of clusters, this field is present
    276#                  if the driver for the image format supports it
    277#
    278# @allocated-clusters: total number of allocated clusters, this
    279#                      field is present if the driver for the image format
    280#                      supports it
    281#
    282# @fragmented-clusters: total number of fragmented clusters, this
    283#                       field is present if the driver for the image format
    284#                       supports it
    285#
    286# @compressed-clusters: total number of compressed clusters, this
    287#                       field is present if the driver for the image format
    288#                       supports it
    289#
    290# Since: 1.4
    291#
    292##
    293{ 'struct': 'ImageCheck',
    294  'data': {'filename': 'str', 'format': 'str', 'check-errors': 'int',
    295           '*image-end-offset': 'int', '*corruptions': 'int', '*leaks': 'int',
    296           '*corruptions-fixed': 'int', '*leaks-fixed': 'int',
    297           '*total-clusters': 'int', '*allocated-clusters': 'int',
    298           '*fragmented-clusters': 'int', '*compressed-clusters': 'int' } }
    299
    300##
    301# @MapEntry:
    302#
    303# Mapping information from a virtual block range to a host file range
    304#
    305# @start: virtual (guest) offset of the first byte described by this
    306#         entry
    307#
    308# @length: the number of bytes of the mapped virtual range
    309#
    310# @data: reading the image will actually read data from a file (in
    311#        particular, if @offset is present this means that the sectors
    312#        are not simply preallocated, but contain actual data in raw
    313#        format)
    314#
    315# @zero: whether the virtual blocks read as zeroes
    316#
    317# @depth: number of layers (0 = top image, 1 = top image's backing
    318#         file, ..., n - 1 = bottom image (where n is the number of
    319#         images in the chain)) before reaching one for which the
    320#         range is allocated
    321#
    322# @present: true if this layer provides the data, false if adding a backing
    323#           layer could impact this region (since 6.1)
    324#
    325# @offset: if present, the image file stores the data for this range
    326#          in raw format at the given (host) offset
    327#
    328# @filename: filename that is referred to by @offset
    329#
    330# Since: 2.6
    331#
    332##
    333{ 'struct': 'MapEntry',
    334  'data': {'start': 'int', 'length': 'int', 'data': 'bool',
    335           'zero': 'bool', 'depth': 'int', 'present': 'bool',
    336           '*offset': 'int', '*filename': 'str' } }
    337
    338##
    339# @BlockdevCacheInfo:
    340#
    341# Cache mode information for a block device
    342#
    343# @writeback:   true if writeback mode is enabled
    344# @direct:      true if the host page cache is bypassed (O_DIRECT)
    345# @no-flush:    true if flush requests are ignored for the device
    346#
    347# Since: 2.3
    348##
    349{ 'struct': 'BlockdevCacheInfo',
    350  'data': { 'writeback': 'bool',
    351            'direct': 'bool',
    352            'no-flush': 'bool' } }
    353
    354##
    355# @BlockDeviceInfo:
    356#
    357# Information about the backing device for a block device.
    358#
    359# @file: the filename of the backing device
    360#
    361# @node-name: the name of the block driver node (Since 2.0)
    362#
    363# @ro: true if the backing device was open read-only
    364#
    365# @drv: the name of the block format used to open the backing device. As of
    366#       0.14 this can be: 'blkdebug', 'bochs', 'cloop', 'cow', 'dmg',
    367#       'file', 'file', 'ftp', 'ftps', 'host_cdrom', 'host_device',
    368#       'http', 'https', 'luks', 'nbd', 'parallels', 'qcow',
    369#       'qcow2', 'raw', 'vdi', 'vmdk', 'vpc', 'vvfat'
    370#       2.2: 'archipelago' added, 'cow' dropped
    371#       2.3: 'host_floppy' deprecated
    372#       2.5: 'host_floppy' dropped
    373#       2.6: 'luks' added
    374#       2.8: 'replication' added, 'tftp' dropped
    375#       2.9: 'archipelago' dropped
    376#
    377# @backing_file: the name of the backing file (for copy-on-write)
    378#
    379# @backing_file_depth: number of files in the backing file chain (since: 1.2)
    380#
    381# @encrypted: true if the backing device is encrypted
    382#
    383# @detect_zeroes: detect and optimize zero writes (Since 2.1)
    384#
    385# @bps: total throughput limit in bytes per second is specified
    386#
    387# @bps_rd: read throughput limit in bytes per second is specified
    388#
    389# @bps_wr: write throughput limit in bytes per second is specified
    390#
    391# @iops: total I/O operations per second is specified
    392#
    393# @iops_rd: read I/O operations per second is specified
    394#
    395# @iops_wr: write I/O operations per second is specified
    396#
    397# @image: the info of image used (since: 1.6)
    398#
    399# @bps_max: total throughput limit during bursts,
    400#                     in bytes (Since 1.7)
    401#
    402# @bps_rd_max: read throughput limit during bursts,
    403#                        in bytes (Since 1.7)
    404#
    405# @bps_wr_max: write throughput limit during bursts,
    406#                        in bytes (Since 1.7)
    407#
    408# @iops_max: total I/O operations per second during bursts,
    409#                      in bytes (Since 1.7)
    410#
    411# @iops_rd_max: read I/O operations per second during bursts,
    412#                         in bytes (Since 1.7)
    413#
    414# @iops_wr_max: write I/O operations per second during bursts,
    415#                         in bytes (Since 1.7)
    416#
    417# @bps_max_length: maximum length of the @bps_max burst
    418#                            period, in seconds. (Since 2.6)
    419#
    420# @bps_rd_max_length: maximum length of the @bps_rd_max
    421#                               burst period, in seconds. (Since 2.6)
    422#
    423# @bps_wr_max_length: maximum length of the @bps_wr_max
    424#                               burst period, in seconds. (Since 2.6)
    425#
    426# @iops_max_length: maximum length of the @iops burst
    427#                             period, in seconds. (Since 2.6)
    428#
    429# @iops_rd_max_length: maximum length of the @iops_rd_max
    430#                                burst period, in seconds. (Since 2.6)
    431#
    432# @iops_wr_max_length: maximum length of the @iops_wr_max
    433#                                burst period, in seconds. (Since 2.6)
    434#
    435# @iops_size: an I/O size in bytes (Since 1.7)
    436#
    437# @group: throttle group name (Since 2.4)
    438#
    439# @cache: the cache mode used for the block device (since: 2.3)
    440#
    441# @write_threshold: configured write threshold for the device.
    442#                   0 if disabled. (Since 2.3)
    443#
    444# @dirty-bitmaps: dirty bitmaps information (only present if node
    445#                 has one or more dirty bitmaps) (Since 4.2)
    446#
    447# Since: 0.14
    448#
    449##
    450{ 'struct': 'BlockDeviceInfo',
    451  'data': { 'file': 'str', '*node-name': 'str', 'ro': 'bool', 'drv': 'str',
    452            '*backing_file': 'str', 'backing_file_depth': 'int',
    453            'encrypted': 'bool',
    454            'detect_zeroes': 'BlockdevDetectZeroesOptions',
    455            'bps': 'int', 'bps_rd': 'int', 'bps_wr': 'int',
    456            'iops': 'int', 'iops_rd': 'int', 'iops_wr': 'int',
    457            'image': 'ImageInfo',
    458            '*bps_max': 'int', '*bps_rd_max': 'int',
    459            '*bps_wr_max': 'int', '*iops_max': 'int',
    460            '*iops_rd_max': 'int', '*iops_wr_max': 'int',
    461            '*bps_max_length': 'int', '*bps_rd_max_length': 'int',
    462            '*bps_wr_max_length': 'int', '*iops_max_length': 'int',
    463            '*iops_rd_max_length': 'int', '*iops_wr_max_length': 'int',
    464            '*iops_size': 'int', '*group': 'str', 'cache': 'BlockdevCacheInfo',
    465            'write_threshold': 'int', '*dirty-bitmaps': ['BlockDirtyInfo'] } }
    466
    467##
    468# @BlockDeviceIoStatus:
    469#
    470# An enumeration of block device I/O status.
    471#
    472# @ok: The last I/O operation has succeeded
    473#
    474# @failed: The last I/O operation has failed
    475#
    476# @nospace: The last I/O operation has failed due to a no-space condition
    477#
    478# Since: 1.0
    479##
    480{ 'enum': 'BlockDeviceIoStatus', 'data': [ 'ok', 'failed', 'nospace' ] }
    481
    482##
    483# @BlockDirtyInfo:
    484#
    485# Block dirty bitmap information.
    486#
    487# @name: the name of the dirty bitmap (Since 2.4)
    488#
    489# @count: number of dirty bytes according to the dirty bitmap
    490#
    491# @granularity: granularity of the dirty bitmap in bytes (since 1.4)
    492#
    493# @recording: true if the bitmap is recording new writes from the guest.
    494#             Replaces `active` and `disabled` statuses. (since 4.0)
    495#
    496# @busy: true if the bitmap is in-use by some operation (NBD or jobs)
    497#        and cannot be modified via QMP or used by another operation.
    498#        Replaces `locked` and `frozen` statuses. (since 4.0)
    499#
    500# @persistent: true if the bitmap was stored on disk, is scheduled to be stored
    501#              on disk, or both. (since 4.0)
    502#
    503# @inconsistent: true if this is a persistent bitmap that was improperly
    504#                stored. Implies @persistent to be true; @recording and
    505#                @busy to be false. This bitmap cannot be used. To remove
    506#                it, use @block-dirty-bitmap-remove. (Since 4.0)
    507#
    508# Since: 1.3
    509##
    510{ 'struct': 'BlockDirtyInfo',
    511  'data': {'*name': 'str', 'count': 'int', 'granularity': 'uint32',
    512           'recording': 'bool', 'busy': 'bool',
    513           'persistent': 'bool', '*inconsistent': 'bool' } }
    514
    515##
    516# @Qcow2BitmapInfoFlags:
    517#
    518# An enumeration of flags that a bitmap can report to the user.
    519#
    520# @in-use: This flag is set by any process actively modifying the qcow2 file,
    521#          and cleared when the updated bitmap is flushed to the qcow2 image.
    522#          The presence of this flag in an offline image means that the bitmap
    523#          was not saved correctly after its last usage, and may contain
    524#          inconsistent data.
    525#
    526# @auto: The bitmap must reflect all changes of the virtual disk by any
    527#        application that would write to this qcow2 file.
    528#
    529# Since: 4.0
    530##
    531{ 'enum': 'Qcow2BitmapInfoFlags',
    532  'data': ['in-use', 'auto'] }
    533
    534##
    535# @Qcow2BitmapInfo:
    536#
    537# Qcow2 bitmap information.
    538#
    539# @name: the name of the bitmap
    540#
    541# @granularity: granularity of the bitmap in bytes
    542#
    543# @flags: flags of the bitmap
    544#
    545# Since: 4.0
    546##
    547{ 'struct': 'Qcow2BitmapInfo',
    548  'data': {'name': 'str', 'granularity': 'uint32',
    549           'flags': ['Qcow2BitmapInfoFlags'] } }
    550
    551##
    552# @BlockLatencyHistogramInfo:
    553#
    554# Block latency histogram.
    555#
    556# @boundaries: list of interval boundary values in nanoseconds, all greater
    557#              than zero and in ascending order.
    558#              For example, the list [10, 50, 100] produces the following
    559#              histogram intervals: [0, 10), [10, 50), [50, 100), [100, +inf).
    560#
    561# @bins: list of io request counts corresponding to histogram intervals.
    562#        len(@bins) = len(@boundaries) + 1
    563#        For the example above, @bins may be something like [3, 1, 5, 2],
    564#        and corresponding histogram looks like:
    565#
    566# ::
    567#
    568#        5|           *
    569#        4|           *
    570#        3| *         *
    571#        2| *         *    *
    572#        1| *    *    *    *
    573#         +------------------
    574#             10   50   100
    575#
    576# Since: 4.0
    577##
    578{ 'struct': 'BlockLatencyHistogramInfo',
    579  'data': {'boundaries': ['uint64'], 'bins': ['uint64'] } }
    580
    581##
    582# @BlockInfo:
    583#
    584# Block device information.  This structure describes a virtual device and
    585# the backing device associated with it.
    586#
    587# @device: The device name associated with the virtual device.
    588#
    589# @qdev: The qdev ID, or if no ID is assigned, the QOM path of the block
    590#        device. (since 2.10)
    591#
    592# @type: This field is returned only for compatibility reasons, it should
    593#        not be used (always returns 'unknown')
    594#
    595# @removable: True if the device supports removable media.
    596#
    597# @locked: True if the guest has locked this device from having its media
    598#          removed
    599#
    600# @tray_open: True if the device's tray is open
    601#             (only present if it has a tray)
    602#
    603# @io-status: @BlockDeviceIoStatus. Only present if the device
    604#             supports it and the VM is configured to stop on errors
    605#             (supported device models: virtio-blk, IDE, SCSI except
    606#             scsi-generic)
    607#
    608# @inserted: @BlockDeviceInfo describing the device if media is
    609#            present
    610#
    611# Since:  0.14
    612##
    613{ 'struct': 'BlockInfo',
    614  'data': {'device': 'str', '*qdev': 'str', 'type': 'str', 'removable': 'bool',
    615           'locked': 'bool', '*inserted': 'BlockDeviceInfo',
    616           '*tray_open': 'bool', '*io-status': 'BlockDeviceIoStatus' } }
    617
    618##
    619# @BlockMeasureInfo:
    620#
    621# Image file size calculation information.  This structure describes the size
    622# requirements for creating a new image file.
    623#
    624# The size requirements depend on the new image file format.  File size always
    625# equals virtual disk size for the 'raw' format, even for sparse POSIX files.
    626# Compact formats such as 'qcow2' represent unallocated and zero regions
    627# efficiently so file size may be smaller than virtual disk size.
    628#
    629# The values are upper bounds that are guaranteed to fit the new image file.
    630# Subsequent modification, such as internal snapshot or further bitmap
    631# creation, may require additional space and is not covered here.
    632#
    633# @required: Size required for a new image file, in bytes, when copying just
    634#            allocated guest-visible contents.
    635#
    636# @fully-allocated: Image file size, in bytes, once data has been written
    637#                   to all sectors, when copying just guest-visible contents.
    638#
    639# @bitmaps: Additional size required if all the top-level bitmap metadata
    640#           in the source image were to be copied to the destination,
    641#           present only when source and destination both support
    642#           persistent bitmaps. (since 5.1)
    643#
    644# Since: 2.10
    645##
    646{ 'struct': 'BlockMeasureInfo',
    647  'data': {'required': 'int', 'fully-allocated': 'int', '*bitmaps': 'int'} }
    648
    649##
    650# @query-block:
    651#
    652# Get a list of BlockInfo for all virtual block devices.
    653#
    654# Returns: a list of @BlockInfo describing each virtual block device. Filter
    655#          nodes that were created implicitly are skipped over.
    656#
    657# Since: 0.14
    658#
    659# Example:
    660#
    661# -> { "execute": "query-block" }
    662# <- {
    663#       "return":[
    664#          {
    665#             "io-status": "ok",
    666#             "device":"ide0-hd0",
    667#             "locked":false,
    668#             "removable":false,
    669#             "inserted":{
    670#                "ro":false,
    671#                "drv":"qcow2",
    672#                "encrypted":false,
    673#                "file":"disks/test.qcow2",
    674#                "backing_file_depth":1,
    675#                "bps":1000000,
    676#                "bps_rd":0,
    677#                "bps_wr":0,
    678#                "iops":1000000,
    679#                "iops_rd":0,
    680#                "iops_wr":0,
    681#                "bps_max": 8000000,
    682#                "bps_rd_max": 0,
    683#                "bps_wr_max": 0,
    684#                "iops_max": 0,
    685#                "iops_rd_max": 0,
    686#                "iops_wr_max": 0,
    687#                "iops_size": 0,
    688#                "detect_zeroes": "on",
    689#                "write_threshold": 0,
    690#                "image":{
    691#                   "filename":"disks/test.qcow2",
    692#                   "format":"qcow2",
    693#                   "virtual-size":2048000,
    694#                   "backing_file":"base.qcow2",
    695#                   "full-backing-filename":"disks/base.qcow2",
    696#                   "backing-filename-format":"qcow2",
    697#                   "snapshots":[
    698#                      {
    699#                         "id": "1",
    700#                         "name": "snapshot1",
    701#                         "vm-state-size": 0,
    702#                         "date-sec": 10000200,
    703#                         "date-nsec": 12,
    704#                         "vm-clock-sec": 206,
    705#                         "vm-clock-nsec": 30
    706#                      }
    707#                   ],
    708#                   "backing-image":{
    709#                       "filename":"disks/base.qcow2",
    710#                       "format":"qcow2",
    711#                       "virtual-size":2048000
    712#                   }
    713#                }
    714#             },
    715#             "qdev": "ide_disk",
    716#             "type":"unknown"
    717#          },
    718#          {
    719#             "io-status": "ok",
    720#             "device":"ide1-cd0",
    721#             "locked":false,
    722#             "removable":true,
    723#             "qdev": "/machine/unattached/device[23]",
    724#             "tray_open": false,
    725#             "type":"unknown"
    726#          },
    727#          {
    728#             "device":"floppy0",
    729#             "locked":false,
    730#             "removable":true,
    731#             "qdev": "/machine/unattached/device[20]",
    732#             "type":"unknown"
    733#          },
    734#          {
    735#             "device":"sd0",
    736#             "locked":false,
    737#             "removable":true,
    738#             "type":"unknown"
    739#          }
    740#       ]
    741#    }
    742#
    743##
    744{ 'command': 'query-block', 'returns': ['BlockInfo'] }
    745
    746
    747##
    748# @BlockDeviceTimedStats:
    749#
    750# Statistics of a block device during a given interval of time.
    751#
    752# @interval_length: Interval used for calculating the statistics,
    753#                   in seconds.
    754#
    755# @min_rd_latency_ns: Minimum latency of read operations in the
    756#                     defined interval, in nanoseconds.
    757#
    758# @min_wr_latency_ns: Minimum latency of write operations in the
    759#                     defined interval, in nanoseconds.
    760#
    761# @min_flush_latency_ns: Minimum latency of flush operations in the
    762#                        defined interval, in nanoseconds.
    763#
    764# @max_rd_latency_ns: Maximum latency of read operations in the
    765#                     defined interval, in nanoseconds.
    766#
    767# @max_wr_latency_ns: Maximum latency of write operations in the
    768#                     defined interval, in nanoseconds.
    769#
    770# @max_flush_latency_ns: Maximum latency of flush operations in the
    771#                        defined interval, in nanoseconds.
    772#
    773# @avg_rd_latency_ns: Average latency of read operations in the
    774#                     defined interval, in nanoseconds.
    775#
    776# @avg_wr_latency_ns: Average latency of write operations in the
    777#                     defined interval, in nanoseconds.
    778#
    779# @avg_flush_latency_ns: Average latency of flush operations in the
    780#                        defined interval, in nanoseconds.
    781#
    782# @avg_rd_queue_depth: Average number of pending read operations
    783#                      in the defined interval.
    784#
    785# @avg_wr_queue_depth: Average number of pending write operations
    786#                      in the defined interval.
    787#
    788# Since: 2.5
    789##
    790{ 'struct': 'BlockDeviceTimedStats',
    791  'data': { 'interval_length': 'int', 'min_rd_latency_ns': 'int',
    792            'max_rd_latency_ns': 'int', 'avg_rd_latency_ns': 'int',
    793            'min_wr_latency_ns': 'int', 'max_wr_latency_ns': 'int',
    794            'avg_wr_latency_ns': 'int', 'min_flush_latency_ns': 'int',
    795            'max_flush_latency_ns': 'int', 'avg_flush_latency_ns': 'int',
    796            'avg_rd_queue_depth': 'number', 'avg_wr_queue_depth': 'number' } }
    797
    798##
    799# @BlockDeviceStats:
    800#
    801# Statistics of a virtual block device or a block backing device.
    802#
    803# @rd_bytes:      The number of bytes read by the device.
    804#
    805# @wr_bytes:      The number of bytes written by the device.
    806#
    807# @unmap_bytes: The number of bytes unmapped by the device (Since 4.2)
    808#
    809# @rd_operations: The number of read operations performed by the device.
    810#
    811# @wr_operations: The number of write operations performed by the device.
    812#
    813# @flush_operations: The number of cache flush operations performed by the
    814#                    device (since 0.15)
    815#
    816# @unmap_operations: The number of unmap operations performed by the device
    817#                    (Since 4.2)
    818#
    819# @rd_total_time_ns: Total time spent on reads in nanoseconds (since 0.15).
    820#
    821# @wr_total_time_ns: Total time spent on writes in nanoseconds (since 0.15).
    822#
    823# @flush_total_time_ns: Total time spent on cache flushes in nanoseconds
    824#                       (since 0.15).
    825#
    826# @unmap_total_time_ns: Total time spent on unmap operations in nanoseconds
    827#                       (Since 4.2)
    828#
    829# @wr_highest_offset: The offset after the greatest byte written to the
    830#                     device.  The intended use of this information is for
    831#                     growable sparse files (like qcow2) that are used on top
    832#                     of a physical device.
    833#
    834# @rd_merged: Number of read requests that have been merged into another
    835#             request (Since 2.3).
    836#
    837# @wr_merged: Number of write requests that have been merged into another
    838#             request (Since 2.3).
    839#
    840# @unmap_merged: Number of unmap requests that have been merged into another
    841#                request (Since 4.2)
    842#
    843# @idle_time_ns: Time since the last I/O operation, in
    844#                nanoseconds. If the field is absent it means that
    845#                there haven't been any operations yet (Since 2.5).
    846#
    847# @failed_rd_operations: The number of failed read operations
    848#                        performed by the device (Since 2.5)
    849#
    850# @failed_wr_operations: The number of failed write operations
    851#                        performed by the device (Since 2.5)
    852#
    853# @failed_flush_operations: The number of failed flush operations
    854#                           performed by the device (Since 2.5)
    855#
    856# @failed_unmap_operations: The number of failed unmap operations performed
    857#                           by the device (Since 4.2)
    858#
    859# @invalid_rd_operations: The number of invalid read operations
    860#                          performed by the device (Since 2.5)
    861#
    862# @invalid_wr_operations: The number of invalid write operations
    863#                         performed by the device (Since 2.5)
    864#
    865# @invalid_flush_operations: The number of invalid flush operations
    866#                            performed by the device (Since 2.5)
    867#
    868# @invalid_unmap_operations: The number of invalid unmap operations performed
    869#                            by the device (Since 4.2)
    870#
    871# @account_invalid: Whether invalid operations are included in the
    872#                   last access statistics (Since 2.5)
    873#
    874# @account_failed: Whether failed operations are included in the
    875#                  latency and last access statistics (Since 2.5)
    876#
    877# @timed_stats: Statistics specific to the set of previously defined
    878#               intervals of time (Since 2.5)
    879#
    880# @rd_latency_histogram: @BlockLatencyHistogramInfo. (Since 4.0)
    881#
    882# @wr_latency_histogram: @BlockLatencyHistogramInfo. (Since 4.0)
    883#
    884# @flush_latency_histogram: @BlockLatencyHistogramInfo. (Since 4.0)
    885#
    886# Since: 0.14
    887##
    888{ 'struct': 'BlockDeviceStats',
    889  'data': {'rd_bytes': 'int', 'wr_bytes': 'int', 'unmap_bytes' : 'int',
    890           'rd_operations': 'int', 'wr_operations': 'int',
    891           'flush_operations': 'int', 'unmap_operations': 'int',
    892           'rd_total_time_ns': 'int', 'wr_total_time_ns': 'int',
    893           'flush_total_time_ns': 'int', 'unmap_total_time_ns': 'int',
    894           'wr_highest_offset': 'int',
    895           'rd_merged': 'int', 'wr_merged': 'int', 'unmap_merged': 'int',
    896           '*idle_time_ns': 'int',
    897           'failed_rd_operations': 'int', 'failed_wr_operations': 'int',
    898           'failed_flush_operations': 'int', 'failed_unmap_operations': 'int',
    899           'invalid_rd_operations': 'int', 'invalid_wr_operations': 'int',
    900           'invalid_flush_operations': 'int', 'invalid_unmap_operations': 'int',
    901           'account_invalid': 'bool', 'account_failed': 'bool',
    902           'timed_stats': ['BlockDeviceTimedStats'],
    903           '*rd_latency_histogram': 'BlockLatencyHistogramInfo',
    904           '*wr_latency_histogram': 'BlockLatencyHistogramInfo',
    905           '*flush_latency_histogram': 'BlockLatencyHistogramInfo' } }
    906
    907##
    908# @BlockStatsSpecificFile:
    909#
    910# File driver statistics
    911#
    912# @discard-nb-ok: The number of successful discard operations performed by
    913#                 the driver.
    914#
    915# @discard-nb-failed: The number of failed discard operations performed by
    916#                     the driver.
    917#
    918# @discard-bytes-ok: The number of bytes discarded by the driver.
    919#
    920# Since: 4.2
    921##
    922{ 'struct': 'BlockStatsSpecificFile',
    923  'data': {
    924      'discard-nb-ok': 'uint64',
    925      'discard-nb-failed': 'uint64',
    926      'discard-bytes-ok': 'uint64' } }
    927
    928##
    929# @BlockStatsSpecificNvme:
    930#
    931# NVMe driver statistics
    932#
    933# @completion-errors: The number of completion errors.
    934#
    935# @aligned-accesses: The number of aligned accesses performed by
    936#                    the driver.
    937#
    938# @unaligned-accesses: The number of unaligned accesses performed by
    939#                      the driver.
    940#
    941# Since: 5.2
    942##
    943{ 'struct': 'BlockStatsSpecificNvme',
    944  'data': {
    945      'completion-errors': 'uint64',
    946      'aligned-accesses': 'uint64',
    947      'unaligned-accesses': 'uint64' } }
    948
    949##
    950# @BlockStatsSpecific:
    951#
    952# Block driver specific statistics
    953#
    954# Since: 4.2
    955##
    956{ 'union': 'BlockStatsSpecific',
    957  'base': { 'driver': 'BlockdevDriver' },
    958  'discriminator': 'driver',
    959  'data': {
    960      'file': 'BlockStatsSpecificFile',
    961      'host_device': { 'type': 'BlockStatsSpecificFile',
    962                       'if': 'HAVE_HOST_BLOCK_DEVICE' },
    963      'nvme': 'BlockStatsSpecificNvme' } }
    964
    965##
    966# @BlockStats:
    967#
    968# Statistics of a virtual block device or a block backing device.
    969#
    970# @device: If the stats are for a virtual block device, the name
    971#          corresponding to the virtual block device.
    972#
    973# @node-name: The node name of the device. (Since 2.3)
    974#
    975# @qdev: The qdev ID, or if no ID is assigned, the QOM path of the block
    976#        device. (since 3.0)
    977#
    978# @stats:  A @BlockDeviceStats for the device.
    979#
    980# @driver-specific: Optional driver-specific stats. (Since 4.2)
    981#
    982# @parent: This describes the file block device if it has one.
    983#          Contains recursively the statistics of the underlying
    984#          protocol (e.g. the host file for a qcow2 image). If there is
    985#          no underlying protocol, this field is omitted
    986#
    987# @backing: This describes the backing block device if it has one.
    988#           (Since 2.0)
    989#
    990# Since: 0.14
    991##
    992{ 'struct': 'BlockStats',
    993  'data': {'*device': 'str', '*qdev': 'str', '*node-name': 'str',
    994           'stats': 'BlockDeviceStats',
    995           '*driver-specific': 'BlockStatsSpecific',
    996           '*parent': 'BlockStats',
    997           '*backing': 'BlockStats'} }
    998
    999##
   1000# @query-blockstats:
   1001#
   1002# Query the @BlockStats for all virtual block devices.
   1003#
   1004# @query-nodes: If true, the command will query all the block nodes
   1005#               that have a node name, in a list which will include "parent"
   1006#               information, but not "backing".
   1007#               If false or omitted, the behavior is as before - query all the
   1008#               device backends, recursively including their "parent" and
   1009#               "backing". Filter nodes that were created implicitly are
   1010#               skipped over in this mode. (Since 2.3)
   1011#
   1012# Returns: A list of @BlockStats for each virtual block devices.
   1013#
   1014# Since: 0.14
   1015#
   1016# Example:
   1017#
   1018# -> { "execute": "query-blockstats" }
   1019# <- {
   1020#       "return":[
   1021#          {
   1022#             "device":"ide0-hd0",
   1023#             "parent":{
   1024#                "stats":{
   1025#                   "wr_highest_offset":3686448128,
   1026#                   "wr_bytes":9786368,
   1027#                   "wr_operations":751,
   1028#                   "rd_bytes":122567168,
   1029#                   "rd_operations":36772
   1030#                   "wr_total_times_ns":313253456
   1031#                   "rd_total_times_ns":3465673657
   1032#                   "flush_total_times_ns":49653
   1033#                   "flush_operations":61,
   1034#                   "rd_merged":0,
   1035#                   "wr_merged":0,
   1036#                   "idle_time_ns":2953431879,
   1037#                   "account_invalid":true,
   1038#                   "account_failed":false
   1039#                }
   1040#             },
   1041#             "stats":{
   1042#                "wr_highest_offset":2821110784,
   1043#                "wr_bytes":9786368,
   1044#                "wr_operations":692,
   1045#                "rd_bytes":122739200,
   1046#                "rd_operations":36604
   1047#                "flush_operations":51,
   1048#                "wr_total_times_ns":313253456
   1049#                "rd_total_times_ns":3465673657
   1050#                "flush_total_times_ns":49653,
   1051#                "rd_merged":0,
   1052#                "wr_merged":0,
   1053#                "idle_time_ns":2953431879,
   1054#                "account_invalid":true,
   1055#                "account_failed":false
   1056#             },
   1057#             "qdev": "/machine/unattached/device[23]"
   1058#          },
   1059#          {
   1060#             "device":"ide1-cd0",
   1061#             "stats":{
   1062#                "wr_highest_offset":0,
   1063#                "wr_bytes":0,
   1064#                "wr_operations":0,
   1065#                "rd_bytes":0,
   1066#                "rd_operations":0
   1067#                "flush_operations":0,
   1068#                "wr_total_times_ns":0
   1069#                "rd_total_times_ns":0
   1070#                "flush_total_times_ns":0,
   1071#                "rd_merged":0,
   1072#                "wr_merged":0,
   1073#                "account_invalid":false,
   1074#                "account_failed":false
   1075#             },
   1076#             "qdev": "/machine/unattached/device[24]"
   1077#          },
   1078#          {
   1079#             "device":"floppy0",
   1080#             "stats":{
   1081#                "wr_highest_offset":0,
   1082#                "wr_bytes":0,
   1083#                "wr_operations":0,
   1084#                "rd_bytes":0,
   1085#                "rd_operations":0
   1086#                "flush_operations":0,
   1087#                "wr_total_times_ns":0
   1088#                "rd_total_times_ns":0
   1089#                "flush_total_times_ns":0,
   1090#                "rd_merged":0,
   1091#                "wr_merged":0,
   1092#                "account_invalid":false,
   1093#                "account_failed":false
   1094#             },
   1095#             "qdev": "/machine/unattached/device[16]"
   1096#          },
   1097#          {
   1098#             "device":"sd0",
   1099#             "stats":{
   1100#                "wr_highest_offset":0,
   1101#                "wr_bytes":0,
   1102#                "wr_operations":0,
   1103#                "rd_bytes":0,
   1104#                "rd_operations":0
   1105#                "flush_operations":0,
   1106#                "wr_total_times_ns":0
   1107#                "rd_total_times_ns":0
   1108#                "flush_total_times_ns":0,
   1109#                "rd_merged":0,
   1110#                "wr_merged":0,
   1111#                "account_invalid":false,
   1112#                "account_failed":false
   1113#             }
   1114#          }
   1115#       ]
   1116#    }
   1117#
   1118##
   1119{ 'command': 'query-blockstats',
   1120  'data': { '*query-nodes': 'bool' },
   1121  'returns': ['BlockStats'] }
   1122
   1123##
   1124# @BlockdevOnError:
   1125#
   1126# An enumeration of possible behaviors for errors on I/O operations.
   1127# The exact meaning depends on whether the I/O was initiated by a guest
   1128# or by a block job
   1129#
   1130# @report: for guest operations, report the error to the guest;
   1131#          for jobs, cancel the job
   1132#
   1133# @ignore: ignore the error, only report a QMP event (BLOCK_IO_ERROR
   1134#          or BLOCK_JOB_ERROR). The backup, mirror and commit block jobs retry
   1135#          the failing request later and may still complete successfully. The
   1136#          stream block job continues to stream and will complete with an
   1137#          error.
   1138#
   1139# @enospc: same as @stop on ENOSPC, same as @report otherwise.
   1140#
   1141# @stop: for guest operations, stop the virtual machine;
   1142#        for jobs, pause the job
   1143#
   1144# @auto: inherit the error handling policy of the backend (since: 2.7)
   1145#
   1146# Since: 1.3
   1147##
   1148{ 'enum': 'BlockdevOnError',
   1149  'data': ['report', 'ignore', 'enospc', 'stop', 'auto'] }
   1150
   1151##
   1152# @MirrorSyncMode:
   1153#
   1154# An enumeration of possible behaviors for the initial synchronization
   1155# phase of storage mirroring.
   1156#
   1157# @top: copies data in the topmost image to the destination
   1158#
   1159# @full: copies data from all images to the destination
   1160#
   1161# @none: only copy data written from now on
   1162#
   1163# @incremental: only copy data described by the dirty bitmap. (since: 2.4)
   1164#
   1165# @bitmap: only copy data described by the dirty bitmap. (since: 4.2)
   1166#          Behavior on completion is determined by the BitmapSyncMode.
   1167#
   1168# Since: 1.3
   1169##
   1170{ 'enum': 'MirrorSyncMode',
   1171  'data': ['top', 'full', 'none', 'incremental', 'bitmap'] }
   1172
   1173##
   1174# @BitmapSyncMode:
   1175#
   1176# An enumeration of possible behaviors for the synchronization of a bitmap
   1177# when used for data copy operations.
   1178#
   1179# @on-success: The bitmap is only synced when the operation is successful.
   1180#              This is the behavior always used for 'INCREMENTAL' backups.
   1181#
   1182# @never: The bitmap is never synchronized with the operation, and is
   1183#         treated solely as a read-only manifest of blocks to copy.
   1184#
   1185# @always: The bitmap is always synchronized with the operation,
   1186#          regardless of whether or not the operation was successful.
   1187#
   1188# Since: 4.2
   1189##
   1190{ 'enum': 'BitmapSyncMode',
   1191  'data': ['on-success', 'never', 'always'] }
   1192
   1193##
   1194# @MirrorCopyMode:
   1195#
   1196# An enumeration whose values tell the mirror block job when to
   1197# trigger writes to the target.
   1198#
   1199# @background: copy data in background only.
   1200#
   1201# @write-blocking: when data is written to the source, write it
   1202#                  (synchronously) to the target as well.  In
   1203#                  addition, data is copied in background just like in
   1204#                  @background mode.
   1205#
   1206# Since: 3.0
   1207##
   1208{ 'enum': 'MirrorCopyMode',
   1209  'data': ['background', 'write-blocking'] }
   1210
   1211##
   1212# @BlockJobInfo:
   1213#
   1214# Information about a long-running block device operation.
   1215#
   1216# @type: the job type ('stream' for image streaming)
   1217#
   1218# @device: The job identifier. Originally the device name but other
   1219#          values are allowed since QEMU 2.7
   1220#
   1221# @len: Estimated @offset value at the completion of the job. This value can
   1222#       arbitrarily change while the job is running, in both directions.
   1223#
   1224# @offset: Progress made until now. The unit is arbitrary and the value can
   1225#          only meaningfully be used for the ratio of @offset to @len. The
   1226#          value is monotonically increasing.
   1227#
   1228# @busy: false if the job is known to be in a quiescent state, with
   1229#        no pending I/O.  Since 1.3.
   1230#
   1231# @paused: whether the job is paused or, if @busy is true, will
   1232#          pause itself as soon as possible.  Since 1.3.
   1233#
   1234# @speed: the rate limit, bytes per second
   1235#
   1236# @io-status: the status of the job (since 1.3)
   1237#
   1238# @ready: true if the job may be completed (since 2.2)
   1239#
   1240# @status: Current job state/status (since 2.12)
   1241#
   1242# @auto-finalize: Job will finalize itself when PENDING, moving to
   1243#                 the CONCLUDED state. (since 2.12)
   1244#
   1245# @auto-dismiss: Job will dismiss itself when CONCLUDED, moving to the NULL
   1246#                state and disappearing from the query list. (since 2.12)
   1247#
   1248# @error: Error information if the job did not complete successfully.
   1249#         Not set if the job completed successfully. (since 2.12.1)
   1250#
   1251# Since: 1.1
   1252##
   1253{ 'struct': 'BlockJobInfo',
   1254  'data': {'type': 'str', 'device': 'str', 'len': 'int',
   1255           'offset': 'int', 'busy': 'bool', 'paused': 'bool', 'speed': 'int',
   1256           'io-status': 'BlockDeviceIoStatus', 'ready': 'bool',
   1257           'status': 'JobStatus',
   1258           'auto-finalize': 'bool', 'auto-dismiss': 'bool',
   1259           '*error': 'str' } }
   1260
   1261##
   1262# @query-block-jobs:
   1263#
   1264# Return information about long-running block device operations.
   1265#
   1266# Returns: a list of @BlockJobInfo for each active block job
   1267#
   1268# Since: 1.1
   1269##
   1270{ 'command': 'query-block-jobs', 'returns': ['BlockJobInfo'] }
   1271
   1272##
   1273# @block_resize:
   1274#
   1275# Resize a block image while a guest is running.
   1276#
   1277# Either @device or @node-name must be set but not both.
   1278#
   1279# @device: the name of the device to get the image resized
   1280#
   1281# @node-name: graph node name to get the image resized (Since 2.0)
   1282#
   1283# @size:  new image size in bytes
   1284#
   1285# Returns: - nothing on success
   1286#          - If @device is not a valid block device, DeviceNotFound
   1287#
   1288# Since: 0.14
   1289#
   1290# Example:
   1291#
   1292# -> { "execute": "block_resize",
   1293#      "arguments": { "device": "scratch", "size": 1073741824 } }
   1294# <- { "return": {} }
   1295#
   1296##
   1297{ 'command': 'block_resize',
   1298  'data': { '*device': 'str',
   1299            '*node-name': 'str',
   1300            'size': 'int' },
   1301  'coroutine': true }
   1302
   1303##
   1304# @NewImageMode:
   1305#
   1306# An enumeration that tells QEMU how to set the backing file path in
   1307# a new image file.
   1308#
   1309# @existing: QEMU should look for an existing image file.
   1310#
   1311# @absolute-paths: QEMU should create a new image with absolute paths
   1312#                  for the backing file. If there is no backing file available, the new
   1313#                  image will not be backed either.
   1314#
   1315# Since: 1.1
   1316##
   1317{ 'enum': 'NewImageMode',
   1318  'data': [ 'existing', 'absolute-paths' ] }
   1319
   1320##
   1321# @BlockdevSnapshotSync:
   1322#
   1323# Either @device or @node-name must be set but not both.
   1324#
   1325# @device: the name of the device to take a snapshot of.
   1326#
   1327# @node-name: graph node name to generate the snapshot from (Since 2.0)
   1328#
   1329# @snapshot-file: the target of the new overlay image. If the file
   1330#                 exists, or if it is a device, the overlay will be created in the
   1331#                 existing file/device. Otherwise, a new file will be created.
   1332#
   1333# @snapshot-node-name: the graph node name of the new image (Since 2.0)
   1334#
   1335# @format: the format of the overlay image, default is 'qcow2'.
   1336#
   1337# @mode: whether and how QEMU should create a new image, default is
   1338#        'absolute-paths'.
   1339##
   1340{ 'struct': 'BlockdevSnapshotSync',
   1341  'data': { '*device': 'str', '*node-name': 'str',
   1342            'snapshot-file': 'str', '*snapshot-node-name': 'str',
   1343            '*format': 'str', '*mode': 'NewImageMode' } }
   1344
   1345##
   1346# @BlockdevSnapshot:
   1347#
   1348# @node: device or node name that will have a snapshot taken.
   1349#
   1350# @overlay: reference to the existing block device that will become
   1351#           the overlay of @node, as part of taking the snapshot.
   1352#           It must not have a current backing file (this can be
   1353#           achieved by passing "backing": null to blockdev-add).
   1354#
   1355# Since: 2.5
   1356##
   1357{ 'struct': 'BlockdevSnapshot',
   1358  'data': { 'node': 'str', 'overlay': 'str' } }
   1359
   1360##
   1361# @BackupPerf:
   1362#
   1363# Optional parameters for backup. These parameters don't affect
   1364# functionality, but may significantly affect performance.
   1365#
   1366# @use-copy-range: Use copy offloading. Default false.
   1367#
   1368# @max-workers: Maximum number of parallel requests for the sustained background
   1369#               copying process. Doesn't influence copy-before-write operations.
   1370#               Default 64.
   1371#
   1372# @max-chunk: Maximum request length for the sustained background copying
   1373#             process. Doesn't influence copy-before-write operations.
   1374#             0 means unlimited. If max-chunk is non-zero then it should not be
   1375#             less than job cluster size which is calculated as maximum of
   1376#             target image cluster size and 64k. Default 0.
   1377#
   1378# Since: 6.0
   1379##
   1380{ 'struct': 'BackupPerf',
   1381  'data': { '*use-copy-range': 'bool',
   1382            '*max-workers': 'int', '*max-chunk': 'int64' } }
   1383
   1384##
   1385# @BackupCommon:
   1386#
   1387# @job-id: identifier for the newly-created block job. If
   1388#          omitted, the device name will be used. (Since 2.7)
   1389#
   1390# @device: the device name or node-name of a root node which should be copied.
   1391#
   1392# @sync: what parts of the disk image should be copied to the destination
   1393#        (all the disk, only the sectors allocated in the topmost image, from a
   1394#        dirty bitmap, or only new I/O).
   1395#
   1396# @speed: the maximum speed, in bytes per second. The default is 0,
   1397#         for unlimited.
   1398#
   1399# @bitmap: The name of a dirty bitmap to use.
   1400#          Must be present if sync is "bitmap" or "incremental".
   1401#          Can be present if sync is "full" or "top".
   1402#          Must not be present otherwise.
   1403#          (Since 2.4 (drive-backup), 3.1 (blockdev-backup))
   1404#
   1405# @bitmap-mode: Specifies the type of data the bitmap should contain after
   1406#               the operation concludes.
   1407#               Must be present if a bitmap was provided,
   1408#               Must NOT be present otherwise. (Since 4.2)
   1409#
   1410# @compress: true to compress data, if the target format supports it.
   1411#            (default: false) (since 2.8)
   1412#
   1413# @on-source-error: the action to take on an error on the source,
   1414#                   default 'report'.  'stop' and 'enospc' can only be used
   1415#                   if the block device supports io-status (see BlockInfo).
   1416#
   1417# @on-target-error: the action to take on an error on the target,
   1418#                   default 'report' (no limitations, since this applies to
   1419#                   a different block device than @device).
   1420#
   1421# @auto-finalize: When false, this job will wait in a PENDING state after it has
   1422#                 finished its work, waiting for @block-job-finalize before
   1423#                 making any block graph changes.
   1424#                 When true, this job will automatically
   1425#                 perform its abort or commit actions.
   1426#                 Defaults to true. (Since 2.12)
   1427#
   1428# @auto-dismiss: When false, this job will wait in a CONCLUDED state after it
   1429#                has completely ceased all work, and awaits @block-job-dismiss.
   1430#                When true, this job will automatically disappear from the query
   1431#                list without user intervention.
   1432#                Defaults to true. (Since 2.12)
   1433#
   1434# @filter-node-name: the node name that should be assigned to the
   1435#                    filter driver that the backup job inserts into the graph
   1436#                    above node specified by @drive. If this option is not given,
   1437#                    a node name is autogenerated. (Since: 4.2)
   1438#
   1439# @x-perf: Performance options. (Since 6.0)
   1440#
   1441# Note: @on-source-error and @on-target-error only affect background
   1442#       I/O.  If an error occurs during a guest write request, the device's
   1443#       rerror/werror actions will be used.
   1444#
   1445# Since: 4.2
   1446##
   1447{ 'struct': 'BackupCommon',
   1448  'data': { '*job-id': 'str', 'device': 'str',
   1449            'sync': 'MirrorSyncMode', '*speed': 'int',
   1450            '*bitmap': 'str', '*bitmap-mode': 'BitmapSyncMode',
   1451            '*compress': 'bool',
   1452            '*on-source-error': 'BlockdevOnError',
   1453            '*on-target-error': 'BlockdevOnError',
   1454            '*auto-finalize': 'bool', '*auto-dismiss': 'bool',
   1455            '*filter-node-name': 'str', '*x-perf': 'BackupPerf'  } }
   1456
   1457##
   1458# @DriveBackup:
   1459#
   1460# @target: the target of the new image. If the file exists, or if it
   1461#          is a device, the existing file/device will be used as the new
   1462#          destination.  If it does not exist, a new file will be created.
   1463#
   1464# @format: the format of the new destination, default is to
   1465#          probe if @mode is 'existing', else the format of the source
   1466#
   1467# @mode: whether and how QEMU should create a new image, default is
   1468#        'absolute-paths'.
   1469#
   1470# Since: 1.6
   1471##
   1472{ 'struct': 'DriveBackup',
   1473  'base': 'BackupCommon',
   1474  'data': { 'target': 'str',
   1475            '*format': 'str',
   1476            '*mode': 'NewImageMode' } }
   1477
   1478##
   1479# @BlockdevBackup:
   1480#
   1481# @target: the device name or node-name of the backup target node.
   1482#
   1483# Since: 2.3
   1484##
   1485{ 'struct': 'BlockdevBackup',
   1486  'base': 'BackupCommon',
   1487  'data': { 'target': 'str' } }
   1488
   1489##
   1490# @blockdev-snapshot-sync:
   1491#
   1492# Takes a synchronous snapshot of a block device.
   1493#
   1494# For the arguments, see the documentation of BlockdevSnapshotSync.
   1495#
   1496# Returns: - nothing on success
   1497#          - If @device is not a valid block device, DeviceNotFound
   1498#
   1499# Since: 0.14
   1500#
   1501# Example:
   1502#
   1503# -> { "execute": "blockdev-snapshot-sync",
   1504#      "arguments": { "device": "ide-hd0",
   1505#                     "snapshot-file":
   1506#                     "/some/place/my-image",
   1507#                     "format": "qcow2" } }
   1508# <- { "return": {} }
   1509#
   1510##
   1511{ 'command': 'blockdev-snapshot-sync',
   1512  'data': 'BlockdevSnapshotSync' }
   1513
   1514
   1515##
   1516# @blockdev-snapshot:
   1517#
   1518# Takes a snapshot of a block device.
   1519#
   1520# Take a snapshot, by installing 'node' as the backing image of
   1521# 'overlay'. Additionally, if 'node' is associated with a block
   1522# device, the block device changes to using 'overlay' as its new active
   1523# image.
   1524#
   1525# For the arguments, see the documentation of BlockdevSnapshot.
   1526#
   1527# Features:
   1528# @allow-write-only-overlay: If present, the check whether this operation is safe
   1529#                            was relaxed so that it can be used to change
   1530#                            backing file of a destination of a blockdev-mirror.
   1531#                            (since 5.0)
   1532#
   1533# Since: 2.5
   1534#
   1535# Example:
   1536#
   1537# -> { "execute": "blockdev-add",
   1538#      "arguments": { "driver": "qcow2",
   1539#                     "node-name": "node1534",
   1540#                     "file": { "driver": "file",
   1541#                               "filename": "hd1.qcow2" },
   1542#                     "backing": null } }
   1543#
   1544# <- { "return": {} }
   1545#
   1546# -> { "execute": "blockdev-snapshot",
   1547#      "arguments": { "node": "ide-hd0",
   1548#                     "overlay": "node1534" } }
   1549# <- { "return": {} }
   1550#
   1551##
   1552{ 'command': 'blockdev-snapshot',
   1553  'data': 'BlockdevSnapshot',
   1554  'features': [ 'allow-write-only-overlay' ] }
   1555
   1556##
   1557# @change-backing-file:
   1558#
   1559# Change the backing file in the image file metadata.  This does not
   1560# cause QEMU to reopen the image file to reparse the backing filename
   1561# (it may, however, perform a reopen to change permissions from
   1562# r/o -> r/w -> r/o, if needed). The new backing file string is written
   1563# into the image file metadata, and the QEMU internal strings are
   1564# updated.
   1565#
   1566# @image-node-name: The name of the block driver state node of the
   1567#                   image to modify. The "device" argument is used
   1568#                   to verify "image-node-name" is in the chain
   1569#                   described by "device".
   1570#
   1571# @device: The device name or node-name of the root node that owns
   1572#          image-node-name.
   1573#
   1574# @backing-file: The string to write as the backing file.  This
   1575#                string is not validated, so care should be taken
   1576#                when specifying the string or the image chain may
   1577#                not be able to be reopened again.
   1578#
   1579# Returns: - Nothing on success
   1580#          - If "device" does not exist or cannot be determined, DeviceNotFound
   1581#
   1582# Since: 2.1
   1583##
   1584{ 'command': 'change-backing-file',
   1585  'data': { 'device': 'str', 'image-node-name': 'str',
   1586            'backing-file': 'str' } }
   1587
   1588##
   1589# @block-commit:
   1590#
   1591# Live commit of data from overlay image nodes into backing nodes - i.e.,
   1592# writes data between 'top' and 'base' into 'base'.
   1593#
   1594# If top == base, that is an error.
   1595# If top has no overlays on top of it, or if it is in use by a writer,
   1596# the job will not be completed by itself.  The user needs to complete
   1597# the job with the block-job-complete command after getting the ready
   1598# event. (Since 2.0)
   1599#
   1600# If the base image is smaller than top, then the base image will be
   1601# resized to be the same size as top.  If top is smaller than the base
   1602# image, the base will not be truncated.  If you want the base image
   1603# size to match the size of the smaller top, you can safely truncate
   1604# it yourself once the commit operation successfully completes.
   1605#
   1606# @job-id: identifier for the newly-created block job. If
   1607#          omitted, the device name will be used. (Since 2.7)
   1608#
   1609# @device: the device name or node-name of a root node
   1610#
   1611# @base-node: The node name of the backing image to write data into.
   1612#             If not specified, this is the deepest backing image.
   1613#             (since: 3.1)
   1614#
   1615# @base: Same as @base-node, except that it is a file name rather than a node
   1616#        name. This must be the exact filename string that was used to open the
   1617#        node; other strings, even if addressing the same file, are not
   1618#        accepted
   1619#
   1620# @top-node: The node name of the backing image within the image chain
   1621#            which contains the topmost data to be committed down. If
   1622#            not specified, this is the active layer. (since: 3.1)
   1623#
   1624# @top: Same as @top-node, except that it is a file name rather than a node
   1625#       name. This must be the exact filename string that was used to open the
   1626#       node; other strings, even if addressing the same file, are not
   1627#       accepted
   1628#
   1629# @backing-file: The backing file string to write into the overlay
   1630#                image of 'top'.  If 'top' does not have an overlay
   1631#                image, or if 'top' is in use by a writer, specifying
   1632#                a backing file string is an error.
   1633#
   1634#                This filename is not validated.  If a pathname string
   1635#                is such that it cannot be resolved by QEMU, that
   1636#                means that subsequent QMP or HMP commands must use
   1637#                node-names for the image in question, as filename
   1638#                lookup methods will fail.
   1639#
   1640#                If not specified, QEMU will automatically determine
   1641#                the backing file string to use, or error out if
   1642#                there is no obvious choice. Care should be taken
   1643#                when specifying the string, to specify a valid
   1644#                filename or protocol.
   1645#                (Since 2.1)
   1646#
   1647# @speed: the maximum speed, in bytes per second
   1648#
   1649# @on-error: the action to take on an error. 'ignore' means that the request
   1650#            should be retried. (default: report; Since: 5.0)
   1651#
   1652# @filter-node-name: the node name that should be assigned to the
   1653#                    filter driver that the commit job inserts into the graph
   1654#                    above @top. If this option is not given, a node name is
   1655#                    autogenerated. (Since: 2.9)
   1656#
   1657# @auto-finalize: When false, this job will wait in a PENDING state after it has
   1658#                 finished its work, waiting for @block-job-finalize before
   1659#                 making any block graph changes.
   1660#                 When true, this job will automatically
   1661#                 perform its abort or commit actions.
   1662#                 Defaults to true. (Since 3.1)
   1663#
   1664# @auto-dismiss: When false, this job will wait in a CONCLUDED state after it
   1665#                has completely ceased all work, and awaits @block-job-dismiss.
   1666#                When true, this job will automatically disappear from the query
   1667#                list without user intervention.
   1668#                Defaults to true. (Since 3.1)
   1669#
   1670# Features:
   1671# @deprecated: Members @base and @top are deprecated.  Use @base-node
   1672#              and @top-node instead.
   1673#
   1674# Returns: - Nothing on success
   1675#          - If @device does not exist, DeviceNotFound
   1676#          - Any other error returns a GenericError.
   1677#
   1678# Since: 1.3
   1679#
   1680# Example:
   1681#
   1682# -> { "execute": "block-commit",
   1683#      "arguments": { "device": "virtio0",
   1684#                     "top": "/tmp/snap1.qcow2" } }
   1685# <- { "return": {} }
   1686#
   1687##
   1688{ 'command': 'block-commit',
   1689  'data': { '*job-id': 'str', 'device': 'str', '*base-node': 'str',
   1690            '*base': { 'type': 'str', 'features': [ 'deprecated' ] },
   1691            '*top-node': 'str',
   1692            '*top': { 'type': 'str', 'features': [ 'deprecated' ] },
   1693            '*backing-file': 'str', '*speed': 'int',
   1694            '*on-error': 'BlockdevOnError',
   1695            '*filter-node-name': 'str',
   1696            '*auto-finalize': 'bool', '*auto-dismiss': 'bool' } }
   1697
   1698##
   1699# @drive-backup:
   1700#
   1701# Start a point-in-time copy of a block device to a new destination.  The
   1702# status of ongoing drive-backup operations can be checked with
   1703# query-block-jobs where the BlockJobInfo.type field has the value 'backup'.
   1704# The operation can be stopped before it has completed using the
   1705# block-job-cancel command.
   1706#
   1707# Returns: - nothing on success
   1708#          - If @device is not a valid block device, GenericError
   1709#
   1710# Since: 1.6
   1711#
   1712# Example:
   1713#
   1714# -> { "execute": "drive-backup",
   1715#      "arguments": { "device": "drive0",
   1716#                     "sync": "full",
   1717#                     "target": "backup.img" } }
   1718# <- { "return": {} }
   1719#
   1720##
   1721{ 'command': 'drive-backup', 'boxed': true,
   1722  'data': 'DriveBackup' }
   1723
   1724##
   1725# @blockdev-backup:
   1726#
   1727# Start a point-in-time copy of a block device to a new destination.  The
   1728# status of ongoing blockdev-backup operations can be checked with
   1729# query-block-jobs where the BlockJobInfo.type field has the value 'backup'.
   1730# The operation can be stopped before it has completed using the
   1731# block-job-cancel command.
   1732#
   1733# Returns: - nothing on success
   1734#          - If @device is not a valid block device, DeviceNotFound
   1735#
   1736# Since: 2.3
   1737#
   1738# Example:
   1739# -> { "execute": "blockdev-backup",
   1740#      "arguments": { "device": "src-id",
   1741#                     "sync": "full",
   1742#                     "target": "tgt-id" } }
   1743# <- { "return": {} }
   1744#
   1745##
   1746{ 'command': 'blockdev-backup', 'boxed': true,
   1747  'data': 'BlockdevBackup' }
   1748
   1749
   1750##
   1751# @query-named-block-nodes:
   1752#
   1753# Get the named block driver list
   1754#
   1755# @flat: Omit the nested data about backing image ("backing-image" key) if true.
   1756#        Default is false (Since 5.0)
   1757#
   1758# Returns: the list of BlockDeviceInfo
   1759#
   1760# Since: 2.0
   1761#
   1762# Example:
   1763#
   1764# -> { "execute": "query-named-block-nodes" }
   1765# <- { "return": [ { "ro":false,
   1766#                    "drv":"qcow2",
   1767#                    "encrypted":false,
   1768#                    "file":"disks/test.qcow2",
   1769#                    "node-name": "my-node",
   1770#                    "backing_file_depth":1,
   1771#                    "bps":1000000,
   1772#                    "bps_rd":0,
   1773#                    "bps_wr":0,
   1774#                    "iops":1000000,
   1775#                    "iops_rd":0,
   1776#                    "iops_wr":0,
   1777#                    "bps_max": 8000000,
   1778#                    "bps_rd_max": 0,
   1779#                    "bps_wr_max": 0,
   1780#                    "iops_max": 0,
   1781#                    "iops_rd_max": 0,
   1782#                    "iops_wr_max": 0,
   1783#                    "iops_size": 0,
   1784#                    "write_threshold": 0,
   1785#                    "image":{
   1786#                       "filename":"disks/test.qcow2",
   1787#                       "format":"qcow2",
   1788#                       "virtual-size":2048000,
   1789#                       "backing_file":"base.qcow2",
   1790#                       "full-backing-filename":"disks/base.qcow2",
   1791#                       "backing-filename-format":"qcow2",
   1792#                       "snapshots":[
   1793#                          {
   1794#                             "id": "1",
   1795#                             "name": "snapshot1",
   1796#                             "vm-state-size": 0,
   1797#                             "date-sec": 10000200,
   1798#                             "date-nsec": 12,
   1799#                             "vm-clock-sec": 206,
   1800#                             "vm-clock-nsec": 30
   1801#                          }
   1802#                       ],
   1803#                       "backing-image":{
   1804#                           "filename":"disks/base.qcow2",
   1805#                           "format":"qcow2",
   1806#                           "virtual-size":2048000
   1807#                       }
   1808#                    } } ] }
   1809#
   1810##
   1811{ 'command': 'query-named-block-nodes',
   1812  'returns': [ 'BlockDeviceInfo' ],
   1813  'data': { '*flat': 'bool' } }
   1814
   1815##
   1816# @XDbgBlockGraphNodeType:
   1817#
   1818# @block-backend: corresponds to BlockBackend
   1819#
   1820# @block-job: corresponds to BlockJob
   1821#
   1822# @block-driver: corresponds to BlockDriverState
   1823#
   1824# Since: 4.0
   1825##
   1826{ 'enum': 'XDbgBlockGraphNodeType',
   1827  'data': [ 'block-backend', 'block-job', 'block-driver' ] }
   1828
   1829##
   1830# @XDbgBlockGraphNode:
   1831#
   1832# @id: Block graph node identifier. This @id is generated only for
   1833#      x-debug-query-block-graph and does not relate to any other identifiers in
   1834#      Qemu.
   1835#
   1836# @type: Type of graph node. Can be one of block-backend, block-job or
   1837#        block-driver-state.
   1838#
   1839# @name: Human readable name of the node. Corresponds to node-name for
   1840#        block-driver-state nodes; is not guaranteed to be unique in the whole
   1841#        graph (with block-jobs and block-backends).
   1842#
   1843# Since: 4.0
   1844##
   1845{ 'struct': 'XDbgBlockGraphNode',
   1846  'data': { 'id': 'uint64', 'type': 'XDbgBlockGraphNodeType', 'name': 'str' } }
   1847
   1848##
   1849# @BlockPermission:
   1850#
   1851# Enum of base block permissions.
   1852#
   1853# @consistent-read: A user that has the "permission" of consistent reads is
   1854#                   guaranteed that their view of the contents of the block
   1855#                   device is complete and self-consistent, representing the
   1856#                   contents of a disk at a specific point.
   1857#                   For most block devices (including their backing files) this
   1858#                   is true, but the property cannot be maintained in a few
   1859#                   situations like for intermediate nodes of a commit block
   1860#                   job.
   1861#
   1862# @write: This permission is required to change the visible disk contents.
   1863#
   1864# @write-unchanged: This permission (which is weaker than BLK_PERM_WRITE) is
   1865#                   both enough and required for writes to the block node when
   1866#                   the caller promises that the visible disk content doesn't
   1867#                   change.
   1868#                   As the BLK_PERM_WRITE permission is strictly stronger,
   1869#                   either is sufficient to perform an unchanging write.
   1870#
   1871# @resize: This permission is required to change the size of a block node.
   1872#
   1873# @graph-mod: This permission is required to change the node that this
   1874#             BdrvChild points to.
   1875#
   1876# Since: 4.0
   1877##
   1878{ 'enum': 'BlockPermission',
   1879  'data': [ 'consistent-read', 'write', 'write-unchanged', 'resize',
   1880            'graph-mod' ] }
   1881##
   1882# @XDbgBlockGraphEdge:
   1883#
   1884# Block Graph edge description for x-debug-query-block-graph.
   1885#
   1886# @parent: parent id
   1887#
   1888# @child: child id
   1889#
   1890# @name: name of the relation (examples are 'file' and 'backing')
   1891#
   1892# @perm: granted permissions for the parent operating on the child
   1893#
   1894# @shared-perm: permissions that can still be granted to other users of the
   1895#               child while it is still attached to this parent
   1896#
   1897# Since: 4.0
   1898##
   1899{ 'struct': 'XDbgBlockGraphEdge',
   1900  'data': { 'parent': 'uint64', 'child': 'uint64',
   1901            'name': 'str', 'perm': [ 'BlockPermission' ],
   1902            'shared-perm': [ 'BlockPermission' ] } }
   1903
   1904##
   1905# @XDbgBlockGraph:
   1906#
   1907# Block Graph - list of nodes and list of edges.
   1908#
   1909# Since: 4.0
   1910##
   1911{ 'struct': 'XDbgBlockGraph',
   1912  'data': { 'nodes': ['XDbgBlockGraphNode'], 'edges': ['XDbgBlockGraphEdge'] } }
   1913
   1914##
   1915# @x-debug-query-block-graph:
   1916#
   1917# Get the block graph.
   1918#
   1919# Since: 4.0
   1920##
   1921{ 'command': 'x-debug-query-block-graph', 'returns': 'XDbgBlockGraph' }
   1922
   1923##
   1924# @drive-mirror:
   1925#
   1926# Start mirroring a block device's writes to a new destination. target
   1927# specifies the target of the new image. If the file exists, or if it
   1928# is a device, it will be used as the new destination for writes. If
   1929# it does not exist, a new file will be created. format specifies the
   1930# format of the mirror image, default is to probe if mode='existing',
   1931# else the format of the source.
   1932#
   1933# Returns: - nothing on success
   1934#          - If @device is not a valid block device, GenericError
   1935#
   1936# Since: 1.3
   1937#
   1938# Example:
   1939#
   1940# -> { "execute": "drive-mirror",
   1941#      "arguments": { "device": "ide-hd0",
   1942#                     "target": "/some/place/my-image",
   1943#                     "sync": "full",
   1944#                     "format": "qcow2" } }
   1945# <- { "return": {} }
   1946#
   1947##
   1948{ 'command': 'drive-mirror', 'boxed': true,
   1949  'data': 'DriveMirror' }
   1950
   1951##
   1952# @DriveMirror:
   1953#
   1954# A set of parameters describing drive mirror setup.
   1955#
   1956# @job-id: identifier for the newly-created block job. If
   1957#          omitted, the device name will be used. (Since 2.7)
   1958#
   1959# @device:  the device name or node-name of a root node whose writes should be
   1960#           mirrored.
   1961#
   1962# @target: the target of the new image. If the file exists, or if it
   1963#          is a device, the existing file/device will be used as the new
   1964#          destination.  If it does not exist, a new file will be created.
   1965#
   1966# @format: the format of the new destination, default is to
   1967#          probe if @mode is 'existing', else the format of the source
   1968#
   1969# @node-name: the new block driver state node name in the graph
   1970#             (Since 2.1)
   1971#
   1972# @replaces: with sync=full graph node name to be replaced by the new
   1973#            image when a whole image copy is done. This can be used to repair
   1974#            broken Quorum files.  By default, @device is replaced, although
   1975#            implicitly created filters on it are kept. (Since 2.1)
   1976#
   1977# @mode: whether and how QEMU should create a new image, default is
   1978#        'absolute-paths'.
   1979#
   1980# @speed:  the maximum speed, in bytes per second
   1981#
   1982# @sync: what parts of the disk image should be copied to the destination
   1983#        (all the disk, only the sectors allocated in the topmost image, or
   1984#        only new I/O).
   1985#
   1986# @granularity: granularity of the dirty bitmap, default is 64K
   1987#               if the image format doesn't have clusters, 4K if the clusters
   1988#               are smaller than that, else the cluster size.  Must be a
   1989#               power of 2 between 512 and 64M (since 1.4).
   1990#
   1991# @buf-size: maximum amount of data in flight from source to
   1992#            target (since 1.4).
   1993#
   1994# @on-source-error: the action to take on an error on the source,
   1995#                   default 'report'.  'stop' and 'enospc' can only be used
   1996#                   if the block device supports io-status (see BlockInfo).
   1997#
   1998# @on-target-error: the action to take on an error on the target,
   1999#                   default 'report' (no limitations, since this applies to
   2000#                   a different block device than @device).
   2001# @unmap: Whether to try to unmap target sectors where source has
   2002#         only zero. If true, and target unallocated sectors will read as zero,
   2003#         target image sectors will be unmapped; otherwise, zeroes will be
   2004#         written. Both will result in identical contents.
   2005#         Default is true. (Since 2.4)
   2006#
   2007# @copy-mode: when to copy data to the destination; defaults to 'background'
   2008#             (Since: 3.0)
   2009#
   2010# @auto-finalize: When false, this job will wait in a PENDING state after it has
   2011#                 finished its work, waiting for @block-job-finalize before
   2012#                 making any block graph changes.
   2013#                 When true, this job will automatically
   2014#                 perform its abort or commit actions.
   2015#                 Defaults to true. (Since 3.1)
   2016#
   2017# @auto-dismiss: When false, this job will wait in a CONCLUDED state after it
   2018#                has completely ceased all work, and awaits @block-job-dismiss.
   2019#                When true, this job will automatically disappear from the query
   2020#                list without user intervention.
   2021#                Defaults to true. (Since 3.1)
   2022# Since: 1.3
   2023##
   2024{ 'struct': 'DriveMirror',
   2025  'data': { '*job-id': 'str', 'device': 'str', 'target': 'str',
   2026            '*format': 'str', '*node-name': 'str', '*replaces': 'str',
   2027            'sync': 'MirrorSyncMode', '*mode': 'NewImageMode',
   2028            '*speed': 'int', '*granularity': 'uint32',
   2029            '*buf-size': 'int', '*on-source-error': 'BlockdevOnError',
   2030            '*on-target-error': 'BlockdevOnError',
   2031            '*unmap': 'bool', '*copy-mode': 'MirrorCopyMode',
   2032            '*auto-finalize': 'bool', '*auto-dismiss': 'bool' } }
   2033
   2034##
   2035# @BlockDirtyBitmap:
   2036#
   2037# @node: name of device/node which the bitmap is tracking
   2038#
   2039# @name: name of the dirty bitmap
   2040#
   2041# Since: 2.4
   2042##
   2043{ 'struct': 'BlockDirtyBitmap',
   2044  'data': { 'node': 'str', 'name': 'str' } }
   2045
   2046##
   2047# @BlockDirtyBitmapAdd:
   2048#
   2049# @node: name of device/node which the bitmap is tracking
   2050#
   2051# @name: name of the dirty bitmap (must be less than 1024 bytes)
   2052#
   2053# @granularity: the bitmap granularity, default is 64k for
   2054#               block-dirty-bitmap-add
   2055#
   2056# @persistent: the bitmap is persistent, i.e. it will be saved to the
   2057#              corresponding block device image file on its close. For now only
   2058#              Qcow2 disks support persistent bitmaps. Default is false for
   2059#              block-dirty-bitmap-add. (Since: 2.10)
   2060#
   2061# @disabled: the bitmap is created in the disabled state, which means that
   2062#            it will not track drive changes. The bitmap may be enabled with
   2063#            block-dirty-bitmap-enable. Default is false. (Since: 4.0)
   2064#
   2065# Since: 2.4
   2066##
   2067{ 'struct': 'BlockDirtyBitmapAdd',
   2068  'data': { 'node': 'str', 'name': 'str', '*granularity': 'uint32',
   2069            '*persistent': 'bool', '*disabled': 'bool' } }
   2070
   2071##
   2072# @BlockDirtyBitmapMergeSource:
   2073#
   2074# @local: name of the bitmap, attached to the same node as target bitmap.
   2075#
   2076# @external: bitmap with specified node
   2077#
   2078# Since: 4.1
   2079##
   2080{ 'alternate': 'BlockDirtyBitmapMergeSource',
   2081  'data': { 'local': 'str',
   2082            'external': 'BlockDirtyBitmap' } }
   2083
   2084##
   2085# @BlockDirtyBitmapMerge:
   2086#
   2087# @node: name of device/node which the @target bitmap is tracking
   2088#
   2089# @target: name of the destination dirty bitmap
   2090#
   2091# @bitmaps: name(s) of the source dirty bitmap(s) at @node and/or fully
   2092#           specified BlockDirtyBitmap elements. The latter are supported
   2093#           since 4.1.
   2094#
   2095# Since: 4.0
   2096##
   2097{ 'struct': 'BlockDirtyBitmapMerge',
   2098  'data': { 'node': 'str', 'target': 'str',
   2099            'bitmaps': ['BlockDirtyBitmapMergeSource'] } }
   2100
   2101##
   2102# @block-dirty-bitmap-add:
   2103#
   2104# Create a dirty bitmap with a name on the node, and start tracking the writes.
   2105#
   2106# Returns: - nothing on success
   2107#          - If @node is not a valid block device or node, DeviceNotFound
   2108#          - If @name is already taken, GenericError with an explanation
   2109#
   2110# Since: 2.4
   2111#
   2112# Example:
   2113#
   2114# -> { "execute": "block-dirty-bitmap-add",
   2115#      "arguments": { "node": "drive0", "name": "bitmap0" } }
   2116# <- { "return": {} }
   2117#
   2118##
   2119{ 'command': 'block-dirty-bitmap-add',
   2120  'data': 'BlockDirtyBitmapAdd' }
   2121
   2122##
   2123# @block-dirty-bitmap-remove:
   2124#
   2125# Stop write tracking and remove the dirty bitmap that was created
   2126# with block-dirty-bitmap-add. If the bitmap is persistent, remove it from its
   2127# storage too.
   2128#
   2129# Returns: - nothing on success
   2130#          - If @node is not a valid block device or node, DeviceNotFound
   2131#          - If @name is not found, GenericError with an explanation
   2132#          - if @name is frozen by an operation, GenericError
   2133#
   2134# Since: 2.4
   2135#
   2136# Example:
   2137#
   2138# -> { "execute": "block-dirty-bitmap-remove",
   2139#      "arguments": { "node": "drive0", "name": "bitmap0" } }
   2140# <- { "return": {} }
   2141#
   2142##
   2143{ 'command': 'block-dirty-bitmap-remove',
   2144  'data': 'BlockDirtyBitmap' }
   2145
   2146##
   2147# @block-dirty-bitmap-clear:
   2148#
   2149# Clear (reset) a dirty bitmap on the device, so that an incremental
   2150# backup from this point in time forward will only backup clusters
   2151# modified after this clear operation.
   2152#
   2153# Returns: - nothing on success
   2154#          - If @node is not a valid block device, DeviceNotFound
   2155#          - If @name is not found, GenericError with an explanation
   2156#
   2157# Since: 2.4
   2158#
   2159# Example:
   2160#
   2161# -> { "execute": "block-dirty-bitmap-clear",
   2162#      "arguments": { "node": "drive0", "name": "bitmap0" } }
   2163# <- { "return": {} }
   2164#
   2165##
   2166{ 'command': 'block-dirty-bitmap-clear',
   2167  'data': 'BlockDirtyBitmap' }
   2168
   2169##
   2170# @block-dirty-bitmap-enable:
   2171#
   2172# Enables a dirty bitmap so that it will begin tracking disk changes.
   2173#
   2174# Returns: - nothing on success
   2175#          - If @node is not a valid block device, DeviceNotFound
   2176#          - If @name is not found, GenericError with an explanation
   2177#
   2178# Since: 4.0
   2179#
   2180# Example:
   2181#
   2182# -> { "execute": "block-dirty-bitmap-enable",
   2183#      "arguments": { "node": "drive0", "name": "bitmap0" } }
   2184# <- { "return": {} }
   2185#
   2186##
   2187{ 'command': 'block-dirty-bitmap-enable',
   2188  'data': 'BlockDirtyBitmap' }
   2189
   2190##
   2191# @block-dirty-bitmap-disable:
   2192#
   2193# Disables a dirty bitmap so that it will stop tracking disk changes.
   2194#
   2195# Returns: - nothing on success
   2196#          - If @node is not a valid block device, DeviceNotFound
   2197#          - If @name is not found, GenericError with an explanation
   2198#
   2199# Since: 4.0
   2200#
   2201# Example:
   2202#
   2203# -> { "execute": "block-dirty-bitmap-disable",
   2204#      "arguments": { "node": "drive0", "name": "bitmap0" } }
   2205# <- { "return": {} }
   2206#
   2207##
   2208{ 'command': 'block-dirty-bitmap-disable',
   2209  'data': 'BlockDirtyBitmap' }
   2210
   2211##
   2212# @block-dirty-bitmap-merge:
   2213#
   2214# Merge dirty bitmaps listed in @bitmaps to the @target dirty bitmap.
   2215# Dirty bitmaps in @bitmaps will be unchanged, except if it also appears
   2216# as the @target bitmap. Any bits already set in @target will still be
   2217# set after the merge, i.e., this operation does not clear the target.
   2218# On error, @target is unchanged.
   2219#
   2220# The resulting bitmap will count as dirty any clusters that were dirty in any
   2221# of the source bitmaps. This can be used to achieve backup checkpoints, or in
   2222# simpler usages, to copy bitmaps.
   2223#
   2224# Returns: - nothing on success
   2225#          - If @node is not a valid block device, DeviceNotFound
   2226#          - If any bitmap in @bitmaps or @target is not found, GenericError
   2227#          - If any of the bitmaps have different sizes or granularities,
   2228#            GenericError
   2229#
   2230# Since: 4.0
   2231#
   2232# Example:
   2233#
   2234# -> { "execute": "block-dirty-bitmap-merge",
   2235#      "arguments": { "node": "drive0", "target": "bitmap0",
   2236#                     "bitmaps": ["bitmap1"] } }
   2237# <- { "return": {} }
   2238#
   2239##
   2240{ 'command': 'block-dirty-bitmap-merge',
   2241  'data': 'BlockDirtyBitmapMerge' }
   2242
   2243##
   2244# @BlockDirtyBitmapSha256:
   2245#
   2246# SHA256 hash of dirty bitmap data
   2247#
   2248# @sha256: ASCII representation of SHA256 bitmap hash
   2249#
   2250# Since: 2.10
   2251##
   2252{ 'struct': 'BlockDirtyBitmapSha256',
   2253  'data': {'sha256': 'str'} }
   2254
   2255##
   2256# @x-debug-block-dirty-bitmap-sha256:
   2257#
   2258# Get bitmap SHA256.
   2259#
   2260# Returns: - BlockDirtyBitmapSha256 on success
   2261#          - If @node is not a valid block device, DeviceNotFound
   2262#          - If @name is not found or if hashing has failed, GenericError with an
   2263#            explanation
   2264#
   2265# Since: 2.10
   2266##
   2267{ 'command': 'x-debug-block-dirty-bitmap-sha256',
   2268  'data': 'BlockDirtyBitmap', 'returns': 'BlockDirtyBitmapSha256' }
   2269
   2270##
   2271# @blockdev-mirror:
   2272#
   2273# Start mirroring a block device's writes to a new destination.
   2274#
   2275# @job-id: identifier for the newly-created block job. If
   2276#          omitted, the device name will be used. (Since 2.7)
   2277#
   2278# @device: The device name or node-name of a root node whose writes should be
   2279#          mirrored.
   2280#
   2281# @target: the id or node-name of the block device to mirror to. This mustn't be
   2282#          attached to guest.
   2283#
   2284# @replaces: with sync=full graph node name to be replaced by the new
   2285#            image when a whole image copy is done. This can be used to repair
   2286#            broken Quorum files.  By default, @device is replaced, although
   2287#            implicitly created filters on it are kept.
   2288#
   2289# @speed:  the maximum speed, in bytes per second
   2290#
   2291# @sync: what parts of the disk image should be copied to the destination
   2292#        (all the disk, only the sectors allocated in the topmost image, or
   2293#        only new I/O).
   2294#
   2295# @granularity: granularity of the dirty bitmap, default is 64K
   2296#               if the image format doesn't have clusters, 4K if the clusters
   2297#               are smaller than that, else the cluster size.  Must be a
   2298#               power of 2 between 512 and 64M
   2299#
   2300# @buf-size: maximum amount of data in flight from source to
   2301#            target
   2302#
   2303# @on-source-error: the action to take on an error on the source,
   2304#                   default 'report'.  'stop' and 'enospc' can only be used
   2305#                   if the block device supports io-status (see BlockInfo).
   2306#
   2307# @on-target-error: the action to take on an error on the target,
   2308#                   default 'report' (no limitations, since this applies to
   2309#                   a different block device than @device).
   2310#
   2311# @filter-node-name: the node name that should be assigned to the
   2312#                    filter driver that the mirror job inserts into the graph
   2313#                    above @device. If this option is not given, a node name is
   2314#                    autogenerated. (Since: 2.9)
   2315#
   2316# @copy-mode: when to copy data to the destination; defaults to 'background'
   2317#             (Since: 3.0)
   2318#
   2319# @auto-finalize: When false, this job will wait in a PENDING state after it has
   2320#                 finished its work, waiting for @block-job-finalize before
   2321#                 making any block graph changes.
   2322#                 When true, this job will automatically
   2323#                 perform its abort or commit actions.
   2324#                 Defaults to true. (Since 3.1)
   2325#
   2326# @auto-dismiss: When false, this job will wait in a CONCLUDED state after it
   2327#                has completely ceased all work, and awaits @block-job-dismiss.
   2328#                When true, this job will automatically disappear from the query
   2329#                list without user intervention.
   2330#                Defaults to true. (Since 3.1)
   2331# Returns: nothing on success.
   2332#
   2333# Since: 2.6
   2334#
   2335# Example:
   2336#
   2337# -> { "execute": "blockdev-mirror",
   2338#      "arguments": { "device": "ide-hd0",
   2339#                     "target": "target0",
   2340#                     "sync": "full" } }
   2341# <- { "return": {} }
   2342#
   2343##
   2344{ 'command': 'blockdev-mirror',
   2345  'data': { '*job-id': 'str', 'device': 'str', 'target': 'str',
   2346            '*replaces': 'str',
   2347            'sync': 'MirrorSyncMode',
   2348            '*speed': 'int', '*granularity': 'uint32',
   2349            '*buf-size': 'int', '*on-source-error': 'BlockdevOnError',
   2350            '*on-target-error': 'BlockdevOnError',
   2351            '*filter-node-name': 'str',
   2352            '*copy-mode': 'MirrorCopyMode',
   2353            '*auto-finalize': 'bool', '*auto-dismiss': 'bool' } }
   2354
   2355##
   2356# @BlockIOThrottle:
   2357#
   2358# A set of parameters describing block throttling.
   2359#
   2360# @device: Block device name
   2361#
   2362# @id: The name or QOM path of the guest device (since: 2.8)
   2363#
   2364# @bps: total throughput limit in bytes per second
   2365#
   2366# @bps_rd: read throughput limit in bytes per second
   2367#
   2368# @bps_wr: write throughput limit in bytes per second
   2369#
   2370# @iops: total I/O operations per second
   2371#
   2372# @iops_rd: read I/O operations per second
   2373#
   2374# @iops_wr: write I/O operations per second
   2375#
   2376# @bps_max: total throughput limit during bursts,
   2377#           in bytes (Since 1.7)
   2378#
   2379# @bps_rd_max: read throughput limit during bursts,
   2380#              in bytes (Since 1.7)
   2381#
   2382# @bps_wr_max: write throughput limit during bursts,
   2383#              in bytes (Since 1.7)
   2384#
   2385# @iops_max: total I/O operations per second during bursts,
   2386#            in bytes (Since 1.7)
   2387#
   2388# @iops_rd_max: read I/O operations per second during bursts,
   2389#               in bytes (Since 1.7)
   2390#
   2391# @iops_wr_max: write I/O operations per second during bursts,
   2392#               in bytes (Since 1.7)
   2393#
   2394# @bps_max_length: maximum length of the @bps_max burst
   2395#                  period, in seconds. It must only
   2396#                  be set if @bps_max is set as well.
   2397#                  Defaults to 1. (Since 2.6)
   2398#
   2399# @bps_rd_max_length: maximum length of the @bps_rd_max
   2400#                     burst period, in seconds. It must only
   2401#                     be set if @bps_rd_max is set as well.
   2402#                     Defaults to 1. (Since 2.6)
   2403#
   2404# @bps_wr_max_length: maximum length of the @bps_wr_max
   2405#                     burst period, in seconds. It must only
   2406#                     be set if @bps_wr_max is set as well.
   2407#                     Defaults to 1. (Since 2.6)
   2408#
   2409# @iops_max_length: maximum length of the @iops burst
   2410#                   period, in seconds. It must only
   2411#                   be set if @iops_max is set as well.
   2412#                   Defaults to 1. (Since 2.6)
   2413#
   2414# @iops_rd_max_length: maximum length of the @iops_rd_max
   2415#                      burst period, in seconds. It must only
   2416#                      be set if @iops_rd_max is set as well.
   2417#                      Defaults to 1. (Since 2.6)
   2418#
   2419# @iops_wr_max_length: maximum length of the @iops_wr_max
   2420#                      burst period, in seconds. It must only
   2421#                      be set if @iops_wr_max is set as well.
   2422#                      Defaults to 1. (Since 2.6)
   2423#
   2424# @iops_size: an I/O size in bytes (Since 1.7)
   2425#
   2426# @group: throttle group name (Since 2.4)
   2427#
   2428# Features:
   2429# @deprecated: Member @device is deprecated.  Use @id instead.
   2430#
   2431# Since: 1.1
   2432##
   2433{ 'struct': 'BlockIOThrottle',
   2434  'data': { '*device': { 'type': 'str', 'features': [ 'deprecated' ] },
   2435            '*id': 'str', 'bps': 'int', 'bps_rd': 'int',
   2436            'bps_wr': 'int', 'iops': 'int', 'iops_rd': 'int', 'iops_wr': 'int',
   2437            '*bps_max': 'int', '*bps_rd_max': 'int',
   2438            '*bps_wr_max': 'int', '*iops_max': 'int',
   2439            '*iops_rd_max': 'int', '*iops_wr_max': 'int',
   2440            '*bps_max_length': 'int', '*bps_rd_max_length': 'int',
   2441            '*bps_wr_max_length': 'int', '*iops_max_length': 'int',
   2442            '*iops_rd_max_length': 'int', '*iops_wr_max_length': 'int',
   2443            '*iops_size': 'int', '*group': 'str' } }
   2444
   2445##
   2446# @ThrottleLimits:
   2447#
   2448# Limit parameters for throttling.
   2449# Since some limit combinations are illegal, limits should always be set in one
   2450# transaction. All fields are optional. When setting limits, if a field is
   2451# missing the current value is not changed.
   2452#
   2453# @iops-total: limit total I/O operations per second
   2454# @iops-total-max: I/O operations burst
   2455# @iops-total-max-length: length of the iops-total-max burst period, in seconds
   2456#                         It must only be set if @iops-total-max is set as well.
   2457# @iops-read: limit read operations per second
   2458# @iops-read-max: I/O operations read burst
   2459# @iops-read-max-length: length of the iops-read-max burst period, in seconds
   2460#                        It must only be set if @iops-read-max is set as well.
   2461# @iops-write: limit write operations per second
   2462# @iops-write-max: I/O operations write burst
   2463# @iops-write-max-length: length of the iops-write-max burst period, in seconds
   2464#                         It must only be set if @iops-write-max is set as well.
   2465# @bps-total: limit total bytes per second
   2466# @bps-total-max: total bytes burst
   2467# @bps-total-max-length: length of the bps-total-max burst period, in seconds.
   2468#                        It must only be set if @bps-total-max is set as well.
   2469# @bps-read: limit read bytes per second
   2470# @bps-read-max: total bytes read burst
   2471# @bps-read-max-length: length of the bps-read-max burst period, in seconds
   2472#                       It must only be set if @bps-read-max is set as well.
   2473# @bps-write: limit write bytes per second
   2474# @bps-write-max: total bytes write burst
   2475# @bps-write-max-length: length of the bps-write-max burst period, in seconds
   2476#                        It must only be set if @bps-write-max is set as well.
   2477# @iops-size: when limiting by iops max size of an I/O in bytes
   2478#
   2479# Since: 2.11
   2480##
   2481{ 'struct': 'ThrottleLimits',
   2482  'data': { '*iops-total' : 'int', '*iops-total-max' : 'int',
   2483            '*iops-total-max-length' : 'int', '*iops-read' : 'int',
   2484            '*iops-read-max' : 'int', '*iops-read-max-length' : 'int',
   2485            '*iops-write' : 'int', '*iops-write-max' : 'int',
   2486            '*iops-write-max-length' : 'int', '*bps-total' : 'int',
   2487            '*bps-total-max' : 'int', '*bps-total-max-length' : 'int',
   2488            '*bps-read' : 'int', '*bps-read-max' : 'int',
   2489            '*bps-read-max-length' : 'int', '*bps-write' : 'int',
   2490            '*bps-write-max' : 'int', '*bps-write-max-length' : 'int',
   2491            '*iops-size' : 'int' } }
   2492
   2493##
   2494# @ThrottleGroupProperties:
   2495#
   2496# Properties for throttle-group objects.
   2497#
   2498# The options starting with x- are aliases for the same key without x- in
   2499# the @limits object. As indicated by the x- prefix, this is not a stable
   2500# interface and may be removed or changed incompatibly in the future. Use
   2501# @limits for a supported stable interface.
   2502#
   2503# @limits: limits to apply for this throttle group
   2504#
   2505# Since: 2.11
   2506##
   2507{ 'struct': 'ThrottleGroupProperties',
   2508  'data': { '*limits': 'ThrottleLimits',
   2509            '*x-iops-total' : 'int', '*x-iops-total-max' : 'int',
   2510            '*x-iops-total-max-length' : 'int', '*x-iops-read' : 'int',
   2511            '*x-iops-read-max' : 'int', '*x-iops-read-max-length' : 'int',
   2512            '*x-iops-write' : 'int', '*x-iops-write-max' : 'int',
   2513            '*x-iops-write-max-length' : 'int', '*x-bps-total' : 'int',
   2514            '*x-bps-total-max' : 'int', '*x-bps-total-max-length' : 'int',
   2515            '*x-bps-read' : 'int', '*x-bps-read-max' : 'int',
   2516            '*x-bps-read-max-length' : 'int', '*x-bps-write' : 'int',
   2517            '*x-bps-write-max' : 'int', '*x-bps-write-max-length' : 'int',
   2518            '*x-iops-size' : 'int' } }
   2519
   2520##
   2521# @block-stream:
   2522#
   2523# Copy data from a backing file into a block device.
   2524#
   2525# The block streaming operation is performed in the background until the entire
   2526# backing file has been copied.  This command returns immediately once streaming
   2527# has started.  The status of ongoing block streaming operations can be checked
   2528# with query-block-jobs.  The operation can be stopped before it has completed
   2529# using the block-job-cancel command.
   2530#
   2531# The node that receives the data is called the top image, can be located in
   2532# any part of the chain (but always above the base image; see below) and can be
   2533# specified using its device or node name. Earlier qemu versions only allowed
   2534# 'device' to name the top level node; presence of the 'base-node' parameter
   2535# during introspection can be used as a witness of the enhanced semantics
   2536# of 'device'.
   2537#
   2538# If a base file is specified then sectors are not copied from that base file and
   2539# its backing chain.  This can be used to stream a subset of the backing file
   2540# chain instead of flattening the entire image.
   2541# When streaming completes the image file will have the base file as its backing
   2542# file, unless that node was changed while the job was running.  In that case,
   2543# base's parent's backing (or filtered, whichever exists) child (i.e., base at
   2544# the beginning of the job) will be the new backing file.
   2545#
   2546# On successful completion the image file is updated to drop the backing file
   2547# and the BLOCK_JOB_COMPLETED event is emitted.
   2548#
   2549# In case @device is a filter node, block-stream modifies the first non-filter
   2550# overlay node below it to point to the new backing node instead of modifying
   2551# @device itself.
   2552#
   2553# @job-id: identifier for the newly-created block job. If
   2554#          omitted, the device name will be used. (Since 2.7)
   2555#
   2556# @device: the device or node name of the top image
   2557#
   2558# @base: the common backing file name.
   2559#        It cannot be set if @base-node or @bottom is also set.
   2560#
   2561# @base-node: the node name of the backing file.
   2562#             It cannot be set if @base or @bottom is also set. (Since 2.8)
   2563#
   2564# @bottom: the last node in the chain that should be streamed into
   2565#          top. It cannot be set if @base or @base-node is also set.
   2566#          It cannot be filter node. (Since 6.0)
   2567#
   2568# @backing-file: The backing file string to write into the top
   2569#                image. This filename is not validated.
   2570#
   2571#                If a pathname string is such that it cannot be
   2572#                resolved by QEMU, that means that subsequent QMP or
   2573#                HMP commands must use node-names for the image in
   2574#                question, as filename lookup methods will fail.
   2575#
   2576#                If not specified, QEMU will automatically determine
   2577#                the backing file string to use, or error out if there
   2578#                is no obvious choice.  Care should be taken when
   2579#                specifying the string, to specify a valid filename or
   2580#                protocol.
   2581#                (Since 2.1)
   2582#
   2583# @speed: the maximum speed, in bytes per second
   2584#
   2585# @on-error: the action to take on an error (default report).
   2586#            'stop' and 'enospc' can only be used if the block device
   2587#            supports io-status (see BlockInfo).  Since 1.3.
   2588#
   2589# @filter-node-name: the node name that should be assigned to the
   2590#                    filter driver that the stream job inserts into the graph
   2591#                    above @device. If this option is not given, a node name is
   2592#                    autogenerated. (Since: 6.0)
   2593#
   2594# @auto-finalize: When false, this job will wait in a PENDING state after it has
   2595#                 finished its work, waiting for @block-job-finalize before
   2596#                 making any block graph changes.
   2597#                 When true, this job will automatically
   2598#                 perform its abort or commit actions.
   2599#                 Defaults to true. (Since 3.1)
   2600#
   2601# @auto-dismiss: When false, this job will wait in a CONCLUDED state after it
   2602#                has completely ceased all work, and awaits @block-job-dismiss.
   2603#                When true, this job will automatically disappear from the query
   2604#                list without user intervention.
   2605#                Defaults to true. (Since 3.1)
   2606#
   2607# Returns: - Nothing on success.
   2608#          - If @device does not exist, DeviceNotFound.
   2609#
   2610# Since: 1.1
   2611#
   2612# Example:
   2613#
   2614# -> { "execute": "block-stream",
   2615#      "arguments": { "device": "virtio0",
   2616#                     "base": "/tmp/master.qcow2" } }
   2617# <- { "return": {} }
   2618#
   2619##
   2620{ 'command': 'block-stream',
   2621  'data': { '*job-id': 'str', 'device': 'str', '*base': 'str',
   2622            '*base-node': 'str', '*backing-file': 'str', '*bottom': 'str',
   2623            '*speed': 'int', '*on-error': 'BlockdevOnError',
   2624            '*filter-node-name': 'str',
   2625            '*auto-finalize': 'bool', '*auto-dismiss': 'bool' } }
   2626
   2627##
   2628# @block-job-set-speed:
   2629#
   2630# Set maximum speed for a background block operation.
   2631#
   2632# This command can only be issued when there is an active block job.
   2633#
   2634# Throttling can be disabled by setting the speed to 0.
   2635#
   2636# @device: The job identifier. This used to be a device name (hence
   2637#          the name of the parameter), but since QEMU 2.7 it can have
   2638#          other values.
   2639#
   2640# @speed: the maximum speed, in bytes per second, or 0 for unlimited.
   2641#         Defaults to 0.
   2642#
   2643# Returns: - Nothing on success
   2644#          - If no background operation is active on this device, DeviceNotActive
   2645#
   2646# Since: 1.1
   2647##
   2648{ 'command': 'block-job-set-speed',
   2649  'data': { 'device': 'str', 'speed': 'int' } }
   2650
   2651##
   2652# @block-job-cancel:
   2653#
   2654# Stop an active background block operation.
   2655#
   2656# This command returns immediately after marking the active background block
   2657# operation for cancellation.  It is an error to call this command if no
   2658# operation is in progress.
   2659#
   2660# The operation will cancel as soon as possible and then emit the
   2661# BLOCK_JOB_CANCELLED event.  Before that happens the job is still visible when
   2662# enumerated using query-block-jobs.
   2663#
   2664# Note that if you issue 'block-job-cancel' after 'drive-mirror' has indicated
   2665# (via the event BLOCK_JOB_READY) that the source and destination are
   2666# synchronized, then the event triggered by this command changes to
   2667# BLOCK_JOB_COMPLETED, to indicate that the mirroring has ended and the
   2668# destination now has a point-in-time copy tied to the time of the cancellation.
   2669#
   2670# For streaming, the image file retains its backing file unless the streaming
   2671# operation happens to complete just as it is being cancelled.  A new streaming
   2672# operation can be started at a later time to finish copying all data from the
   2673# backing file.
   2674#
   2675# @device: The job identifier. This used to be a device name (hence
   2676#          the name of the parameter), but since QEMU 2.7 it can have
   2677#          other values.
   2678#
   2679# @force: If true, and the job has already emitted the event BLOCK_JOB_READY,
   2680#         abandon the job immediately (even if it is paused) instead of waiting
   2681#         for the destination to complete its final synchronization (since 1.3)
   2682#
   2683# Returns: - Nothing on success
   2684#          - If no background operation is active on this device, DeviceNotActive
   2685#
   2686# Since: 1.1
   2687##
   2688{ 'command': 'block-job-cancel', 'data': { 'device': 'str', '*force': 'bool' } }
   2689
   2690##
   2691# @block-job-pause:
   2692#
   2693# Pause an active background block operation.
   2694#
   2695# This command returns immediately after marking the active background block
   2696# operation for pausing.  It is an error to call this command if no
   2697# operation is in progress or if the job is already paused.
   2698#
   2699# The operation will pause as soon as possible.  No event is emitted when
   2700# the operation is actually paused.  Cancelling a paused job automatically
   2701# resumes it.
   2702#
   2703# @device: The job identifier. This used to be a device name (hence
   2704#          the name of the parameter), but since QEMU 2.7 it can have
   2705#          other values.
   2706#
   2707# Returns: - Nothing on success
   2708#          - If no background operation is active on this device, DeviceNotActive
   2709#
   2710# Since: 1.3
   2711##
   2712{ 'command': 'block-job-pause', 'data': { 'device': 'str' } }
   2713
   2714##
   2715# @block-job-resume:
   2716#
   2717# Resume an active background block operation.
   2718#
   2719# This command returns immediately after resuming a paused background block
   2720# operation.  It is an error to call this command if no operation is in
   2721# progress or if the job is not paused.
   2722#
   2723# This command also clears the error status of the job.
   2724#
   2725# @device: The job identifier. This used to be a device name (hence
   2726#          the name of the parameter), but since QEMU 2.7 it can have
   2727#          other values.
   2728#
   2729# Returns: - Nothing on success
   2730#          - If no background operation is active on this device, DeviceNotActive
   2731#
   2732# Since: 1.3
   2733##
   2734{ 'command': 'block-job-resume', 'data': { 'device': 'str' } }
   2735
   2736##
   2737# @block-job-complete:
   2738#
   2739# Manually trigger completion of an active background block operation.  This
   2740# is supported for drive mirroring, where it also switches the device to
   2741# write to the target path only.  The ability to complete is signaled with
   2742# a BLOCK_JOB_READY event.
   2743#
   2744# This command completes an active background block operation synchronously.
   2745# The ordering of this command's return with the BLOCK_JOB_COMPLETED event
   2746# is not defined.  Note that if an I/O error occurs during the processing of
   2747# this command: 1) the command itself will fail; 2) the error will be processed
   2748# according to the rerror/werror arguments that were specified when starting
   2749# the operation.
   2750#
   2751# A cancelled or paused job cannot be completed.
   2752#
   2753# @device: The job identifier. This used to be a device name (hence
   2754#          the name of the parameter), but since QEMU 2.7 it can have
   2755#          other values.
   2756#
   2757# Returns: - Nothing on success
   2758#          - If no background operation is active on this device, DeviceNotActive
   2759#
   2760# Since: 1.3
   2761##
   2762{ 'command': 'block-job-complete', 'data': { 'device': 'str' } }
   2763
   2764##
   2765# @block-job-dismiss:
   2766#
   2767# For jobs that have already concluded, remove them from the block-job-query
   2768# list. This command only needs to be run for jobs which were started with
   2769# QEMU 2.12+ job lifetime management semantics.
   2770#
   2771# This command will refuse to operate on any job that has not yet reached
   2772# its terminal state, JOB_STATUS_CONCLUDED. For jobs that make use of the
   2773# BLOCK_JOB_READY event, block-job-cancel or block-job-complete will still need
   2774# to be used as appropriate.
   2775#
   2776# @id: The job identifier.
   2777#
   2778# Returns: Nothing on success
   2779#
   2780# Since: 2.12
   2781##
   2782{ 'command': 'block-job-dismiss', 'data': { 'id': 'str' } }
   2783
   2784##
   2785# @block-job-finalize:
   2786#
   2787# Once a job that has manual=true reaches the pending state, it can be
   2788# instructed to finalize any graph changes and do any necessary cleanup
   2789# via this command.
   2790# For jobs in a transaction, instructing one job to finalize will force
   2791# ALL jobs in the transaction to finalize, so it is only necessary to instruct
   2792# a single member job to finalize.
   2793#
   2794# @id: The job identifier.
   2795#
   2796# Returns: Nothing on success
   2797#
   2798# Since: 2.12
   2799##
   2800{ 'command': 'block-job-finalize', 'data': { 'id': 'str' } }
   2801
   2802##
   2803# @BlockdevDiscardOptions:
   2804#
   2805# Determines how to handle discard requests.
   2806#
   2807# @ignore: Ignore the request
   2808# @unmap: Forward as an unmap request
   2809#
   2810# Since: 2.9
   2811##
   2812{ 'enum': 'BlockdevDiscardOptions',
   2813  'data': [ 'ignore', 'unmap' ] }
   2814
   2815##
   2816# @BlockdevDetectZeroesOptions:
   2817#
   2818# Describes the operation mode for the automatic conversion of plain
   2819# zero writes by the OS to driver specific optimized zero write commands.
   2820#
   2821# @off: Disabled (default)
   2822# @on: Enabled
   2823# @unmap: Enabled and even try to unmap blocks if possible. This requires
   2824#         also that @BlockdevDiscardOptions is set to unmap for this device.
   2825#
   2826# Since: 2.1
   2827##
   2828{ 'enum': 'BlockdevDetectZeroesOptions',
   2829  'data': [ 'off', 'on', 'unmap' ] }
   2830
   2831##
   2832# @BlockdevAioOptions:
   2833#
   2834# Selects the AIO backend to handle I/O requests
   2835#
   2836# @threads: Use qemu's thread pool
   2837# @native: Use native AIO backend (only Linux and Windows)
   2838# @io_uring: Use linux io_uring (since 5.0)
   2839#
   2840# Since: 2.9
   2841##
   2842{ 'enum': 'BlockdevAioOptions',
   2843  'data': [ 'threads', 'native',
   2844            { 'name': 'io_uring', 'if': 'CONFIG_LINUX_IO_URING' } ] }
   2845
   2846##
   2847# @BlockdevCacheOptions:
   2848#
   2849# Includes cache-related options for block devices
   2850#
   2851# @direct: enables use of O_DIRECT (bypass the host page cache;
   2852#          default: false)
   2853# @no-flush: ignore any flush requests for the device (default:
   2854#            false)
   2855#
   2856# Since: 2.9
   2857##
   2858{ 'struct': 'BlockdevCacheOptions',
   2859  'data': { '*direct': 'bool',
   2860            '*no-flush': 'bool' } }
   2861
   2862##
   2863# @BlockdevDriver:
   2864#
   2865# Drivers that are supported in block device operations.
   2866#
   2867# @throttle: Since 2.11
   2868# @nvme: Since 2.12
   2869# @copy-on-read: Since 3.0
   2870# @blklogwrites: Since 3.0
   2871# @blkreplay: Since 4.2
   2872# @compress: Since 5.0
   2873# @copy-before-write: Since 6.2
   2874#
   2875# Since: 2.9
   2876##
   2877{ 'enum': 'BlockdevDriver',
   2878  'data': [ 'blkdebug', 'blklogwrites', 'blkreplay', 'blkverify', 'bochs',
   2879            'cloop', 'compress', 'copy-before-write', 'copy-on-read', 'dmg',
   2880            'file', 'ftp', 'ftps', 'gluster',
   2881            {'name': 'host_cdrom', 'if': 'HAVE_HOST_BLOCK_DEVICE' },
   2882            {'name': 'host_device', 'if': 'HAVE_HOST_BLOCK_DEVICE' },
   2883            'http', 'https', 'iscsi',
   2884            'luks', 'nbd', 'nfs', 'null-aio', 'null-co', 'nvme', 'parallels',
   2885            'preallocate', 'qcow', 'qcow2', 'qed', 'quorum', 'raw', 'rbd',
   2886            { 'name': 'replication', 'if': 'CONFIG_REPLICATION' },
   2887            'ssh', 'throttle', 'vdi', 'vhdx', 'vmdk', 'vpc', 'vvfat' ] }
   2888
   2889##
   2890# @BlockdevOptionsFile:
   2891#
   2892# Driver specific block device options for the file backend.
   2893#
   2894# @filename: path to the image file
   2895# @pr-manager: the id for the object that will handle persistent reservations
   2896#              for this device (default: none, forward the commands via SG_IO;
   2897#              since 2.11)
   2898# @aio: AIO backend (default: threads) (since: 2.8)
   2899# @locking: whether to enable file locking. If set to 'auto', only enable
   2900#           when Open File Descriptor (OFD) locking API is available
   2901#           (default: auto, since 2.10)
   2902# @drop-cache: invalidate page cache during live migration.  This prevents
   2903#              stale data on the migration destination with cache.direct=off.
   2904#              Currently only supported on Linux hosts.
   2905#              (default: on, since: 4.0)
   2906# @x-check-cache-dropped: whether to check that page cache was dropped on live
   2907#                         migration.  May cause noticeable delays if the image
   2908#                         file is large, do not use in production.
   2909#                         (default: off) (since: 3.0)
   2910#
   2911# Features:
   2912# @dynamic-auto-read-only: If present, enabled auto-read-only means that the
   2913#                          driver will open the image read-only at first,
   2914#                          dynamically reopen the image file read-write when
   2915#                          the first writer is attached to the node and reopen
   2916#                          read-only when the last writer is detached. This
   2917#                          allows giving QEMU write permissions only on demand
   2918#                          when an operation actually needs write access.
   2919#
   2920# Since: 2.9
   2921##
   2922{ 'struct': 'BlockdevOptionsFile',
   2923  'data': { 'filename': 'str',
   2924            '*pr-manager': 'str',
   2925            '*locking': 'OnOffAuto',
   2926            '*aio': 'BlockdevAioOptions',
   2927            '*drop-cache': {'type': 'bool',
   2928                            'if': 'CONFIG_LINUX'},
   2929            '*x-check-cache-dropped': 'bool' },
   2930  'features': [ { 'name': 'dynamic-auto-read-only',
   2931                  'if': 'CONFIG_POSIX' } ] }
   2932
   2933##
   2934# @BlockdevOptionsNull:
   2935#
   2936# Driver specific block device options for the null backend.
   2937#
   2938# @size: size of the device in bytes.
   2939# @latency-ns: emulated latency (in nanoseconds) in processing
   2940#              requests. Default to zero which completes requests immediately.
   2941#              (Since 2.4)
   2942# @read-zeroes: if true, reads from the device produce zeroes; if false, the
   2943#               buffer is left unchanged. (default: false; since: 4.1)
   2944#
   2945# Since: 2.9
   2946##
   2947{ 'struct': 'BlockdevOptionsNull',
   2948  'data': { '*size': 'int', '*latency-ns': 'uint64', '*read-zeroes': 'bool' } }
   2949
   2950##
   2951# @BlockdevOptionsNVMe:
   2952#
   2953# Driver specific block device options for the NVMe backend.
   2954#
   2955# @device: PCI controller address of the NVMe device in
   2956#          format hhhh:bb:ss.f (host:bus:slot.function)
   2957# @namespace: namespace number of the device, starting from 1.
   2958#
   2959# Note that the PCI @device must have been unbound from any host
   2960# kernel driver before instructing QEMU to add the blockdev.
   2961#
   2962# Since: 2.12
   2963##
   2964{ 'struct': 'BlockdevOptionsNVMe',
   2965  'data': { 'device': 'str', 'namespace': 'int' } }
   2966
   2967##
   2968# @BlockdevOptionsVVFAT:
   2969#
   2970# Driver specific block device options for the vvfat protocol.
   2971#
   2972# @dir: directory to be exported as FAT image
   2973# @fat-type: FAT type: 12, 16 or 32
   2974# @floppy: whether to export a floppy image (true) or
   2975#          partitioned hard disk (false; default)
   2976# @label: set the volume label, limited to 11 bytes. FAT16 and
   2977#         FAT32 traditionally have some restrictions on labels, which are
   2978#         ignored by most operating systems. Defaults to "QEMU VVFAT".
   2979#         (since 2.4)
   2980# @rw: whether to allow write operations (default: false)
   2981#
   2982# Since: 2.9
   2983##
   2984{ 'struct': 'BlockdevOptionsVVFAT',
   2985  'data': { 'dir': 'str', '*fat-type': 'int', '*floppy': 'bool',
   2986            '*label': 'str', '*rw': 'bool' } }
   2987
   2988##
   2989# @BlockdevOptionsGenericFormat:
   2990#
   2991# Driver specific block device options for image format that have no option
   2992# besides their data source.
   2993#
   2994# @file: reference to or definition of the data source block device
   2995#
   2996# Since: 2.9
   2997##
   2998{ 'struct': 'BlockdevOptionsGenericFormat',
   2999  'data': { 'file': 'BlockdevRef' } }
   3000
   3001##
   3002# @BlockdevOptionsLUKS:
   3003#
   3004# Driver specific block device options for LUKS.
   3005#
   3006# @key-secret: the ID of a QCryptoSecret object providing
   3007#              the decryption key (since 2.6). Mandatory except when
   3008#              doing a metadata-only probe of the image.
   3009#
   3010# Since: 2.9
   3011##
   3012{ 'struct': 'BlockdevOptionsLUKS',
   3013  'base': 'BlockdevOptionsGenericFormat',
   3014  'data': { '*key-secret': 'str' } }
   3015
   3016
   3017##
   3018# @BlockdevOptionsGenericCOWFormat:
   3019#
   3020# Driver specific block device options for image format that have no option
   3021# besides their data source and an optional backing file.
   3022#
   3023# @backing: reference to or definition of the backing file block
   3024#           device, null disables the backing file entirely.
   3025#           Defaults to the backing file stored the image file.
   3026#
   3027# Since: 2.9
   3028##
   3029{ 'struct': 'BlockdevOptionsGenericCOWFormat',
   3030  'base': 'BlockdevOptionsGenericFormat',
   3031  'data': { '*backing': 'BlockdevRefOrNull' } }
   3032
   3033##
   3034# @Qcow2OverlapCheckMode:
   3035#
   3036# General overlap check modes.
   3037#
   3038# @none: Do not perform any checks
   3039#
   3040# @constant: Perform only checks which can be done in constant time and
   3041#            without reading anything from disk
   3042#
   3043# @cached: Perform only checks which can be done without reading anything
   3044#          from disk
   3045#
   3046# @all: Perform all available overlap checks
   3047#
   3048# Since: 2.9
   3049##
   3050{ 'enum': 'Qcow2OverlapCheckMode',
   3051  'data': [ 'none', 'constant', 'cached', 'all' ] }
   3052
   3053##
   3054# @Qcow2OverlapCheckFlags:
   3055#
   3056# Structure of flags for each metadata structure. Setting a field to 'true'
   3057# makes qemu guard that structure against unintended overwriting. The default
   3058# value is chosen according to the template given.
   3059#
   3060# @template: Specifies a template mode which can be adjusted using the other
   3061#            flags, defaults to 'cached'
   3062#
   3063# @bitmap-directory: since 3.0
   3064#
   3065# Since: 2.9
   3066##
   3067{ 'struct': 'Qcow2OverlapCheckFlags',
   3068  'data': { '*template':         'Qcow2OverlapCheckMode',
   3069            '*main-header':      'bool',
   3070            '*active-l1':        'bool',
   3071            '*active-l2':        'bool',
   3072            '*refcount-table':   'bool',
   3073            '*refcount-block':   'bool',
   3074            '*snapshot-table':   'bool',
   3075            '*inactive-l1':      'bool',
   3076            '*inactive-l2':      'bool',
   3077            '*bitmap-directory': 'bool' } }
   3078
   3079##
   3080# @Qcow2OverlapChecks:
   3081#
   3082# Specifies which metadata structures should be guarded against unintended
   3083# overwriting.
   3084#
   3085# @flags: set of flags for separate specification of each metadata structure
   3086#         type
   3087#
   3088# @mode: named mode which chooses a specific set of flags
   3089#
   3090# Since: 2.9
   3091##
   3092{ 'alternate': 'Qcow2OverlapChecks',
   3093  'data': { 'flags': 'Qcow2OverlapCheckFlags',
   3094            'mode':  'Qcow2OverlapCheckMode' } }
   3095
   3096##
   3097# @BlockdevQcowEncryptionFormat:
   3098#
   3099# @aes: AES-CBC with plain64 initialization vectors
   3100#
   3101# Since: 2.10
   3102##
   3103{ 'enum': 'BlockdevQcowEncryptionFormat',
   3104  'data': [ 'aes' ] }
   3105
   3106##
   3107# @BlockdevQcowEncryption:
   3108#
   3109# Since: 2.10
   3110##
   3111{ 'union': 'BlockdevQcowEncryption',
   3112  'base': { 'format': 'BlockdevQcowEncryptionFormat' },
   3113  'discriminator': 'format',
   3114  'data': { 'aes': 'QCryptoBlockOptionsQCow' } }
   3115
   3116##
   3117# @BlockdevOptionsQcow:
   3118#
   3119# Driver specific block device options for qcow.
   3120#
   3121# @encrypt: Image decryption options. Mandatory for
   3122#           encrypted images, except when doing a metadata-only
   3123#           probe of the image.
   3124#
   3125# Since: 2.10
   3126##
   3127{ 'struct': 'BlockdevOptionsQcow',
   3128  'base': 'BlockdevOptionsGenericCOWFormat',
   3129  'data': { '*encrypt': 'BlockdevQcowEncryption' } }
   3130
   3131
   3132
   3133##
   3134# @BlockdevQcow2EncryptionFormat:
   3135#
   3136# @aes: AES-CBC with plain64 initialization vectors
   3137#
   3138# Since: 2.10
   3139##
   3140{ 'enum': 'BlockdevQcow2EncryptionFormat',
   3141  'data': [ 'aes', 'luks' ] }
   3142
   3143##
   3144# @BlockdevQcow2Encryption:
   3145#
   3146# Since: 2.10
   3147##
   3148{ 'union': 'BlockdevQcow2Encryption',
   3149  'base': { 'format': 'BlockdevQcow2EncryptionFormat' },
   3150  'discriminator': 'format',
   3151  'data': { 'aes': 'QCryptoBlockOptionsQCow',
   3152            'luks': 'QCryptoBlockOptionsLUKS'} }
   3153
   3154##
   3155# @BlockdevOptionsPreallocate:
   3156#
   3157# Filter driver intended to be inserted between format and protocol node
   3158# and do preallocation in protocol node on write.
   3159#
   3160# @prealloc-align: on preallocation, align file length to this number,
   3161#                  default 1048576 (1M)
   3162#
   3163# @prealloc-size: how much to preallocate, default 134217728 (128M)
   3164#
   3165# Since: 6.0
   3166##
   3167{ 'struct': 'BlockdevOptionsPreallocate',
   3168  'base': 'BlockdevOptionsGenericFormat',
   3169  'data': { '*prealloc-align': 'int', '*prealloc-size': 'int' } }
   3170
   3171##
   3172# @BlockdevOptionsQcow2:
   3173#
   3174# Driver specific block device options for qcow2.
   3175#
   3176# @lazy-refcounts: whether to enable the lazy refcounts
   3177#                  feature (default is taken from the image file)
   3178#
   3179# @pass-discard-request: whether discard requests to the qcow2
   3180#                        device should be forwarded to the data source
   3181#
   3182# @pass-discard-snapshot: whether discard requests for the data source
   3183#                         should be issued when a snapshot operation (e.g.
   3184#                         deleting a snapshot) frees clusters in the qcow2 file
   3185#
   3186# @pass-discard-other: whether discard requests for the data source
   3187#                      should be issued on other occasions where a cluster
   3188#                      gets freed
   3189#
   3190# @overlap-check: which overlap checks to perform for writes
   3191#                 to the image, defaults to 'cached' (since 2.2)
   3192#
   3193# @cache-size: the maximum total size of the L2 table and
   3194#              refcount block caches in bytes (since 2.2)
   3195#
   3196# @l2-cache-size: the maximum size of the L2 table cache in
   3197#                 bytes (since 2.2)
   3198#
   3199# @l2-cache-entry-size: the size of each entry in the L2 cache in
   3200#                       bytes. It must be a power of two between 512
   3201#                       and the cluster size. The default value is
   3202#                       the cluster size (since 2.12)
   3203#
   3204# @refcount-cache-size: the maximum size of the refcount block cache
   3205#                       in bytes (since 2.2)
   3206#
   3207# @cache-clean-interval: clean unused entries in the L2 and refcount
   3208#                        caches. The interval is in seconds. The default value
   3209#                        is 600 on supporting platforms, and 0 on other
   3210#                        platforms. 0 disables this feature. (since 2.5)
   3211#
   3212# @encrypt: Image decryption options. Mandatory for
   3213#           encrypted images, except when doing a metadata-only
   3214#           probe of the image. (since 2.10)
   3215#
   3216# @data-file: reference to or definition of the external data file.
   3217#             This may only be specified for images that require an
   3218#             external data file. If it is not specified for such
   3219#             an image, the data file name is loaded from the image
   3220#             file. (since 4.0)
   3221#
   3222# Since: 2.9
   3223##
   3224{ 'struct': 'BlockdevOptionsQcow2',
   3225  'base': 'BlockdevOptionsGenericCOWFormat',
   3226  'data': { '*lazy-refcounts': 'bool',
   3227            '*pass-discard-request': 'bool',
   3228            '*pass-discard-snapshot': 'bool',
   3229            '*pass-discard-other': 'bool',
   3230            '*overlap-check': 'Qcow2OverlapChecks',
   3231            '*cache-size': 'int',
   3232            '*l2-cache-size': 'int',
   3233            '*l2-cache-entry-size': 'int',
   3234            '*refcount-cache-size': 'int',
   3235            '*cache-clean-interval': 'int',
   3236            '*encrypt': 'BlockdevQcow2Encryption',
   3237            '*data-file': 'BlockdevRef' } }
   3238
   3239##
   3240# @SshHostKeyCheckMode:
   3241#
   3242# @none: Don't check the host key at all
   3243# @hash: Compare the host key with a given hash
   3244# @known_hosts: Check the host key against the known_hosts file
   3245#
   3246# Since: 2.12
   3247##
   3248{ 'enum': 'SshHostKeyCheckMode',
   3249  'data': [ 'none', 'hash', 'known_hosts' ] }
   3250
   3251##
   3252# @SshHostKeyCheckHashType:
   3253#
   3254# @md5: The given hash is an md5 hash
   3255# @sha1: The given hash is an sha1 hash
   3256# @sha256: The given hash is an sha256 hash
   3257#
   3258# Since: 2.12
   3259##
   3260{ 'enum': 'SshHostKeyCheckHashType',
   3261  'data': [ 'md5', 'sha1', 'sha256' ] }
   3262
   3263##
   3264# @SshHostKeyHash:
   3265#
   3266# @type: The hash algorithm used for the hash
   3267# @hash: The expected hash value
   3268#
   3269# Since: 2.12
   3270##
   3271{ 'struct': 'SshHostKeyHash',
   3272  'data': { 'type': 'SshHostKeyCheckHashType',
   3273            'hash': 'str' }}
   3274
   3275##
   3276# @SshHostKeyCheck:
   3277#
   3278# Since: 2.12
   3279##
   3280{ 'union': 'SshHostKeyCheck',
   3281  'base': { 'mode': 'SshHostKeyCheckMode' },
   3282  'discriminator': 'mode',
   3283  'data': { 'hash': 'SshHostKeyHash' } }
   3284
   3285##
   3286# @BlockdevOptionsSsh:
   3287#
   3288# @server:              host address
   3289#
   3290# @path:                path to the image on the host
   3291#
   3292# @user:                user as which to connect, defaults to current
   3293#                       local user name
   3294#
   3295# @host-key-check:      Defines how and what to check the host key against
   3296#                       (default: known_hosts)
   3297#
   3298# Since: 2.9
   3299##
   3300{ 'struct': 'BlockdevOptionsSsh',
   3301  'data': { 'server': 'InetSocketAddress',
   3302            'path': 'str',
   3303            '*user': 'str',
   3304            '*host-key-check': 'SshHostKeyCheck' } }
   3305
   3306
   3307##
   3308# @BlkdebugEvent:
   3309#
   3310# Trigger events supported by blkdebug.
   3311#
   3312# @l1_shrink_write_table: write zeros to the l1 table to shrink image.
   3313#                         (since 2.11)
   3314#
   3315# @l1_shrink_free_l2_clusters: discard the l2 tables. (since 2.11)
   3316#
   3317# @cor_write: a write due to copy-on-read (since 2.11)
   3318#
   3319# @cluster_alloc_space: an allocation of file space for a cluster (since 4.1)
   3320#
   3321# @none: triggers once at creation of the blkdebug node (since 4.1)
   3322#
   3323# Since: 2.9
   3324##
   3325{ 'enum': 'BlkdebugEvent', 'prefix': 'BLKDBG',
   3326  'data': [ 'l1_update', 'l1_grow_alloc_table', 'l1_grow_write_table',
   3327            'l1_grow_activate_table', 'l2_load', 'l2_update',
   3328            'l2_update_compressed', 'l2_alloc_cow_read', 'l2_alloc_write',
   3329            'read_aio', 'read_backing_aio', 'read_compressed', 'write_aio',
   3330            'write_compressed', 'vmstate_load', 'vmstate_save', 'cow_read',
   3331            'cow_write', 'reftable_load', 'reftable_grow', 'reftable_update',
   3332            'refblock_load', 'refblock_update', 'refblock_update_part',
   3333            'refblock_alloc', 'refblock_alloc_hookup', 'refblock_alloc_write',
   3334            'refblock_alloc_write_blocks', 'refblock_alloc_write_table',
   3335            'refblock_alloc_switch_table', 'cluster_alloc',
   3336            'cluster_alloc_bytes', 'cluster_free', 'flush_to_os',
   3337            'flush_to_disk', 'pwritev_rmw_head', 'pwritev_rmw_after_head',
   3338            'pwritev_rmw_tail', 'pwritev_rmw_after_tail', 'pwritev',
   3339            'pwritev_zero', 'pwritev_done', 'empty_image_prepare',
   3340            'l1_shrink_write_table', 'l1_shrink_free_l2_clusters',
   3341            'cor_write', 'cluster_alloc_space', 'none'] }
   3342
   3343##
   3344# @BlkdebugIOType:
   3345#
   3346# Kinds of I/O that blkdebug can inject errors in.
   3347#
   3348# @read: .bdrv_co_preadv()
   3349#
   3350# @write: .bdrv_co_pwritev()
   3351#
   3352# @write-zeroes: .bdrv_co_pwrite_zeroes()
   3353#
   3354# @discard: .bdrv_co_pdiscard()
   3355#
   3356# @flush: .bdrv_co_flush_to_disk()
   3357#
   3358# @block-status: .bdrv_co_block_status()
   3359#
   3360# Since: 4.1
   3361##
   3362{ 'enum': 'BlkdebugIOType', 'prefix': 'BLKDEBUG_IO_TYPE',
   3363  'data': [ 'read', 'write', 'write-zeroes', 'discard', 'flush',
   3364            'block-status' ] }
   3365
   3366##
   3367# @BlkdebugInjectErrorOptions:
   3368#
   3369# Describes a single error injection for blkdebug.
   3370#
   3371# @event: trigger event
   3372#
   3373# @state: the state identifier blkdebug needs to be in to
   3374#         actually trigger the event; defaults to "any"
   3375#
   3376# @iotype: the type of I/O operations on which this error should
   3377#          be injected; defaults to "all read, write,
   3378#          write-zeroes, discard, and flush operations"
   3379#          (since: 4.1)
   3380#
   3381# @errno: error identifier (errno) to be returned; defaults to
   3382#         EIO
   3383#
   3384# @sector: specifies the sector index which has to be affected
   3385#          in order to actually trigger the event; defaults to "any
   3386#          sector"
   3387#
   3388# @once: disables further events after this one has been
   3389#        triggered; defaults to false
   3390#
   3391# @immediately: fail immediately; defaults to false
   3392#
   3393# Since: 2.9
   3394##
   3395{ 'struct': 'BlkdebugInjectErrorOptions',
   3396  'data': { 'event': 'BlkdebugEvent',
   3397            '*state': 'int',
   3398            '*iotype': 'BlkdebugIOType',
   3399            '*errno': 'int',
   3400            '*sector': 'int',
   3401            '*once': 'bool',
   3402            '*immediately': 'bool' } }
   3403
   3404##
   3405# @BlkdebugSetStateOptions:
   3406#
   3407# Describes a single state-change event for blkdebug.
   3408#
   3409# @event: trigger event
   3410#
   3411# @state: the current state identifier blkdebug needs to be in;
   3412#         defaults to "any"
   3413#
   3414# @new_state: the state identifier blkdebug is supposed to assume if
   3415#             this event is triggered
   3416#
   3417# Since: 2.9
   3418##
   3419{ 'struct': 'BlkdebugSetStateOptions',
   3420  'data': { 'event': 'BlkdebugEvent',
   3421            '*state': 'int',
   3422            'new_state': 'int' } }
   3423
   3424##
   3425# @BlockdevOptionsBlkdebug:
   3426#
   3427# Driver specific block device options for blkdebug.
   3428#
   3429# @image: underlying raw block device (or image file)
   3430#
   3431# @config: filename of the configuration file
   3432#
   3433# @align: required alignment for requests in bytes, must be
   3434#         positive power of 2, or 0 for default
   3435#
   3436# @max-transfer: maximum size for I/O transfers in bytes, must be
   3437#                positive multiple of @align and of the underlying
   3438#                file's request alignment (but need not be a power of
   3439#                2), or 0 for default (since 2.10)
   3440#
   3441# @opt-write-zero: preferred alignment for write zero requests in bytes,
   3442#                  must be positive multiple of @align and of the
   3443#                  underlying file's request alignment (but need not be a
   3444#                  power of 2), or 0 for default (since 2.10)
   3445#
   3446# @max-write-zero: maximum size for write zero requests in bytes, must be
   3447#                  positive multiple of @align, of @opt-write-zero, and of
   3448#                  the underlying file's request alignment (but need not
   3449#                  be a power of 2), or 0 for default (since 2.10)
   3450#
   3451# @opt-discard: preferred alignment for discard requests in bytes, must
   3452#               be positive multiple of @align and of the underlying
   3453#               file's request alignment (but need not be a power of
   3454#               2), or 0 for default (since 2.10)
   3455#
   3456# @max-discard: maximum size for discard requests in bytes, must be
   3457#               positive multiple of @align, of @opt-discard, and of
   3458#               the underlying file's request alignment (but need not
   3459#               be a power of 2), or 0 for default (since 2.10)
   3460#
   3461# @inject-error: array of error injection descriptions
   3462#
   3463# @set-state: array of state-change descriptions
   3464#
   3465# @take-child-perms: Permissions to take on @image in addition to what
   3466#                    is necessary anyway (which depends on how the
   3467#                    blkdebug node is used).  Defaults to none.
   3468#                    (since 5.0)
   3469#
   3470# @unshare-child-perms: Permissions not to share on @image in addition
   3471#                       to what cannot be shared anyway (which depends
   3472#                       on how the blkdebug node is used).  Defaults
   3473#                       to none.  (since 5.0)
   3474#
   3475# Since: 2.9
   3476##
   3477{ 'struct': 'BlockdevOptionsBlkdebug',
   3478  'data': { 'image': 'BlockdevRef',
   3479            '*config': 'str',
   3480            '*align': 'int', '*max-transfer': 'int32',
   3481            '*opt-write-zero': 'int32', '*max-write-zero': 'int32',
   3482            '*opt-discard': 'int32', '*max-discard': 'int32',
   3483            '*inject-error': ['BlkdebugInjectErrorOptions'],
   3484            '*set-state': ['BlkdebugSetStateOptions'],
   3485            '*take-child-perms': ['BlockPermission'],
   3486            '*unshare-child-perms': ['BlockPermission'] } }
   3487
   3488##
   3489# @BlockdevOptionsBlklogwrites:
   3490#
   3491# Driver specific block device options for blklogwrites.
   3492#
   3493# @file: block device
   3494#
   3495# @log: block device used to log writes to @file
   3496#
   3497# @log-sector-size: sector size used in logging writes to @file, determines
   3498#                   granularity of offsets and sizes of writes (default: 512)
   3499#
   3500# @log-append: append to an existing log (default: false)
   3501#
   3502# @log-super-update-interval: interval of write requests after which the log
   3503#                             super block is updated to disk (default: 4096)
   3504#
   3505# Since: 3.0
   3506##
   3507{ 'struct': 'BlockdevOptionsBlklogwrites',
   3508  'data': { 'file': 'BlockdevRef',
   3509            'log': 'BlockdevRef',
   3510            '*log-sector-size': 'uint32',
   3511            '*log-append': 'bool',
   3512            '*log-super-update-interval': 'uint64' } }
   3513
   3514##
   3515# @BlockdevOptionsBlkverify:
   3516#
   3517# Driver specific block device options for blkverify.
   3518#
   3519# @test: block device to be tested
   3520#
   3521# @raw: raw image used for verification
   3522#
   3523# Since: 2.9
   3524##
   3525{ 'struct': 'BlockdevOptionsBlkverify',
   3526  'data': { 'test': 'BlockdevRef',
   3527            'raw': 'BlockdevRef' } }
   3528
   3529##
   3530# @BlockdevOptionsBlkreplay:
   3531#
   3532# Driver specific block device options for blkreplay.
   3533#
   3534# @image: disk image which should be controlled with blkreplay
   3535#
   3536# Since: 4.2
   3537##
   3538{ 'struct': 'BlockdevOptionsBlkreplay',
   3539  'data': { 'image': 'BlockdevRef' } }
   3540
   3541##
   3542# @QuorumReadPattern:
   3543#
   3544# An enumeration of quorum read patterns.
   3545#
   3546# @quorum: read all the children and do a quorum vote on reads
   3547#
   3548# @fifo: read only from the first child that has not failed
   3549#
   3550# Since: 2.9
   3551##
   3552{ 'enum': 'QuorumReadPattern', 'data': [ 'quorum', 'fifo' ] }
   3553
   3554##
   3555# @BlockdevOptionsQuorum:
   3556#
   3557# Driver specific block device options for Quorum
   3558#
   3559# @blkverify: true if the driver must print content mismatch
   3560#                  set to false by default
   3561#
   3562# @children: the children block devices to use
   3563#
   3564# @vote-threshold: the vote limit under which a read will fail
   3565#
   3566# @rewrite-corrupted: rewrite corrupted data when quorum is reached
   3567#                     (Since 2.1)
   3568#
   3569# @read-pattern: choose read pattern and set to quorum by default
   3570#                (Since 2.2)
   3571#
   3572# Since: 2.9
   3573##
   3574{ 'struct': 'BlockdevOptionsQuorum',
   3575  'data': { '*blkverify': 'bool',
   3576            'children': [ 'BlockdevRef' ],
   3577            'vote-threshold': 'int',
   3578            '*rewrite-corrupted': 'bool',
   3579            '*read-pattern': 'QuorumReadPattern' } }
   3580
   3581##
   3582# @BlockdevOptionsGluster:
   3583#
   3584# Driver specific block device options for Gluster
   3585#
   3586# @volume: name of gluster volume where VM image resides
   3587#
   3588# @path: absolute path to image file in gluster volume
   3589#
   3590# @server: gluster servers description
   3591#
   3592# @debug: libgfapi log level (default '4' which is Error)
   3593#         (Since 2.8)
   3594#
   3595# @logfile: libgfapi log file (default /dev/stderr) (Since 2.8)
   3596#
   3597# Since: 2.9
   3598##
   3599{ 'struct': 'BlockdevOptionsGluster',
   3600  'data': { 'volume': 'str',
   3601            'path': 'str',
   3602            'server': ['SocketAddress'],
   3603            '*debug': 'int',
   3604            '*logfile': 'str' } }
   3605
   3606##
   3607# @IscsiTransport:
   3608#
   3609# An enumeration of libiscsi transport types
   3610#
   3611# Since: 2.9
   3612##
   3613{ 'enum': 'IscsiTransport',
   3614  'data': [ 'tcp', 'iser' ] }
   3615
   3616##
   3617# @IscsiHeaderDigest:
   3618#
   3619# An enumeration of header digests supported by libiscsi
   3620#
   3621# Since: 2.9
   3622##
   3623{ 'enum': 'IscsiHeaderDigest',
   3624  'prefix': 'QAPI_ISCSI_HEADER_DIGEST',
   3625  'data': [ 'crc32c', 'none', 'crc32c-none', 'none-crc32c' ] }
   3626
   3627##
   3628# @BlockdevOptionsIscsi:
   3629#
   3630# @transport: The iscsi transport type
   3631#
   3632# @portal: The address of the iscsi portal
   3633#
   3634# @target: The target iqn name
   3635#
   3636# @lun: LUN to connect to. Defaults to 0.
   3637#
   3638# @user: User name to log in with. If omitted, no CHAP
   3639#        authentication is performed.
   3640#
   3641# @password-secret: The ID of a QCryptoSecret object providing
   3642#                   the password for the login. This option is required if
   3643#                   @user is specified.
   3644#
   3645# @initiator-name: The iqn name we want to identify to the target
   3646#                  as. If this option is not specified, an initiator name is
   3647#                  generated automatically.
   3648#
   3649# @header-digest: The desired header digest. Defaults to
   3650#                 none-crc32c.
   3651#
   3652# @timeout: Timeout in seconds after which a request will
   3653#           timeout. 0 means no timeout and is the default.
   3654#
   3655# Driver specific block device options for iscsi
   3656#
   3657# Since: 2.9
   3658##
   3659{ 'struct': 'BlockdevOptionsIscsi',
   3660  'data': { 'transport': 'IscsiTransport',
   3661            'portal': 'str',
   3662            'target': 'str',
   3663            '*lun': 'int',
   3664            '*user': 'str',
   3665            '*password-secret': 'str',
   3666            '*initiator-name': 'str',
   3667            '*header-digest': 'IscsiHeaderDigest',
   3668            '*timeout': 'int' } }
   3669
   3670
   3671##
   3672# @RbdAuthMode:
   3673#
   3674# Since: 3.0
   3675##
   3676{ 'enum': 'RbdAuthMode',
   3677  'data': [ 'cephx', 'none' ] }
   3678
   3679##
   3680# @RbdImageEncryptionFormat:
   3681#
   3682# Since: 6.1
   3683##
   3684{ 'enum': 'RbdImageEncryptionFormat',
   3685  'data': [ 'luks', 'luks2' ] }
   3686
   3687##
   3688# @RbdEncryptionOptionsLUKSBase:
   3689#
   3690# @key-secret: ID of a QCryptoSecret object providing a passphrase
   3691#              for unlocking the encryption
   3692#
   3693# Since: 6.1
   3694##
   3695{ 'struct': 'RbdEncryptionOptionsLUKSBase',
   3696  'data': { 'key-secret': 'str' } }
   3697
   3698##
   3699# @RbdEncryptionCreateOptionsLUKSBase:
   3700#
   3701# @cipher-alg: The encryption algorithm
   3702#
   3703# Since: 6.1
   3704##
   3705{ 'struct': 'RbdEncryptionCreateOptionsLUKSBase',
   3706  'base': 'RbdEncryptionOptionsLUKSBase',
   3707  'data': { '*cipher-alg': 'QCryptoCipherAlgorithm' } }
   3708
   3709##
   3710# @RbdEncryptionOptionsLUKS:
   3711#
   3712# Since: 6.1
   3713##
   3714{ 'struct': 'RbdEncryptionOptionsLUKS',
   3715  'base': 'RbdEncryptionOptionsLUKSBase',
   3716  'data': { } }
   3717
   3718##
   3719# @RbdEncryptionOptionsLUKS2:
   3720#
   3721# Since: 6.1
   3722##
   3723{ 'struct': 'RbdEncryptionOptionsLUKS2',
   3724  'base': 'RbdEncryptionOptionsLUKSBase',
   3725  'data': { } }
   3726
   3727##
   3728# @RbdEncryptionCreateOptionsLUKS:
   3729#
   3730# Since: 6.1
   3731##
   3732{ 'struct': 'RbdEncryptionCreateOptionsLUKS',
   3733  'base': 'RbdEncryptionCreateOptionsLUKSBase',
   3734  'data': { } }
   3735
   3736##
   3737# @RbdEncryptionCreateOptionsLUKS2:
   3738#
   3739# Since: 6.1
   3740##
   3741{ 'struct': 'RbdEncryptionCreateOptionsLUKS2',
   3742  'base': 'RbdEncryptionCreateOptionsLUKSBase',
   3743  'data': { } }
   3744
   3745##
   3746# @RbdEncryptionOptions:
   3747#
   3748# Since: 6.1
   3749##
   3750{ 'union': 'RbdEncryptionOptions',
   3751  'base': { 'format': 'RbdImageEncryptionFormat' },
   3752  'discriminator': 'format',
   3753  'data': { 'luks': 'RbdEncryptionOptionsLUKS',
   3754            'luks2': 'RbdEncryptionOptionsLUKS2' } }
   3755
   3756##
   3757# @RbdEncryptionCreateOptions:
   3758#
   3759# Since: 6.1
   3760##
   3761{ 'union': 'RbdEncryptionCreateOptions',
   3762  'base': { 'format': 'RbdImageEncryptionFormat' },
   3763  'discriminator': 'format',
   3764  'data': { 'luks': 'RbdEncryptionCreateOptionsLUKS',
   3765            'luks2': 'RbdEncryptionCreateOptionsLUKS2' } }
   3766
   3767##
   3768# @BlockdevOptionsRbd:
   3769#
   3770# @pool: Ceph pool name.
   3771#
   3772# @namespace: Rados namespace name in the Ceph pool. (Since 5.0)
   3773#
   3774# @image: Image name in the Ceph pool.
   3775#
   3776# @conf: path to Ceph configuration file.  Values
   3777#        in the configuration file will be overridden by
   3778#        options specified via QAPI.
   3779#
   3780# @snapshot: Ceph snapshot name.
   3781#
   3782# @encrypt: Image encryption options. (Since 6.1)
   3783#
   3784# @user: Ceph id name.
   3785#
   3786# @auth-client-required: Acceptable authentication modes.
   3787#                        This maps to Ceph configuration option
   3788#                        "auth_client_required".  (Since 3.0)
   3789#
   3790# @key-secret: ID of a QCryptoSecret object providing a key
   3791#              for cephx authentication.
   3792#              This maps to Ceph configuration option
   3793#              "key".  (Since 3.0)
   3794#
   3795# @server: Monitor host address and port.  This maps
   3796#          to the "mon_host" Ceph option.
   3797#
   3798# Since: 2.9
   3799##
   3800{ 'struct': 'BlockdevOptionsRbd',
   3801  'data': { 'pool': 'str',
   3802            '*namespace': 'str',
   3803            'image': 'str',
   3804            '*conf': 'str',
   3805            '*snapshot': 'str',
   3806            '*encrypt': 'RbdEncryptionOptions',
   3807            '*user': 'str',
   3808            '*auth-client-required': ['RbdAuthMode'],
   3809            '*key-secret': 'str',
   3810            '*server': ['InetSocketAddressBase'] } }
   3811
   3812##
   3813# @ReplicationMode:
   3814#
   3815# An enumeration of replication modes.
   3816#
   3817# @primary: Primary mode, the vm's state will be sent to secondary QEMU.
   3818#
   3819# @secondary: Secondary mode, receive the vm's state from primary QEMU.
   3820#
   3821# Since: 2.9
   3822##
   3823{ 'enum' : 'ReplicationMode', 'data' : [ 'primary', 'secondary' ],
   3824  'if': 'CONFIG_REPLICATION' }
   3825
   3826##
   3827# @BlockdevOptionsReplication:
   3828#
   3829# Driver specific block device options for replication
   3830#
   3831# @mode: the replication mode
   3832#
   3833# @top-id: In secondary mode, node name or device ID of the root
   3834#          node who owns the replication node chain. Must not be given in
   3835#          primary mode.
   3836#
   3837# Since: 2.9
   3838##
   3839{ 'struct': 'BlockdevOptionsReplication',
   3840  'base': 'BlockdevOptionsGenericFormat',
   3841  'data': { 'mode': 'ReplicationMode',
   3842            '*top-id': 'str' },
   3843  'if': 'CONFIG_REPLICATION' }
   3844
   3845##
   3846# @NFSTransport:
   3847#
   3848# An enumeration of NFS transport types
   3849#
   3850# @inet: TCP transport
   3851#
   3852# Since: 2.9
   3853##
   3854{ 'enum': 'NFSTransport',
   3855  'data': [ 'inet' ] }
   3856
   3857##
   3858# @NFSServer:
   3859#
   3860# Captures the address of the socket
   3861#
   3862# @type: transport type used for NFS (only TCP supported)
   3863#
   3864# @host: host address for NFS server
   3865#
   3866# Since: 2.9
   3867##
   3868{ 'struct': 'NFSServer',
   3869  'data': { 'type': 'NFSTransport',
   3870            'host': 'str' } }
   3871
   3872##
   3873# @BlockdevOptionsNfs:
   3874#
   3875# Driver specific block device option for NFS
   3876#
   3877# @server: host address
   3878#
   3879# @path: path of the image on the host
   3880#
   3881# @user: UID value to use when talking to the
   3882#        server (defaults to 65534 on Windows and getuid()
   3883#        on unix)
   3884#
   3885# @group: GID value to use when talking to the
   3886#         server (defaults to 65534 on Windows and getgid()
   3887#         in unix)
   3888#
   3889# @tcp-syn-count: number of SYNs during the session
   3890#                 establishment (defaults to libnfs default)
   3891#
   3892# @readahead-size: set the readahead size in bytes (defaults
   3893#                  to libnfs default)
   3894#
   3895# @page-cache-size: set the pagecache size in bytes (defaults
   3896#                   to libnfs default)
   3897#
   3898# @debug: set the NFS debug level (max 2) (defaults
   3899#         to libnfs default)
   3900#
   3901# Since: 2.9
   3902##
   3903{ 'struct': 'BlockdevOptionsNfs',
   3904  'data': { 'server': 'NFSServer',
   3905            'path': 'str',
   3906            '*user': 'int',
   3907            '*group': 'int',
   3908            '*tcp-syn-count': 'int',
   3909            '*readahead-size': 'int',
   3910            '*page-cache-size': 'int',
   3911            '*debug': 'int' } }
   3912
   3913##
   3914# @BlockdevOptionsCurlBase:
   3915#
   3916# Driver specific block device options shared by all protocols supported by the
   3917# curl backend.
   3918#
   3919# @url: URL of the image file
   3920#
   3921# @readahead: Size of the read-ahead cache; must be a multiple of
   3922#             512 (defaults to 256 kB)
   3923#
   3924# @timeout: Timeout for connections, in seconds (defaults to 5)
   3925#
   3926# @username: Username for authentication (defaults to none)
   3927#
   3928# @password-secret: ID of a QCryptoSecret object providing a password
   3929#                   for authentication (defaults to no password)
   3930#
   3931# @proxy-username: Username for proxy authentication (defaults to none)
   3932#
   3933# @proxy-password-secret: ID of a QCryptoSecret object providing a password
   3934#                         for proxy authentication (defaults to no password)
   3935#
   3936# Since: 2.9
   3937##
   3938{ 'struct': 'BlockdevOptionsCurlBase',
   3939  'data': { 'url': 'str',
   3940            '*readahead': 'int',
   3941            '*timeout': 'int',
   3942            '*username': 'str',
   3943            '*password-secret': 'str',
   3944            '*proxy-username': 'str',
   3945            '*proxy-password-secret': 'str' } }
   3946
   3947##
   3948# @BlockdevOptionsCurlHttp:
   3949#
   3950# Driver specific block device options for HTTP connections over the curl
   3951# backend.  URLs must start with "http://".
   3952#
   3953# @cookie: List of cookies to set; format is
   3954#          "name1=content1; name2=content2;" as explained by
   3955#          CURLOPT_COOKIE(3). Defaults to no cookies.
   3956#
   3957# @cookie-secret: ID of a QCryptoSecret object providing the cookie data in a
   3958#                 secure way. See @cookie for the format. (since 2.10)
   3959#
   3960# Since: 2.9
   3961##
   3962{ 'struct': 'BlockdevOptionsCurlHttp',
   3963  'base': 'BlockdevOptionsCurlBase',
   3964  'data': { '*cookie': 'str',
   3965            '*cookie-secret': 'str'} }
   3966
   3967##
   3968# @BlockdevOptionsCurlHttps:
   3969#
   3970# Driver specific block device options for HTTPS connections over the curl
   3971# backend.  URLs must start with "https://".
   3972#
   3973# @cookie: List of cookies to set; format is
   3974#          "name1=content1; name2=content2;" as explained by
   3975#          CURLOPT_COOKIE(3). Defaults to no cookies.
   3976#
   3977# @sslverify: Whether to verify the SSL certificate's validity (defaults to
   3978#             true)
   3979#
   3980# @cookie-secret: ID of a QCryptoSecret object providing the cookie data in a
   3981#                 secure way. See @cookie for the format. (since 2.10)
   3982#
   3983# Since: 2.9
   3984##
   3985{ 'struct': 'BlockdevOptionsCurlHttps',
   3986  'base': 'BlockdevOptionsCurlBase',
   3987  'data': { '*cookie': 'str',
   3988            '*sslverify': 'bool',
   3989            '*cookie-secret': 'str'} }
   3990
   3991##
   3992# @BlockdevOptionsCurlFtp:
   3993#
   3994# Driver specific block device options for FTP connections over the curl
   3995# backend.  URLs must start with "ftp://".
   3996#
   3997# Since: 2.9
   3998##
   3999{ 'struct': 'BlockdevOptionsCurlFtp',
   4000  'base': 'BlockdevOptionsCurlBase',
   4001  'data': { } }
   4002
   4003##
   4004# @BlockdevOptionsCurlFtps:
   4005#
   4006# Driver specific block device options for FTPS connections over the curl
   4007# backend.  URLs must start with "ftps://".
   4008#
   4009# @sslverify: Whether to verify the SSL certificate's validity (defaults to
   4010#             true)
   4011#
   4012# Since: 2.9
   4013##
   4014{ 'struct': 'BlockdevOptionsCurlFtps',
   4015  'base': 'BlockdevOptionsCurlBase',
   4016  'data': { '*sslverify': 'bool' } }
   4017
   4018##
   4019# @BlockdevOptionsNbd:
   4020#
   4021# Driver specific block device options for NBD.
   4022#
   4023# @server: NBD server address
   4024#
   4025# @export: export name
   4026#
   4027# @tls-creds: TLS credentials ID
   4028#
   4029# @x-dirty-bitmap: A metadata context name such as "qemu:dirty-bitmap:NAME"
   4030#                  or "qemu:allocation-depth" to query in place of the
   4031#                  traditional "base:allocation" block status (see
   4032#                  NBD_OPT_LIST_META_CONTEXT in the NBD protocol; and
   4033#                  yes, naming this option x-context would have made
   4034#                  more sense) (since 3.0)
   4035#
   4036# @reconnect-delay: On an unexpected disconnect, the nbd client tries to
   4037#                   connect again until succeeding or encountering a serious
   4038#                   error.  During the first @reconnect-delay seconds, all
   4039#                   requests are paused and will be rerun on a successful
   4040#                   reconnect. After that time, any delayed requests and all
   4041#                   future requests before a successful reconnect will
   4042#                   immediately fail. Default 0 (Since 4.2)
   4043#
   4044# Since: 2.9
   4045##
   4046{ 'struct': 'BlockdevOptionsNbd',
   4047  'data': { 'server': 'SocketAddress',
   4048            '*export': 'str',
   4049            '*tls-creds': 'str',
   4050            '*x-dirty-bitmap': 'str',
   4051            '*reconnect-delay': 'uint32' } }
   4052
   4053##
   4054# @BlockdevOptionsRaw:
   4055#
   4056# Driver specific block device options for the raw driver.
   4057#
   4058# @offset: position where the block device starts
   4059# @size: the assumed size of the device
   4060#
   4061# Since: 2.9
   4062##
   4063{ 'struct': 'BlockdevOptionsRaw',
   4064  'base': 'BlockdevOptionsGenericFormat',
   4065  'data': { '*offset': 'int', '*size': 'int' } }
   4066
   4067##
   4068# @BlockdevOptionsThrottle:
   4069#
   4070# Driver specific block device options for the throttle driver
   4071#
   4072# @throttle-group: the name of the throttle-group object to use. It
   4073#                  must already exist.
   4074# @file: reference to or definition of the data source block device
   4075# Since: 2.11
   4076##
   4077{ 'struct': 'BlockdevOptionsThrottle',
   4078  'data': { 'throttle-group': 'str',
   4079            'file' : 'BlockdevRef'
   4080             } }
   4081
   4082##
   4083# @BlockdevOptionsCor:
   4084#
   4085# Driver specific block device options for the copy-on-read driver.
   4086#
   4087# @bottom: The name of a non-filter node (allocation-bearing layer) that
   4088#          limits the COR operations in the backing chain (inclusive), so
   4089#          that no data below this node will be copied by this filter.
   4090#          If option is absent, the limit is not applied, so that data
   4091#          from all backing layers may be copied.
   4092#
   4093# Since: 6.0
   4094##
   4095{ 'struct': 'BlockdevOptionsCor',
   4096  'base': 'BlockdevOptionsGenericFormat',
   4097  'data': { '*bottom': 'str' } }
   4098
   4099##
   4100# @BlockdevOptionsCbw:
   4101#
   4102# Driver specific block device options for the copy-before-write driver,
   4103# which does so called copy-before-write operations: when data is
   4104# written to the filter, the filter first reads corresponding blocks
   4105# from its file child and copies them to @target child. After successfully
   4106# copying, the write request is propagated to file child. If copying
   4107# fails, the original write request is failed too and no data is written
   4108# to file child.
   4109#
   4110# @target: The target for copy-before-write operations.
   4111#
   4112# Since: 6.2
   4113##
   4114{ 'struct': 'BlockdevOptionsCbw',
   4115  'base': 'BlockdevOptionsGenericFormat',
   4116  'data': { 'target': 'BlockdevRef' } }
   4117
   4118##
   4119# @BlockdevOptions:
   4120#
   4121# Options for creating a block device.  Many options are available for all
   4122# block devices, independent of the block driver:
   4123#
   4124# @driver: block driver name
   4125# @node-name: the node name of the new node (Since 2.0).
   4126#             This option is required on the top level of blockdev-add.
   4127#             Valid node names start with an alphabetic character and may
   4128#             contain only alphanumeric characters, '-', '.' and '_'. Their
   4129#             maximum length is 31 characters.
   4130# @discard: discard-related options (default: ignore)
   4131# @cache: cache-related options
   4132# @read-only: whether the block device should be read-only (default: false).
   4133#             Note that some block drivers support only read-only access,
   4134#             either generally or in certain configurations. In this case,
   4135#             the default value does not work and the option must be
   4136#             specified explicitly.
   4137# @auto-read-only: if true and @read-only is false, QEMU may automatically
   4138#                  decide not to open the image read-write as requested, but
   4139#                  fall back to read-only instead (and switch between the modes
   4140#                  later), e.g. depending on whether the image file is writable
   4141#                  or whether a writing user is attached to the node
   4142#                  (default: false, since 3.1)
   4143# @detect-zeroes: detect and optimize zero writes (Since 2.1)
   4144#                 (default: off)
   4145# @force-share: force share all permission on added nodes.
   4146#               Requires read-only=true. (Since 2.10)
   4147#
   4148# Remaining options are determined by the block driver.
   4149#
   4150# Since: 2.9
   4151##
   4152{ 'union': 'BlockdevOptions',
   4153  'base': { 'driver': 'BlockdevDriver',
   4154            '*node-name': 'str',
   4155            '*discard': 'BlockdevDiscardOptions',
   4156            '*cache': 'BlockdevCacheOptions',
   4157            '*read-only': 'bool',
   4158            '*auto-read-only': 'bool',
   4159            '*force-share': 'bool',
   4160            '*detect-zeroes': 'BlockdevDetectZeroesOptions' },
   4161  'discriminator': 'driver',
   4162  'data': {
   4163      'blkdebug':   'BlockdevOptionsBlkdebug',
   4164      'blklogwrites':'BlockdevOptionsBlklogwrites',
   4165      'blkverify':  'BlockdevOptionsBlkverify',
   4166      'blkreplay':  'BlockdevOptionsBlkreplay',
   4167      'bochs':      'BlockdevOptionsGenericFormat',
   4168      'cloop':      'BlockdevOptionsGenericFormat',
   4169      'compress':   'BlockdevOptionsGenericFormat',
   4170      'copy-before-write':'BlockdevOptionsCbw',
   4171      'copy-on-read':'BlockdevOptionsCor',
   4172      'dmg':        'BlockdevOptionsGenericFormat',
   4173      'file':       'BlockdevOptionsFile',
   4174      'ftp':        'BlockdevOptionsCurlFtp',
   4175      'ftps':       'BlockdevOptionsCurlFtps',
   4176      'gluster':    'BlockdevOptionsGluster',
   4177      'host_cdrom':  { 'type': 'BlockdevOptionsFile',
   4178                       'if': 'HAVE_HOST_BLOCK_DEVICE' },
   4179      'host_device': { 'type': 'BlockdevOptionsFile',
   4180                       'if': 'HAVE_HOST_BLOCK_DEVICE' },
   4181      'http':       'BlockdevOptionsCurlHttp',
   4182      'https':      'BlockdevOptionsCurlHttps',
   4183      'iscsi':      'BlockdevOptionsIscsi',
   4184      'luks':       'BlockdevOptionsLUKS',
   4185      'nbd':        'BlockdevOptionsNbd',
   4186      'nfs':        'BlockdevOptionsNfs',
   4187      'null-aio':   'BlockdevOptionsNull',
   4188      'null-co':    'BlockdevOptionsNull',
   4189      'nvme':       'BlockdevOptionsNVMe',
   4190      'parallels':  'BlockdevOptionsGenericFormat',
   4191      'preallocate':'BlockdevOptionsPreallocate',
   4192      'qcow2':      'BlockdevOptionsQcow2',
   4193      'qcow':       'BlockdevOptionsQcow',
   4194      'qed':        'BlockdevOptionsGenericCOWFormat',
   4195      'quorum':     'BlockdevOptionsQuorum',
   4196      'raw':        'BlockdevOptionsRaw',
   4197      'rbd':        'BlockdevOptionsRbd',
   4198      'replication': { 'type': 'BlockdevOptionsReplication',
   4199                       'if': 'CONFIG_REPLICATION' },
   4200      'ssh':        'BlockdevOptionsSsh',
   4201      'throttle':   'BlockdevOptionsThrottle',
   4202      'vdi':        'BlockdevOptionsGenericFormat',
   4203      'vhdx':       'BlockdevOptionsGenericFormat',
   4204      'vmdk':       'BlockdevOptionsGenericCOWFormat',
   4205      'vpc':        'BlockdevOptionsGenericFormat',
   4206      'vvfat':      'BlockdevOptionsVVFAT'
   4207  } }
   4208
   4209##
   4210# @BlockdevRef:
   4211#
   4212# Reference to a block device.
   4213#
   4214# @definition: defines a new block device inline
   4215# @reference: references the ID of an existing block device
   4216#
   4217# Since: 2.9
   4218##
   4219{ 'alternate': 'BlockdevRef',
   4220  'data': { 'definition': 'BlockdevOptions',
   4221            'reference': 'str' } }
   4222
   4223##
   4224# @BlockdevRefOrNull:
   4225#
   4226# Reference to a block device.
   4227#
   4228# @definition: defines a new block device inline
   4229# @reference: references the ID of an existing block device.
   4230#             An empty string means that no block device should
   4231#             be referenced.  Deprecated; use null instead.
   4232# @null: No block device should be referenced (since 2.10)
   4233#
   4234# Since: 2.9
   4235##
   4236{ 'alternate': 'BlockdevRefOrNull',
   4237  'data': { 'definition': 'BlockdevOptions',
   4238            'reference': 'str',
   4239            'null': 'null' } }
   4240
   4241##
   4242# @blockdev-add:
   4243#
   4244# Creates a new block device.
   4245#
   4246# Since: 2.9
   4247#
   4248# Example:
   4249#
   4250# 1.
   4251# -> { "execute": "blockdev-add",
   4252#      "arguments": {
   4253#           "driver": "qcow2",
   4254#           "node-name": "test1",
   4255#           "file": {
   4256#               "driver": "file",
   4257#               "filename": "test.qcow2"
   4258#            }
   4259#       }
   4260#     }
   4261# <- { "return": {} }
   4262#
   4263# 2.
   4264# -> { "execute": "blockdev-add",
   4265#      "arguments": {
   4266#           "driver": "qcow2",
   4267#           "node-name": "node0",
   4268#           "discard": "unmap",
   4269#           "cache": {
   4270#              "direct": true
   4271#            },
   4272#            "file": {
   4273#              "driver": "file",
   4274#              "filename": "/tmp/test.qcow2"
   4275#            },
   4276#            "backing": {
   4277#               "driver": "raw",
   4278#               "file": {
   4279#                  "driver": "file",
   4280#                  "filename": "/dev/fdset/4"
   4281#                }
   4282#            }
   4283#        }
   4284#      }
   4285#
   4286# <- { "return": {} }
   4287#
   4288##
   4289{ 'command': 'blockdev-add', 'data': 'BlockdevOptions', 'boxed': true }
   4290
   4291##
   4292# @blockdev-reopen:
   4293#
   4294# Reopens one or more block devices using the given set of options.
   4295# Any option not specified will be reset to its default value regardless
   4296# of its previous status. If an option cannot be changed or a particular
   4297# driver does not support reopening then the command will return an
   4298# error. All devices in the list are reopened in one transaction, so
   4299# if one of them fails then the whole transaction is cancelled.
   4300#
   4301# The command receives a list of block devices to reopen. For each one
   4302# of them, the top-level @node-name option (from BlockdevOptions) must be
   4303# specified and is used to select the block device to be reopened.
   4304# Other @node-name options must be either omitted or set to the
   4305# current name of the appropriate node. This command won't change any
   4306# node name and any attempt to do it will result in an error.
   4307#
   4308# In the case of options that refer to child nodes, the behavior of
   4309# this command depends on the value:
   4310#
   4311#  1) A set of options (BlockdevOptions): the child is reopened with
   4312#     the specified set of options.
   4313#
   4314#  2) A reference to the current child: the child is reopened using
   4315#     its existing set of options.
   4316#
   4317#  3) A reference to a different node: the current child is replaced
   4318#     with the specified one.
   4319#
   4320#  4) NULL: the current child (if any) is detached.
   4321#
   4322# Options (1) and (2) are supported in all cases. Option (3) is
   4323# supported for @file and @backing, and option (4) for @backing only.
   4324#
   4325# Unlike with blockdev-add, the @backing option must always be present
   4326# unless the node being reopened does not have a backing file and its
   4327# image does not have a default backing file name as part of its
   4328# metadata.
   4329#
   4330# Since: 6.1
   4331##
   4332{ 'command': 'blockdev-reopen',
   4333  'data': { 'options': ['BlockdevOptions'] } }
   4334
   4335##
   4336# @blockdev-del:
   4337#
   4338# Deletes a block device that has been added using blockdev-add.
   4339# The command will fail if the node is attached to a device or is
   4340# otherwise being used.
   4341#
   4342# @node-name: Name of the graph node to delete.
   4343#
   4344# Since: 2.9
   4345#
   4346# Example:
   4347#
   4348# -> { "execute": "blockdev-add",
   4349#      "arguments": {
   4350#           "driver": "qcow2",
   4351#           "node-name": "node0",
   4352#           "file": {
   4353#               "driver": "file",
   4354#               "filename": "test.qcow2"
   4355#           }
   4356#      }
   4357#    }
   4358# <- { "return": {} }
   4359#
   4360# -> { "execute": "blockdev-del",
   4361#      "arguments": { "node-name": "node0" }
   4362#    }
   4363# <- { "return": {} }
   4364#
   4365##
   4366{ 'command': 'blockdev-del', 'data': { 'node-name': 'str' } }
   4367
   4368##
   4369# @BlockdevCreateOptionsFile:
   4370#
   4371# Driver specific image creation options for file.
   4372#
   4373# @filename: Filename for the new image file
   4374# @size: Size of the virtual disk in bytes
   4375# @preallocation: Preallocation mode for the new image (default: off;
   4376#                 allowed values: off,
   4377#                 falloc (if CONFIG_POSIX_FALLOCATE),
   4378#                 full (if CONFIG_POSIX))
   4379# @nocow: Turn off copy-on-write (valid only on btrfs; default: off)
   4380# @extent-size-hint: Extent size hint to add to the image file; 0 for not
   4381#                    adding an extent size hint (default: 1 MB, since 5.1)
   4382#
   4383# Since: 2.12
   4384##
   4385{ 'struct': 'BlockdevCreateOptionsFile',
   4386  'data': { 'filename':             'str',
   4387            'size':                 'size',
   4388            '*preallocation':       'PreallocMode',
   4389            '*nocow':               'bool',
   4390            '*extent-size-hint':    'size'} }
   4391
   4392##
   4393# @BlockdevCreateOptionsGluster:
   4394#
   4395# Driver specific image creation options for gluster.
   4396#
   4397# @location: Where to store the new image file
   4398# @size: Size of the virtual disk in bytes
   4399# @preallocation: Preallocation mode for the new image (default: off;
   4400#                 allowed values: off,
   4401#                 falloc (if CONFIG_GLUSTERFS_FALLOCATE),
   4402#                 full (if CONFIG_GLUSTERFS_ZEROFILL))
   4403#
   4404# Since: 2.12
   4405##
   4406{ 'struct': 'BlockdevCreateOptionsGluster',
   4407  'data': { 'location':         'BlockdevOptionsGluster',
   4408            'size':             'size',
   4409            '*preallocation':   'PreallocMode' } }
   4410
   4411##
   4412# @BlockdevCreateOptionsLUKS:
   4413#
   4414# Driver specific image creation options for LUKS.
   4415#
   4416# @file: Node to create the image format on
   4417# @size: Size of the virtual disk in bytes
   4418# @preallocation: Preallocation mode for the new image
   4419#                 (since: 4.2)
   4420#                 (default: off; allowed values: off, metadata, falloc, full)
   4421#
   4422# Since: 2.12
   4423##
   4424{ 'struct': 'BlockdevCreateOptionsLUKS',
   4425  'base': 'QCryptoBlockCreateOptionsLUKS',
   4426  'data': { 'file':             'BlockdevRef',
   4427            'size':             'size',
   4428            '*preallocation':   'PreallocMode' } }
   4429
   4430##
   4431# @BlockdevCreateOptionsNfs:
   4432#
   4433# Driver specific image creation options for NFS.
   4434#
   4435# @location: Where to store the new image file
   4436# @size: Size of the virtual disk in bytes
   4437#
   4438# Since: 2.12
   4439##
   4440{ 'struct': 'BlockdevCreateOptionsNfs',
   4441  'data': { 'location':         'BlockdevOptionsNfs',
   4442            'size':             'size' } }
   4443
   4444##
   4445# @BlockdevCreateOptionsParallels:
   4446#
   4447# Driver specific image creation options for parallels.
   4448#
   4449# @file: Node to create the image format on
   4450# @size: Size of the virtual disk in bytes
   4451# @cluster-size: Cluster size in bytes (default: 1 MB)
   4452#
   4453# Since: 2.12
   4454##
   4455{ 'struct': 'BlockdevCreateOptionsParallels',
   4456  'data': { 'file':             'BlockdevRef',
   4457            'size':             'size',
   4458            '*cluster-size':    'size' } }
   4459
   4460##
   4461# @BlockdevCreateOptionsQcow:
   4462#
   4463# Driver specific image creation options for qcow.
   4464#
   4465# @file: Node to create the image format on
   4466# @size: Size of the virtual disk in bytes
   4467# @backing-file: File name of the backing file if a backing file
   4468#                should be used
   4469# @encrypt: Encryption options if the image should be encrypted
   4470#
   4471# Since: 2.12
   4472##
   4473{ 'struct': 'BlockdevCreateOptionsQcow',
   4474  'data': { 'file':             'BlockdevRef',
   4475            'size':             'size',
   4476            '*backing-file':    'str',
   4477            '*encrypt':         'QCryptoBlockCreateOptions' } }
   4478
   4479##
   4480# @BlockdevQcow2Version:
   4481#
   4482# @v2:  The original QCOW2 format as introduced in qemu 0.10 (version 2)
   4483# @v3:  The extended QCOW2 format as introduced in qemu 1.1 (version 3)
   4484#
   4485# Since: 2.12
   4486##
   4487{ 'enum': 'BlockdevQcow2Version',
   4488  'data': [ 'v2', 'v3' ] }
   4489
   4490
   4491##
   4492# @Qcow2CompressionType:
   4493#
   4494# Compression type used in qcow2 image file
   4495#
   4496# @zlib: zlib compression, see <http://zlib.net/>
   4497# @zstd: zstd compression, see <http://github.com/facebook/zstd>
   4498#
   4499# Since: 5.1
   4500##
   4501{ 'enum': 'Qcow2CompressionType',
   4502  'data': [ 'zlib', { 'name': 'zstd', 'if': 'CONFIG_ZSTD' } ] }
   4503
   4504##
   4505# @BlockdevCreateOptionsQcow2:
   4506#
   4507# Driver specific image creation options for qcow2.
   4508#
   4509# @file: Node to create the image format on
   4510# @data-file: Node to use as an external data file in which all guest
   4511#             data is stored so that only metadata remains in the qcow2
   4512#             file (since: 4.0)
   4513# @data-file-raw: True if the external data file must stay valid as a
   4514#                 standalone (read-only) raw image without looking at qcow2
   4515#                 metadata (default: false; since: 4.0)
   4516# @extended-l2: True to make the image have extended L2 entries
   4517#               (default: false; since 5.2)
   4518# @size: Size of the virtual disk in bytes
   4519# @version: Compatibility level (default: v3)
   4520# @backing-file: File name of the backing file if a backing file
   4521#                should be used
   4522# @backing-fmt: Name of the block driver to use for the backing file
   4523# @encrypt: Encryption options if the image should be encrypted
   4524# @cluster-size: qcow2 cluster size in bytes (default: 65536)
   4525# @preallocation: Preallocation mode for the new image (default: off;
   4526#                 allowed values: off, falloc, full, metadata)
   4527# @lazy-refcounts: True if refcounts may be updated lazily (default: off)
   4528# @refcount-bits: Width of reference counts in bits (default: 16)
   4529# @compression-type: The image cluster compression method
   4530#                    (default: zlib, since 5.1)
   4531#
   4532# Since: 2.12
   4533##
   4534{ 'struct': 'BlockdevCreateOptionsQcow2',
   4535  'data': { 'file':             'BlockdevRef',
   4536            '*data-file':       'BlockdevRef',
   4537            '*data-file-raw':   'bool',
   4538            '*extended-l2':     'bool',
   4539            'size':             'size',
   4540            '*version':         'BlockdevQcow2Version',
   4541            '*backing-file':    'str',
   4542            '*backing-fmt':     'BlockdevDriver',
   4543            '*encrypt':         'QCryptoBlockCreateOptions',
   4544            '*cluster-size':    'size',
   4545            '*preallocation':   'PreallocMode',
   4546            '*lazy-refcounts':  'bool',
   4547            '*refcount-bits':   'int',
   4548            '*compression-type':'Qcow2CompressionType' } }
   4549
   4550##
   4551# @BlockdevCreateOptionsQed:
   4552#
   4553# Driver specific image creation options for qed.
   4554#
   4555# @file: Node to create the image format on
   4556# @size: Size of the virtual disk in bytes
   4557# @backing-file: File name of the backing file if a backing file
   4558#                should be used
   4559# @backing-fmt: Name of the block driver to use for the backing file
   4560# @cluster-size: Cluster size in bytes (default: 65536)
   4561# @table-size: L1/L2 table size (in clusters)
   4562#
   4563# Since: 2.12
   4564##
   4565{ 'struct': 'BlockdevCreateOptionsQed',
   4566  'data': { 'file':             'BlockdevRef',
   4567            'size':             'size',
   4568            '*backing-file':    'str',
   4569            '*backing-fmt':     'BlockdevDriver',
   4570            '*cluster-size':    'size',
   4571            '*table-size':      'int' } }
   4572
   4573##
   4574# @BlockdevCreateOptionsRbd:
   4575#
   4576# Driver specific image creation options for rbd/Ceph.
   4577#
   4578# @location: Where to store the new image file. This location cannot
   4579#            point to a snapshot.
   4580# @size: Size of the virtual disk in bytes
   4581# @cluster-size: RBD object size
   4582# @encrypt: Image encryption options. (Since 6.1)
   4583#
   4584# Since: 2.12
   4585##
   4586{ 'struct': 'BlockdevCreateOptionsRbd',
   4587  'data': { 'location':         'BlockdevOptionsRbd',
   4588            'size':             'size',
   4589            '*cluster-size' :   'size',
   4590            '*encrypt' :        'RbdEncryptionCreateOptions' } }
   4591
   4592##
   4593# @BlockdevVmdkSubformat:
   4594#
   4595# Subformat options for VMDK images
   4596#
   4597# @monolithicSparse:     Single file image with sparse cluster allocation
   4598#
   4599# @monolithicFlat:       Single flat data image and a descriptor file
   4600#
   4601# @twoGbMaxExtentSparse: Data is split into 2GB (per virtual LBA) sparse extent
   4602#                        files, in addition to a descriptor file
   4603#
   4604# @twoGbMaxExtentFlat:   Data is split into 2GB (per virtual LBA) flat extent
   4605#                        files, in addition to a descriptor file
   4606#
   4607# @streamOptimized:      Single file image sparse cluster allocation, optimized
   4608#                        for streaming over network.
   4609#
   4610# Since: 4.0
   4611##
   4612{ 'enum': 'BlockdevVmdkSubformat',
   4613  'data': [ 'monolithicSparse', 'monolithicFlat', 'twoGbMaxExtentSparse',
   4614            'twoGbMaxExtentFlat', 'streamOptimized'] }
   4615
   4616##
   4617# @BlockdevVmdkAdapterType:
   4618#
   4619# Adapter type info for VMDK images
   4620#
   4621# Since: 4.0
   4622##
   4623{ 'enum': 'BlockdevVmdkAdapterType',
   4624  'data': [ 'ide', 'buslogic', 'lsilogic', 'legacyESX'] }
   4625
   4626##
   4627# @BlockdevCreateOptionsVmdk:
   4628#
   4629# Driver specific image creation options for VMDK.
   4630#
   4631# @file: Where to store the new image file. This refers to the image
   4632#        file for monolithcSparse and streamOptimized format, or the
   4633#        descriptor file for other formats.
   4634# @size: Size of the virtual disk in bytes
   4635# @extents: Where to store the data extents. Required for monolithcFlat,
   4636#           twoGbMaxExtentSparse and twoGbMaxExtentFlat formats. For
   4637#           monolithicFlat, only one entry is required; for
   4638#           twoGbMaxExtent* formats, the number of entries required is
   4639#           calculated as extent_number = virtual_size / 2GB. Providing
   4640#           more extents than will be used is an error.
   4641# @subformat: The subformat of the VMDK image. Default: "monolithicSparse".
   4642# @backing-file: The path of backing file. Default: no backing file is used.
   4643# @adapter-type: The adapter type used to fill in the descriptor. Default: ide.
   4644# @hwversion: Hardware version. The meaningful options are "4" or "6".
   4645#             Default: "4".
   4646# @zeroed-grain: Whether to enable zeroed-grain feature for sparse subformats.
   4647#                Default: false.
   4648#
   4649# Since: 4.0
   4650##
   4651{ 'struct': 'BlockdevCreateOptionsVmdk',
   4652  'data': { 'file':             'BlockdevRef',
   4653            'size':             'size',
   4654            '*extents':          ['BlockdevRef'],
   4655            '*subformat':       'BlockdevVmdkSubformat',
   4656            '*backing-file':    'str',
   4657            '*adapter-type':    'BlockdevVmdkAdapterType',
   4658            '*hwversion':       'str',
   4659            '*zeroed-grain':    'bool' } }
   4660
   4661
   4662##
   4663# @BlockdevCreateOptionsSsh:
   4664#
   4665# Driver specific image creation options for SSH.
   4666#
   4667# @location: Where to store the new image file
   4668# @size: Size of the virtual disk in bytes
   4669#
   4670# Since: 2.12
   4671##
   4672{ 'struct': 'BlockdevCreateOptionsSsh',
   4673  'data': { 'location':         'BlockdevOptionsSsh',
   4674            'size':             'size' } }
   4675
   4676##
   4677# @BlockdevCreateOptionsVdi:
   4678#
   4679# Driver specific image creation options for VDI.
   4680#
   4681# @file: Node to create the image format on
   4682# @size: Size of the virtual disk in bytes
   4683# @preallocation: Preallocation mode for the new image (default: off;
   4684#                 allowed values: off, metadata)
   4685#
   4686# Since: 2.12
   4687##
   4688{ 'struct': 'BlockdevCreateOptionsVdi',
   4689  'data': { 'file':             'BlockdevRef',
   4690            'size':             'size',
   4691            '*preallocation':   'PreallocMode' } }
   4692
   4693##
   4694# @BlockdevVhdxSubformat:
   4695#
   4696# @dynamic: Growing image file
   4697# @fixed:   Preallocated fixed-size image file
   4698#
   4699# Since: 2.12
   4700##
   4701{ 'enum': 'BlockdevVhdxSubformat',
   4702  'data': [ 'dynamic', 'fixed' ] }
   4703
   4704##
   4705# @BlockdevCreateOptionsVhdx:
   4706#
   4707# Driver specific image creation options for vhdx.
   4708#
   4709# @file: Node to create the image format on
   4710# @size: Size of the virtual disk in bytes
   4711# @log-size: Log size in bytes, must be a multiple of 1 MB
   4712#            (default: 1 MB)
   4713# @block-size: Block size in bytes, must be a multiple of 1 MB and not
   4714#              larger than 256 MB (default: automatically choose a block
   4715#              size depending on the image size)
   4716# @subformat: vhdx subformat (default: dynamic)
   4717# @block-state-zero: Force use of payload blocks of type 'ZERO'. Non-standard,
   4718#                    but default.  Do not set to 'off' when using 'qemu-img
   4719#                    convert' with subformat=dynamic.
   4720#
   4721# Since: 2.12
   4722##
   4723{ 'struct': 'BlockdevCreateOptionsVhdx',
   4724  'data': { 'file':                 'BlockdevRef',
   4725            'size':                 'size',
   4726            '*log-size':            'size',
   4727            '*block-size':          'size',
   4728            '*subformat':           'BlockdevVhdxSubformat',
   4729            '*block-state-zero':    'bool' } }
   4730
   4731##
   4732# @BlockdevVpcSubformat:
   4733#
   4734# @dynamic: Growing image file
   4735# @fixed:   Preallocated fixed-size image file
   4736#
   4737# Since: 2.12
   4738##
   4739{ 'enum': 'BlockdevVpcSubformat',
   4740  'data': [ 'dynamic', 'fixed' ] }
   4741
   4742##
   4743# @BlockdevCreateOptionsVpc:
   4744#
   4745# Driver specific image creation options for vpc (VHD).
   4746#
   4747# @file: Node to create the image format on
   4748# @size: Size of the virtual disk in bytes
   4749# @subformat: vhdx subformat (default: dynamic)
   4750# @force-size: Force use of the exact byte size instead of rounding to the
   4751#              next size that can be represented in CHS geometry
   4752#              (default: false)
   4753#
   4754# Since: 2.12
   4755##
   4756{ 'struct': 'BlockdevCreateOptionsVpc',
   4757  'data': { 'file':                 'BlockdevRef',
   4758            'size':                 'size',
   4759            '*subformat':           'BlockdevVpcSubformat',
   4760            '*force-size':          'bool' } }
   4761
   4762##
   4763# @BlockdevCreateOptions:
   4764#
   4765# Options for creating an image format on a given node.
   4766#
   4767# @driver: block driver to create the image format
   4768#
   4769# Since: 2.12
   4770##
   4771{ 'union': 'BlockdevCreateOptions',
   4772  'base': {
   4773      'driver':         'BlockdevDriver' },
   4774  'discriminator': 'driver',
   4775  'data': {
   4776      'file':           'BlockdevCreateOptionsFile',
   4777      'gluster':        'BlockdevCreateOptionsGluster',
   4778      'luks':           'BlockdevCreateOptionsLUKS',
   4779      'nfs':            'BlockdevCreateOptionsNfs',
   4780      'parallels':      'BlockdevCreateOptionsParallels',
   4781      'qcow':           'BlockdevCreateOptionsQcow',
   4782      'qcow2':          'BlockdevCreateOptionsQcow2',
   4783      'qed':            'BlockdevCreateOptionsQed',
   4784      'rbd':            'BlockdevCreateOptionsRbd',
   4785      'ssh':            'BlockdevCreateOptionsSsh',
   4786      'vdi':            'BlockdevCreateOptionsVdi',
   4787      'vhdx':           'BlockdevCreateOptionsVhdx',
   4788      'vmdk':           'BlockdevCreateOptionsVmdk',
   4789      'vpc':            'BlockdevCreateOptionsVpc'
   4790  } }
   4791
   4792##
   4793# @blockdev-create:
   4794#
   4795# Starts a job to create an image format on a given node. The job is
   4796# automatically finalized, but a manual job-dismiss is required.
   4797#
   4798# @job-id:          Identifier for the newly created job.
   4799#
   4800# @options:         Options for the image creation.
   4801#
   4802# Since: 3.0
   4803##
   4804{ 'command': 'blockdev-create',
   4805  'data': { 'job-id': 'str',
   4806            'options': 'BlockdevCreateOptions' } }
   4807
   4808##
   4809# @BlockdevAmendOptionsLUKS:
   4810#
   4811# Driver specific image amend options for LUKS.
   4812#
   4813# Since: 5.1
   4814##
   4815{ 'struct': 'BlockdevAmendOptionsLUKS',
   4816  'base': 'QCryptoBlockAmendOptionsLUKS',
   4817  'data': { }
   4818}
   4819
   4820##
   4821# @BlockdevAmendOptionsQcow2:
   4822#
   4823# Driver specific image amend options for qcow2.
   4824# For now, only encryption options can be amended
   4825#
   4826# @encrypt          Encryption options to be amended
   4827#
   4828# Since: 5.1
   4829##
   4830{ 'struct': 'BlockdevAmendOptionsQcow2',
   4831  'data': { '*encrypt':         'QCryptoBlockAmendOptions' } }
   4832
   4833##
   4834# @BlockdevAmendOptions:
   4835#
   4836# Options for amending an image format
   4837#
   4838# @driver:          Block driver of the node to amend.
   4839#
   4840# Since: 5.1
   4841##
   4842{ 'union': 'BlockdevAmendOptions',
   4843  'base': {
   4844      'driver':         'BlockdevDriver' },
   4845  'discriminator': 'driver',
   4846  'data': {
   4847      'luks':           'BlockdevAmendOptionsLUKS',
   4848      'qcow2':          'BlockdevAmendOptionsQcow2' } }
   4849
   4850##
   4851# @x-blockdev-amend:
   4852#
   4853# Starts a job to amend format specific options of an existing open block device
   4854# The job is automatically finalized, but a manual job-dismiss is required.
   4855#
   4856# @job-id:          Identifier for the newly created job.
   4857#
   4858# @node-name:       Name of the block node to work on
   4859#
   4860# @options:         Options (driver specific)
   4861#
   4862# @force:           Allow unsafe operations, format specific
   4863#                   For luks that allows erase of the last active keyslot
   4864#                   (permanent loss of data),
   4865#                   and replacement of an active keyslot
   4866#                   (possible loss of data if IO error happens)
   4867#
   4868# Since: 5.1
   4869##
   4870{ 'command': 'x-blockdev-amend',
   4871  'data': { 'job-id': 'str',
   4872            'node-name': 'str',
   4873            'options': 'BlockdevAmendOptions',
   4874            '*force': 'bool' } }
   4875
   4876##
   4877# @BlockErrorAction:
   4878#
   4879# An enumeration of action that has been taken when a DISK I/O occurs
   4880#
   4881# @ignore: error has been ignored
   4882#
   4883# @report: error has been reported to the device
   4884#
   4885# @stop: error caused VM to be stopped
   4886#
   4887# Since: 2.1
   4888##
   4889{ 'enum': 'BlockErrorAction',
   4890  'data': [ 'ignore', 'report', 'stop' ] }
   4891
   4892
   4893##
   4894# @BLOCK_IMAGE_CORRUPTED:
   4895#
   4896# Emitted when a disk image is being marked corrupt. The image can be
   4897# identified by its device or node name. The 'device' field is always
   4898# present for compatibility reasons, but it can be empty ("") if the
   4899# image does not have a device name associated.
   4900#
   4901# @device: device name. This is always present for compatibility
   4902#          reasons, but it can be empty ("") if the image does not
   4903#          have a device name associated.
   4904#
   4905# @node-name: node name (Since: 2.4)
   4906#
   4907# @msg: informative message for human consumption, such as the kind of
   4908#       corruption being detected. It should not be parsed by machine as it is
   4909#       not guaranteed to be stable
   4910#
   4911# @offset: if the corruption resulted from an image access, this is
   4912#          the host's access offset into the image
   4913#
   4914# @size: if the corruption resulted from an image access, this is
   4915#        the access size
   4916#
   4917# @fatal: if set, the image is marked corrupt and therefore unusable after this
   4918#         event and must be repaired (Since 2.2; before, every
   4919#         BLOCK_IMAGE_CORRUPTED event was fatal)
   4920#
   4921# Note: If action is "stop", a STOP event will eventually follow the
   4922#       BLOCK_IO_ERROR event.
   4923#
   4924# Example:
   4925#
   4926# <- { "event": "BLOCK_IMAGE_CORRUPTED",
   4927#      "data": { "device": "ide0-hd0", "node-name": "node0",
   4928#                "msg": "Prevented active L1 table overwrite", "offset": 196608,
   4929#                "size": 65536 },
   4930#      "timestamp": { "seconds": 1378126126, "microseconds": 966463 } }
   4931#
   4932# Since: 1.7
   4933##
   4934{ 'event': 'BLOCK_IMAGE_CORRUPTED',
   4935  'data': { 'device'     : 'str',
   4936            '*node-name' : 'str',
   4937            'msg'        : 'str',
   4938            '*offset'    : 'int',
   4939            '*size'      : 'int',
   4940            'fatal'      : 'bool' } }
   4941
   4942##
   4943# @BLOCK_IO_ERROR:
   4944#
   4945# Emitted when a disk I/O error occurs
   4946#
   4947# @device: device name. This is always present for compatibility
   4948#          reasons, but it can be empty ("") if the image does not
   4949#          have a device name associated.
   4950#
   4951# @node-name: node name. Note that errors may be reported for the root node
   4952#             that is directly attached to a guest device rather than for the
   4953#             node where the error occurred. The node name is not present if
   4954#             the drive is empty. (Since: 2.8)
   4955#
   4956# @operation: I/O operation
   4957#
   4958# @action: action that has been taken
   4959#
   4960# @nospace: true if I/O error was caused due to a no-space
   4961#           condition. This key is only present if query-block's
   4962#           io-status is present, please see query-block documentation
   4963#           for more information (since: 2.2)
   4964#
   4965# @reason: human readable string describing the error cause.
   4966#          (This field is a debugging aid for humans, it should not
   4967#          be parsed by applications) (since: 2.2)
   4968#
   4969# Note: If action is "stop", a STOP event will eventually follow the
   4970#       BLOCK_IO_ERROR event
   4971#
   4972# Since: 0.13
   4973#
   4974# Example:
   4975#
   4976# <- { "event": "BLOCK_IO_ERROR",
   4977#      "data": { "device": "ide0-hd1",
   4978#                "node-name": "#block212",
   4979#                "operation": "write",
   4980#                "action": "stop" },
   4981#      "timestamp": { "seconds": 1265044230, "microseconds": 450486 } }
   4982#
   4983##
   4984{ 'event': 'BLOCK_IO_ERROR',
   4985  'data': { 'device': 'str', '*node-name': 'str',
   4986            'operation': 'IoOperationType',
   4987            'action': 'BlockErrorAction', '*nospace': 'bool',
   4988            'reason': 'str' } }
   4989
   4990##
   4991# @BLOCK_JOB_COMPLETED:
   4992#
   4993# Emitted when a block job has completed
   4994#
   4995# @type: job type
   4996#
   4997# @device: The job identifier. Originally the device name but other
   4998#          values are allowed since QEMU 2.7
   4999#
   5000# @len: maximum progress value
   5001#
   5002# @offset: current progress value. On success this is equal to len.
   5003#          On failure this is less than len
   5004#
   5005# @speed: rate limit, bytes per second
   5006#
   5007# @error: error message. Only present on failure. This field
   5008#         contains a human-readable error message. There are no semantics
   5009#         other than that streaming has failed and clients should not try to
   5010#         interpret the error string
   5011#
   5012# Since: 1.1
   5013#
   5014# Example:
   5015#
   5016# <- { "event": "BLOCK_JOB_COMPLETED",
   5017#      "data": { "type": "stream", "device": "virtio-disk0",
   5018#                "len": 10737418240, "offset": 10737418240,
   5019#                "speed": 0 },
   5020#      "timestamp": { "seconds": 1267061043, "microseconds": 959568 } }
   5021#
   5022##
   5023{ 'event': 'BLOCK_JOB_COMPLETED',
   5024  'data': { 'type'  : 'JobType',
   5025            'device': 'str',
   5026            'len'   : 'int',
   5027            'offset': 'int',
   5028            'speed' : 'int',
   5029            '*error': 'str' } }
   5030
   5031##
   5032# @BLOCK_JOB_CANCELLED:
   5033#
   5034# Emitted when a block job has been cancelled
   5035#
   5036# @type: job type
   5037#
   5038# @device: The job identifier. Originally the device name but other
   5039#          values are allowed since QEMU 2.7
   5040#
   5041# @len: maximum progress value
   5042#
   5043# @offset: current progress value. On success this is equal to len.
   5044#          On failure this is less than len
   5045#
   5046# @speed: rate limit, bytes per second
   5047#
   5048# Since: 1.1
   5049#
   5050# Example:
   5051#
   5052# <- { "event": "BLOCK_JOB_CANCELLED",
   5053#      "data": { "type": "stream", "device": "virtio-disk0",
   5054#                "len": 10737418240, "offset": 134217728,
   5055#                "speed": 0 },
   5056#      "timestamp": { "seconds": 1267061043, "microseconds": 959568 } }
   5057#
   5058##
   5059{ 'event': 'BLOCK_JOB_CANCELLED',
   5060  'data': { 'type'  : 'JobType',
   5061            'device': 'str',
   5062            'len'   : 'int',
   5063            'offset': 'int',
   5064            'speed' : 'int' } }
   5065
   5066##
   5067# @BLOCK_JOB_ERROR:
   5068#
   5069# Emitted when a block job encounters an error
   5070#
   5071# @device: The job identifier. Originally the device name but other
   5072#          values are allowed since QEMU 2.7
   5073#
   5074# @operation: I/O operation
   5075#
   5076# @action: action that has been taken
   5077#
   5078# Since: 1.3
   5079#
   5080# Example:
   5081#
   5082# <- { "event": "BLOCK_JOB_ERROR",
   5083#      "data": { "device": "ide0-hd1",
   5084#                "operation": "write",
   5085#                "action": "stop" },
   5086#      "timestamp": { "seconds": 1265044230, "microseconds": 450486 } }
   5087#
   5088##
   5089{ 'event': 'BLOCK_JOB_ERROR',
   5090  'data': { 'device'   : 'str',
   5091            'operation': 'IoOperationType',
   5092            'action'   : 'BlockErrorAction' } }
   5093
   5094##
   5095# @BLOCK_JOB_READY:
   5096#
   5097# Emitted when a block job is ready to complete
   5098#
   5099# @type: job type
   5100#
   5101# @device: The job identifier. Originally the device name but other
   5102#          values are allowed since QEMU 2.7
   5103#
   5104# @len: maximum progress value
   5105#
   5106# @offset: current progress value. On success this is equal to len.
   5107#          On failure this is less than len
   5108#
   5109# @speed: rate limit, bytes per second
   5110#
   5111# Note: The "ready to complete" status is always reset by a @BLOCK_JOB_ERROR
   5112#       event
   5113#
   5114# Since: 1.3
   5115#
   5116# Example:
   5117#
   5118# <- { "event": "BLOCK_JOB_READY",
   5119#      "data": { "device": "drive0", "type": "mirror", "speed": 0,
   5120#                "len": 2097152, "offset": 2097152 }
   5121#      "timestamp": { "seconds": 1265044230, "microseconds": 450486 } }
   5122#
   5123##
   5124{ 'event': 'BLOCK_JOB_READY',
   5125  'data': { 'type'  : 'JobType',
   5126            'device': 'str',
   5127            'len'   : 'int',
   5128            'offset': 'int',
   5129            'speed' : 'int' } }
   5130
   5131##
   5132# @BLOCK_JOB_PENDING:
   5133#
   5134# Emitted when a block job is awaiting explicit authorization to finalize graph
   5135# changes via @block-job-finalize. If this job is part of a transaction, it will
   5136# not emit this event until the transaction has converged first.
   5137#
   5138# @type: job type
   5139#
   5140# @id: The job identifier.
   5141#
   5142# Since: 2.12
   5143#
   5144# Example:
   5145#
   5146# <- { "event": "BLOCK_JOB_WAITING",
   5147#      "data": { "device": "drive0", "type": "mirror" },
   5148#      "timestamp": { "seconds": 1265044230, "microseconds": 450486 } }
   5149#
   5150##
   5151{ 'event': 'BLOCK_JOB_PENDING',
   5152  'data': { 'type'  : 'JobType',
   5153            'id'    : 'str' } }
   5154
   5155##
   5156# @PreallocMode:
   5157#
   5158# Preallocation mode of QEMU image file
   5159#
   5160# @off: no preallocation
   5161# @metadata: preallocate only for metadata
   5162# @falloc: like @full preallocation but allocate disk space by
   5163#          posix_fallocate() rather than writing data.
   5164# @full: preallocate all data by writing it to the device to ensure
   5165#        disk space is really available. This data may or may not be
   5166#        zero, depending on the image format and storage.
   5167#        @full preallocation also sets up metadata correctly.
   5168#
   5169# Since: 2.2
   5170##
   5171{ 'enum': 'PreallocMode',
   5172  'data': [ 'off', 'metadata', 'falloc', 'full' ] }
   5173
   5174##
   5175# @BLOCK_WRITE_THRESHOLD:
   5176#
   5177# Emitted when writes on block device reaches or exceeds the
   5178# configured write threshold. For thin-provisioned devices, this
   5179# means the device should be extended to avoid pausing for
   5180# disk exhaustion.
   5181# The event is one shot. Once triggered, it needs to be
   5182# re-registered with another block-set-write-threshold command.
   5183#
   5184# @node-name: graph node name on which the threshold was exceeded.
   5185#
   5186# @amount-exceeded: amount of data which exceeded the threshold, in bytes.
   5187#
   5188# @write-threshold: last configured threshold, in bytes.
   5189#
   5190# Since: 2.3
   5191##
   5192{ 'event': 'BLOCK_WRITE_THRESHOLD',
   5193  'data': { 'node-name': 'str',
   5194            'amount-exceeded': 'uint64',
   5195            'write-threshold': 'uint64' } }
   5196
   5197##
   5198# @block-set-write-threshold:
   5199#
   5200# Change the write threshold for a block drive. An event will be
   5201# delivered if a write to this block drive crosses the configured
   5202# threshold.  The threshold is an offset, thus must be
   5203# non-negative. Default is no write threshold. Setting the threshold
   5204# to zero disables it.
   5205#
   5206# This is useful to transparently resize thin-provisioned drives without
   5207# the guest OS noticing.
   5208#
   5209# @node-name: graph node name on which the threshold must be set.
   5210#
   5211# @write-threshold: configured threshold for the block device, bytes.
   5212#                   Use 0 to disable the threshold.
   5213#
   5214# Since: 2.3
   5215#
   5216# Example:
   5217#
   5218# -> { "execute": "block-set-write-threshold",
   5219#      "arguments": { "node-name": "mydev",
   5220#                     "write-threshold": 17179869184 } }
   5221# <- { "return": {} }
   5222#
   5223##
   5224{ 'command': 'block-set-write-threshold',
   5225  'data': { 'node-name': 'str', 'write-threshold': 'uint64' } }
   5226
   5227##
   5228# @x-blockdev-change:
   5229#
   5230# Dynamically reconfigure the block driver state graph. It can be used
   5231# to add, remove, insert or replace a graph node. Currently only the
   5232# Quorum driver implements this feature to add or remove its child. This
   5233# is useful to fix a broken quorum child.
   5234#
   5235# If @node is specified, it will be inserted under @parent. @child
   5236# may not be specified in this case. If both @parent and @child are
   5237# specified but @node is not, @child will be detached from @parent.
   5238#
   5239# @parent: the id or name of the parent node.
   5240#
   5241# @child: the name of a child under the given parent node.
   5242#
   5243# @node: the name of the node that will be added.
   5244#
   5245# Note: this command is experimental, and its API is not stable. It
   5246#       does not support all kinds of operations, all kinds of children, nor
   5247#       all block drivers.
   5248#
   5249#       FIXME Removing children from a quorum node means introducing gaps in the
   5250#       child indices. This cannot be represented in the 'children' list of
   5251#       BlockdevOptionsQuorum, as returned by .bdrv_refresh_filename().
   5252#
   5253#       Warning: The data in a new quorum child MUST be consistent with that of
   5254#       the rest of the array.
   5255#
   5256# Since: 2.7
   5257#
   5258# Example:
   5259#
   5260# 1. Add a new node to a quorum
   5261# -> { "execute": "blockdev-add",
   5262#      "arguments": {
   5263#          "driver": "raw",
   5264#          "node-name": "new_node",
   5265#          "file": { "driver": "file",
   5266#                    "filename": "test.raw" } } }
   5267# <- { "return": {} }
   5268# -> { "execute": "x-blockdev-change",
   5269#      "arguments": { "parent": "disk1",
   5270#                     "node": "new_node" } }
   5271# <- { "return": {} }
   5272#
   5273# 2. Delete a quorum's node
   5274# -> { "execute": "x-blockdev-change",
   5275#      "arguments": { "parent": "disk1",
   5276#                     "child": "children.1" } }
   5277# <- { "return": {} }
   5278#
   5279##
   5280{ 'command': 'x-blockdev-change',
   5281  'data' : { 'parent': 'str',
   5282             '*child': 'str',
   5283             '*node': 'str' } }
   5284
   5285##
   5286# @x-blockdev-set-iothread:
   5287#
   5288# Move @node and its children into the @iothread.  If @iothread is null then
   5289# move @node and its children into the main loop.
   5290#
   5291# The node must not be attached to a BlockBackend.
   5292#
   5293# @node-name: the name of the block driver node
   5294#
   5295# @iothread: the name of the IOThread object or null for the main loop
   5296#
   5297# @force: true if the node and its children should be moved when a BlockBackend
   5298#         is already attached
   5299#
   5300# Note: this command is experimental and intended for test cases that need
   5301#       control over IOThreads only.
   5302#
   5303# Since: 2.12
   5304#
   5305# Example:
   5306#
   5307# 1. Move a node into an IOThread
   5308# -> { "execute": "x-blockdev-set-iothread",
   5309#      "arguments": { "node-name": "disk1",
   5310#                     "iothread": "iothread0" } }
   5311# <- { "return": {} }
   5312#
   5313# 2. Move a node into the main loop
   5314# -> { "execute": "x-blockdev-set-iothread",
   5315#      "arguments": { "node-name": "disk1",
   5316#                     "iothread": null } }
   5317# <- { "return": {} }
   5318#
   5319##
   5320{ 'command': 'x-blockdev-set-iothread',
   5321  'data' : { 'node-name': 'str',
   5322             'iothread': 'StrOrNull',
   5323             '*force': 'bool' } }
   5324
   5325##
   5326# @QuorumOpType:
   5327#
   5328# An enumeration of the quorum operation types
   5329#
   5330# @read: read operation
   5331#
   5332# @write: write operation
   5333#
   5334# @flush: flush operation
   5335#
   5336# Since: 2.6
   5337##
   5338{ 'enum': 'QuorumOpType',
   5339  'data': [ 'read', 'write', 'flush' ] }
   5340
   5341##
   5342# @QUORUM_FAILURE:
   5343#
   5344# Emitted by the Quorum block driver if it fails to establish a quorum
   5345#
   5346# @reference: device name if defined else node name
   5347#
   5348# @sector-num: number of the first sector of the failed read operation
   5349#
   5350# @sectors-count: failed read operation sector count
   5351#
   5352# Note: This event is rate-limited.
   5353#
   5354# Since: 2.0
   5355#
   5356# Example:
   5357#
   5358# <- { "event": "QUORUM_FAILURE",
   5359#      "data": { "reference": "usr1", "sector-num": 345435, "sectors-count": 5 },
   5360#      "timestamp": { "seconds": 1344522075, "microseconds": 745528 } }
   5361#
   5362##
   5363{ 'event': 'QUORUM_FAILURE',
   5364  'data': { 'reference': 'str', 'sector-num': 'int', 'sectors-count': 'int' } }
   5365
   5366##
   5367# @QUORUM_REPORT_BAD:
   5368#
   5369# Emitted to report a corruption of a Quorum file
   5370#
   5371# @type: quorum operation type (Since 2.6)
   5372#
   5373# @error: error message. Only present on failure. This field
   5374#         contains a human-readable error message. There are no semantics other
   5375#         than that the block layer reported an error and clients should not
   5376#         try to interpret the error string.
   5377#
   5378# @node-name: the graph node name of the block driver state
   5379#
   5380# @sector-num: number of the first sector of the failed read operation
   5381#
   5382# @sectors-count: failed read operation sector count
   5383#
   5384# Note: This event is rate-limited.
   5385#
   5386# Since: 2.0
   5387#
   5388# Example:
   5389#
   5390# 1. Read operation
   5391#
   5392# { "event": "QUORUM_REPORT_BAD",
   5393#      "data": { "node-name": "node0", "sector-num": 345435, "sectors-count": 5,
   5394#                "type": "read" },
   5395#      "timestamp": { "seconds": 1344522075, "microseconds": 745528 } }
   5396#
   5397# 2. Flush operation
   5398#
   5399# { "event": "QUORUM_REPORT_BAD",
   5400#      "data": { "node-name": "node0", "sector-num": 0, "sectors-count": 2097120,
   5401#                "type": "flush", "error": "Broken pipe" },
   5402#      "timestamp": { "seconds": 1456406829, "microseconds": 291763 } }
   5403#
   5404##
   5405{ 'event': 'QUORUM_REPORT_BAD',
   5406  'data': { 'type': 'QuorumOpType', '*error': 'str', 'node-name': 'str',
   5407            'sector-num': 'int', 'sectors-count': 'int' } }
   5408
   5409##
   5410# @BlockdevSnapshotInternal:
   5411#
   5412# @device: the device name or node-name of a root node to generate the snapshot
   5413#          from
   5414#
   5415# @name: the name of the internal snapshot to be created
   5416#
   5417# Notes: In transaction, if @name is empty, or any snapshot matching @name
   5418#        exists, the operation will fail. Only some image formats support it,
   5419#        for example, qcow2, and rbd.
   5420#
   5421# Since: 1.7
   5422##
   5423{ 'struct': 'BlockdevSnapshotInternal',
   5424  'data': { 'device': 'str', 'name': 'str' } }
   5425
   5426##
   5427# @blockdev-snapshot-internal-sync:
   5428#
   5429# Synchronously take an internal snapshot of a block device, when the
   5430# format of the image used supports it. If the name is an empty
   5431# string, or a snapshot with name already exists, the operation will
   5432# fail.
   5433#
   5434# For the arguments, see the documentation of BlockdevSnapshotInternal.
   5435#
   5436# Returns: - nothing on success
   5437#          - If @device is not a valid block device, GenericError
   5438#          - If any snapshot matching @name exists, or @name is empty,
   5439#            GenericError
   5440#          - If the format of the image used does not support it,
   5441#            BlockFormatFeatureNotSupported
   5442#
   5443# Since: 1.7
   5444#
   5445# Example:
   5446#
   5447# -> { "execute": "blockdev-snapshot-internal-sync",
   5448#      "arguments": { "device": "ide-hd0",
   5449#                     "name": "snapshot0" }
   5450#    }
   5451# <- { "return": {} }
   5452#
   5453##
   5454{ 'command': 'blockdev-snapshot-internal-sync',
   5455  'data': 'BlockdevSnapshotInternal' }
   5456
   5457##
   5458# @blockdev-snapshot-delete-internal-sync:
   5459#
   5460# Synchronously delete an internal snapshot of a block device, when the format
   5461# of the image used support it. The snapshot is identified by name or id or
   5462# both. One of the name or id is required. Return SnapshotInfo for the
   5463# successfully deleted snapshot.
   5464#
   5465# @device: the device name or node-name of a root node to delete the snapshot
   5466#          from
   5467#
   5468# @id: optional the snapshot's ID to be deleted
   5469#
   5470# @name: optional the snapshot's name to be deleted
   5471#
   5472# Returns: - SnapshotInfo on success
   5473#          - If @device is not a valid block device, GenericError
   5474#          - If snapshot not found, GenericError
   5475#          - If the format of the image used does not support it,
   5476#            BlockFormatFeatureNotSupported
   5477#          - If @id and @name are both not specified, GenericError
   5478#
   5479# Since: 1.7
   5480#
   5481# Example:
   5482#
   5483# -> { "execute": "blockdev-snapshot-delete-internal-sync",
   5484#      "arguments": { "device": "ide-hd0",
   5485#                     "name": "snapshot0" }
   5486#    }
   5487# <- { "return": {
   5488#                    "id": "1",
   5489#                    "name": "snapshot0",
   5490#                    "vm-state-size": 0,
   5491#                    "date-sec": 1000012,
   5492#                    "date-nsec": 10,
   5493#                    "vm-clock-sec": 100,
   5494#                    "vm-clock-nsec": 20,
   5495#                    "icount": 220414
   5496#      }
   5497#    }
   5498#
   5499##
   5500{ 'command': 'blockdev-snapshot-delete-internal-sync',
   5501  'data': { 'device': 'str', '*id': 'str', '*name': 'str'},
   5502  'returns': 'SnapshotInfo' }