# -*- Mode: Python -*-
# vim: filetype=python

##
# == Block core (VM unrelated)
##

{ 'include': 'common.json' }
{ 'include': 'crypto.json' }
{ 'include': 'job.json' }
{ 'include': 'sockets.json' }

##
# @SnapshotInfo:
#
# @id: unique snapshot id
#
# @name: user chosen name
#
# @vm-state-size: size of the VM state
#
# @date-sec: UTC date of the snapshot in seconds
#
# @date-nsec: fractional part in nano seconds to be used with date-sec
#
# @vm-clock-sec: VM clock relative to boot in seconds
#
# @vm-clock-nsec: fractional part in nano seconds to be used with
#     vm-clock-sec
#
# @icount: Current instruction count.  Appears when execution
#     record/replay is enabled.  Used for "time-traveling" to match
#     the moment in the recorded execution with the snapshots.  This
#     counter may be obtained through @query-replay command (since
#     5.2)
#
# Since: 1.3
##
{ 'struct': 'SnapshotInfo',
  'data': { 'id': 'str', 'name': 'str', 'vm-state-size': 'int',
            'date-sec': 'int', 'date-nsec': 'int',
            'vm-clock-sec': 'int', 'vm-clock-nsec': 'int',
            '*icount': 'int' } }

##
# @ImageInfoSpecificQCow2EncryptionBase:
#
# @format: The encryption format
#
# Since: 2.10
##
{ 'struct': 'ImageInfoSpecificQCow2EncryptionBase',
  'data': { 'format': 'BlockdevQcow2EncryptionFormat'}}

##
# @ImageInfoSpecificQCow2Encryption:
#
# Since: 2.10
##
{ 'union': 'ImageInfoSpecificQCow2Encryption',
  'base': 'ImageInfoSpecificQCow2EncryptionBase',
  'discriminator': 'format',
  'data': { 'luks': 'QCryptoBlockInfoLUKS' } }

##
# @ImageInfoSpecificQCow2:
#
# @compat: compatibility level
#
# @data-file: the filename of the external data file that is stored in
#     the image and used as a default for opening the image
#     (since: 4.0)
#
# @data-file-raw: True if the external data file must stay valid as a
#     standalone (read-only) raw image without looking at qcow2
#     metadata (since: 4.0)
#
# @extended-l2: true if the image has extended L2 entries; only valid
#     for compat >= 1.1 (since 5.2)
#
# @lazy-refcounts: on or off; only valid for compat >= 1.1
#
# @corrupt: true if the image has been marked corrupt; only valid for
#     compat >= 1.1 (since 2.2)
#
# @refcount-bits: width of a refcount entry in bits (since 2.3)
#
# @encrypt: details about encryption parameters; only set if image is
#     encrypted (since 2.10)
#
# @bitmaps: A list of qcow2 bitmap details (since 4.0)
#
# @compression-type: the image cluster compression method (since 5.1)
#
# Since: 1.7
##
{ 'struct': 'ImageInfoSpecificQCow2',
  'data': {
      'compat': 'str',
      '*data-file': 'str',
      '*data-file-raw': 'bool',
      '*extended-l2': 'bool',
      '*lazy-refcounts': 'bool',
      '*corrupt': 'bool',
      'refcount-bits': 'int',
      '*encrypt': 'ImageInfoSpecificQCow2Encryption',
      '*bitmaps': ['Qcow2BitmapInfo'],
      'compression-type': 'Qcow2CompressionType'
  } }

##
# @ImageInfoSpecificVmdk:
#
# @create-type: The create type of VMDK image
#
# @cid: Content id of image
#
# @parent-cid: Parent VMDK image's cid
#
# @extents: List of extent files
#
# Since: 1.7
##
{ 'struct': 'ImageInfoSpecificVmdk',
  'data': {
      'create-type': 'str',
      'cid': 'int',
      'parent-cid': 'int',
      'extents': ['VmdkExtentInfo']
  } }

##
# @VmdkExtentInfo:
#
# Information about a VMDK extent file
#
# @filename: Name of the extent file
#
# @format: Extent type (e.g.  FLAT or SPARSE)
#
# @virtual-size: Number of bytes covered by this extent
#
# @cluster-size: Cluster size in bytes (for non-flat extents)
#
# @compressed: Whether this extent contains compressed data
#
# Since: 8.0
##
{ 'struct': 'VmdkExtentInfo',
  'data': {
      'filename': 'str',
      'format': 'str',
      'virtual-size': 'int',
      '*cluster-size': 'int',
      '*compressed': 'bool'
  } }

##
# @ImageInfoSpecificRbd:
#
# @encryption-format: Image encryption format
#
# Since: 6.1
##
{ 'struct': 'ImageInfoSpecificRbd',
  'data': {
      '*encryption-format': 'RbdImageEncryptionFormat'
  } }

##
# @ImageInfoSpecificFile:
#
# @extent-size-hint: Extent size hint (if available)
#
# Since: 8.0
##
{ 'struct': 'ImageInfoSpecificFile',
  'data': {
      '*extent-size-hint': 'size'
  } }

##
# @ImageInfoSpecificKind:
#
# @luks: Since 2.7
#
# @rbd: Since 6.1
#
# @file: Since 8.0
#
# Since: 1.7
##
{ 'enum': 'ImageInfoSpecificKind',
  'data': [ 'qcow2', 'vmdk', 'luks', 'rbd', 'file' ] }

##
# @ImageInfoSpecificQCow2Wrapper:
#
# Since: 1.7
##
{ 'struct': 'ImageInfoSpecificQCow2Wrapper',
  'data': { 'data': 'ImageInfoSpecificQCow2' } }

##
# @ImageInfoSpecificVmdkWrapper:
#
# Since: 6.1
##
{ 'struct': 'ImageInfoSpecificVmdkWrapper',
  'data': { 'data': 'ImageInfoSpecificVmdk' } }

##
# @ImageInfoSpecificLUKSWrapper:
#
# Since: 2.7
##
{ 'struct': 'ImageInfoSpecificLUKSWrapper',
  'data': { 'data': 'QCryptoBlockInfoLUKS' } }
# If we need to add block driver specific parameters for
# LUKS in future, then we'll subclass QCryptoBlockInfoLUKS
# to define a ImageInfoSpecificLUKS

##
# @ImageInfoSpecificRbdWrapper:
#
# Since: 6.1
##
{ 'struct': 'ImageInfoSpecificRbdWrapper',
  'data': { 'data': 'ImageInfoSpecificRbd' } }

##
# @ImageInfoSpecificFileWrapper:
#
# Since: 8.0
##
{ 'struct': 'ImageInfoSpecificFileWrapper',
  'data': { 'data': 'ImageInfoSpecificFile' } }

##
# @ImageInfoSpecific:
#
# A discriminated record of image format specific information
# structures.
#
# Since: 1.7
##
{ 'union': 'ImageInfoSpecific',
  'base': { 'type': 'ImageInfoSpecificKind' },
  'discriminator': 'type',
  'data': {
      'qcow2': 'ImageInfoSpecificQCow2Wrapper',
      'vmdk': 'ImageInfoSpecificVmdkWrapper',
      'luks': 'ImageInfoSpecificLUKSWrapper',
      'rbd': 'ImageInfoSpecificRbdWrapper',
      'file': 'ImageInfoSpecificFileWrapper'
  } }

##
# @BlockNodeInfo:
#
# Information about a QEMU image file
#
# @filename: name of the image file
#
# @format: format of the image file
#
# @virtual-size: maximum capacity in bytes of the image
#
# @actual-size: actual size on disk in bytes of the image
#
# @dirty-flag: true if image is not cleanly closed
#
# @cluster-size: size of a cluster in bytes
#
# @encrypted: true if the image is encrypted
#
# @compressed: true if the image is compressed (Since 1.7)
#
# @backing-filename: name of the backing file
#
# @full-backing-filename: full path of the backing file
#
# @backing-filename-format: the format of the backing file
#
# @snapshots: list of VM snapshots
#
# @format-specific: structure supplying additional format-specific
#     information (since 1.7)
#
# Since: 8.0
##
{ 'struct': 'BlockNodeInfo',
  'data': {'filename': 'str', 'format': 'str', '*dirty-flag': 'bool',
           '*actual-size': 'int', 'virtual-size': 'int',
           '*cluster-size': 'int', '*encrypted': 'bool', '*compressed': 'bool',
           '*backing-filename': 'str', '*full-backing-filename': 'str',
           '*backing-filename-format': 'str', '*snapshots': ['SnapshotInfo'],
           '*format-specific': 'ImageInfoSpecific' } }

##
# @ImageInfo:
#
# Information about a QEMU image file, and potentially its backing
# image
#
# @backing-image: info of the backing image
#
# Since: 1.3
##
{ 'struct': 'ImageInfo',
  'base': 'BlockNodeInfo',
  'data': {
      '*backing-image': 'ImageInfo'
  } }

##
# @BlockChildInfo:
#
# Information about all nodes in the block graph starting at some
# node, annotated with information about that node in relation to its
# parent.
#
# @name: Child name of the root node in the BlockGraphInfo struct, in
#     its role as the child of some undescribed parent node
#
# @info: Block graph information starting at this node
#
# Since: 8.0
##
{ 'struct': 'BlockChildInfo',
  'data': {
      'name': 'str',
      'info': 'BlockGraphInfo'
  } }

##
# @BlockGraphInfo:
#
# Information about all nodes in a block (sub)graph in the form of
# BlockNodeInfo data.  The base BlockNodeInfo struct contains the
# information for the (sub)graph's root node.
#
# @children: Array of links to this node's child nodes' information
#
# Since: 8.0
##
{ 'struct': 'BlockGraphInfo',
  'base': 'BlockNodeInfo',
  'data': { 'children': ['BlockChildInfo'] } }

##
# @ImageCheck:
#
# Information about a QEMU image file check
#
# @filename: name of the image file checked
#
# @format: format of the image file checked
#
# @check-errors: number of unexpected errors occurred during check
#
# @image-end-offset: offset (in bytes) where the image ends, this
#     field is present if the driver for the image format supports it
#
# @corruptions: number of corruptions found during the check if any
#
# @leaks: number of leaks found during the check if any
#
# @corruptions-fixed: number of corruptions fixed during the check if
#     any
#
# @leaks-fixed: number of leaks fixed during the check if any
#
# @total-clusters: total number of clusters, this field is present if
#     the driver for the image format supports it
#
# @allocated-clusters: total number of allocated clusters, this field
#     is present if the driver for the image format supports it
#
# @fragmented-clusters: total number of fragmented clusters, this
#     field is present if the driver for the image format supports it
#
# @compressed-clusters: total number of compressed clusters, this
#     field is present if the driver for the image format supports it
#
# Since: 1.4
##
{ 'struct': 'ImageCheck',
  'data': {'filename': 'str', 'format': 'str', 'check-errors': 'int',
           '*image-end-offset': 'int', '*corruptions': 'int', '*leaks': 'int',
           '*corruptions-fixed': 'int', '*leaks-fixed': 'int',
           '*total-clusters': 'int', '*allocated-clusters': 'int',
           '*fragmented-clusters': 'int', '*compressed-clusters': 'int' } }

##
# @MapEntry:
#
# Mapping information from a virtual block range to a host file range
#
# @start: virtual (guest) offset of the first byte described by this
#     entry
#
# @length: the number of bytes of the mapped virtual range
#
# @data: reading the image will actually read data from a file (in
#     particular, if @offset is present this means that the sectors
#     are not simply preallocated, but contain actual data in raw
#     format)
#
# @zero: whether the virtual blocks read as zeroes
#
# @depth: number of layers (0 = top image, 1 = top image's backing
#     file, ..., n - 1 = bottom image (where n is the number of images
#     in the chain)) before reaching one for which the range is
#     allocated
#
# @present: true if this layer provides the data, false if adding a
#     backing layer could impact this region (since 6.1)
#
# @offset: if present, the image file stores the data for this range
#     in raw format at the given (host) offset
#
# @filename: filename that is referred to by @offset
#
# Since: 2.6
##
{ 'struct': 'MapEntry',
  'data': {'start': 'int', 'length': 'int', 'data': 'bool',
           'zero': 'bool', 'depth': 'int', 'present': 'bool',
           '*offset': 'int', '*filename': 'str' } }

##
# @BlockdevCacheInfo:
#
# Cache mode information for a block device
#
# @writeback: true if writeback mode is enabled
#
# @direct: true if the host page cache is bypassed (O_DIRECT)
#
# @no-flush: true if flush requests are ignored for the device
#
# Since: 2.3
##
{ 'struct': 'BlockdevCacheInfo',
  'data': { 'writeback': 'bool',
            'direct': 'bool',
            'no-flush': 'bool' } }

##
# @BlockDeviceInfo:
#
# Information about the backing device for a block device.
#
# @file: the filename of the backing device
#
# @node-name: the name of the block driver node (Since 2.0)
#
# @ro: true if the backing device was open read-only
#
# @drv: the name of the block format used to open the backing device.
#     As of 0.14 this can be: 'blkdebug', 'bochs', 'cloop', 'cow',
#     'dmg', 'file', 'file', 'ftp', 'ftps', 'host_cdrom',
#     'host_device', 'http', 'https', 'luks', 'nbd', 'parallels',
#     'qcow', 'qcow2', 'raw', 'vdi', 'vmdk', 'vpc', 'vvfat' 2.2:
#     'archipelago' added, 'cow' dropped 2.3: 'host_floppy' deprecated
#     2.5: 'host_floppy' dropped 2.6: 'luks' added 2.8: 'replication'
#     added, 'tftp' dropped 2.9: 'archipelago' dropped
#
# @backing_file: the name of the backing file (for copy-on-write)
#
# @backing_file_depth: number of files in the backing file chain
#     (since: 1.2)
#
# @encrypted: true if the backing device is encrypted
#
# @detect_zeroes: detect and optimize zero writes (Since 2.1)
#
# @bps: total throughput limit in bytes per second is specified
#
# @bps_rd: read throughput limit in bytes per second is specified
#
# @bps_wr: write throughput limit in bytes per second is specified
#
# @iops: total I/O operations per second is specified
#
# @iops_rd: read I/O operations per second is specified
#
# @iops_wr: write I/O operations per second is specified
#
# @image: the info of image used (since: 1.6)
#
# @bps_max: total throughput limit during bursts, in bytes (Since 1.7)
#
# @bps_rd_max: read throughput limit during bursts, in bytes (Since
#     1.7)
#
# @bps_wr_max: write throughput limit during bursts, in bytes (Since
#     1.7)
#
# @iops_max: total I/O operations per second during bursts, in bytes
#     (Since 1.7)
#
# @iops_rd_max: read I/O operations per second during bursts, in bytes
#     (Since 1.7)
#
# @iops_wr_max: write I/O operations per second during bursts, in
#     bytes (Since 1.7)
#
# @bps_max_length: maximum length of the @bps_max burst period, in
#     seconds.  (Since 2.6)
#
# @bps_rd_max_length: maximum length of the @bps_rd_max burst period,
#     in seconds.  (Since 2.6)
#
# @bps_wr_max_length: maximum length of the @bps_wr_max burst period,
#     in seconds.  (Since 2.6)
#
# @iops_max_length: maximum length of the @iops burst period, in
#     seconds.  (Since 2.6)
#
# @iops_rd_max_length: maximum length of the @iops_rd_max burst
#     period, in seconds.  (Since 2.6)
#
# @iops_wr_max_length: maximum length of the @iops_wr_max burst
#     period, in seconds.  (Since 2.6)
#
# @iops_size: an I/O size in bytes (Since 1.7)
#
# @group: throttle group name (Since 2.4)
#
# @cache: the cache mode used for the block device (since: 2.3)
#
# @write_threshold: configured write threshold for the device.  0 if
#     disabled.  (Since 2.3)
#
# @dirty-bitmaps: dirty bitmaps information (only present if node has
#     one or more dirty bitmaps) (Since 4.2)
#
# Since: 0.14
##
{ 'struct': 'BlockDeviceInfo',
  'data': { 'file': 'str', '*node-name': 'str', 'ro': 'bool', 'drv': 'str',
            '*backing_file': 'str', 'backing_file_depth': 'int',
            'encrypted': 'bool',
            'detect_zeroes': 'BlockdevDetectZeroesOptions',
            'bps': 'int', 'bps_rd': 'int', 'bps_wr': 'int',
            'iops': 'int', 'iops_rd': 'int', 'iops_wr': 'int',
            'image': 'ImageInfo',
            '*bps_max': 'int', '*bps_rd_max': 'int',
            '*bps_wr_max': 'int', '*iops_max': 'int',
            '*iops_rd_max': 'int', '*iops_wr_max': 'int',
            '*bps_max_length': 'int', '*bps_rd_max_length': 'int',
            '*bps_wr_max_length': 'int', '*iops_max_length': 'int',
            '*iops_rd_max_length': 'int', '*iops_wr_max_length': 'int',
            '*iops_size': 'int', '*group': 'str', 'cache': 'BlockdevCacheInfo',
            'write_threshold': 'int', '*dirty-bitmaps': ['BlockDirtyInfo'] } }

##
# @BlockDeviceIoStatus:
#
# An enumeration of block device I/O status.
#
# @ok: The last I/O operation has succeeded
#
# @failed: The last I/O operation has failed
#
# @nospace: The last I/O operation has failed due to a no-space
#     condition
#
# Since: 1.0
##
{ 'enum': 'BlockDeviceIoStatus', 'data': [ 'ok', 'failed', 'nospace' ] }

##
# @BlockDirtyInfo:
#
# Block dirty bitmap information.
#
# @name: the name of the dirty bitmap (Since 2.4)
#
# @count: number of dirty bytes according to the dirty bitmap
#
# @granularity: granularity of the dirty bitmap in bytes (since 1.4)
#
# @recording: true if the bitmap is recording new writes from the
#     guest.  (since 4.0)
#
# @busy: true if the bitmap is in-use by some operation (NBD or jobs)
#     and cannot be modified via QMP or used by another operation.
#     (since 4.0)
#
# @persistent: true if the bitmap was stored on disk, is scheduled to
#     be stored on disk, or both.  (since 4.0)
#
# @inconsistent: true if this is a persistent bitmap that was
#     improperly stored.  Implies @persistent to be true; @recording
#     and @busy to be false.  This bitmap cannot be used.  To remove
#     it, use @block-dirty-bitmap-remove.  (Since 4.0)
#
# Since: 1.3
##
{ 'struct': 'BlockDirtyInfo',
  'data': {'*name': 'str', 'count': 'int', 'granularity': 'uint32',
           'recording': 'bool', 'busy': 'bool',
           'persistent': 'bool', '*inconsistent': 'bool' } }

##
# @Qcow2BitmapInfoFlags:
#
# An enumeration of flags that a bitmap can report to the user.
#
# @in-use: This flag is set by any process actively modifying the
#     qcow2 file, and cleared when the updated bitmap is flushed to
#     the qcow2 image.  The presence of this flag in an offline image
#     means that the bitmap was not saved correctly after its last
#     usage, and may contain inconsistent data.
#
# @auto: The bitmap must reflect all changes of the virtual disk by
#     any application that would write to this qcow2 file.
#
# Since: 4.0
##
{ 'enum': 'Qcow2BitmapInfoFlags',
  'data': ['in-use', 'auto'] }

##
# @Qcow2BitmapInfo:
#
# Qcow2 bitmap information.
#
# @name: the name of the bitmap
#
# @granularity: granularity of the bitmap in bytes
#
# @flags: flags of the bitmap
#
# Since: 4.0
##
{ 'struct': 'Qcow2BitmapInfo',
  'data': {'name': 'str', 'granularity': 'uint32',
           'flags': ['Qcow2BitmapInfoFlags'] } }

##
# @BlockLatencyHistogramInfo:
#
# Block latency histogram.
#
# @boundaries: list of interval boundary values in nanoseconds, all
#     greater than zero and in ascending order.  For example, the list
#     [10, 50, 100] produces the following histogram intervals: [0,
#     10), [10, 50), [50, 100), [100, +inf).
#
# @bins: list of io request counts corresponding to histogram
#     intervals.
#     len(@bins) = len(@boundaries) + 1
#     For the example above, @bins may be something like [3, 1, 5, 2],
#     and corresponding histogram looks like:
#
# ::
#
#        5|           *
#        4|           *
#        3| *         *
#        2| *         *    *
#        1| *    *    *    *
#         +------------------
#             10   50   100
#
# Since: 4.0
##
{ 'struct': 'BlockLatencyHistogramInfo',
  'data': {'boundaries': ['uint64'], 'bins': ['uint64'] } }

##
# @BlockInfo:
#
# Block device information.  This structure describes a virtual device
# and the backing device associated with it.
#
# @device: The device name associated with the virtual device.
#
# @qdev: The qdev ID, or if no ID is assigned, the QOM path of the
#     block device.  (since 2.10)
#
# @type: This field is returned only for compatibility reasons, it
#     should not be used (always returns 'unknown')
#
# @removable: True if the device supports removable media.
#
# @locked: True if the guest has locked this device from having its
#     media removed
#
# @tray_open: True if the device's tray is open (only present if it
#     has a tray)
#
# @io-status: @BlockDeviceIoStatus.  Only present if the device
#     supports it and the VM is configured to stop on errors
#     (supported device models: virtio-blk, IDE, SCSI except
#     scsi-generic)
#
# @inserted: @BlockDeviceInfo describing the device if media is
#     present
#
# Since: 0.14
##
{ 'struct': 'BlockInfo',
  'data': {'device': 'str', '*qdev': 'str', 'type': 'str', 'removable': 'bool',
           'locked': 'bool', '*inserted': 'BlockDeviceInfo',
           '*tray_open': 'bool', '*io-status': 'BlockDeviceIoStatus' } }

##
# @BlockMeasureInfo:
#
# Image file size calculation information.  This structure describes
# the size requirements for creating a new image file.
#
# The size requirements depend on the new image file format.  File
# size always equals virtual disk size for the 'raw' format, even for
# sparse POSIX files.  Compact formats such as 'qcow2' represent
# unallocated and zero regions efficiently so file size may be smaller
# than virtual disk size.
#
# The values are upper bounds that are guaranteed to fit the new image
# file.  Subsequent modification, such as internal snapshot or further
# bitmap creation, may require additional space and is not covered
# here.
#
# @required: Size required for a new image file, in bytes, when
#     copying just allocated guest-visible contents.
#
# @fully-allocated: Image file size, in bytes, once data has been
#     written to all sectors, when copying just guest-visible
#     contents.
#
# @bitmaps: Additional size required if all the top-level bitmap
#     metadata in the source image were to be copied to the
#     destination, present only when source and destination both
#     support persistent bitmaps.  (since 5.1)
#
# Since: 2.10
##
{ 'struct': 'BlockMeasureInfo',
  'data': {'required': 'int', 'fully-allocated': 'int', '*bitmaps': 'int'} }

##
# @query-block:
#
# Get a list of BlockInfo for all virtual block devices.
#
# Returns: a list of @BlockInfo describing each virtual block device.
#     Filter nodes that were created implicitly are skipped over.
#
# Since: 0.14
#
# Example:
#
# -> { "execute": "query-block" }
# <- {
#       "return":[
#          {
#             "io-status": "ok",
#             "device":"ide0-hd0",
#             "locked":false,
#             "removable":false,
#             "inserted":{
#                "ro":false,
#                "drv":"qcow2",
#                "encrypted":false,
#                "file":"disks/test.qcow2",
#                "backing_file_depth":1,
#                "bps":1000000,
#                "bps_rd":0,
#                "bps_wr":0,
#                "iops":1000000,
#                "iops_rd":0,
#                "iops_wr":0,
#                "bps_max": 8000000,
#                "bps_rd_max": 0,
#                "bps_wr_max": 0,
#                "iops_max": 0,
#                "iops_rd_max": 0,
#                "iops_wr_max": 0,
#                "iops_size": 0,
#                "detect_zeroes": "on",
#                "write_threshold": 0,
#                "image":{
#                   "filename":"disks/test.qcow2",
#                   "format":"qcow2",
#                   "virtual-size":2048000,
#                   "backing_file":"base.qcow2",
#                   "full-backing-filename":"disks/base.qcow2",
#                   "backing-filename-format":"qcow2",
#                   "snapshots":[
#                      {
#                         "id": "1",
#                         "name": "snapshot1",
#                         "vm-state-size": 0,
#                         "date-sec": 10000200,
#                         "date-nsec": 12,
#                         "vm-clock-sec": 206,
#                         "vm-clock-nsec": 30
#                      }
#                   ],
#                   "backing-image":{
#                       "filename":"disks/base.qcow2",
#                       "format":"qcow2",
#                       "virtual-size":2048000
#                   }
#                }
#             },
#             "qdev": "ide_disk",
#             "type":"unknown"
#          },
#          {
#             "io-status": "ok",
#             "device":"ide1-cd0",
#             "locked":false,
#             "removable":true,
#             "qdev": "/machine/unattached/device[23]",
#             "tray_open": false,
#             "type":"unknown"
#          },
#          {
#             "device":"floppy0",
#             "locked":false,
#             "removable":true,
#             "qdev": "/machine/unattached/device[20]",
#             "type":"unknown"
#          },
#          {
#             "device":"sd0",
#             "locked":false,
#             "removable":true,
#             "type":"unknown"
#          }
#       ]
#    }
##
{ 'command': 'query-block', 'returns': ['BlockInfo'],
  'allow-preconfig': true }

##
# @BlockDeviceTimedStats:
#
# Statistics of a block device during a given interval of time.
#
# @interval_length: Interval used for calculating the statistics, in
#     seconds.
#
# @min_rd_latency_ns: Minimum latency of read operations in the
#     defined interval, in nanoseconds.
#
# @min_wr_latency_ns: Minimum latency of write operations in the
#     defined interval, in nanoseconds.
#
# @min_zone_append_latency_ns: Minimum latency of zone append operations
#                              in the defined interval, in nanoseconds
#                              (since 8.1)
#
# @min_flush_latency_ns: Minimum latency of flush operations in the
#     defined interval, in nanoseconds.
#
# @max_rd_latency_ns: Maximum latency of read operations in the
#     defined interval, in nanoseconds.
#
# @max_wr_latency_ns: Maximum latency of write operations in the
#     defined interval, in nanoseconds.
#
# @max_zone_append_latency_ns: Maximum latency of zone append operations
#                              in the defined interval, in nanoseconds
#                              (since 8.1)
#
# @max_flush_latency_ns: Maximum latency of flush operations in the
#     defined interval, in nanoseconds.
#
# @avg_rd_latency_ns: Average latency of read operations in the
#     defined interval, in nanoseconds.
#
# @avg_wr_latency_ns: Average latency of write operations in the
#     defined interval, in nanoseconds.
#
# @avg_zone_append_latency_ns: Average latency of zone append operations
#                              in the defined interval, in nanoseconds
#                              (since 8.1)
#
# @avg_flush_latency_ns: Average latency of flush operations in the
#     defined interval, in nanoseconds.
#
# @avg_rd_queue_depth: Average number of pending read operations in
#     the defined interval.
#
# @avg_wr_queue_depth: Average number of pending write operations in
#     the defined interval.
#
# @avg_zone_append_queue_depth: Average number of pending zone append
#                               operations in the defined interval
#                               (since 8.1).
#
# Since: 2.5
##
{ 'struct': 'BlockDeviceTimedStats',
  'data': { 'interval_length': 'int', 'min_rd_latency_ns': 'int',
            'max_rd_latency_ns': 'int', 'avg_rd_latency_ns': 'int',
            'min_wr_latency_ns': 'int', 'max_wr_latency_ns': 'int',
            'avg_wr_latency_ns': 'int', 'min_zone_append_latency_ns': 'int',
            'max_zone_append_latency_ns': 'int',
            'avg_zone_append_latency_ns': 'int',
            'min_flush_latency_ns': 'int', 'max_flush_latency_ns': 'int',
            'avg_flush_latency_ns': 'int', 'avg_rd_queue_depth': 'number',
            'avg_wr_queue_depth': 'number',
            'avg_zone_append_queue_depth': 'number'  } }

##
# @BlockDeviceStats:
#
# Statistics of a virtual block device or a block backing device.
#
# @rd_bytes: The number of bytes read by the device.
#
# @wr_bytes: The number of bytes written by the device.
#
# @zone_append_bytes: The number of bytes appended by the zoned devices
#                     (since 8.1)
#
# @unmap_bytes: The number of bytes unmapped by the device (Since 4.2)
#
# @rd_operations: The number of read operations performed by the
#     device.
#
# @wr_operations: The number of write operations performed by the
#     device.
#
# @zone_append_operations: The number of zone append operations performed
#                          by the zoned devices (since 8.1)
#
# @flush_operations: The number of cache flush operations performed by
#     the device (since 0.15)
#
# @unmap_operations: The number of unmap operations performed by the
#     device (Since 4.2)
#
# @rd_total_time_ns: Total time spent on reads in nanoseconds (since
#     0.15).
#
# @wr_total_time_ns: Total time spent on writes in nanoseconds (since
#     0.15).
#
# @zone_append_total_time_ns: Total time spent on zone append writes
#                             in nanoseconds (since 8.1)
#
# @flush_total_time_ns: Total time spent on cache flushes in
#     nanoseconds (since 0.15).
#
# @unmap_total_time_ns: Total time spent on unmap operations in
#     nanoseconds (Since 4.2)
#
# @wr_highest_offset: The offset after the greatest byte written to
#     the device.  The intended use of this information is for
#     growable sparse files (like qcow2) that are used on top of a
#     physical device.
#
# @rd_merged: Number of read requests that have been merged into
#     another request (Since 2.3).
#
# @wr_merged: Number of write requests that have been merged into
#     another request (Since 2.3).
#
# @zone_append_merged: Number of zone append requests that have been merged
#                      into another request (since 8.1)
#
# @unmap_merged: Number of unmap requests that have been merged into
#     another request (Since 4.2)
#
# @idle_time_ns: Time since the last I/O operation, in nanoseconds.
#     If the field is absent it means that there haven't been any
#     operations yet (Since 2.5).
#
# @failed_rd_operations: The number of failed read operations
#     performed by the device (Since 2.5)
#
# @failed_wr_operations: The number of failed write operations
#     performed by the device (Since 2.5)
#
# @failed_zone_append_operations: The number of failed zone append write
#                                 operations performed by the zoned devices
#                                 (since 8.1)
#
# @failed_flush_operations: The number of failed flush operations
#     performed by the device (Since 2.5)
#
# @failed_unmap_operations: The number of failed unmap operations
#     performed by the device (Since 4.2)
#
# @invalid_rd_operations: The number of invalid read operations
#     performed by the device (Since 2.5)
#
# @invalid_wr_operations: The number of invalid write operations
#     performed by the device (Since 2.5)
#
# @invalid_zone_append_operations: The number of invalid zone append operations
#                                  performed by the zoned device (since 8.1)
#
# @invalid_flush_operations: The number of invalid flush operations
#     performed by the device (Since 2.5)
#
# @invalid_unmap_operations: The number of invalid unmap operations
#     performed by the device (Since 4.2)
#
# @account_invalid: Whether invalid operations are included in the
#     last access statistics (Since 2.5)
#
# @account_failed: Whether failed operations are included in the
#     latency and last access statistics (Since 2.5)
#
# @timed_stats: Statistics specific to the set of previously defined
#     intervals of time (Since 2.5)
#
# @rd_latency_histogram: @BlockLatencyHistogramInfo.  (Since 4.0)
#
# @wr_latency_histogram: @BlockLatencyHistogramInfo.  (Since 4.0)
#
# @zone_append_latency_histogram: @BlockLatencyHistogramInfo.  (since 8.1)
#
# @flush_latency_histogram: @BlockLatencyHistogramInfo.  (Since 4.0)
#
# Since: 0.14
##
{ 'struct': 'BlockDeviceStats',
  'data': {'rd_bytes': 'int', 'wr_bytes': 'int', 'zone_append_bytes': 'int',
           'unmap_bytes' : 'int', 'rd_operations': 'int',
           'wr_operations': 'int', 'zone_append_operations': 'int',
           'flush_operations': 'int', 'unmap_operations': 'int',
           'rd_total_time_ns': 'int', 'wr_total_time_ns': 'int',
           'zone_append_total_time_ns': 'int', 'flush_total_time_ns': 'int',
           'unmap_total_time_ns': 'int', 'wr_highest_offset': 'int',
           'rd_merged': 'int', 'wr_merged': 'int', 'zone_append_merged': 'int',
           'unmap_merged': 'int', '*idle_time_ns': 'int',
           'failed_rd_operations': 'int', 'failed_wr_operations': 'int',
           'failed_zone_append_operations': 'int',
           'failed_flush_operations': 'int',
           'failed_unmap_operations': 'int', 'invalid_rd_operations': 'int',
           'invalid_wr_operations': 'int',
           'invalid_zone_append_operations': 'int',
           'invalid_flush_operations': 'int', 'invalid_unmap_operations': 'int',
           'account_invalid': 'bool', 'account_failed': 'bool',
           'timed_stats': ['BlockDeviceTimedStats'],
           '*rd_latency_histogram': 'BlockLatencyHistogramInfo',
           '*wr_latency_histogram': 'BlockLatencyHistogramInfo',
           '*zone_append_latency_histogram': 'BlockLatencyHistogramInfo',
           '*flush_latency_histogram': 'BlockLatencyHistogramInfo' } }

##
# @BlockStatsSpecificFile:
#
# File driver statistics
#
# @discard-nb-ok: The number of successful discard operations
#     performed by the driver.
#
# @discard-nb-failed: The number of failed discard operations
#     performed by the driver.
#
# @discard-bytes-ok: The number of bytes discarded by the driver.
#
# Since: 4.2
##
{ 'struct': 'BlockStatsSpecificFile',
  'data': {
      'discard-nb-ok': 'uint64',
      'discard-nb-failed': 'uint64',
      'discard-bytes-ok': 'uint64' } }

##
# @BlockStatsSpecificNvme:
#
# NVMe driver statistics
#
# @completion-errors: The number of completion errors.
#
# @aligned-accesses: The number of aligned accesses performed by the
#     driver.
#
# @unaligned-accesses: The number of unaligned accesses performed by
#     the driver.
#
# Since: 5.2
##
{ 'struct': 'BlockStatsSpecificNvme',
  'data': {
      'completion-errors': 'uint64',
      'aligned-accesses': 'uint64',
      'unaligned-accesses': 'uint64' } }

##
# @BlockStatsSpecific:
#
# Block driver specific statistics
#
# Since: 4.2
##
{ 'union': 'BlockStatsSpecific',
  'base': { 'driver': 'BlockdevDriver' },
  'discriminator': 'driver',
  'data': {
      'file': 'BlockStatsSpecificFile',
      'host_device': { 'type': 'BlockStatsSpecificFile',
                       'if': 'HAVE_HOST_BLOCK_DEVICE' },
      'nvme': 'BlockStatsSpecificNvme' } }

##
# @BlockStats:
#
# Statistics of a virtual block device or a block backing device.
#
# @device: If the stats are for a virtual block device, the name
#     corresponding to the virtual block device.
#
# @node-name: The node name of the device.  (Since 2.3)
#
# @qdev: The qdev ID, or if no ID is assigned, the QOM path of the
#     block device.  (since 3.0)
#
# @stats: A @BlockDeviceStats for the device.
#
# @driver-specific: Optional driver-specific stats.  (Since 4.2)
#
# @parent: This describes the file block device if it has one.
#     Contains recursively the statistics of the underlying protocol
#     (e.g. the host file for a qcow2 image). If there is no
#     underlying protocol, this field is omitted
#
# @backing: This describes the backing block device if it has one.
#     (Since 2.0)
#
# Since: 0.14
##
{ 'struct': 'BlockStats',
  'data': {'*device': 'str', '*qdev': 'str', '*node-name': 'str',
           'stats': 'BlockDeviceStats',
           '*driver-specific': 'BlockStatsSpecific',
           '*parent': 'BlockStats',
           '*backing': 'BlockStats'} }

##
# @query-blockstats:
#
# Query the @BlockStats for all virtual block devices.
#
# @query-nodes: If true, the command will query all the block nodes
#     that have a node name, in a list which will include "parent"
#     information, but not "backing". If false or omitted, the
#     behavior is as before - query all the device backends,
#     recursively including their "parent" and "backing". Filter nodes
#     that were created implicitly are skipped over in this mode.
#     (Since 2.3)
#
# Returns: A list of @BlockStats for each virtual block devices.
#
# Since: 0.14
#
# Example:
#
# -> { "execute": "query-blockstats" }
# <- {
#       "return":[
#          {
#             "device":"ide0-hd0",
#             "parent":{
#                "stats":{
#                   "wr_highest_offset":3686448128,
#                   "wr_bytes":9786368,
#                   "wr_operations":751,
#                   "rd_bytes":122567168,
#                   "rd_operations":36772
#                   "wr_total_times_ns":313253456
#                   "rd_total_times_ns":3465673657
#                   "flush_total_times_ns":49653
#                   "flush_operations":61,
#                   "rd_merged":0,
#                   "wr_merged":0,
#                   "idle_time_ns":2953431879,
#                   "account_invalid":true,
#                   "account_failed":false
#                }
#             },
#             "stats":{
#                "wr_highest_offset":2821110784,
#                "wr_bytes":9786368,
#                "wr_operations":692,
#                "rd_bytes":122739200,
#                "rd_operations":36604
#                "flush_operations":51,
#                "wr_total_times_ns":313253456
#                "rd_total_times_ns":3465673657
#                "flush_total_times_ns":49653,
#                "rd_merged":0,
#                "wr_merged":0,
#                "idle_time_ns":2953431879,
#                "account_invalid":true,
#                "account_failed":false
#             },
#             "qdev": "/machine/unattached/device[23]"
#          },
#          {
#             "device":"ide1-cd0",
#             "stats":{
#                "wr_highest_offset":0,
#                "wr_bytes":0,
#                "wr_operations":0,
#                "rd_bytes":0,
#                "rd_operations":0
#                "flush_operations":0,
#                "wr_total_times_ns":0
#                "rd_total_times_ns":0
#                "flush_total_times_ns":0,
#                "rd_merged":0,
#                "wr_merged":0,
#                "account_invalid":false,
#                "account_failed":false
#             },
#             "qdev": "/machine/unattached/device[24]"
#          },
#          {
#             "device":"floppy0",
#             "stats":{
#                "wr_highest_offset":0,
#                "wr_bytes":0,
#                "wr_operations":0,
#                "rd_bytes":0,
#                "rd_operations":0
#                "flush_operations":0,
#                "wr_total_times_ns":0
#                "rd_total_times_ns":0
#                "flush_total_times_ns":0,
#                "rd_merged":0,
#                "wr_merged":0,
#                "account_invalid":false,
#                "account_failed":false
#             },
#             "qdev": "/machine/unattached/device[16]"
#          },
#          {
#             "device":"sd0",
#             "stats":{
#                "wr_highest_offset":0,
#                "wr_bytes":0,
#                "wr_operations":0,
#                "rd_bytes":0,
#                "rd_operations":0
#                "flush_operations":0,
#                "wr_total_times_ns":0
#                "rd_total_times_ns":0
#                "flush_total_times_ns":0,
#                "rd_merged":0,
#                "wr_merged":0,
#                "account_invalid":false,
#                "account_failed":false
#             }
#          }
#       ]
#    }
##
{ 'command': 'query-blockstats',
  'data': { '*query-nodes': 'bool' },
  'returns': ['BlockStats'],
  'allow-preconfig': true }

##
# @BlockdevOnError:
#
# An enumeration of possible behaviors for errors on I/O operations.
# The exact meaning depends on whether the I/O was initiated by a
# guest or by a block job
#
# @report: for guest operations, report the error to the guest; for
#     jobs, cancel the job
#
# @ignore: ignore the error, only report a QMP event (BLOCK_IO_ERROR
#     or BLOCK_JOB_ERROR). The backup, mirror and commit block jobs
#     retry the failing request later and may still complete
#     successfully.  The stream block job continues to stream and will
#     complete with an error.
#
# @enospc: same as @stop on ENOSPC, same as @report otherwise.
#
# @stop: for guest operations, stop the virtual machine; for jobs,
#     pause the job
#
# @auto: inherit the error handling policy of the backend (since: 2.7)
#
# Since: 1.3
##
{ 'enum': 'BlockdevOnError',
  'data': ['report', 'ignore', 'enospc', 'stop', 'auto'] }

##
# @MirrorSyncMode:
#
# An enumeration of possible behaviors for the initial synchronization
# phase of storage mirroring.
#
# @top: copies data in the topmost image to the destination
#
# @full: copies data from all images to the destination
#
# @none: only copy data written from now on
#
# @incremental: only copy data described by the dirty bitmap.
#     (since: 2.4)
#
# @bitmap: only copy data described by the dirty bitmap.  (since: 4.2)
#     Behavior on completion is determined by the BitmapSyncMode.
#
# Since: 1.3
##
{ 'enum': 'MirrorSyncMode',
  'data': ['top', 'full', 'none', 'incremental', 'bitmap'] }

##
# @BitmapSyncMode:
#
# An enumeration of possible behaviors for the synchronization of a
# bitmap when used for data copy operations.
#
# @on-success: The bitmap is only synced when the operation is
#     successful.  This is the behavior always used for 'INCREMENTAL'
#     backups.
#
# @never: The bitmap is never synchronized with the operation, and is
#     treated solely as a read-only manifest of blocks to copy.
#
# @always: The bitmap is always synchronized with the operation,
#     regardless of whether or not the operation was successful.
#
# Since: 4.2
##
{ 'enum': 'BitmapSyncMode',
  'data': ['on-success', 'never', 'always'] }

##
# @MirrorCopyMode:
#
# An enumeration whose values tell the mirror block job when to
# trigger writes to the target.
#
# @background: copy data in background only.
#
# @write-blocking: when data is written to the source, write it
#     (synchronously) to the target as well.  In addition, data is
#     copied in background just like in @background mode.
#
# Since: 3.0
##
{ 'enum': 'MirrorCopyMode',
  'data': ['background', 'write-blocking'] }

##
# @BlockJobInfo:
#
# Information about a long-running block device operation.
#
# @type: the job type ('stream' for image streaming)
#
# @device: The job identifier.  Originally the device name but other
#     values are allowed since QEMU 2.7
#
# @len: Estimated @offset value at the completion of the job.  This
#     value can arbitrarily change while the job is running, in both
#     directions.
#
# @offset: Progress made until now.  The unit is arbitrary and the
#     value can only meaningfully be used for the ratio of @offset to
#     @len.  The value is monotonically increasing.
#
# @busy: false if the job is known to be in a quiescent state, with no
#     pending I/O.  (Since 1.3)
#
# @paused: whether the job is paused or, if @busy is true, will pause
#     itself as soon as possible.  (Since 1.3)
#
# @speed: the rate limit, bytes per second
#
# @io-status: the status of the job (since 1.3)
#
# @ready: true if the job may be completed (since 2.2)
#
# @status: Current job state/status (since 2.12)
#
# @auto-finalize: Job will finalize itself when PENDING, moving to the
#     CONCLUDED state.  (since 2.12)
#
# @auto-dismiss: Job will dismiss itself when CONCLUDED, moving to the
#     NULL state and disappearing from the query list.  (since 2.12)
#
# @error: Error information if the job did not complete successfully.
#     Not set if the job completed successfully.  (since 2.12.1)
#
# Since: 1.1
##
{ 'struct': 'BlockJobInfo',
  'data': {'type': 'str', 'device': 'str', 'len': 'int',
           'offset': 'int', 'busy': 'bool', 'paused': 'bool', 'speed': 'int',
           'io-status': 'BlockDeviceIoStatus', 'ready': 'bool',
           'status': 'JobStatus',
           'auto-finalize': 'bool', 'auto-dismiss': 'bool',
           '*error': 'str' } }

##
# @query-block-jobs:
#
# Return information about long-running block device operations.
#
# Returns: a list of @BlockJobInfo for each active block job
#
# Since: 1.1
##
{ 'command': 'query-block-jobs', 'returns': ['BlockJobInfo'],
  'allow-preconfig': true }

##
# @block_resize:
#
# Resize a block image while a guest is running.
#
# Either @device or @node-name must be set but not both.
#
# @device: the name of the device to get the image resized
#
# @node-name: graph node name to get the image resized (Since 2.0)
#
# @size: new image size in bytes
#
# Returns:
#     - nothing on success
#     - If @device is not a valid block device, DeviceNotFound
#
# Since: 0.14
#
# Example:
#
# -> { "execute": "block_resize",
#      "arguments": { "device": "scratch", "size": 1073741824 } }
# <- { "return": {} }
##
{ 'command': 'block_resize',
  'data': { '*device': 'str',
            '*node-name': 'str',
            'size': 'int' },
  'coroutine': true,
  'allow-preconfig': true }

##
# @NewImageMode:
#
# An enumeration that tells QEMU how to set the backing file path in a
# new image file.
#
# @existing: QEMU should look for an existing image file.
#
# @absolute-paths: QEMU should create a new image with absolute paths
#     for the backing file.  If there is no backing file available,
#     the new image will not be backed either.
#
# Since: 1.1
##
{ 'enum': 'NewImageMode',
  'data': [ 'existing', 'absolute-paths' ] }

##
# @BlockdevSnapshotSync:
#
# Either @device or @node-name must be set but not both.
#
# @device: the name of the device to take a snapshot of.
#
# @node-name: graph node name to generate the snapshot from (Since
#     2.0)
#
# @snapshot-file: the target of the new overlay image.  If the file
#     exists, or if it is a device, the overlay will be created in the
#     existing file/device.  Otherwise, a new file will be created.
#
# @snapshot-node-name: the graph node name of the new image (Since
#     2.0)
#
# @format: the format of the overlay image, default is 'qcow2'.
#
# @mode: whether and how QEMU should create a new image, default is
#        'absolute-paths'.
##
{ 'struct': 'BlockdevSnapshotSync',
  'data': { '*device': 'str', '*node-name': 'str',
            'snapshot-file': 'str', '*snapshot-node-name': 'str',
            '*format': 'str', '*mode': 'NewImageMode' } }

##
# @BlockdevSnapshot:
#
# @node: device or node name that will have a snapshot taken.
#
# @overlay: reference to the existing block device that will become
#     the overlay of @node, as part of taking the snapshot.  It must
#     not have a current backing file (this can be achieved by passing
#     "backing": null to blockdev-add).
#
# Since: 2.5
##
{ 'struct': 'BlockdevSnapshot',
  'data': { 'node': 'str', 'overlay': 'str' } }

##
# @BackupPerf:
#
# Optional parameters for backup.  These parameters don't affect
# functionality, but may significantly affect performance.
#
# @use-copy-range: Use copy offloading.  Default false.
#
# @max-workers: Maximum number of parallel requests for the sustained
#     background copying process.  Doesn't influence copy-before-write
#     operations.  Default 64.
#
# @max-chunk: Maximum request length for the sustained background
#     copying process.  Doesn't influence copy-before-write
#     operations.  0 means unlimited.  If max-chunk is non-zero then
#     it should not be less than job cluster size which is calculated
#     as maximum of target image cluster size and 64k.  Default 0.
#
# Since: 6.0
##
{ 'struct': 'BackupPerf',
  'data': { '*use-copy-range': 'bool',
            '*max-workers': 'int', '*max-chunk': 'int64' } }

##
# @BackupCommon:
#
# @job-id: identifier for the newly-created block job.  If omitted,
#     the device name will be used.  (Since 2.7)
#
# @device: the device name or node-name of a root node which should be
#     copied.
#
# @sync: what parts of the disk image should be copied to the
#     destination (all the disk, only the sectors allocated in the
#     topmost image, from a dirty bitmap, or only new I/O).
#
# @speed: the maximum speed, in bytes per second.  The default is 0,
#     for unlimited.
#
# @bitmap: The name of a dirty bitmap to use.  Must be present if sync
#     is "bitmap" or "incremental". Can be present if sync is "full"
#     or "top". Must not be present otherwise.
#     (Since 2.4 (drive-backup), 3.1 (blockdev-backup))
#
# @bitmap-mode: Specifies the type of data the bitmap should contain
#     after the operation concludes.  Must be present if a bitmap was
#     provided, Must NOT be present otherwise.  (Since 4.2)
#
# @compress: true to compress data, if the target format supports it.
#     (default: false) (since 2.8)
#
# @on-source-error: the action to take on an error on the source,
#     default 'report'.  'stop' and 'enospc' can only be used if the
#     block device supports io-status (see BlockInfo).
#
# @on-target-error: the action to take on an error on the target,
#     default 'report' (no limitations, since this applies to a
#     different block device than @device).
#
# @auto-finalize: When false, this job will wait in a PENDING state
#     after it has finished its work, waiting for @block-job-finalize
#     before making any block graph changes.  When true, this job will
#     automatically perform its abort or commit actions.  Defaults to
#     true.  (Since 2.12)
#
# @auto-dismiss: When false, this job will wait in a CONCLUDED state
#     after it has completely ceased all work, and awaits
#     @block-job-dismiss.  When true, this job will automatically
#     disappear from the query list without user intervention.
#     Defaults to true.  (Since 2.12)
#
# @filter-node-name: the node name that should be assigned to the
#     filter driver that the backup job inserts into the graph above
#     node specified by @drive.  If this option is not given, a node
#     name is autogenerated.  (Since: 4.2)
#
# @x-perf: Performance options.  (Since 6.0)
#
# Features:
#
# @unstable: Member @x-perf is experimental.
#
# Note: @on-source-error and @on-target-error only affect background
#     I/O.  If an error occurs during a guest write request, the
#     device's rerror/werror actions will be used.
#
# Since: 4.2
##
{ 'struct': 'BackupCommon',
  'data': { '*job-id': 'str', 'device': 'str',
            'sync': 'MirrorSyncMode', '*speed': 'int',
            '*bitmap': 'str', '*bitmap-mode': 'BitmapSyncMode',
            '*compress': 'bool',
            '*on-source-error': 'BlockdevOnError',
            '*on-target-error': 'BlockdevOnError',
            '*auto-finalize': 'bool', '*auto-dismiss': 'bool',
            '*filter-node-name': 'str',
            '*x-perf': { 'type': 'BackupPerf',
                         'features': [ 'unstable' ] } } }

##
# @DriveBackup:
#
# @target: the target of the new image.  If the file exists, or if it
#     is a device, the existing file/device will be used as the new
#     destination.  If it does not exist, a new file will be created.
#
# @format: the format of the new destination, default is to probe if
#     @mode is 'existing', else the format of the source
#
# @mode: whether and how QEMU should create a new image, default is
#     'absolute-paths'.
#
# Since: 1.6
##
{ 'struct': 'DriveBackup',
  'base': 'BackupCommon',
  'data': { 'target': 'str',
            '*format': 'str',
            '*mode': 'NewImageMode' } }

##
# @BlockdevBackup:
#
# @target: the device name or node-name of the backup target node.
#
# Since: 2.3
##
{ 'struct': 'BlockdevBackup',
  'base': 'BackupCommon',
  'data': { 'target': 'str' } }

##
# @blockdev-snapshot-sync:
#
# Takes a synchronous snapshot of a block device.
#
# For the arguments, see the documentation of BlockdevSnapshotSync.
#
# Returns:
#     - nothing on success
#     - If @device is not a valid block device, DeviceNotFound
#
# Since: 0.14
#
# Example:
#
# -> { "execute": "blockdev-snapshot-sync",
#      "arguments": { "device": "ide-hd0",
#                     "snapshot-file":
#                     "/some/place/my-image",
#                     "format": "qcow2" } }
# <- { "return": {} }
##
{ 'command': 'blockdev-snapshot-sync',
  'data': 'BlockdevSnapshotSync',
  'allow-preconfig': true }

##
# @blockdev-snapshot:
#
# Takes a snapshot of a block device.
#
# Take a snapshot, by installing 'node' as the backing image of
# 'overlay'. Additionally, if 'node' is associated with a block
# device, the block device changes to using 'overlay' as its new
# active image.
#
# For the arguments, see the documentation of BlockdevSnapshot.
#
# Features:
#
# @allow-write-only-overlay: If present, the check whether this
#     operation is safe was relaxed so that it can be used to change
#     backing file of a destination of a blockdev-mirror.  (since 5.0)
#
# Since: 2.5
#
# Example:
#
# -> { "execute": "blockdev-add",
#      "arguments": { "driver": "qcow2",
#                     "node-name": "node1534",
#                     "file": { "driver": "file",
#                               "filename": "hd1.qcow2" },
#                     "backing": null } }
#
# <- { "return": {} }
#
# -> { "execute": "blockdev-snapshot",
#      "arguments": { "node": "ide-hd0",
#                     "overlay": "node1534" } }
# <- { "return": {} }
##
{ 'command': 'blockdev-snapshot',
  'data': 'BlockdevSnapshot',
  'features': [ 'allow-write-only-overlay' ],
  'allow-preconfig': true }

##
# @change-backing-file:
#
# Change the backing file in the image file metadata.  This does not
# cause QEMU to reopen the image file to reparse the backing filename
# (it may, however, perform a reopen to change permissions from r/o ->
# r/w -> r/o, if needed). The new backing file string is written into
# the image file metadata, and the QEMU internal strings are updated.
#
# @image-node-name: The name of the block driver state node of the
#     image to modify.  The "device" argument is used to verify
#     "image-node-name" is in the chain described by "device".
#
# @device: The device name or node-name of the root node that owns
#     image-node-name.
#
# @backing-file: The string to write as the backing file.  This string
#     is not validated, so care should be taken when specifying the
#     string or the image chain may not be able to be reopened again.
#
# Returns:
#     - Nothing on success
#     - If "device" does not exist or cannot be determined,
#       DeviceNotFound
#
# Since: 2.1
##
{ 'command': 'change-backing-file',
  'data': { 'device': 'str', 'image-node-name': 'str',
            'backing-file': 'str' },
  'allow-preconfig': true }

##
# @block-commit:
#
# Live commit of data from overlay image nodes into backing nodes -
# i.e., writes data between 'top' and 'base' into 'base'.
#
# If top == base, that is an error.  If top has no overlays on top of
# it, or if it is in use by a writer, the job will not be completed by
# itself.  The user needs to complete the job with the
# block-job-complete command after getting the ready event.  (Since
# 2.0)
#
# If the base image is smaller than top, then the base image will be
# resized to be the same size as top.  If top is smaller than the base
# image, the base will not be truncated.  If you want the base image
# size to match the size of the smaller top, you can safely truncate
# it yourself once the commit operation successfully completes.
#
# @job-id: identifier for the newly-created block job.  If omitted,
#     the device name will be used.  (Since 2.7)
#
# @device: the device name or node-name of a root node
#
# @base-node: The node name of the backing image to write data into.
#     If not specified, this is the deepest backing image.
#     (since: 3.1)
#
# @base: Same as @base-node, except that it is a file name rather than
#     a node name.  This must be the exact filename string that was
#     used to open the node; other strings, even if addressing the
#     same file, are not accepted
#
# @top-node: The node name of the backing image within the image chain
#     which contains the topmost data to be committed down.  If not
#     specified, this is the active layer.  (since: 3.1)
#
# @top: Same as @top-node, except that it is a file name rather than a
#     node name.  This must be the exact filename string that was used
#     to open the node; other strings, even if addressing the same
#     file, are not accepted
#
# @backing-file: The backing file string to write into the overlay
#     image of 'top'.  If 'top' does not have an overlay image, or if
#     'top' is in use by a writer, specifying a backing file string is
#     an error.
#
#     This filename is not validated.  If a pathname string is such
#     that it cannot be resolved by QEMU, that means that subsequent
#     QMP or HMP commands must use node-names for the image in
#     question, as filename lookup methods will fail.
#
#     If not specified, QEMU will automatically determine the backing
#     file string to use, or error out if there is no obvious choice.
#     Care should be taken when specifying the string, to specify a
#     valid filename or protocol.  (Since 2.1)
#
# @speed: the maximum speed, in bytes per second
#
# @on-error: the action to take on an error.  'ignore' means that the
#     request should be retried.  (default: report; Since: 5.0)
#
# @filter-node-name: the node name that should be assigned to the
#     filter driver that the commit job inserts into the graph above
#     @top.  If this option is not given, a node name is
#     autogenerated.  (Since: 2.9)
#
# @auto-finalize: When false, this job will wait in a PENDING state
#     after it has finished its work, waiting for @block-job-finalize
#     before making any block graph changes.  When true, this job will
#     automatically perform its abort or commit actions.  Defaults to
#     true.  (Since 3.1)
#
# @auto-dismiss: When false, this job will wait in a CONCLUDED state
#     after it has completely ceased all work, and awaits
#     @block-job-dismiss.  When true, this job will automatically
#     disappear from the query list without user intervention.
#     Defaults to true.  (Since 3.1)
#
# Features:
#
# @deprecated: Members @base and @top are deprecated.  Use @base-node
#     and @top-node instead.
#
# Returns:
#     - Nothing on success
#     - If @device does not exist, DeviceNotFound
#     - Any other error returns a GenericError.
#
# Since: 1.3
#
# Example:
#
# -> { "execute": "block-commit",
#      "arguments": { "device": "virtio0",
#                     "top": "/tmp/snap1.qcow2" } }
# <- { "return": {} }
##
{ 'command': 'block-commit',
  'data': { '*job-id': 'str', 'device': 'str', '*base-node': 'str',
            '*base': { 'type': 'str', 'features': [ 'deprecated' ] },
            '*top-node': 'str',
            '*top': { 'type': 'str', 'features': [ 'deprecated' ] },
            '*backing-file': 'str', '*speed': 'int',
            '*on-error': 'BlockdevOnError',
            '*filter-node-name': 'str',
            '*auto-finalize': 'bool', '*auto-dismiss': 'bool' },
  'allow-preconfig': true }

##
# @drive-backup:
#
# Start a point-in-time copy of a block device to a new destination.
# The status of ongoing drive-backup operations can be checked with
# query-block-jobs where the BlockJobInfo.type field has the value
# 'backup'. The operation can be stopped before it has completed using
# the block-job-cancel command.
#
# Features:
#
# @deprecated: This command is deprecated.  Use @blockdev-backup
#     instead.
#
# Returns:
#     - nothing on success
#     - If @device is not a valid block device, GenericError
#
# Since: 1.6
#
# Example:
#
# -> { "execute": "drive-backup",
#      "arguments": { "device": "drive0",
#                     "sync": "full",
#                     "target": "backup.img" } }
# <- { "return": {} }
##
{ 'command': 'drive-backup', 'boxed': true,
  'data': 'DriveBackup', 'features': ['deprecated'],
  'allow-preconfig': true }

##
# @blockdev-backup:
#
# Start a point-in-time copy of a block device to a new destination.
# The status of ongoing blockdev-backup operations can be checked with
# query-block-jobs where the BlockJobInfo.type field has the value
# 'backup'. The operation can be stopped before it has completed using
# the block-job-cancel command.
#
# Returns:
#     - nothing on success
#     - If @device is not a valid block device, DeviceNotFound
#
# Since: 2.3
#
# Example:
#
# -> { "execute": "blockdev-backup",
#      "arguments": { "device": "src-id",
#                     "sync": "full",
#                     "target": "tgt-id" } }
# <- { "return": {} }
##
{ 'command': 'blockdev-backup', 'boxed': true,
  'data': 'BlockdevBackup',
  'allow-preconfig': true }

##
# @query-named-block-nodes:
#
# Get the named block driver list
#
# @flat: Omit the nested data about backing image ("backing-image"
#     key) if true.  Default is false (Since 5.0)
#
# Returns: the list of BlockDeviceInfo
#
# Since: 2.0
#
# Example:
#
# -> { "execute": "query-named-block-nodes" }
# <- { "return": [ { "ro":false,
#                    "drv":"qcow2",
#                    "encrypted":false,
#                    "file":"disks/test.qcow2",
#                    "node-name": "my-node",
#                    "backing_file_depth":1,
#                    "detect_zeroes":"off",
#                    "bps":1000000,
#                    "bps_rd":0,
#                    "bps_wr":0,
#                    "iops":1000000,
#                    "iops_rd":0,
#                    "iops_wr":0,
#                    "bps_max": 8000000,
#                    "bps_rd_max": 0,
#                    "bps_wr_max": 0,
#                    "iops_max": 0,
#                    "iops_rd_max": 0,
#                    "iops_wr_max": 0,
#                    "iops_size": 0,
#                    "write_threshold": 0,
#                    "image":{
#                       "filename":"disks/test.qcow2",
#                       "format":"qcow2",
#                       "virtual-size":2048000,
#                       "backing_file":"base.qcow2",
#                       "full-backing-filename":"disks/base.qcow2",
#                       "backing-filename-format":"qcow2",
#                       "snapshots":[
#                          {
#                             "id": "1",
#                             "name": "snapshot1",
#                             "vm-state-size": 0,
#                             "date-sec": 10000200,
#                             "date-nsec": 12,
#                             "vm-clock-sec": 206,
#                             "vm-clock-nsec": 30
#                          }
#                       ],
#                       "backing-image":{
#                           "filename":"disks/base.qcow2",
#                           "format":"qcow2",
#                           "virtual-size":2048000
#                       }
#                    } } ] }
##
{ 'command': 'query-named-block-nodes',
  'returns': [ 'BlockDeviceInfo' ],
  'data': { '*flat': 'bool' },
  'allow-preconfig': true }

##
# @XDbgBlockGraphNodeType:
#
# @block-backend: corresponds to BlockBackend
#
# @block-job: corresponds to BlockJob
#
# @block-driver: corresponds to BlockDriverState
#
# Since: 4.0
##
{ 'enum': 'XDbgBlockGraphNodeType',
  'data': [ 'block-backend', 'block-job', 'block-driver' ] }

##
# @XDbgBlockGraphNode:
#
# @id: Block graph node identifier.  This @id is generated only for
#     x-debug-query-block-graph and does not relate to any other
#     identifiers in Qemu.
#
# @type: Type of graph node.  Can be one of block-backend, block-job
#     or block-driver-state.
#
# @name: Human readable name of the node.  Corresponds to node-name
#     for block-driver-state nodes; is not guaranteed to be unique in
#     the whole graph (with block-jobs and block-backends).
#
# Since: 4.0
##
{ 'struct': 'XDbgBlockGraphNode',
  'data': { 'id': 'uint64', 'type': 'XDbgBlockGraphNodeType', 'name': 'str' } }

##
# @BlockPermission:
#
# Enum of base block permissions.
#
# @consistent-read: A user that has the "permission" of consistent
#     reads is guaranteed that their view of the contents of the block
#     device is complete and self-consistent, representing the
#     contents of a disk at a specific point.  For most block devices
#     (including their backing files) this is true, but the property
#     cannot be maintained in a few situations like for intermediate
#     nodes of a commit block job.
#
# @write: This permission is required to change the visible disk
#     contents.
#
# @write-unchanged: This permission (which is weaker than
#     BLK_PERM_WRITE) is both enough and required for writes to the
#     block node when the caller promises that the visible disk
#     content doesn't change.  As the BLK_PERM_WRITE permission is
#     strictly stronger, either is sufficient to perform an unchanging
#     write.
#
# @resize: This permission is required to change the size of a block
#     node.
#
# Since: 4.0
##
{ 'enum': 'BlockPermission',
  'data': [ 'consistent-read', 'write', 'write-unchanged', 'resize' ] }

##
# @XDbgBlockGraphEdge:
#
# Block Graph edge description for x-debug-query-block-graph.
#
# @parent: parent id
#
# @child: child id
#
# @name: name of the relation (examples are 'file' and 'backing')
#
# @perm: granted permissions for the parent operating on the child
#
# @shared-perm: permissions that can still be granted to other users
#     of the child while it is still attached to this parent
#
# Since: 4.0
##
{ 'struct': 'XDbgBlockGraphEdge',
  'data': { 'parent': 'uint64', 'child': 'uint64',
            'name': 'str', 'perm': [ 'BlockPermission' ],
            'shared-perm': [ 'BlockPermission' ] } }

##
# @XDbgBlockGraph:
#
# Block Graph - list of nodes and list of edges.
#
# Since: 4.0
##
{ 'struct': 'XDbgBlockGraph',
  'data': { 'nodes': ['XDbgBlockGraphNode'], 'edges': ['XDbgBlockGraphEdge'] } }

##
# @x-debug-query-block-graph:
#
# Get the block graph.
#
# Features:
#
# @unstable: This command is meant for debugging.
#
# Since: 4.0
##
{ 'command': 'x-debug-query-block-graph', 'returns': 'XDbgBlockGraph',
  'features': [ 'unstable' ],
  'allow-preconfig': true }

##
# @drive-mirror:
#
# Start mirroring a block device's writes to a new destination.
# target specifies the target of the new image.  If the file exists,
# or if it is a device, it will be used as the new destination for
# writes.  If it does not exist, a new file will be created.  format
# specifies the format of the mirror image, default is to probe if
# mode='existing', else the format of the source.
#
# Returns:
#     - nothing on success
#     - If @device is not a valid block device, GenericError
#
# Since: 1.3
#
# Example:
#
# -> { "execute": "drive-mirror",
#      "arguments": { "device": "ide-hd0",
#                     "target": "/some/place/my-image",
#                     "sync": "full",
#                     "format": "qcow2" } }
# <- { "return": {} }
##
{ 'command': 'drive-mirror', 'boxed': true,
  'data': 'DriveMirror',
  'allow-preconfig': true }

##
# @DriveMirror:
#
# A set of parameters describing drive mirror setup.
#
# @job-id: identifier for the newly-created block job.  If omitted,
#     the device name will be used.  (Since 2.7)
#
# @device: the device name or node-name of a root node whose writes
#     should be mirrored.
#
# @target: the target of the new image.  If the file exists, or if it
#     is a device, the existing file/device will be used as the new
#     destination.  If it does not exist, a new file will be created.
#
# @format: the format of the new destination, default is to probe if
#     @mode is 'existing', else the format of the source
#
# @node-name: the new block driver state node name in the graph (Since
#     2.1)
#
# @replaces: with sync=full graph node name to be replaced by the new
#     image when a whole image copy is done.  This can be used to
#     repair broken Quorum files.  By default, @device is replaced,
#     although implicitly created filters on it are kept.  (Since 2.1)
#
# @mode: whether and how QEMU should create a new image, default is
#     'absolute-paths'.
#
# @speed: the maximum speed, in bytes per second
#
# @sync: what parts of the disk image should be copied to the
#     destination (all the disk, only the sectors allocated in the
#     topmost image, or only new I/O).
#
# @granularity: granularity of the dirty bitmap, default is 64K if the
#     image format doesn't have clusters, 4K if the clusters are
#     smaller than that, else the cluster size.  Must be a power of 2
#     between 512 and 64M (since 1.4).
#
# @buf-size: maximum amount of data in flight from source to target
#     (since 1.4).
#
# @on-source-error: the action to take on an error on the source,
#     default 'report'.  'stop' and 'enospc' can only be used if the
#     block device supports io-status (see BlockInfo).
#
# @on-target-error: the action to take on an error on the target,
#     default 'report' (no limitations, since this applies to a
#     different block device than @device).
#
# @unmap: Whether to try to unmap target sectors where source has only
#     zero.  If true, and target unallocated sectors will read as
#     zero, target image sectors will be unmapped; otherwise, zeroes
#     will be written.  Both will result in identical contents.
#     Default is true.  (Since 2.4)
#
# @copy-mode: when to copy data to the destination; defaults to
#     'background' (Since: 3.0)
#
# @auto-finalize: When false, this job will wait in a PENDING state
#     after it has finished its work, waiting for @block-job-finalize
#     before making any block graph changes.  When true, this job will
#     automatically perform its abort or commit actions.  Defaults to
#     true.  (Since 3.1)
#
# @auto-dismiss: When false, this job will wait in a CONCLUDED state
#     after it has completely ceased all work, and awaits
#     @block-job-dismiss.  When true, this job will automatically
#     disappear from the query list without user intervention.
#     Defaults to true.  (Since 3.1)
#
# Since: 1.3
##
{ 'struct': 'DriveMirror',
  'data': { '*job-id': 'str', 'device': 'str', 'target': 'str',
            '*format': 'str', '*node-name': 'str', '*replaces': 'str',
            'sync': 'MirrorSyncMode', '*mode': 'NewImageMode',
            '*speed': 'int', '*granularity': 'uint32',
            '*buf-size': 'int', '*on-source-error': 'BlockdevOnError',
            '*on-target-error': 'BlockdevOnError',
            '*unmap': 'bool', '*copy-mode': 'MirrorCopyMode',
            '*auto-finalize': 'bool', '*auto-dismiss': 'bool' } }

##
# @BlockDirtyBitmap:
#
# @node: name of device/node which the bitmap is tracking
#
# @name: name of the dirty bitmap
#
# Since: 2.4
##
{ 'struct': 'BlockDirtyBitmap',
  'data': { 'node': 'str', 'name': 'str' } }

##
# @BlockDirtyBitmapAdd:
#
# @node: name of device/node which the bitmap is tracking
#
# @name: name of the dirty bitmap (must be less than 1024 bytes)
#
# @granularity: the bitmap granularity, default is 64k for
#     block-dirty-bitmap-add
#
# @persistent: the bitmap is persistent, i.e. it will be saved to the
#     corresponding block device image file on its close.  For now
#     only Qcow2 disks support persistent bitmaps.  Default is false
#     for block-dirty-bitmap-add.  (Since: 2.10)
#
# @disabled: the bitmap is created in the disabled state, which means
#     that it will not track drive changes.  The bitmap may be enabled
#     with block-dirty-bitmap-enable.  Default is false.  (Since: 4.0)
#
# Since: 2.4
##
{ 'struct': 'BlockDirtyBitmapAdd',
  'data': { 'node': 'str', 'name': 'str', '*granularity': 'uint32',
            '*persistent': 'bool', '*disabled': 'bool' } }

##
# @BlockDirtyBitmapOrStr:
#
# @local: name of the bitmap, attached to the same node as target
#     bitmap.
#
# @external: bitmap with specified node
#
# Since: 4.1
##
{ 'alternate': 'BlockDirtyBitmapOrStr',
  'data': { 'local': 'str',
            'external': 'BlockDirtyBitmap' } }

##
# @BlockDirtyBitmapMerge:
#
# @node: name of device/node which the @target bitmap is tracking
#
# @target: name of the destination dirty bitmap
#
# @bitmaps: name(s) of the source dirty bitmap(s) at @node and/or
#     fully specified BlockDirtyBitmap elements.  The latter are
#     supported since 4.1.
#
# Since: 4.0
##
{ 'struct': 'BlockDirtyBitmapMerge',
  'data': { 'node': 'str', 'target': 'str',
            'bitmaps': ['BlockDirtyBitmapOrStr'] } }

##
# @block-dirty-bitmap-add:
#
# Create a dirty bitmap with a name on the node, and start tracking
# the writes.
#
# Returns:
#     - nothing on success
#     - If @node is not a valid block device or node, DeviceNotFound
#     - If @name is already taken, GenericError with an explanation
#
# Since: 2.4
#
# Example:
#
# -> { "execute": "block-dirty-bitmap-add",
#      "arguments": { "node": "drive0", "name": "bitmap0" } }
# <- { "return": {} }
##
{ 'command': 'block-dirty-bitmap-add',
  'data': 'BlockDirtyBitmapAdd',
  'allow-preconfig': true }

##
# @block-dirty-bitmap-remove:
#
# Stop write tracking and remove the dirty bitmap that was created
# with block-dirty-bitmap-add.  If the bitmap is persistent, remove it
# from its storage too.
#
# Returns:
#     - nothing on success
#     - If @node is not a valid block device or node, DeviceNotFound
#     - If @name is not found, GenericError with an explanation
#     - if @name is frozen by an operation, GenericError
#
# Since: 2.4
#
# Example:
#
# -> { "execute": "block-dirty-bitmap-remove",
#      "arguments": { "node": "drive0", "name": "bitmap0" } }
# <- { "return": {} }
##
{ 'command': 'block-dirty-bitmap-remove',
  'data': 'BlockDirtyBitmap',
  'allow-preconfig': true }

##
# @block-dirty-bitmap-clear:
#
# Clear (reset) a dirty bitmap on the device, so that an incremental
# backup from this point in time forward will only backup clusters
# modified after this clear operation.
#
# Returns:
#     - nothing on success
#     - If @node is not a valid block device, DeviceNotFound
#     - If @name is not found, GenericError with an explanation
#
# Since: 2.4
#
# Example:
#
# -> { "execute": "block-dirty-bitmap-clear",
#      "arguments": { "node": "drive0", "name": "bitmap0" } }
# <- { "return": {} }
##
{ 'command': 'block-dirty-bitmap-clear',
  'data': 'BlockDirtyBitmap',
  'allow-preconfig': true }

##
# @block-dirty-bitmap-enable:
#
# Enables a dirty bitmap so that it will begin tracking disk changes.
#
# Returns:
#     - nothing on success
#     - If @node is not a valid block device, DeviceNotFound
#     - If @name is not found, GenericError with an explanation
#
# Since: 4.0
#
# Example:
#
# -> { "execute": "block-dirty-bitmap-enable",
#      "arguments": { "node": "drive0", "name": "bitmap0" } }
# <- { "return": {} }
##
{ 'command': 'block-dirty-bitmap-enable',
  'data': 'BlockDirtyBitmap',
  'allow-preconfig': true }

##
# @block-dirty-bitmap-disable:
#
# Disables a dirty bitmap so that it will stop tracking disk changes.
#
# Returns:
#     - nothing on success
#     - If @node is not a valid block device, DeviceNotFound
#     - If @name is not found, GenericError with an explanation
#
# Since: 4.0
#
# Example:
#
# -> { "execute": "block-dirty-bitmap-disable",
#      "arguments": { "node": "drive0", "name": "bitmap0" } }
# <- { "return": {} }
##
{ 'command': 'block-dirty-bitmap-disable',
  'data': 'BlockDirtyBitmap',
  'allow-preconfig': true }

##
# @block-dirty-bitmap-merge:
#
# Merge dirty bitmaps listed in @bitmaps to the @target dirty bitmap.
# Dirty bitmaps in @bitmaps will be unchanged, except if it also
# appears as the @target bitmap.  Any bits already set in @target will
# still be set after the merge, i.e., this operation does not clear
# the target.  On error, @target is unchanged.
#
# The resulting bitmap will count as dirty any clusters that were
# dirty in any of the source bitmaps.  This can be used to achieve
# backup checkpoints, or in simpler usages, to copy bitmaps.
#
# Returns:
#     - nothing on success
#     - If @node is not a valid block device, DeviceNotFound
#     - If any bitmap in @bitmaps or @target is not found,
#       GenericError
#     - If any of the bitmaps have different sizes or granularities,
#       GenericError
#
# Since: 4.0
#
# Example:
#
# -> { "execute": "block-dirty-bitmap-merge",
#      "arguments": { "node": "drive0", "target": "bitmap0",
#                     "bitmaps": ["bitmap1"] } }
# <- { "return": {} }
##
{ 'command': 'block-dirty-bitmap-merge',
  'data': 'BlockDirtyBitmapMerge',
  'allow-preconfig': true }

##
# @BlockDirtyBitmapSha256:
#
# SHA256 hash of dirty bitmap data
#
# @sha256: ASCII representation of SHA256 bitmap hash
#
# Since: 2.10
##
{ 'struct': 'BlockDirtyBitmapSha256',
  'data': {'sha256': 'str'} }

##
# @x-debug-block-dirty-bitmap-sha256:
#
# Get bitmap SHA256.
#
# Features:
#
# @unstable: This command is meant for debugging.
#
# Returns:
#     - BlockDirtyBitmapSha256 on success
#     - If @node is not a valid block device, DeviceNotFound
#     - If @name is not found or if hashing has failed, GenericError
#       with an explanation
#
# Since: 2.10
##
{ 'command': 'x-debug-block-dirty-bitmap-sha256',
  'data': 'BlockDirtyBitmap', 'returns': 'BlockDirtyBitmapSha256',
  'features': [ 'unstable' ],
  'allow-preconfig': true }

##
# @blockdev-mirror:
#
# Start mirroring a block device's writes to a new destination.
#
# @job-id: identifier for the newly-created block job.  If omitted,
#     the device name will be used.  (Since 2.7)
#
# @device: The device name or node-name of a root node whose writes
#     should be mirrored.
#
# @target: the id or node-name of the block device to mirror to.  This
#     mustn't be attached to guest.
#
# @replaces: with sync=full graph node name to be replaced by the new
#     image when a whole image copy is done.  This can be used to
#     repair broken Quorum files.  By default, @device is replaced,
#     although implicitly created filters on it are kept.
#
# @speed: the maximum speed, in bytes per second
#
# @sync: what parts of the disk image should be copied to the
#     destination (all the disk, only the sectors allocated in the
#     topmost image, or only new I/O).
#
# @granularity: granularity of the dirty bitmap, default is 64K if the
#     image format doesn't have clusters, 4K if the clusters are
#     smaller than that, else the cluster size.  Must be a power of 2
#     between 512 and 64M
#
# @buf-size: maximum amount of data in flight from source to target
#
# @on-source-error: the action to take on an error on the source,
#     default 'report'.  'stop' and 'enospc' can only be used if the
#     block device supports io-status (see BlockInfo).
#
# @on-target-error: the action to take on an error on the target,
#     default 'report' (no limitations, since this applies to a
#     different block device than @device).
#
# @filter-node-name: the node name that should be assigned to the
#     filter driver that the mirror job inserts into the graph above
#     @device.  If this option is not given, a node name is
#     autogenerated.  (Since: 2.9)
#
# @copy-mode: when to copy data to the destination; defaults to
#     'background' (Since: 3.0)
#
# @auto-finalize: When false, this job will wait in a PENDING state
#     after it has finished its work, waiting for @block-job-finalize
#     before making any block graph changes.  When true, this job will
#     automatically perform its abort or commit actions.  Defaults to
#     true.  (Since 3.1)
#
# @auto-dismiss: When false, this job will wait in a CONCLUDED state
#     after it has completely ceased all work, and awaits
#     @block-job-dismiss.  When true, this job will automatically
#     disappear from the query list without user intervention.
#     Defaults to true.  (Since 3.1)
#
# Returns: nothing on success.
#
# Since: 2.6
#
# Example:
#
# -> { "execute": "blockdev-mirror",
#      "arguments": { "device": "ide-hd0",
#                     "target": "target0",
#                     "sync": "full" } }
# <- { "return": {} }
##
{ 'command': 'blockdev-mirror',
  'data': { '*job-id': 'str', 'device': 'str', 'target': 'str',
            '*replaces': 'str',
            'sync': 'MirrorSyncMode',
            '*speed': 'int', '*granularity': 'uint32',
            '*buf-size': 'int', '*on-source-error': 'BlockdevOnError',
            '*on-target-error': 'BlockdevOnError',
            '*filter-node-name': 'str',
            '*copy-mode': 'MirrorCopyMode',
            '*auto-finalize': 'bool', '*auto-dismiss': 'bool' },
  'allow-preconfig': true }

##
# @BlockIOThrottle:
#
# A set of parameters describing block throttling.
#
# @device: Block device name
#
# @id: The name or QOM path of the guest device (since: 2.8)
#
# @bps: total throughput limit in bytes per second
#
# @bps_rd: read throughput limit in bytes per second
#
# @bps_wr: write throughput limit in bytes per second
#
# @iops: total I/O operations per second
#
# @iops_rd: read I/O operations per second
#
# @iops_wr: write I/O operations per second
#
# @bps_max: total throughput limit during bursts, in bytes (Since 1.7)
#
# @bps_rd_max: read throughput limit during bursts, in bytes (Since
#     1.7)
#
# @bps_wr_max: write throughput limit during bursts, in bytes (Since
#     1.7)
#
# @iops_max: total I/O operations per second during bursts, in bytes
#     (Since 1.7)
#
# @iops_rd_max: read I/O operations per second during bursts, in bytes
#     (Since 1.7)
#
# @iops_wr_max: write I/O operations per second during bursts, in
#     bytes (Since 1.7)
#
# @bps_max_length: maximum length of the @bps_max burst period, in
#     seconds.  It must only be set if @bps_max is set as well.
#     Defaults to 1. (Since 2.6)
#
# @bps_rd_max_length: maximum length of the @bps_rd_max burst period,
#     in seconds.  It must only be set if @bps_rd_max is set as well.
#     Defaults to 1. (Since 2.6)
#
# @bps_wr_max_length: maximum length of the @bps_wr_max burst period,
#     in seconds.  It must only be set if @bps_wr_max is set as well.
#     Defaults to 1. (Since 2.6)
#
# @iops_max_length: maximum length of the @iops burst period, in
#     seconds.  It must only be set if @iops_max is set as well.
#     Defaults to 1. (Since 2.6)
#
# @iops_rd_max_length: maximum length of the @iops_rd_max burst
#     period, in seconds.  It must only be set if @iops_rd_max is set
#     as well.  Defaults to 1. (Since 2.6)
#
# @iops_wr_max_length: maximum length of the @iops_wr_max burst
#     period, in seconds.  It must only be set if @iops_wr_max is set
#     as well.  Defaults to 1. (Since 2.6)
#
# @iops_size: an I/O size in bytes (Since 1.7)
#
# @group: throttle group name (Since 2.4)
#
# Features:
#
# @deprecated: Member @device is deprecated.  Use @id instead.
#
# Since: 1.1
##
{ 'struct': 'BlockIOThrottle',
  'data': { '*device': { 'type': 'str', 'features': [ 'deprecated' ] },
            '*id': 'str', 'bps': 'int', 'bps_rd': 'int',
            'bps_wr': 'int', 'iops': 'int', 'iops_rd': 'int', 'iops_wr': 'int',
            '*bps_max': 'int', '*bps_rd_max': 'int',
            '*bps_wr_max': 'int', '*iops_max': 'int',
            '*iops_rd_max': 'int', '*iops_wr_max': 'int',
            '*bps_max_length': 'int', '*bps_rd_max_length': 'int',
            '*bps_wr_max_length': 'int', '*iops_max_length': 'int',
            '*iops_rd_max_length': 'int', '*iops_wr_max_length': 'int',
            '*iops_size': 'int', '*group': 'str' } }

##
# @ThrottleLimits:
#
# Limit parameters for throttling.  Since some limit combinations are
# illegal, limits should always be set in one transaction.  All fields
# are optional.  When setting limits, if a field is missing the
# current value is not changed.
#
# @iops-total: limit total I/O operations per second
#
# @iops-total-max: I/O operations burst
#
# @iops-total-max-length: length of the iops-total-max burst period,
#     in seconds It must only be set if @iops-total-max is set as
#     well.
#
# @iops-read: limit read operations per second
#
# @iops-read-max: I/O operations read burst
#
# @iops-read-max-length: length of the iops-read-max burst period, in
#     seconds It must only be set if @iops-read-max is set as well.
#
# @iops-write: limit write operations per second
#
# @iops-write-max: I/O operations write burst
#
# @iops-write-max-length: length of the iops-write-max burst period,
#     in seconds It must only be set if @iops-write-max is set as
#     well.
#
# @bps-total: limit total bytes per second
#
# @bps-total-max: total bytes burst
#
# @bps-total-max-length: length of the bps-total-max burst period, in
#     seconds.  It must only be set if @bps-total-max is set as well.
#
# @bps-read: limit read bytes per second
#
# @bps-read-max: total bytes read burst
#
# @bps-read-max-length: length of the bps-read-max burst period, in
#     seconds It must only be set if @bps-read-max is set as well.
#
# @bps-write: limit write bytes per second
#
# @bps-write-max: total bytes write burst
#
# @bps-write-max-length: length of the bps-write-max burst period, in
#     seconds It must only be set if @bps-write-max is set as well.
#
# @iops-size: when limiting by iops max size of an I/O in bytes
#
# Since: 2.11
##
{ 'struct': 'ThrottleLimits',
  'data': { '*iops-total' : 'int', '*iops-total-max' : 'int',
            '*iops-total-max-length' : 'int', '*iops-read' : 'int',
            '*iops-read-max' : 'int', '*iops-read-max-length' : 'int',
            '*iops-write' : 'int', '*iops-write-max' : 'int',
            '*iops-write-max-length' : 'int', '*bps-total' : 'int',
            '*bps-total-max' : 'int', '*bps-total-max-length' : 'int',
            '*bps-read' : 'int', '*bps-read-max' : 'int',
            '*bps-read-max-length' : 'int', '*bps-write' : 'int',
            '*bps-write-max' : 'int', '*bps-write-max-length' : 'int',
            '*iops-size' : 'int' } }

##
# @ThrottleGroupProperties:
#
# Properties for throttle-group objects.
#
# @limits: limits to apply for this throttle group
#
# Features:
#
# @unstable: All members starting with x- are aliases for the same key
#     without x- in the @limits object.  This is not a stable
#     interface and may be removed or changed incompatibly in the
#     future.  Use @limits for a supported stable interface.
#
# Since: 2.11
##
{ 'struct': 'ThrottleGroupProperties',
  'data': { '*limits': 'ThrottleLimits',
            '*x-iops-total': { 'type': 'int',
                               'features': [ 'unstable' ] },
            '*x-iops-total-max': { 'type': 'int',
                                   'features': [ 'unstable' ] },
            '*x-iops-total-max-length': { 'type': 'int',
                                          'features': [ 'unstable' ] },
            '*x-iops-read': { 'type': 'int',
                              'features': [ 'unstable' ] },
            '*x-iops-read-max': { 'type': 'int',
                                  'features': [ 'unstable' ] },
            '*x-iops-read-max-length': { 'type': 'int',
                                         'features': [ 'unstable' ] },
            '*x-iops-write': { 'type': 'int',
                               'features': [ 'unstable' ] },
            '*x-iops-write-max': { 'type': 'int',
                                   'features': [ 'unstable' ] },
            '*x-iops-write-max-length': { 'type': 'int',
                                          'features': [ 'unstable' ] },
            '*x-bps-total': { 'type': 'int',
                              'features': [ 'unstable' ] },
            '*x-bps-total-max': { 'type': 'int',
                                  'features': [ 'unstable' ] },
            '*x-bps-total-max-length': { 'type': 'int',
                                         'features': [ 'unstable' ] },
            '*x-bps-read': { 'type': 'int',
                             'features': [ 'unstable' ] },
            '*x-bps-read-max': { 'type': 'int',
                                 'features': [ 'unstable' ] },
            '*x-bps-read-max-length': { 'type': 'int',
                                        'features': [ 'unstable' ] },
            '*x-bps-write': { 'type': 'int',
                              'features': [ 'unstable' ] },
            '*x-bps-write-max': { 'type': 'int',
                                  'features': [ 'unstable' ] },
            '*x-bps-write-max-length': { 'type': 'int',
                                         'features': [ 'unstable' ] },
            '*x-iops-size': { 'type': 'int',
                              'features': [ 'unstable' ] } } }

##
# @block-stream:
#
# Copy data from a backing file into a block device.
#
# The block streaming operation is performed in the background until
# the entire backing file has been copied.  This command returns
# immediately once streaming has started.  The status of ongoing block
# streaming operations can be checked with query-block-jobs.  The
# operation can be stopped before it has completed using the
# block-job-cancel command.
#
# The node that receives the data is called the top image, can be
# located in any part of the chain (but always above the base image;
# see below) and can be specified using its device or node name.
# Earlier qemu versions only allowed 'device' to name the top level
# node; presence of the 'base-node' parameter during introspection can
# be used as a witness of the enhanced semantics of 'device'.
#
# If a base file is specified then sectors are not copied from that
# base file and its backing chain.  This can be used to stream a
# subset of the backing file chain instead of flattening the entire
# image.  When streaming completes the image file will have the base
# file as its backing file, unless that node was changed while the job
# was running.  In that case, base's parent's backing (or filtered,
# whichever exists) child (i.e., base at the beginning of the job)
# will be the new backing file.
#
# On successful completion the image file is updated to drop the
# backing file and the BLOCK_JOB_COMPLETED event is emitted.
#
# In case @device is a filter node, block-stream modifies the first
# non-filter overlay node below it to point to the new backing node
# instead of modifying @device itself.
#
# @job-id: identifier for the newly-created block job.  If omitted,
#     the device name will be used.  (Since 2.7)
#
# @device: the device or node name of the top image
#
# @base: the common backing file name.  It cannot be set if @base-node
#     or @bottom is also set.
#
# @base-node: the node name of the backing file.  It cannot be set if
#     @base or @bottom is also set.  (Since 2.8)
#
# @bottom: the last node in the chain that should be streamed into
#     top.  It cannot be set if @base or @base-node is also set.  It
#     cannot be filter node.  (Since 6.0)
#
# @backing-file: The backing file string to write into the top image.
#     This filename is not validated.
#
#     If a pathname string is such that it cannot be resolved by QEMU,
#     that means that subsequent QMP or HMP commands must use
#     node-names for the image in question, as filename lookup methods
#     will fail.
#
#     If not specified, QEMU will automatically determine the backing
#     file string to use, or error out if there is no obvious choice.
#     Care should be taken when specifying the string, to specify a
#     valid filename or protocol.  (Since 2.1)
#
# @speed: the maximum speed, in bytes per second
#
# @on-error: the action to take on an error (default report). 'stop'
#     and 'enospc' can only be used if the block device supports
#     io-status (see BlockInfo).  (Since 1.3)
#
# @filter-node-name: the node name that should be assigned to the
#     filter driver that the stream job inserts into the graph above
#     @device.  If this option is not given, a node name is
#     autogenerated.  (Since: 6.0)
#
# @auto-finalize: When false, this job will wait in a PENDING state
#     after it has finished its work, waiting for @block-job-finalize
#     before making any block graph changes.  When true, this job will
#     automatically perform its abort or commit actions.  Defaults to
#     true.  (Since 3.1)
#
# @auto-dismiss: When false, this job will wait in a CONCLUDED state
#     after it has completely ceased all work, and awaits
#     @block-job-dismiss.  When true, this job will automatically
#     disappear from the query list without user intervention.
#     Defaults to true.  (Since 3.1)
#
# Returns:
#     - Nothing on success.
#     - If @device does not exist, DeviceNotFound.
#
# Since: 1.1
#
# Example:
#
# -> { "execute": "block-stream",
#      "arguments": { "device": "virtio0",
#                     "base": "/tmp/master.qcow2" } }
# <- { "return": {} }
##
{ 'command': 'block-stream',
  'data': { '*job-id': 'str', 'device': 'str', '*base': 'str',
            '*base-node': 'str', '*backing-file': 'str', '*bottom': 'str',
            '*speed': 'int', '*on-error': 'BlockdevOnError',
            '*filter-node-name': 'str',
            '*auto-finalize': 'bool', '*auto-dismiss': 'bool' },
  'allow-preconfig': true }

##
# @block-job-set-speed:
#
# Set maximum speed for a background block operation.
#
# This command can only be issued when there is an active block job.
#
# Throttling can be disabled by setting the speed to 0.
#
# @device: The job identifier.  This used to be a device name (hence
#     the name of the parameter), but since QEMU 2.7 it can have other
#     values.
#
# @speed: the maximum speed, in bytes per second, or 0 for unlimited.
#     Defaults to 0.
#
# Returns:
#     - Nothing on success
#     - If no background operation is active on this device,
#       DeviceNotActive
#
# Since: 1.1
##
{ 'command': 'block-job-set-speed',
  'data': { 'device': 'str', 'speed': 'int' },
  'allow-preconfig': true }

##
# @block-job-cancel:
#
# Stop an active background block operation.
#
# This command returns immediately after marking the active background
# block operation for cancellation.  It is an error to call this
# command if no operation is in progress.
#
# The operation will cancel as soon as possible and then emit the
# BLOCK_JOB_CANCELLED event.  Before that happens the job is still
# visible when enumerated using query-block-jobs.
#
# Note that if you issue 'block-job-cancel' after 'drive-mirror' has
# indicated (via the event BLOCK_JOB_READY) that the source and
# destination are synchronized, then the event triggered by this
# command changes to BLOCK_JOB_COMPLETED, to indicate that the
# mirroring has ended and the destination now has a point-in-time copy
# tied to the time of the cancellation.
#
# For streaming, the image file retains its backing file unless the
# streaming operation happens to complete just as it is being
# cancelled.  A new streaming operation can be started at a later time
# to finish copying all data from the backing file.
#
# @device: The job identifier.  This used to be a device name (hence
#     the name of the parameter), but since QEMU 2.7 it can have other
#     values.
#
# @force: If true, and the job has already emitted the event
#     BLOCK_JOB_READY, abandon the job immediately (even if it is
#     paused) instead of waiting for the destination to complete its
#     final synchronization (since 1.3)
#
# Returns:
#     - Nothing on success
#     - If no background operation is active on this device,
#       DeviceNotActive
#
# Since: 1.1
##
{ 'command': 'block-job-cancel', 'data': { 'device': 'str', '*force': 'bool' },
  'allow-preconfig': true }

##
# @block-job-pause:
#
# Pause an active background block operation.
#
# This command returns immediately after marking the active background
# block operation for pausing.  It is an error to call this command if
# no operation is in progress or if the job is already paused.
#
# The operation will pause as soon as possible.  No event is emitted
# when the operation is actually paused.  Cancelling a paused job
# automatically resumes it.
#
# @device: The job identifier.  This used to be a device name (hence
#     the name of the parameter), but since QEMU 2.7 it can have other
#     values.
#
# Returns:
#     - Nothing on success
#     - If no background operation is active on this device,
#       DeviceNotActive
#
# Since: 1.3
##
{ 'command': 'block-job-pause', 'data': { 'device': 'str' },
  'allow-preconfig': true }

##
# @block-job-resume:
#
# Resume an active background block operation.
#
# This command returns immediately after resuming a paused background
# block operation.  It is an error to call this command if no
# operation is in progress or if the job is not paused.
#
# This command also clears the error status of the job.
#
# @device: The job identifier.  This used to be a device name (hence
#     the name of the parameter), but since QEMU 2.7 it can have other
#     values.
#
# Returns:
#     - Nothing on success
#     - If no background operation is active on this device,
#       DeviceNotActive
#
# Since: 1.3
##
{ 'command': 'block-job-resume', 'data': { 'device': 'str' },
  'allow-preconfig': true }

##
# @block-job-complete:
#
# Manually trigger completion of an active background block operation.
# This is supported for drive mirroring, where it also switches the
# device to write to the target path only.  The ability to complete is
# signaled with a BLOCK_JOB_READY event.
#
# This command completes an active background block operation
# synchronously.  The ordering of this command's return with the
# BLOCK_JOB_COMPLETED event is not defined.  Note that if an I/O error
# occurs during the processing of this command: 1) the command itself
# will fail; 2) the error will be processed according to the
# rerror/werror arguments that were specified when starting the
# operation.
#
# A cancelled or paused job cannot be completed.
#
# @device: The job identifier.  This used to be a device name (hence
#     the name of the parameter), but since QEMU 2.7 it can have other
#     values.
#
# Returns:
#     - Nothing on success
#     - If no background operation is active on this device,
#       DeviceNotActive
#
# Since: 1.3
##
{ 'command': 'block-job-complete', 'data': { 'device': 'str' },
  'allow-preconfig': true }

##
# @block-job-dismiss:
#
# For jobs that have already concluded, remove them from the
# block-job-query list.  This command only needs to be run for jobs
# which were started with QEMU 2.12+ job lifetime management
# semantics.
#
# This command will refuse to operate on any job that has not yet
# reached its terminal state, JOB_STATUS_CONCLUDED. For jobs that make
# use of the BLOCK_JOB_READY event, block-job-cancel or
# block-job-complete will still need to be used as appropriate.
#
# @id: The job identifier.
#
# Returns: Nothing on success
#
# Since: 2.12
##
{ 'command': 'block-job-dismiss', 'data': { 'id': 'str' },
  'allow-preconfig': true }

##
# @block-job-finalize:
#
# Once a job that has manual=true reaches the pending state, it can be
# instructed to finalize any graph changes and do any necessary
# cleanup via this command.  For jobs in a transaction, instructing
# one job to finalize will force ALL jobs in the transaction to
# finalize, so it is only necessary to instruct a single member job to
# finalize.
#
# @id: The job identifier.
#
# Returns: Nothing on success
#
# Since: 2.12
##
{ 'command': 'block-job-finalize', 'data': { 'id': 'str' },
  'allow-preconfig': true }

##
# @BlockdevDiscardOptions:
#
# Determines how to handle discard requests.
#
# @ignore: Ignore the request
#
# @unmap: Forward as an unmap request
#
# Since: 2.9
##
{ 'enum': 'BlockdevDiscardOptions',
  'data': [ 'ignore', 'unmap' ] }

##
# @BlockdevDetectZeroesOptions:
#
# Describes the operation mode for the automatic conversion of plain
# zero writes by the OS to driver specific optimized zero write
# commands.
#
# @off: Disabled (default)
#
# @on: Enabled
#
# @unmap: Enabled and even try to unmap blocks if possible.  This
#     requires also that @BlockdevDiscardOptions is set to unmap for
#     this device.
#
# Since: 2.1
##
{ 'enum': 'BlockdevDetectZeroesOptions',
  'data': [ 'off', 'on', 'unmap' ] }

##
# @BlockdevAioOptions:
#
# Selects the AIO backend to handle I/O requests
#
# @threads: Use qemu's thread pool
#
# @native: Use native AIO backend (only Linux and Windows)
#
# @io_uring: Use linux io_uring (since 5.0)
#
# Since: 2.9
##
{ 'enum': 'BlockdevAioOptions',
  'data': [ 'threads', 'native',
            { 'name': 'io_uring', 'if': 'CONFIG_LINUX_IO_URING' } ] }

##
# @BlockdevCacheOptions:
#
# Includes cache-related options for block devices
#
# @direct: enables use of O_DIRECT (bypass the host page cache;
#     default: false)
#
# @no-flush: ignore any flush requests for the device (default: false)
#
# Since: 2.9
##
{ 'struct': 'BlockdevCacheOptions',
  'data': { '*direct': 'bool',
            '*no-flush': 'bool' } }

##
# @BlockdevDriver:
#
# Drivers that are supported in block device operations.
#
# @throttle: Since 2.11
#
# @nvme: Since 2.12
#
# @copy-on-read: Since 3.0
#
# @blklogwrites: Since 3.0
#
# @blkreplay: Since 4.2
#
# @compress: Since 5.0
#
# @copy-before-write: Since 6.2
#
# @snapshot-access: Since 7.0
#
# Since: 2.9
##
{ 'enum': 'BlockdevDriver',
  'data': [ 'blkdebug', 'blklogwrites', 'blkreplay', 'blkverify', 'bochs',
            'cloop', 'compress', 'copy-before-write', 'copy-on-read', 'dmg',
            'file', 'snapshot-access', 'ftp', 'ftps', 'gluster',
            {'name': 'host_cdrom', 'if': 'HAVE_HOST_BLOCK_DEVICE' },
            {'name': 'host_device', 'if': 'HAVE_HOST_BLOCK_DEVICE' },
            'http', 'https',
            { 'name': 'io_uring', 'if': 'CONFIG_BLKIO' },
            'iscsi',
            'luks', 'nbd', 'nfs', 'null-aio', 'null-co', 'nvme',
            { 'name': 'nvme-io_uring', 'if': 'CONFIG_BLKIO' },
            'parallels', 'preallocate', 'qcow', 'qcow2', 'qed', 'quorum',
            'raw', 'rbd',
            { 'name': 'replication', 'if': 'CONFIG_REPLICATION' },
            'ssh', 'throttle', 'vdi', 'vhdx',
            { 'name': 'virtio-blk-vfio-pci', 'if': 'CONFIG_BLKIO' },
            { 'name': 'virtio-blk-vhost-user', 'if': 'CONFIG_BLKIO' },
            { 'name': 'virtio-blk-vhost-vdpa', 'if': 'CONFIG_BLKIO' },
            'vmdk', 'vpc', 'vvfat' ] }

##
# @BlockdevOptionsFile:
#
# Driver specific block device options for the file backend.
#
# @filename: path to the image file
#
# @pr-manager: the id for the object that will handle persistent
#     reservations for this device (default: none, forward the
#     commands via SG_IO; since 2.11)
#
# @aio: AIO backend (default: threads) (since: 2.8)
#
# @aio-max-batch: maximum number of requests to batch together into a
#     single submission in the AIO backend.  The smallest value
#     between this and the aio-max-batch value of the IOThread object
#     is chosen.  0 means that the AIO backend will handle it
#     automatically.  (default: 0, since 6.2)
#
# @locking: whether to enable file locking.  If set to 'auto', only
#     enable when Open File Descriptor (OFD) locking API is available
#     (default: auto, since 2.10)
#
# @drop-cache: invalidate page cache during live migration.  This
#     prevents stale data on the migration destination with
#     cache.direct=off.  Currently only supported on Linux hosts.
#     (default: on, since: 4.0)
#
# @x-check-cache-dropped: whether to check that page cache was dropped
#     on live migration.  May cause noticeable delays if the image
#     file is large, do not use in production.  (default: off)
#     (since: 3.0)
#
# Features:
#
# @dynamic-auto-read-only: If present, enabled auto-read-only means
#     that the driver will open the image read-only at first,
#     dynamically reopen the image file read-write when the first
#     writer is attached to the node and reopen read-only when the
#     last writer is detached.  This allows giving QEMU write
#     permissions only on demand when an operation actually needs
#     write access.
#
# @unstable: Member x-check-cache-dropped is meant for debugging.
#
# Since: 2.9
##
{ 'struct': 'BlockdevOptionsFile',
  'data': { 'filename': 'str',
            '*pr-manager': 'str',
            '*locking': 'OnOffAuto',
            '*aio': 'BlockdevAioOptions',
            '*aio-max-batch': 'int',
            '*drop-cache': {'type': 'bool',
                            'if': 'CONFIG_LINUX'},
            '*x-check-cache-dropped': { 'type': 'bool',
                                        'features': [ 'unstable' ] } },
  'features': [ { 'name': 'dynamic-auto-read-only',
                  'if': 'CONFIG_POSIX' } ] }

##
# @BlockdevOptionsNull:
#
# Driver specific block device options for the null backend.
#
# @size: size of the device in bytes.
#
# @latency-ns: emulated latency (in nanoseconds) in processing
#     requests.  Default to zero which completes requests immediately.
#     (Since 2.4)
#
# @read-zeroes: if true, reads from the device produce zeroes; if
#     false, the buffer is left unchanged.
#     (default: false; since: 4.1)
#
# Since: 2.9
##
{ 'struct': 'BlockdevOptionsNull',
  'data': { '*size': 'int', '*latency-ns': 'uint64', '*read-zeroes': 'bool' } }

##
# @BlockdevOptionsNVMe:
#
# Driver specific block device options for the NVMe backend.
#
# @device: PCI controller address of the NVMe device in format
#     hhhh:bb:ss.f (host:bus:slot.function)
#
# @namespace: namespace number of the device, starting from 1.
#
# Note that the PCI @device must have been unbound from any host
# kernel driver before instructing QEMU to add the blockdev.
#
# Since: 2.12
##
{ 'struct': 'BlockdevOptionsNVMe',
  'data': { 'device': 'str', 'namespace': 'int' } }

##
# @BlockdevOptionsVVFAT:
#
# Driver specific block device options for the vvfat protocol.
#
# @dir: directory to be exported as FAT image
#
# @fat-type: FAT type: 12, 16 or 32
#
# @floppy: whether to export a floppy image (true) or partitioned hard
#     disk (false; default)
#
# @label: set the volume label, limited to 11 bytes.  FAT16 and FAT32
#     traditionally have some restrictions on labels, which are
#     ignored by most operating systems.  Defaults to "QEMU VVFAT".
#     (since 2.4)
#
# @rw: whether to allow write operations (default: false)
#
# Since: 2.9
##
{ 'struct': 'BlockdevOptionsVVFAT',
  'data': { 'dir': 'str', '*fat-type': 'int', '*floppy': 'bool',
            '*label': 'str', '*rw': 'bool' } }

##
# @BlockdevOptionsGenericFormat:
#
# Driver specific block device options for image format that have no
# option besides their data source.
#
# @file: reference to or definition of the data source block device
#
# Since: 2.9
##
{ 'struct': 'BlockdevOptionsGenericFormat',
  'data': { 'file': 'BlockdevRef' } }

##
# @BlockdevOptionsLUKS:
#
# Driver specific block device options for LUKS.
#
# @key-secret: the ID of a QCryptoSecret object providing the
#     decryption key (since 2.6). Mandatory except when doing a
#     metadata-only probe of the image.
#
# Since: 2.9
##
{ 'struct': 'BlockdevOptionsLUKS',
  'base': 'BlockdevOptionsGenericFormat',
  'data': { '*key-secret': 'str' } }

##
# @BlockdevOptionsGenericCOWFormat:
#
# Driver specific block device options for image format that have no
# option besides their data source and an optional backing file.
#
# @backing: reference to or definition of the backing file block
#     device, null disables the backing file entirely.  Defaults to
#     the backing file stored the image file.
#
# Since: 2.9
##
{ 'struct': 'BlockdevOptionsGenericCOWFormat',
  'base': 'BlockdevOptionsGenericFormat',
  'data': { '*backing': 'BlockdevRefOrNull' } }

##
# @Qcow2OverlapCheckMode:
#
# General overlap check modes.
#
# @none: Do not perform any checks
#
# @constant: Perform only checks which can be done in constant time
#     and without reading anything from disk
#
# @cached: Perform only checks which can be done without reading
#     anything from disk
#
# @all: Perform all available overlap checks
#
# Since: 2.9
##
{ 'enum': 'Qcow2OverlapCheckMode',
  'data': [ 'none', 'constant', 'cached', 'all' ] }

##
# @Qcow2OverlapCheckFlags:
#
# Structure of flags for each metadata structure.  Setting a field to
# 'true' makes qemu guard that structure against unintended
# overwriting.  The default value is chosen according to the template
# given.
#
# @template: Specifies a template mode which can be adjusted using the
#     other flags, defaults to 'cached'
#
# @bitmap-directory: since 3.0
#
# Since: 2.9
##
{ 'struct': 'Qcow2OverlapCheckFlags',
  'data': { '*template':         'Qcow2OverlapCheckMode',
            '*main-header':      'bool',
            '*active-l1':        'bool',
            '*active-l2':        'bool',
            '*refcount-table':   'bool',
            '*refcount-block':   'bool',
            '*snapshot-table':   'bool',
            '*inactive-l1':      'bool',
            '*inactive-l2':      'bool',
            '*bitmap-directory': 'bool' } }

##
# @Qcow2OverlapChecks:
#
# Specifies which metadata structures should be guarded against
# unintended overwriting.
#
# @flags: set of flags for separate specification of each metadata
#     structure type
#
# @mode: named mode which chooses a specific set of flags
#
# Since: 2.9
##
{ 'alternate': 'Qcow2OverlapChecks',
  'data': { 'flags': 'Qcow2OverlapCheckFlags',
            'mode':  'Qcow2OverlapCheckMode' } }

##
# @BlockdevQcowEncryptionFormat:
#
# @aes: AES-CBC with plain64 initialization vectors
#
# Since: 2.10
##
{ 'enum': 'BlockdevQcowEncryptionFormat',
  'data': [ 'aes' ] }

##
# @BlockdevQcowEncryption:
#
# Since: 2.10
##
{ 'union': 'BlockdevQcowEncryption',
  'base': { 'format': 'BlockdevQcowEncryptionFormat' },
  'discriminator': 'format',
  'data': { 'aes': 'QCryptoBlockOptionsQCow' } }

##
# @BlockdevOptionsQcow:
#
# Driver specific block device options for qcow.
#
# @encrypt: Image decryption options.  Mandatory for encrypted images,
#     except when doing a metadata-only probe of the image.
#
# Since: 2.10
##
{ 'struct': 'BlockdevOptionsQcow',
  'base': 'BlockdevOptionsGenericCOWFormat',
  'data': { '*encrypt': 'BlockdevQcowEncryption' } }

##
# @BlockdevQcow2EncryptionFormat:
#
# @aes: AES-CBC with plain64 initialization vectors
#
# Since: 2.10
##
{ 'enum': 'BlockdevQcow2EncryptionFormat',
  'data': [ 'aes', 'luks' ] }

##
# @BlockdevQcow2Encryption:
#
# Since: 2.10
##
{ 'union': 'BlockdevQcow2Encryption',
  'base': { 'format': 'BlockdevQcow2EncryptionFormat' },
  'discriminator': 'format',
  'data': { 'aes': 'QCryptoBlockOptionsQCow',
            'luks': 'QCryptoBlockOptionsLUKS'} }

##
# @BlockdevOptionsPreallocate:
#
# Filter driver intended to be inserted between format and protocol
# node and do preallocation in protocol node on write.
#
# @prealloc-align: on preallocation, align file length to this number,
#     default 1048576 (1M)
#
# @prealloc-size: how much to preallocate, default 134217728 (128M)
#
# Since: 6.0
##
{ 'struct': 'BlockdevOptionsPreallocate',
  'base': 'BlockdevOptionsGenericFormat',
  'data': { '*prealloc-align': 'int', '*prealloc-size': 'int' } }

##
# @BlockdevOptionsQcow2:
#
# Driver specific block device options for qcow2.
#
# @lazy-refcounts: whether to enable the lazy refcounts feature
#     (default is taken from the image file)
#
# @pass-discard-request: whether discard requests to the qcow2 device
#     should be forwarded to the data source
#
# @pass-discard-snapshot: whether discard requests for the data source
#     should be issued when a snapshot operation (e.g. deleting a
#     snapshot) frees clusters in the qcow2 file
#
# @pass-discard-other: whether discard requests for the data source
#     should be issued on other occasions where a cluster gets freed
#
# @discard-no-unref: when enabled, discards from the guest will not cause
#     cluster allocations to be relinquished. This prevents qcow2 fragmentation
#     that would be caused by such discards. Besides potential
#     performance degradation, such fragmentation can lead to increased
#     allocation of clusters past the end of the image file,
#     resulting in image files whose file length can grow much larger
#     than their guest disk size would suggest.
#     If image file length is of concern (e.g. when storing qcow2
#     images directly on block devices), you should consider enabling
#     this option. (since 8.1)
#
# @overlap-check: which overlap checks to perform for writes to the
#     image, defaults to 'cached' (since 2.2)
#
# @cache-size: the maximum total size of the L2 table and refcount
#     block caches in bytes (since 2.2)
#
# @l2-cache-size: the maximum size of the L2 table cache in bytes
#     (since 2.2)
#
# @l2-cache-entry-size: the size of each entry in the L2 cache in
#     bytes.  It must be a power of two between 512 and the cluster
#     size.  The default value is the cluster size (since 2.12)
#
# @refcount-cache-size: the maximum size of the refcount block cache
#     in bytes (since 2.2)
#
# @cache-clean-interval: clean unused entries in the L2 and refcount
#     caches.  The interval is in seconds.  The default value is 600
#     on supporting platforms, and 0 on other platforms.  0 disables
#     this feature.  (since 2.5)
#
# @encrypt: Image decryption options.  Mandatory for encrypted images,
#     except when doing a metadata-only probe of the image.  (since
#     2.10)
#
# @data-file: reference to or definition of the external data file.
#     This may only be specified for images that require an external
#     data file.  If it is not specified for such an image, the data
#     file name is loaded from the image file.  (since 4.0)
#
# Since: 2.9
##
{ 'struct': 'BlockdevOptionsQcow2',
  'base': 'BlockdevOptionsGenericCOWFormat',
  'data': { '*lazy-refcounts': 'bool',
            '*pass-discard-request': 'bool',
            '*pass-discard-snapshot': 'bool',
            '*pass-discard-other': 'bool',
            '*discard-no-unref': 'bool',
            '*overlap-check': 'Qcow2OverlapChecks',
            '*cache-size': 'int',
            '*l2-cache-size': 'int',
            '*l2-cache-entry-size': 'int',
            '*refcount-cache-size': 'int',
            '*cache-clean-interval': 'int',
            '*encrypt': 'BlockdevQcow2Encryption',
            '*data-file': 'BlockdevRef' } }

##
# @SshHostKeyCheckMode:
#
# @none: Don't check the host key at all
#
# @hash: Compare the host key with a given hash
#
# @known_hosts: Check the host key against the known_hosts file
#
# Since: 2.12
##
{ 'enum': 'SshHostKeyCheckMode',
  'data': [ 'none', 'hash', 'known_hosts' ] }

##
# @SshHostKeyCheckHashType:
#
# @md5: The given hash is an md5 hash
#
# @sha1: The given hash is an sha1 hash
#
# @sha256: The given hash is an sha256 hash
#
# Since: 2.12
##
{ 'enum': 'SshHostKeyCheckHashType',
  'data': [ 'md5', 'sha1', 'sha256' ] }

##
# @SshHostKeyHash:
#
# @type: The hash algorithm used for the hash
#
# @hash: The expected hash value
#
# Since: 2.12
##
{ 'struct': 'SshHostKeyHash',
  'data': { 'type': 'SshHostKeyCheckHashType',
            'hash': 'str' }}

##
# @SshHostKeyCheck:
#
# Since: 2.12
##
{ 'union': 'SshHostKeyCheck',
  'base': { 'mode': 'SshHostKeyCheckMode' },
  'discriminator': 'mode',
  'data': { 'hash': 'SshHostKeyHash' } }

##
# @BlockdevOptionsSsh:
#
# @server: host address
#
# @path: path to the image on the host
#
# @user: user as which to connect, defaults to current local user name
#
# @host-key-check: Defines how and what to check the host key against
#     (default: known_hosts)
#
# Since: 2.9
##
{ 'struct': 'BlockdevOptionsSsh',
  'data': { 'server': 'InetSocketAddress',
            'path': 'str',
            '*user': 'str',
            '*host-key-check': 'SshHostKeyCheck' } }

##
# @BlkdebugEvent:
#
# Trigger events supported by blkdebug.
#
# @l1_shrink_write_table: write zeros to the l1 table to shrink image.
#     (since 2.11)
#
# @l1_shrink_free_l2_clusters: discard the l2 tables.  (since 2.11)
#
# @cor_write: a write due to copy-on-read (since 2.11)
#
# @cluster_alloc_space: an allocation of file space for a cluster
#     (since 4.1)
#
# @none: triggers once at creation of the blkdebug node (since 4.1)
#
# Since: 2.9
##
{ 'enum': 'BlkdebugEvent', 'prefix': 'BLKDBG',
  'data': [ 'l1_update', 'l1_grow_alloc_table', 'l1_grow_write_table',
            'l1_grow_activate_table', 'l2_load', 'l2_update',
            'l2_update_compressed', 'l2_alloc_cow_read', 'l2_alloc_write',
            'read_aio', 'read_backing_aio', 'read_compressed', 'write_aio',
            'write_compressed', 'vmstate_load', 'vmstate_save', 'cow_read',
            'cow_write', 'reftable_load', 'reftable_grow', 'reftable_update',
            'refblock_load', 'refblock_update', 'refblock_update_part',
            'refblock_alloc', 'refblock_alloc_hookup', 'refblock_alloc_write',
            'refblock_alloc_write_blocks', 'refblock_alloc_write_table',
            'refblock_alloc_switch_table', 'cluster_alloc',
            'cluster_alloc_bytes', 'cluster_free', 'flush_to_os',
            'flush_to_disk', 'pwritev_rmw_head', 'pwritev_rmw_after_head',
            'pwritev_rmw_tail', 'pwritev_rmw_after_tail', 'pwritev',
            'pwritev_zero', 'pwritev_done', 'empty_image_prepare',
            'l1_shrink_write_table', 'l1_shrink_free_l2_clusters',
            'cor_write', 'cluster_alloc_space', 'none'] }

##
# @BlkdebugIOType:
#
# Kinds of I/O that blkdebug can inject errors in.
#
# @read: .bdrv_co_preadv()
#
# @write: .bdrv_co_pwritev()
#
# @write-zeroes: .bdrv_co_pwrite_zeroes()
#
# @discard: .bdrv_co_pdiscard()
#
# @flush: .bdrv_co_flush_to_disk()
#
# @block-status: .bdrv_co_block_status()
#
# Since: 4.1
##
{ 'enum': 'BlkdebugIOType', 'prefix': 'BLKDEBUG_IO_TYPE',
  'data': [ 'read', 'write', 'write-zeroes', 'discard', 'flush',
            'block-status' ] }

##
# @BlkdebugInjectErrorOptions:
#
# Describes a single error injection for blkdebug.
#
# @event: trigger event
#
# @state: the state identifier blkdebug needs to be in to actually
#     trigger the event; defaults to "any"
#
# @iotype: the type of I/O operations on which this error should be
#     injected; defaults to "all read, write, write-zeroes, discard,
#     and flush operations" (since: 4.1)
#
# @errno: error identifier (errno) to be returned; defaults to EIO
#
# @sector: specifies the sector index which has to be affected in
#     order to actually trigger the event; defaults to "any sector"
#
# @once: disables further events after this one has been triggered;
#     defaults to false
#
# @immediately: fail immediately; defaults to false
#
# Since: 2.9
##
{ 'struct': 'BlkdebugInjectErrorOptions',
  'data': { 'event': 'BlkdebugEvent',
            '*state': 'int',
            '*iotype': 'BlkdebugIOType',
            '*errno': 'int',
            '*sector': 'int',
            '*once': 'bool',
            '*immediately': 'bool' } }

##
# @BlkdebugSetStateOptions:
#
# Describes a single state-change event for blkdebug.
#
# @event: trigger event
#
# @state: the current state identifier blkdebug needs to be in;
#     defaults to "any"
#
# @new_state: the state identifier blkdebug is supposed to assume if
#     this event is triggered
#
# Since: 2.9
##
{ 'struct': 'BlkdebugSetStateOptions',
  'data': { 'event': 'BlkdebugEvent',
            '*state': 'int',
            'new_state': 'int' } }

##
# @BlockdevOptionsBlkdebug:
#
# Driver specific block device options for blkdebug.
#
# @image: underlying raw block device (or image file)
#
# @config: filename of the configuration file
#
# @align: required alignment for requests in bytes, must be positive
#     power of 2, or 0 for default
#
# @max-transfer: maximum size for I/O transfers in bytes, must be
#     positive multiple of @align and of the underlying file's request
#     alignment (but need not be a power of 2), or 0 for default
#     (since 2.10)
#
# @opt-write-zero: preferred alignment for write zero requests in
#     bytes, must be positive multiple of @align and of the underlying
#     file's request alignment (but need not be a power of 2), or 0
#     for default (since 2.10)
#
# @max-write-zero: maximum size for write zero requests in bytes, must
#     be positive multiple of @align, of @opt-write-zero, and of the
#     underlying file's request alignment (but need not be a power of
#     2), or 0 for default (since 2.10)
#
# @opt-discard: preferred alignment for discard requests in bytes,
#     must be positive multiple of @align and of the underlying file's
#     request alignment (but need not be a power of 2), or 0 for
#     default (since 2.10)
#
# @max-discard: maximum size for discard requests in bytes, must be
#     positive multiple of @align, of @opt-discard, and of the
#     underlying file's request alignment (but need not be a power of
#     2), or 0 for default (since 2.10)
#
# @inject-error: array of error injection descriptions
#
# @set-state: array of state-change descriptions
#
# @take-child-perms: Permissions to take on @image in addition to what
#     is necessary anyway (which depends on how the blkdebug node is
#     used).  Defaults to none.  (since 5.0)
#
# @unshare-child-perms: Permissions not to share on @image in addition
#     to what cannot be shared anyway (which depends on how the
#     blkdebug node is used).  Defaults to none.  (since 5.0)
#
# Since: 2.9
##
{ 'struct': 'BlockdevOptionsBlkdebug',
  'data': { 'image': 'BlockdevRef',
            '*config': 'str',
            '*align': 'int', '*max-transfer': 'int32',
            '*opt-write-zero': 'int32', '*max-write-zero': 'int32',
            '*opt-discard': 'int32', '*max-discard': 'int32',
            '*inject-error': ['BlkdebugInjectErrorOptions'],
            '*set-state': ['BlkdebugSetStateOptions'],
            '*take-child-perms': ['BlockPermission'],
            '*unshare-child-perms': ['BlockPermission'] } }

##
# @BlockdevOptionsBlklogwrites:
#
# Driver specific block device options for blklogwrites.
#
# @file: block device
#
# @log: block device used to log writes to @file
#
# @log-sector-size: sector size used in logging writes to @file,
#     determines granularity of offsets and sizes of writes
#     (default: 512)
#
# @log-append: append to an existing log (default: false)
#
# @log-super-update-interval: interval of write requests after which
#     the log super block is updated to disk (default: 4096)
#
# Since: 3.0
##
{ 'struct': 'BlockdevOptionsBlklogwrites',
  'data': { 'file': 'BlockdevRef',
            'log': 'BlockdevRef',
            '*log-sector-size': 'uint32',
            '*log-append': 'bool',
            '*log-super-update-interval': 'uint64' } }

##
# @BlockdevOptionsBlkverify:
#
# Driver specific block device options for blkverify.
#
# @test: block device to be tested
#
# @raw: raw image used for verification
#
# Since: 2.9
##
{ 'struct': 'BlockdevOptionsBlkverify',
  'data': { 'test': 'BlockdevRef',
            'raw': 'BlockdevRef' } }

##
# @BlockdevOptionsBlkreplay:
#
# Driver specific block device options for blkreplay.
#
# @image: disk image which should be controlled with blkreplay
#
# Since: 4.2
##
{ 'struct': 'BlockdevOptionsBlkreplay',
  'data': { 'image': 'BlockdevRef' } }

##
# @QuorumReadPattern:
#
# An enumeration of quorum read patterns.
#
# @quorum: read all the children and do a quorum vote on reads
#
# @fifo: read only from the first child that has not failed
#
# Since: 2.9
##
{ 'enum': 'QuorumReadPattern', 'data': [ 'quorum', 'fifo' ] }

##
# @BlockdevOptionsQuorum:
#
# Driver specific block device options for Quorum
#
# @blkverify: true if the driver must print content mismatch set to
#     false by default
#
# @children: the children block devices to use
#
# @vote-threshold: the vote limit under which a read will fail
#
# @rewrite-corrupted: rewrite corrupted data when quorum is reached
#     (Since 2.1)
#
# @read-pattern: choose read pattern and set to quorum by default
#     (Since 2.2)
#
# Since: 2.9
##
{ 'struct': 'BlockdevOptionsQuorum',
  'data': { '*blkverify': 'bool',
            'children': [ 'BlockdevRef' ],
            'vote-threshold': 'int',
            '*rewrite-corrupted': 'bool',
            '*read-pattern': 'QuorumReadPattern' } }

##
# @BlockdevOptionsGluster:
#
# Driver specific block device options for Gluster
#
# @volume: name of gluster volume where VM image resides
#
# @path: absolute path to image file in gluster volume
#
# @server: gluster servers description
#
# @debug: libgfapi log level (default '4' which is Error) (Since 2.8)
#
# @logfile: libgfapi log file (default /dev/stderr) (Since 2.8)
#
# Since: 2.9
##
{ 'struct': 'BlockdevOptionsGluster',
  'data': { 'volume': 'str',
            'path': 'str',
            'server': ['SocketAddress'],
            '*debug': 'int',
            '*logfile': 'str' } }

##
# @BlockdevOptionsIoUring:
#
# Driver specific block device options for the io_uring backend.
#
# @filename: path to the image file
#
# Since: 7.2
##
{ 'struct': 'BlockdevOptionsIoUring',
  'data': { 'filename': 'str' },
  'if': 'CONFIG_BLKIO' }

##
# @BlockdevOptionsNvmeIoUring:
#
# Driver specific block device options for the nvme-io_uring backend.
#
# @path: path to the NVMe namespace's character device (e.g.
#     /dev/ng0n1).
#
# Since: 7.2
##
{ 'struct': 'BlockdevOptionsNvmeIoUring',
  'data': { 'path': 'str' },
  'if': 'CONFIG_BLKIO' }

##
# @BlockdevOptionsVirtioBlkVfioPci:
#
# Driver specific block device options for the virtio-blk-vfio-pci
# backend.
#
# @path: path to the PCI device's sysfs directory (e.g.
#     /sys/bus/pci/devices/0000:00:01.0).
#
# Since: 7.2
##
{ 'struct': 'BlockdevOptionsVirtioBlkVfioPci',
  'data': { 'path': 'str' },
  'if': 'CONFIG_BLKIO' }

##
# @BlockdevOptionsVirtioBlkVhostUser:
#
# Driver specific block device options for the virtio-blk-vhost-user
# backend.
#
# @path: path to the vhost-user UNIX domain socket.
#
# Since: 7.2
##
{ 'struct': 'BlockdevOptionsVirtioBlkVhostUser',
  'data': { 'path': 'str' },
  'if': 'CONFIG_BLKIO' }

##
# @BlockdevOptionsVirtioBlkVhostVdpa:
#
# Driver specific block device options for the virtio-blk-vhost-vdpa
# backend.
#
# @path: path to the vhost-vdpa character device.
#
# Features:
# @fdset: Member @path supports the special "/dev/fdset/N" path
#     (since 8.1)
#
# Since: 7.2
##
{ 'struct': 'BlockdevOptionsVirtioBlkVhostVdpa',
  'data': { 'path': 'str' },
  'features': [ { 'name' :'fdset',
                  'if': 'CONFIG_BLKIO_VHOST_VDPA_FD' } ],
  'if': 'CONFIG_BLKIO' }

##
# @IscsiTransport:
#
# An enumeration of libiscsi transport types
#
# Since: 2.9
##
{ 'enum': 'IscsiTransport',
  'data': [ 'tcp', 'iser' ] }

##
# @IscsiHeaderDigest:
#
# An enumeration of header digests supported by libiscsi
#
# Since: 2.9
##
{ 'enum': 'IscsiHeaderDigest',
  'prefix': 'QAPI_ISCSI_HEADER_DIGEST',
  'data': [ 'crc32c', 'none', 'crc32c-none', 'none-crc32c' ] }

##
# @BlockdevOptionsIscsi:
#
# @transport: The iscsi transport type
#
# @portal: The address of the iscsi portal
#
# @target: The target iqn name
#
# @lun: LUN to connect to.  Defaults to 0.
#
# @user: User name to log in with.  If omitted, no CHAP authentication
#     is performed.
#
# @password-secret: The ID of a QCryptoSecret object providing the
#     password for the login.  This option is required if @user is
#     specified.
#
# @initiator-name: The iqn name we want to identify to the target as.
#     If this option is not specified, an initiator name is generated
#     automatically.
#
# @header-digest: The desired header digest.  Defaults to none-crc32c.
#
# @timeout: Timeout in seconds after which a request will timeout.  0
#     means no timeout and is the default.
#
# Driver specific block device options for iscsi
#
# Since: 2.9
##
{ 'struct': 'BlockdevOptionsIscsi',
  'data': { 'transport': 'IscsiTransport',
            'portal': 'str',
            'target': 'str',
            '*lun': 'int',
            '*user': 'str',
            '*password-secret': 'str',
            '*initiator-name': 'str',
            '*header-digest': 'IscsiHeaderDigest',
            '*timeout': 'int' } }

##
# @RbdAuthMode:
#
# Since: 3.0
##
{ 'enum': 'RbdAuthMode',
  'data': [ 'cephx', 'none' ] }

##
# @RbdImageEncryptionFormat:
#
# @luks-any: Used for opening either luks or luks2 (Since 8.0)
#
# Since: 6.1
##
{ 'enum': 'RbdImageEncryptionFormat',
  'data': [ 'luks', 'luks2', 'luks-any' ] }

##
# @RbdEncryptionOptionsLUKSBase:
#
# @key-secret: ID of a QCryptoSecret object providing a passphrase for
#     unlocking the encryption
#
# Since: 6.1
##
{ 'struct': 'RbdEncryptionOptionsLUKSBase',
  'data': { 'key-secret': 'str' } }

##
# @RbdEncryptionCreateOptionsLUKSBase:
#
# @cipher-alg: The encryption algorithm
#
# Since: 6.1
##
{ 'struct': 'RbdEncryptionCreateOptionsLUKSBase',
  'base': 'RbdEncryptionOptionsLUKSBase',
  'data': { '*cipher-alg': 'QCryptoCipherAlgorithm' } }

##
# @RbdEncryptionOptionsLUKS:
#
# Since: 6.1
##
{ 'struct': 'RbdEncryptionOptionsLUKS',
  'base': 'RbdEncryptionOptionsLUKSBase',
  'data': { } }

##
# @RbdEncryptionOptionsLUKS2:
#
# Since: 6.1
##
{ 'struct': 'RbdEncryptionOptionsLUKS2',
  'base': 'RbdEncryptionOptionsLUKSBase',
  'data': { } }

##
# @RbdEncryptionOptionsLUKSAny:
#
# Since: 8.0
##
{ 'struct': 'RbdEncryptionOptionsLUKSAny',
  'base': 'RbdEncryptionOptionsLUKSBase',
  'data': { } }

##
# @RbdEncryptionCreateOptionsLUKS:
#
# Since: 6.1
##
{ 'struct': 'RbdEncryptionCreateOptionsLUKS',
  'base': 'RbdEncryptionCreateOptionsLUKSBase',
  'data': { } }

##
# @RbdEncryptionCreateOptionsLUKS2:
#
# Since: 6.1
##
{ 'struct': 'RbdEncryptionCreateOptionsLUKS2',
  'base': 'RbdEncryptionCreateOptionsLUKSBase',
  'data': { } }

##
# @RbdEncryptionOptions:
#
# @format: Encryption format.
#
# @parent: Parent image encryption options (for cloned images).  Can
#     be left unspecified if this cloned image is encrypted using the
#     same format and secret as its parent image (i.e. not explicitly
#     formatted) or if its parent image is not encrypted.  (Since 8.0)
#
# Since: 6.1
##
{ 'union': 'RbdEncryptionOptions',
  'base': { 'format': 'RbdImageEncryptionFormat',
            '*parent': 'RbdEncryptionOptions' },
  'discriminator': 'format',
  'data': { 'luks': 'RbdEncryptionOptionsLUKS',
            'luks2': 'RbdEncryptionOptionsLUKS2',
            'luks-any': 'RbdEncryptionOptionsLUKSAny'} }

##
# @RbdEncryptionCreateOptions:
#
# Since: 6.1
##
{ 'union': 'RbdEncryptionCreateOptions',
  'base': { 'format': 'RbdImageEncryptionFormat' },
  'discriminator': 'format',
  'data': { 'luks': 'RbdEncryptionCreateOptionsLUKS',
            'luks2': 'RbdEncryptionCreateOptionsLUKS2' } }

##
# @BlockdevOptionsRbd:
#
# @pool: Ceph pool name.
#
# @namespace: Rados namespace name in the Ceph pool.  (Since 5.0)
#
# @image: Image name in the Ceph pool.
#
# @conf: path to Ceph configuration file.  Values in the configuration
#     file will be overridden by options specified via QAPI.
#
# @snapshot: Ceph snapshot name.
#
# @encrypt: Image encryption options.  (Since 6.1)
#
# @user: Ceph id name.
#
# @auth-client-required: Acceptable authentication modes.  This maps
#     to Ceph configuration option "auth_client_required".  (Since
#     3.0)
#
# @key-secret: ID of a QCryptoSecret object providing a key for cephx
#     authentication.  This maps to Ceph configuration option "key".
#     (Since 3.0)
#
# @server: Monitor host address and port.  This maps to the "mon_host"
#     Ceph option.
#
# Since: 2.9
##
{ 'struct': 'BlockdevOptionsRbd',
  'data': { 'pool': 'str',
            '*namespace': 'str',
            'image': 'str',
            '*conf': 'str',
            '*snapshot': 'str',
            '*encrypt': 'RbdEncryptionOptions',
            '*user': 'str',
            '*auth-client-required': ['RbdAuthMode'],
            '*key-secret': 'str',
            '*server': ['InetSocketAddressBase'] } }

##
# @ReplicationMode:
#
# An enumeration of replication modes.
#
# @primary: Primary mode, the vm's state will be sent to secondary
#     QEMU.
#
# @secondary: Secondary mode, receive the vm's state from primary
#     QEMU.
#
# Since: 2.9
##
{ 'enum' : 'ReplicationMode', 'data' : [ 'primary', 'secondary' ],
  'if': 'CONFIG_REPLICATION' }

##
# @BlockdevOptionsReplication:
#
# Driver specific block device options for replication
#
# @mode: the replication mode
#
# @top-id: In secondary mode, node name or device ID of the root node
#     who owns the replication node chain.  Must not be given in
#     primary mode.
#
# Since: 2.9
##
{ 'struct': 'BlockdevOptionsReplication',
  'base': 'BlockdevOptionsGenericFormat',
  'data': { 'mode': 'ReplicationMode',
            '*top-id': 'str' },
  'if': 'CONFIG_REPLICATION' }

##
# @NFSTransport:
#
# An enumeration of NFS transport types
#
# @inet: TCP transport
#
# Since: 2.9
##
{ 'enum': 'NFSTransport',
  'data': [ 'inet' ] }

##
# @NFSServer:
#
# Captures the address of the socket
#
# @type: transport type used for NFS (only TCP supported)
#
# @host: host address for NFS server
#
# Since: 2.9
##
{ 'struct': 'NFSServer',
  'data': { 'type': 'NFSTransport',
            'host': 'str' } }

##
# @BlockdevOptionsNfs:
#
# Driver specific block device option for NFS
#
# @server: host address
#
# @path: path of the image on the host
#
# @user: UID value to use when talking to the server (defaults to
#     65534 on Windows and getuid() on unix)
#
# @group: GID value to use when talking to the server (defaults to
#     65534 on Windows and getgid() in unix)
#
# @tcp-syn-count: number of SYNs during the session establishment
#     (defaults to libnfs default)
#
# @readahead-size: set the readahead size in bytes (defaults to libnfs
#     default)
#
# @page-cache-size: set the pagecache size in bytes (defaults to
#     libnfs default)
#
# @debug: set the NFS debug level (max 2) (defaults to libnfs default)
#
# Since: 2.9
##
{ 'struct': 'BlockdevOptionsNfs',
  'data': { 'server': 'NFSServer',
            'path': 'str',
            '*user': 'int',
            '*group': 'int',
            '*tcp-syn-count': 'int',
            '*readahead-size': 'int',
            '*page-cache-size': 'int',
            '*debug': 'int' } }

##
# @BlockdevOptionsCurlBase:
#
# Driver specific block device options shared by all protocols
# supported by the curl backend.
#
# @url: URL of the image file
#
# @readahead: Size of the read-ahead cache; must be a multiple of 512
#     (defaults to 256 kB)
#
# @timeout: Timeout for connections, in seconds (defaults to 5)
#
# @username: Username for authentication (defaults to none)
#
# @password-secret: ID of a QCryptoSecret object providing a password
#     for authentication (defaults to no password)
#
# @proxy-username: Username for proxy authentication (defaults to
#     none)
#
# @proxy-password-secret: ID of a QCryptoSecret object providing a
#     password for proxy authentication (defaults to no password)
#
# Since: 2.9
##
{ 'struct': 'BlockdevOptionsCurlBase',
  'data': { 'url': 'str',
            '*readahead': 'int',
            '*timeout': 'int',
            '*username': 'str',
            '*password-secret': 'str',
            '*proxy-username': 'str',
            '*proxy-password-secret': 'str' } }

##
# @BlockdevOptionsCurlHttp:
#
# Driver specific block device options for HTTP connections over the
# curl backend.  URLs must start with "http://".
#
# @cookie: List of cookies to set; format is "name1=content1;
#     name2=content2;" as explained by CURLOPT_COOKIE(3). Defaults to
#     no cookies.
#
# @cookie-secret: ID of a QCryptoSecret object providing the cookie
#     data in a secure way.  See @cookie for the format.  (since 2.10)
#
# Since: 2.9
##
{ 'struct': 'BlockdevOptionsCurlHttp',
  'base': 'BlockdevOptionsCurlBase',
  'data': { '*cookie': 'str',
            '*cookie-secret': 'str'} }

##
# @BlockdevOptionsCurlHttps:
#
# Driver specific block device options for HTTPS connections over the
# curl backend.  URLs must start with "https://".
#
# @cookie: List of cookies to set; format is "name1=content1;
#     name2=content2;" as explained by CURLOPT_COOKIE(3). Defaults to
#     no cookies.
#
# @sslverify: Whether to verify the SSL certificate's validity
#     (defaults to true)
#
# @cookie-secret: ID of a QCryptoSecret object providing the cookie
#     data in a secure way.  See @cookie for the format.  (since 2.10)
#
# Since: 2.9
##
{ 'struct': 'BlockdevOptionsCurlHttps',
  'base': 'BlockdevOptionsCurlBase',
  'data': { '*cookie': 'str',
            '*sslverify': 'bool',
            '*cookie-secret': 'str'} }

##
# @BlockdevOptionsCurlFtp:
#
# Driver specific block device options for FTP connections over the
# curl backend.  URLs must start with "ftp://".
#
# Since: 2.9
##
{ 'struct': 'BlockdevOptionsCurlFtp',
  'base': 'BlockdevOptionsCurlBase',
  'data': { } }

##
# @BlockdevOptionsCurlFtps:
#
# Driver specific block device options for FTPS connections over the
# curl backend.  URLs must start with "ftps://".
#
# @sslverify: Whether to verify the SSL certificate's validity
#     (defaults to true)
#
# Since: 2.9
##
{ 'struct': 'BlockdevOptionsCurlFtps',
  'base': 'BlockdevOptionsCurlBase',
  'data': { '*sslverify': 'bool' } }

##
# @BlockdevOptionsNbd:
#
# Driver specific block device options for NBD.
#
# @server: NBD server address
#
# @export: export name
#
# @tls-creds: TLS credentials ID
#
# @tls-hostname: TLS hostname override for certificate validation
#     (Since 7.0)
#
# @x-dirty-bitmap: A metadata context name such as
#     "qemu:dirty-bitmap:NAME" or "qemu:allocation-depth" to query in
#     place of the traditional "base:allocation" block status (see
#     NBD_OPT_LIST_META_CONTEXT in the NBD protocol; and yes, naming
#     this option x-context would have made more sense) (since 3.0)
#
# @reconnect-delay: On an unexpected disconnect, the nbd client tries
#     to connect again until succeeding or encountering a serious
#     error.  During the first @reconnect-delay seconds, all requests
#     are paused and will be rerun on a successful reconnect.  After
#     that time, any delayed requests and all future requests before a
#     successful reconnect will immediately fail.  Default 0 (Since
#     4.2)
#
# @open-timeout: In seconds.  If zero, the nbd driver tries the
#     connection only once, and fails to open if the connection fails.
#     If non-zero, the nbd driver will repeat connection attempts
#     until successful or until @open-timeout seconds have elapsed.
#     Default 0 (Since 7.0)
#
# Features:
#
# @unstable: Member @x-dirty-bitmap is experimental.
#
# Since: 2.9
##
{ 'struct': 'BlockdevOptionsNbd',
  'data': { 'server': 'SocketAddress',
            '*export': 'str',
            '*tls-creds': 'str',
            '*tls-hostname': 'str',
            '*x-dirty-bitmap': { 'type': 'str', 'features': [ 'unstable' ] },
            '*reconnect-delay': 'uint32',
            '*open-timeout': 'uint32' } }

##
# @BlockdevOptionsRaw:
#
# Driver specific block device options for the raw driver.
#
# @offset: position where the block device starts
#
# @size: the assumed size of the device
#
# Since: 2.9
##
{ 'struct': 'BlockdevOptionsRaw',
  'base': 'BlockdevOptionsGenericFormat',
  'data': { '*offset': 'int', '*size': 'int' } }

##
# @BlockdevOptionsThrottle:
#
# Driver specific block device options for the throttle driver
#
# @throttle-group: the name of the throttle-group object to use.  It
#     must already exist.
#
# @file: reference to or definition of the data source block device
#
# Since: 2.11
##
{ 'struct': 'BlockdevOptionsThrottle',
  'data': { 'throttle-group': 'str',
            'file' : 'BlockdevRef'
             } }

##
# @BlockdevOptionsCor:
#
# Driver specific block device options for the copy-on-read driver.
#
# @bottom: The name of a non-filter node (allocation-bearing layer)
#     that limits the COR operations in the backing chain (inclusive),
#     so that no data below this node will be copied by this filter.
#     If option is absent, the limit is not applied, so that data from
#     all backing layers may be copied.
#
# Since: 6.0
##
{ 'struct': 'BlockdevOptionsCor',
  'base': 'BlockdevOptionsGenericFormat',
  'data': { '*bottom': 'str' } }

##
# @OnCbwError:
#
# An enumeration of possible behaviors for copy-before-write operation
# failures.
#
# @break-guest-write: report the error to the guest.  This way, the
#     guest will not be able to overwrite areas that cannot be backed
#     up, so the backup process remains valid.
#
# @break-snapshot: continue guest write.  Doing so will make the
#     provided snapshot state invalid and any backup or export process
#     based on it will finally fail.
#
# Since: 7.1
##
{ 'enum': 'OnCbwError',
  'data': [ 'break-guest-write', 'break-snapshot' ] }

##
# @BlockdevOptionsCbw:
#
# Driver specific block device options for the copy-before-write
# driver, which does so called copy-before-write operations: when data
# is written to the filter, the filter first reads corresponding
# blocks from its file child and copies them to @target child.  After
# successfully copying, the write request is propagated to file child.
# If copying fails, the original write request is failed too and no
# data is written to file child.
#
# @target: The target for copy-before-write operations.
#
# @bitmap: If specified, copy-before-write filter will do
#     copy-before-write operations only for dirty regions of the
#     bitmap.  Bitmap size must be equal to length of file and target
#     child of the filter.  Note also, that bitmap is used only to
#     initialize internal bitmap of the process, so further
#     modifications (or removing) of specified bitmap doesn't
#     influence the filter.  (Since 7.0)
#
# @on-cbw-error: Behavior on failure of copy-before-write operation.
#     Default is @break-guest-write.  (Since 7.1)
#
# @cbw-timeout: Zero means no limit.  Non-zero sets the timeout in
#     seconds for copy-before-write operation.  When a timeout occurs,
#     the respective copy-before-write operation will fail, and the
#     @on-cbw-error parameter will decide how this failure is handled.
#     Default 0. (Since 7.1)
#
# Since: 6.2
##
{ 'struct': 'BlockdevOptionsCbw',
  'base': 'BlockdevOptionsGenericFormat',
  'data': { 'target': 'BlockdevRef', '*bitmap': 'BlockDirtyBitmap',
            '*on-cbw-error': 'OnCbwError', '*cbw-timeout': 'uint32' } }

##
# @BlockdevOptions:
#
# Options for creating a block device.  Many options are available for
# all block devices, independent of the block driver:
#
# @driver: block driver name
#
# @node-name: the node name of the new node (Since 2.0). This option
#     is required on the top level of blockdev-add.  Valid node names
#     start with an alphabetic character and may contain only
#     alphanumeric characters, '-', '.' and '_'. Their maximum length
#     is 31 characters.
#
# @discard: discard-related options (default: ignore)
#
# @cache: cache-related options
#
# @read-only: whether the block device should be read-only (default:
#     false). Note that some block drivers support only read-only
#     access, either generally or in certain configurations.  In this
#     case, the default value does not work and the option must be
#     specified explicitly.
#
# @auto-read-only: if true and @read-only is false, QEMU may
#     automatically decide not to open the image read-write as
#     requested, but fall back to read-only instead (and switch
#     between the modes later), e.g. depending on whether the image
#     file is writable or whether a writing user is attached to the
#     node (default: false, since 3.1)
#
# @detect-zeroes: detect and optimize zero writes (Since 2.1)
#     (default: off)
#
# @force-share: force share all permission on added nodes.  Requires
#     read-only=true.  (Since 2.10)
#
# Remaining options are determined by the block driver.
#
# Since: 2.9
##
{ 'union': 'BlockdevOptions',
  'base': { 'driver': 'BlockdevDriver',
            '*node-name': 'str',
            '*discard': 'BlockdevDiscardOptions',
            '*cache': 'BlockdevCacheOptions',
            '*read-only': 'bool',
            '*auto-read-only': 'bool',
            '*force-share': 'bool',
            '*detect-zeroes': 'BlockdevDetectZeroesOptions' },
  'discriminator': 'driver',
  'data': {
      'blkdebug':   'BlockdevOptionsBlkdebug',
      'blklogwrites':'BlockdevOptionsBlklogwrites',
      'blkverify':  'BlockdevOptionsBlkverify',
      'blkreplay':  'BlockdevOptionsBlkreplay',
      'bochs':      'BlockdevOptionsGenericFormat',
      'cloop':      'BlockdevOptionsGenericFormat',
      'compress':   'BlockdevOptionsGenericFormat',
      'copy-before-write':'BlockdevOptionsCbw',
      'copy-on-read':'BlockdevOptionsCor',
      'dmg':        'BlockdevOptionsGenericFormat',
      'file':       'BlockdevOptionsFile',
      'ftp':        'BlockdevOptionsCurlFtp',
      'ftps':       'BlockdevOptionsCurlFtps',
      'gluster':    'BlockdevOptionsGluster',
      'host_cdrom':  { 'type': 'BlockdevOptionsFile',
                       'if': 'HAVE_HOST_BLOCK_DEVICE' },
      'host_device': { 'type': 'BlockdevOptionsFile',
                       'if': 'HAVE_HOST_BLOCK_DEVICE' },
      'http':       'BlockdevOptionsCurlHttp',
      'https':      'BlockdevOptionsCurlHttps',
      'io_uring':   { 'type': 'BlockdevOptionsIoUring',
                      'if': 'CONFIG_BLKIO' },
      'iscsi':      'BlockdevOptionsIscsi',
      'luks':       'BlockdevOptionsLUKS',
      'nbd':        'BlockdevOptionsNbd',
      'nfs':        'BlockdevOptionsNfs',
      'null-aio':   'BlockdevOptionsNull',
      'null-co':    'BlockdevOptionsNull',
      'nvme':       'BlockdevOptionsNVMe',
      'nvme-io_uring': { 'type': 'BlockdevOptionsNvmeIoUring',
                         'if': 'CONFIG_BLKIO' },
      'parallels':  'BlockdevOptionsGenericFormat',
      'preallocate':'BlockdevOptionsPreallocate',
      'qcow2':      'BlockdevOptionsQcow2',
      'qcow':       'BlockdevOptionsQcow',
      'qed':        'BlockdevOptionsGenericCOWFormat',
      'quorum':     'BlockdevOptionsQuorum',
      'raw':        'BlockdevOptionsRaw',
      'rbd':        'BlockdevOptionsRbd',
      'replication': { 'type': 'BlockdevOptionsReplication',
                       'if': 'CONFIG_REPLICATION' },
      'snapshot-access': 'BlockdevOptionsGenericFormat',
      'ssh':        'BlockdevOptionsSsh',
      'throttle':   'BlockdevOptionsThrottle',
      'vdi':        'BlockdevOptionsGenericFormat',
      'vhdx':       'BlockdevOptionsGenericFormat',
      'virtio-blk-vfio-pci':
                    { 'type': 'BlockdevOptionsVirtioBlkVfioPci',
                      'if': 'CONFIG_BLKIO' },
      'virtio-blk-vhost-user':
                    { 'type': 'BlockdevOptionsVirtioBlkVhostUser',
                      'if': 'CONFIG_BLKIO' },
      'virtio-blk-vhost-vdpa':
                    { 'type': 'BlockdevOptionsVirtioBlkVhostVdpa',
                      'if': 'CONFIG_BLKIO' },
      'vmdk':       'BlockdevOptionsGenericCOWFormat',
      'vpc':        'BlockdevOptionsGenericFormat',
      'vvfat':      'BlockdevOptionsVVFAT'
  } }

##
# @BlockdevRef:
#
# Reference to a block device.
#
# @definition: defines a new block device inline
#
# @reference: references the ID of an existing block device
#
# Since: 2.9
##
{ 'alternate': 'BlockdevRef',
  'data': { 'definition': 'BlockdevOptions',
            'reference': 'str' } }

##
# @BlockdevRefOrNull:
#
# Reference to a block device.
#
# @definition: defines a new block device inline
#
# @reference: references the ID of an existing block device.  An empty
#     string means that no block device should be referenced.
#     Deprecated; use null instead.
#
# @null: No block device should be referenced (since 2.10)
#
# Since: 2.9
##
{ 'alternate': 'BlockdevRefOrNull',
  'data': { 'definition': 'BlockdevOptions',
            'reference': 'str',
            'null': 'null' } }

##
# @blockdev-add:
#
# Creates a new block device.
#
# Since: 2.9
#
# Examples:
#
# -> { "execute": "blockdev-add",
#      "arguments": {
#           "driver": "qcow2",
#           "node-name": "test1",
#           "file": {
#               "driver": "file",
#               "filename": "test.qcow2"
#            }
#       }
#     }
# <- { "return": {} }
#
# -> { "execute": "blockdev-add",
#      "arguments": {
#           "driver": "qcow2",
#           "node-name": "node0",
#           "discard": "unmap",
#           "cache": {
#              "direct": true
#            },
#            "file": {
#              "driver": "file",
#              "filename": "/tmp/test.qcow2"
#            },
#            "backing": {
#               "driver": "raw",
#               "file": {
#                  "driver": "file",
#                  "filename": "/dev/fdset/4"
#                }
#            }
#        }
#      }
#
# <- { "return": {} }
##
{ 'command': 'blockdev-add', 'data': 'BlockdevOptions', 'boxed': true,
  'allow-preconfig': true }

##
# @blockdev-reopen:
#
# Reopens one or more block devices using the given set of options.
# Any option not specified will be reset to its default value
# regardless of its previous status.  If an option cannot be changed
# or a particular driver does not support reopening then the command
# will return an error.  All devices in the list are reopened in one
# transaction, so if one of them fails then the whole transaction is
# cancelled.
#
# The command receives a list of block devices to reopen.  For each
# one of them, the top-level @node-name option (from BlockdevOptions)
# must be specified and is used to select the block device to be
# reopened.  Other @node-name options must be either omitted or set to
# the current name of the appropriate node.  This command won't change
# any node name and any attempt to do it will result in an error.
#
# In the case of options that refer to child nodes, the behavior of
# this command depends on the value:
#
#  1) A set of options (BlockdevOptions): the child is reopened with
#     the specified set of options.
#
#  2) A reference to the current child: the child is reopened using
#     its existing set of options.
#
#  3) A reference to a different node: the current child is replaced
#     with the specified one.
#
#  4) NULL: the current child (if any) is detached.
#
# Options (1) and (2) are supported in all cases.  Option (3) is
# supported for @file and @backing, and option (4) for @backing only.
#
# Unlike with blockdev-add, the @backing option must always be present
# unless the node being reopened does not have a backing file and its
# image does not have a default backing file name as part of its
# metadata.
#
# Since: 6.1
##
{ 'command': 'blockdev-reopen',
  'data': { 'options': ['BlockdevOptions'] },
  'allow-preconfig': true }

##
# @blockdev-del:
#
# Deletes a block device that has been added using blockdev-add.  The
# command will fail if the node is attached to a device or is
# otherwise being used.
#
# @node-name: Name of the graph node to delete.
#
# Since: 2.9
#
# Example:
#
# -> { "execute": "blockdev-add",
#      "arguments": {
#           "driver": "qcow2",
#           "node-name": "node0",
#           "file": {
#               "driver": "file",
#               "filename": "test.qcow2"
#           }
#      }
#    }
# <- { "return": {} }
#
# -> { "execute": "blockdev-del",
#      "arguments": { "node-name": "node0" }
#    }
# <- { "return": {} }
##
{ 'command': 'blockdev-del', 'data': { 'node-name': 'str' },
  'allow-preconfig': true }

##
# @BlockdevCreateOptionsFile:
#
# Driver specific image creation options for file.
#
# @filename: Filename for the new image file
#
# @size: Size of the virtual disk in bytes
#
# @preallocation: Preallocation mode for the new image (default: off;
#     allowed values: off, falloc (if CONFIG_POSIX_FALLOCATE), full
#     (if CONFIG_POSIX))
#
# @nocow: Turn off copy-on-write (valid only on btrfs; default: off)
#
# @extent-size-hint: Extent size hint to add to the image file; 0 for
#     not adding an extent size hint (default: 1 MB, since 5.1)
#
# Since: 2.12
##
{ 'struct': 'BlockdevCreateOptionsFile',
  'data': { 'filename':             'str',
            'size':                 'size',
            '*preallocation':       'PreallocMode',
            '*nocow':               'bool',
            '*extent-size-hint':    'size'} }

##
# @BlockdevCreateOptionsGluster:
#
# Driver specific image creation options for gluster.
#
# @location: Where to store the new image file
#
# @size: Size of the virtual disk in bytes
#
# @preallocation: Preallocation mode for the new image (default: off;
#     allowed values: off, falloc (if CONFIG_GLUSTERFS_FALLOCATE),
#     full (if CONFIG_GLUSTERFS_ZEROFILL))
#
# Since: 2.12
##
{ 'struct': 'BlockdevCreateOptionsGluster',
  'data': { 'location':         'BlockdevOptionsGluster',
            'size':             'size',
            '*preallocation':   'PreallocMode' } }

##
# @BlockdevCreateOptionsLUKS:
#
# Driver specific image creation options for LUKS.
#
# @file: Node to create the image format on
#
# @size: Size of the virtual disk in bytes
#
# @preallocation: Preallocation mode for the new image (since: 4.2)
#     (default: off; allowed values: off, metadata, falloc, full)
#
# Since: 2.12
##
{ 'struct': 'BlockdevCreateOptionsLUKS',
  'base': 'QCryptoBlockCreateOptionsLUKS',
  'data': { 'file':             'BlockdevRef',
            'size':             'size',
            '*preallocation':   'PreallocMode' } }

##
# @BlockdevCreateOptionsNfs:
#
# Driver specific image creation options for NFS.
#
# @location: Where to store the new image file
#
# @size: Size of the virtual disk in bytes
#
# Since: 2.12
##
{ 'struct': 'BlockdevCreateOptionsNfs',
  'data': { 'location':         'BlockdevOptionsNfs',
            'size':             'size' } }

##
# @BlockdevCreateOptionsParallels:
#
# Driver specific image creation options for parallels.
#
# @file: Node to create the image format on
#
# @size: Size of the virtual disk in bytes
#
# @cluster-size: Cluster size in bytes (default: 1 MB)
#
# Since: 2.12
##
{ 'struct': 'BlockdevCreateOptionsParallels',
  'data': { 'file':             'BlockdevRef',
            'size':             'size',
            '*cluster-size':    'size' } }

##
# @BlockdevCreateOptionsQcow:
#
# Driver specific image creation options for qcow.
#
# @file: Node to create the image format on
#
# @size: Size of the virtual disk in bytes
#
# @backing-file: File name of the backing file if a backing file
#     should be used
#
# @encrypt: Encryption options if the image should be encrypted
#
# Since: 2.12
##
{ 'struct': 'BlockdevCreateOptionsQcow',
  'data': { 'file':             'BlockdevRef',
            'size':             'size',
            '*backing-file':    'str',
            '*encrypt':         'QCryptoBlockCreateOptions' } }

##
# @BlockdevQcow2Version:
#
# @v2: The original QCOW2 format as introduced in qemu 0.10 (version
#     2)
#
# @v3: The extended QCOW2 format as introduced in qemu 1.1 (version 3)
#
# Since: 2.12
##
{ 'enum': 'BlockdevQcow2Version',
  'data': [ 'v2', 'v3' ] }

##
# @Qcow2CompressionType:
#
# Compression type used in qcow2 image file
#
# @zlib: zlib compression, see <http://zlib.net/>
#
# @zstd: zstd compression, see <http://github.com/facebook/zstd>
#
# Since: 5.1
##
{ 'enum': 'Qcow2CompressionType',
  'data': [ 'zlib', { 'name': 'zstd', 'if': 'CONFIG_ZSTD' } ] }

##
# @BlockdevCreateOptionsQcow2:
#
# Driver specific image creation options for qcow2.
#
# @file: Node to create the image format on
#
# @data-file: Node to use as an external data file in which all guest
#     data is stored so that only metadata remains in the qcow2 file
#     (since: 4.0)
#
# @data-file-raw: True if the external data file must stay valid as a
#     standalone (read-only) raw image without looking at qcow2
#     metadata (default: false; since: 4.0)
#
# @extended-l2: True to make the image have extended L2 entries
#     (default: false; since 5.2)
#
# @size: Size of the virtual disk in bytes
#
# @version: Compatibility level (default: v3)
#
# @backing-file: File name of the backing file if a backing file
#     should be used
#
# @backing-fmt: Name of the block driver to use for the backing file
#
# @encrypt: Encryption options if the image should be encrypted
#
# @cluster-size: qcow2 cluster size in bytes (default: 65536)
#
# @preallocation: Preallocation mode for the new image (default: off;
#     allowed values: off, falloc, full, metadata)
#
# @lazy-refcounts: True if refcounts may be updated lazily
#     (default: off)
#
# @refcount-bits: Width of reference counts in bits (default: 16)
#
# @compression-type: The image cluster compression method
#     (default: zlib, since 5.1)
#
# Since: 2.12
##
{ 'struct': 'BlockdevCreateOptionsQcow2',
  'data': { 'file':             'BlockdevRef',
            '*data-file':       'BlockdevRef',
            '*data-file-raw':   'bool',
            '*extended-l2':     'bool',
            'size':             'size',
            '*version':         'BlockdevQcow2Version',
            '*backing-file':    'str',
            '*backing-fmt':     'BlockdevDriver',
            '*encrypt':         'QCryptoBlockCreateOptions',
            '*cluster-size':    'size',
            '*preallocation':   'PreallocMode',
            '*lazy-refcounts':  'bool',
            '*refcount-bits':   'int',
            '*compression-type':'Qcow2CompressionType' } }

##
# @BlockdevCreateOptionsQed:
#
# Driver specific image creation options for qed.
#
# @file: Node to create the image format on
#
# @size: Size of the virtual disk in bytes
#
# @backing-file: File name of the backing file if a backing file
#     should be used
#
# @backing-fmt: Name of the block driver to use for the backing file
#
# @cluster-size: Cluster size in bytes (default: 65536)
#
# @table-size: L1/L2 table size (in clusters)
#
# Since: 2.12
##
{ 'struct': 'BlockdevCreateOptionsQed',
  'data': { 'file':             'BlockdevRef',
            'size':             'size',
            '*backing-file':    'str',
            '*backing-fmt':     'BlockdevDriver',
            '*cluster-size':    'size',
            '*table-size':      'int' } }

##
# @BlockdevCreateOptionsRbd:
#
# Driver specific image creation options for rbd/Ceph.
#
# @location: Where to store the new image file.  This location cannot
#     point to a snapshot.
#
# @size: Size of the virtual disk in bytes
#
# @cluster-size: RBD object size
#
# @encrypt: Image encryption options.  (Since 6.1)
#
# Since: 2.12
##
{ 'struct': 'BlockdevCreateOptionsRbd',
  'data': { 'location':         'BlockdevOptionsRbd',
            'size':             'size',
            '*cluster-size' :   'size',
            '*encrypt' :        'RbdEncryptionCreateOptions' } }

##
# @BlockdevVmdkSubformat:
#
# Subformat options for VMDK images
#
# @monolithicSparse: Single file image with sparse cluster allocation
#
# @monolithicFlat: Single flat data image and a descriptor file
#
# @twoGbMaxExtentSparse: Data is split into 2GB (per virtual LBA)
#     sparse extent files, in addition to a descriptor file
#
# @twoGbMaxExtentFlat: Data is split into 2GB (per virtual LBA) flat
#     extent files, in addition to a descriptor file
#
# @streamOptimized: Single file image sparse cluster allocation,
#     optimized for streaming over network.
#
# Since: 4.0
##
{ 'enum': 'BlockdevVmdkSubformat',
  'data': [ 'monolithicSparse', 'monolithicFlat', 'twoGbMaxExtentSparse',
            'twoGbMaxExtentFlat', 'streamOptimized'] }

##
# @BlockdevVmdkAdapterType:
#
# Adapter type info for VMDK images
#
# Since: 4.0
##
{ 'enum': 'BlockdevVmdkAdapterType',
  'data': [ 'ide', 'buslogic', 'lsilogic', 'legacyESX'] }

##
# @BlockdevCreateOptionsVmdk:
#
# Driver specific image creation options for VMDK.
#
# @file: Where to store the new image file.  This refers to the image
#     file for monolithcSparse and streamOptimized format, or the
#     descriptor file for other formats.
#
# @size: Size of the virtual disk in bytes
#
# @extents: Where to store the data extents.  Required for
#     monolithcFlat, twoGbMaxExtentSparse and twoGbMaxExtentFlat
#     formats.  For monolithicFlat, only one entry is required; for
#     twoGbMaxExtent* formats, the number of entries required is
#     calculated as extent_number = virtual_size / 2GB. Providing more
#     extents than will be used is an error.
#
# @subformat: The subformat of the VMDK image.  Default:
#     "monolithicSparse".
#
# @backing-file: The path of backing file.  Default: no backing file
#     is used.
#
# @adapter-type: The adapter type used to fill in the descriptor.
#     Default: ide.
#
# @hwversion: Hardware version.  The meaningful options are "4" or
#     "6". Default: "4".
#
# @toolsversion: VMware guest tools version.  Default: "2147483647"
#     (Since 6.2)
#
# @zeroed-grain: Whether to enable zeroed-grain feature for sparse
#     subformats.  Default: false.
#
# Since: 4.0
##
{ 'struct': 'BlockdevCreateOptionsVmdk',
  'data': { 'file':             'BlockdevRef',
            'size':             'size',
            '*extents':          ['BlockdevRef'],
            '*subformat':       'BlockdevVmdkSubformat',
            '*backing-file':    'str',
            '*adapter-type':    'BlockdevVmdkAdapterType',
            '*hwversion':       'str',
            '*toolsversion':    'str',
            '*zeroed-grain':    'bool' } }

##
# @BlockdevCreateOptionsSsh:
#
# Driver specific image creation options for SSH.
#
# @location: Where to store the new image file
#
# @size: Size of the virtual disk in bytes
#
# Since: 2.12
##
{ 'struct': 'BlockdevCreateOptionsSsh',
  'data': { 'location':         'BlockdevOptionsSsh',
            'size':             'size' } }

##
# @BlockdevCreateOptionsVdi:
#
# Driver specific image creation options for VDI.
#
# @file: Node to create the image format on
#
# @size: Size of the virtual disk in bytes
#
# @preallocation: Preallocation mode for the new image (default: off;
#     allowed values: off, metadata)
#
# Since: 2.12
##
{ 'struct': 'BlockdevCreateOptionsVdi',
  'data': { 'file':             'BlockdevRef',
            'size':             'size',
            '*preallocation':   'PreallocMode' } }

##
# @BlockdevVhdxSubformat:
#
# @dynamic: Growing image file
#
# @fixed: Preallocated fixed-size image file
#
# Since: 2.12
##
{ 'enum': 'BlockdevVhdxSubformat',
  'data': [ 'dynamic', 'fixed' ] }

##
# @BlockdevCreateOptionsVhdx:
#
# Driver specific image creation options for vhdx.
#
# @file: Node to create the image format on
#
# @size: Size of the virtual disk in bytes
#
# @log-size: Log size in bytes, must be a multiple of 1 MB (default: 1
#     MB)
#
# @block-size: Block size in bytes, must be a multiple of 1 MB and not
#     larger than 256 MB (default: automatically choose a block size
#     depending on the image size)
#
# @subformat: vhdx subformat (default: dynamic)
#
# @block-state-zero: Force use of payload blocks of type
#     'ZERO'. Non-standard, but default.  Do not set to 'off' when
#     using 'qemu-img convert' with subformat=dynamic.
#
# Since: 2.12
##
{ 'struct': 'BlockdevCreateOptionsVhdx',
  'data': { 'file':                 'BlockdevRef',
            'size':                 'size',
            '*log-size':            'size',
            '*block-size':          'size',
            '*subformat':           'BlockdevVhdxSubformat',
            '*block-state-zero':    'bool' } }

##
# @BlockdevVpcSubformat:
#
# @dynamic: Growing image file
#
# @fixed: Preallocated fixed-size image file
#
# Since: 2.12
##
{ 'enum': 'BlockdevVpcSubformat',
  'data': [ 'dynamic', 'fixed' ] }

##
# @BlockdevCreateOptionsVpc:
#
# Driver specific image creation options for vpc (VHD).
#
# @file: Node to create the image format on
#
# @size: Size of the virtual disk in bytes
#
# @subformat: vhdx subformat (default: dynamic)
#
# @force-size: Force use of the exact byte size instead of rounding to
#     the next size that can be represented in CHS geometry
#     (default: false)
#
# Since: 2.12
##
{ 'struct': 'BlockdevCreateOptionsVpc',
  'data': { 'file':                 'BlockdevRef',
            'size':                 'size',
            '*subformat':           'BlockdevVpcSubformat',
            '*force-size':          'bool' } }

##
# @BlockdevCreateOptions:
#
# Options for creating an image format on a given node.
#
# @driver: block driver to create the image format
#
# Since: 2.12
##
{ 'union': 'BlockdevCreateOptions',
  'base': {
      'driver':         'BlockdevDriver' },
  'discriminator': 'driver',
  'data': {
      'file':           'BlockdevCreateOptionsFile',
      'gluster':        'BlockdevCreateOptionsGluster',
      'luks':           'BlockdevCreateOptionsLUKS',
      'nfs':            'BlockdevCreateOptionsNfs',
      'parallels':      'BlockdevCreateOptionsParallels',
      'qcow':           'BlockdevCreateOptionsQcow',
      'qcow2':          'BlockdevCreateOptionsQcow2',
      'qed':            'BlockdevCreateOptionsQed',
      'rbd':            'BlockdevCreateOptionsRbd',
      'ssh':            'BlockdevCreateOptionsSsh',
      'vdi':            'BlockdevCreateOptionsVdi',
      'vhdx':           'BlockdevCreateOptionsVhdx',
      'vmdk':           'BlockdevCreateOptionsVmdk',
      'vpc':            'BlockdevCreateOptionsVpc'
  } }

##
# @blockdev-create:
#
# Starts a job to create an image format on a given node.  The job is
# automatically finalized, but a manual job-dismiss is required.
#
# @job-id: Identifier for the newly created job.
#
# @options: Options for the image creation.
#
# Since: 3.0
##
{ 'command': 'blockdev-create',
  'data': { 'job-id': 'str',
            'options': 'BlockdevCreateOptions' },
  'allow-preconfig': true }

##
# @BlockdevAmendOptionsLUKS:
#
# Driver specific image amend options for LUKS.
#
# Since: 5.1
##
{ 'struct': 'BlockdevAmendOptionsLUKS',
  'base': 'QCryptoBlockAmendOptionsLUKS',
  'data': { }
}

##
# @BlockdevAmendOptionsQcow2:
#
# Driver specific image amend options for qcow2. For now, only
# encryption options can be amended
#
# @encrypt: Encryption options to be amended
#
# Since: 5.1
##
{ 'struct': 'BlockdevAmendOptionsQcow2',
  'data': { '*encrypt':         'QCryptoBlockAmendOptions' } }

##
# @BlockdevAmendOptions:
#
# Options for amending an image format
#
# @driver: Block driver of the node to amend.
#
# Since: 5.1
##
{ 'union': 'BlockdevAmendOptions',
  'base': {
      'driver':         'BlockdevDriver' },
  'discriminator': 'driver',
  'data': {
      'luks':           'BlockdevAmendOptionsLUKS',
      'qcow2':          'BlockdevAmendOptionsQcow2' } }

##
# @x-blockdev-amend:
#
# Starts a job to amend format specific options of an existing open
# block device The job is automatically finalized, but a manual
# job-dismiss is required.
#
# @job-id: Identifier for the newly created job.
#
# @node-name: Name of the block node to work on
#
# @options: Options (driver specific)
#
# @force: Allow unsafe operations, format specific For luks that
#     allows erase of the last active keyslot (permanent loss of
#     data), and replacement of an active keyslot (possible loss of
#     data if IO error happens)
#
# Features:
#
# @unstable: This command is experimental.
#
# Since: 5.1
##
{ 'command': 'x-blockdev-amend',
  'data': { 'job-id': 'str',
            'node-name': 'str',
            'options': 'BlockdevAmendOptions',
            '*force': 'bool' },
  'features': [ 'unstable' ],
  'allow-preconfig': true }

##
# @BlockErrorAction:
#
# An enumeration of action that has been taken when a DISK I/O occurs
#
# @ignore: error has been ignored
#
# @report: error has been reported to the device
#
# @stop: error caused VM to be stopped
#
# Since: 2.1
##
{ 'enum': 'BlockErrorAction',
  'data': [ 'ignore', 'report', 'stop' ] }

##
# @BLOCK_IMAGE_CORRUPTED:
#
# Emitted when a disk image is being marked corrupt.  The image can be
# identified by its device or node name.  The 'device' field is always
# present for compatibility reasons, but it can be empty ("") if the
# image does not have a device name associated.
#
# @device: device name.  This is always present for compatibility
#     reasons, but it can be empty ("") if the image does not have a
#     device name associated.
#
# @node-name: node name (Since: 2.4)
#
# @msg: informative message for human consumption, such as the kind of
#     corruption being detected.  It should not be parsed by machine
#     as it is not guaranteed to be stable
#
# @offset: if the corruption resulted from an image access, this is
#     the host's access offset into the image
#
# @size: if the corruption resulted from an image access, this is the
#     access size
#
# @fatal: if set, the image is marked corrupt and therefore unusable
#     after this event and must be repaired (Since 2.2; before, every
#     BLOCK_IMAGE_CORRUPTED event was fatal)
#
# Note: If action is "stop", a STOP event will eventually follow the
#     BLOCK_IO_ERROR event.
#
# Example:
#
# <- { "event": "BLOCK_IMAGE_CORRUPTED",
#      "data": { "device": "", "node-name": "drive", "fatal": false,
#                "msg": "L2 table offset 0x2a2a2a00 unaligned (L1 index: 0)" },
#      "timestamp": { "seconds": 1648243240, "microseconds": 906060 } }
#
# Since: 1.7
##
{ 'event': 'BLOCK_IMAGE_CORRUPTED',
  'data': { 'device'     : 'str',
            '*node-name' : 'str',
            'msg'        : 'str',
            '*offset'    : 'int',
            '*size'      : 'int',
            'fatal'      : 'bool' } }

##
# @BLOCK_IO_ERROR:
#
# Emitted when a disk I/O error occurs
#
# @device: device name.  This is always present for compatibility
#     reasons, but it can be empty ("") if the image does not have a
#     device name associated.
#
# @node-name: node name.  Note that errors may be reported for the
#     root node that is directly attached to a guest device rather
#     than for the node where the error occurred.  The node name is
#     not present if the drive is empty.  (Since: 2.8)
#
# @operation: I/O operation
#
# @action: action that has been taken
#
# @nospace: true if I/O error was caused due to a no-space condition.
#     This key is only present if query-block's io-status is present,
#     please see query-block documentation for more information
#     (since: 2.2)
#
# @reason: human readable string describing the error cause.  (This
#     field is a debugging aid for humans, it should not be parsed by
#     applications) (since: 2.2)
#
# Note: If action is "stop", a STOP event will eventually follow the
#     BLOCK_IO_ERROR event
#
# Since: 0.13
#
# Example:
#
# <- { "event": "BLOCK_IO_ERROR",
#      "data": { "device": "ide0-hd1",
#                "node-name": "#block212",
#                "operation": "write",
#                "action": "stop",
#                "reason": "No space left on device" },
#      "timestamp": { "seconds": 1265044230, "microseconds": 450486 } }
##
{ 'event': 'BLOCK_IO_ERROR',
  'data': { 'device': 'str', '*node-name': 'str',
            'operation': 'IoOperationType',
            'action': 'BlockErrorAction', '*nospace': 'bool',
            'reason': 'str' } }

##
# @BLOCK_JOB_COMPLETED:
#
# Emitted when a block job has completed
#
# @type: job type
#
# @device: The job identifier.  Originally the device name but other
#     values are allowed since QEMU 2.7
#
# @len: maximum progress value
#
# @offset: current progress value.  On success this is equal to len.
#     On failure this is less than len
#
# @speed: rate limit, bytes per second
#
# @error: error message.  Only present on failure.  This field
#     contains a human-readable error message.  There are no semantics
#     other than that streaming has failed and clients should not try
#     to interpret the error string
#
# Since: 1.1
#
# Example:
#
# <- { "event": "BLOCK_JOB_COMPLETED",
#      "data": { "type": "stream", "device": "virtio-disk0",
#                "len": 10737418240, "offset": 10737418240,
#                "speed": 0 },
#      "timestamp": { "seconds": 1267061043, "microseconds": 959568 } }
##
{ 'event': 'BLOCK_JOB_COMPLETED',
  'data': { 'type'  : 'JobType',
            'device': 'str',
            'len'   : 'int',
            'offset': 'int',
            'speed' : 'int',
            '*error': 'str' } }

##
# @BLOCK_JOB_CANCELLED:
#
# Emitted when a block job has been cancelled
#
# @type: job type
#
# @device: The job identifier.  Originally the device name but other
#     values are allowed since QEMU 2.7
#
# @len: maximum progress value
#
# @offset: current progress value.  On success this is equal to len.
#     On failure this is less than len
#
# @speed: rate limit, bytes per second
#
# Since: 1.1
#
# Example:
#
# <- { "event": "BLOCK_JOB_CANCELLED",
#      "data": { "type": "stream", "device": "virtio-disk0",
#                "len": 10737418240, "offset": 134217728,
#                "speed": 0 },
#      "timestamp": { "seconds": 1267061043, "microseconds": 959568 } }
##
{ 'event': 'BLOCK_JOB_CANCELLED',
  'data': { 'type'  : 'JobType',
            'device': 'str',
            'len'   : 'int',
            'offset': 'int',
            'speed' : 'int' } }

##
# @BLOCK_JOB_ERROR:
#
# Emitted when a block job encounters an error
#
# @device: The job identifier.  Originally the device name but other
#     values are allowed since QEMU 2.7
#
# @operation: I/O operation
#
# @action: action that has been taken
#
# Since: 1.3
#
# Example:
#
# <- { "event": "BLOCK_JOB_ERROR",
#      "data": { "device": "ide0-hd1",
#                "operation": "write",
#                "action": "stop" },
#      "timestamp": { "seconds": 1265044230, "microseconds": 450486 } }
##
{ 'event': 'BLOCK_JOB_ERROR',
  'data': { 'device'   : 'str',
            'operation': 'IoOperationType',
            'action'   : 'BlockErrorAction' } }

##
# @BLOCK_JOB_READY:
#
# Emitted when a block job is ready to complete
#
# @type: job type
#
# @device: The job identifier.  Originally the device name but other
#     values are allowed since QEMU 2.7
#
# @len: maximum progress value
#
# @offset: current progress value.  On success this is equal to len.
#     On failure this is less than len
#
# @speed: rate limit, bytes per second
#
# Note: The "ready to complete" status is always reset by a
#     @BLOCK_JOB_ERROR event
#
# Since: 1.3
#
# Example:
#
# <- { "event": "BLOCK_JOB_READY",
#      "data": { "device": "drive0", "type": "mirror", "speed": 0,
#                "len": 2097152, "offset": 2097152 },
#      "timestamp": { "seconds": 1265044230, "microseconds": 450486 } }
##
{ 'event': 'BLOCK_JOB_READY',
  'data': { 'type'  : 'JobType',
            'device': 'str',
            'len'   : 'int',
            'offset': 'int',
            'speed' : 'int' } }

##
# @BLOCK_JOB_PENDING:
#
# Emitted when a block job is awaiting explicit authorization to
# finalize graph changes via @block-job-finalize.  If this job is part
# of a transaction, it will not emit this event until the transaction
# has converged first.
#
# @type: job type
#
# @id: The job identifier.
#
# Since: 2.12
#
# Example:
#
# <- { "event": "BLOCK_JOB_PENDING",
#      "data": { "type": "mirror", "id": "backup_1" },
#      "timestamp": { "seconds": 1265044230, "microseconds": 450486 } }
##
{ 'event': 'BLOCK_JOB_PENDING',
  'data': { 'type'  : 'JobType',
            'id'    : 'str' } }

##
# @PreallocMode:
#
# Preallocation mode of QEMU image file
#
# @off: no preallocation
#
# @metadata: preallocate only for metadata
#
# @falloc: like @full preallocation but allocate disk space by
#     posix_fallocate() rather than writing data.
#
# @full: preallocate all data by writing it to the device to ensure
#     disk space is really available.  This data may or may not be
#     zero, depending on the image format and storage.  @full
#     preallocation also sets up metadata correctly.
#
# Since: 2.2
##
{ 'enum': 'PreallocMode',
  'data': [ 'off', 'metadata', 'falloc', 'full' ] }

##
# @BLOCK_WRITE_THRESHOLD:
#
# Emitted when writes on block device reaches or exceeds the
# configured write threshold.  For thin-provisioned devices, this
# means the device should be extended to avoid pausing for disk
# exhaustion.  The event is one shot.  Once triggered, it needs to be
# re-registered with another block-set-write-threshold command.
#
# @node-name: graph node name on which the threshold was exceeded.
#
# @amount-exceeded: amount of data which exceeded the threshold, in
#     bytes.
#
# @write-threshold: last configured threshold, in bytes.
#
# Since: 2.3
##
{ 'event': 'BLOCK_WRITE_THRESHOLD',
  'data': { 'node-name': 'str',
            'amount-exceeded': 'uint64',
            'write-threshold': 'uint64' } }

##
# @block-set-write-threshold:
#
# Change the write threshold for a block drive.  An event will be
# delivered if a write to this block drive crosses the configured
# threshold.  The threshold is an offset, thus must be non-negative.
# Default is no write threshold.  Setting the threshold to zero
# disables it.
#
# This is useful to transparently resize thin-provisioned drives
# without the guest OS noticing.
#
# @node-name: graph node name on which the threshold must be set.
#
# @write-threshold: configured threshold for the block device, bytes.
#     Use 0 to disable the threshold.
#
# Since: 2.3
#
# Example:
#
# -> { "execute": "block-set-write-threshold",
#      "arguments": { "node-name": "mydev",
#                     "write-threshold": 17179869184 } }
# <- { "return": {} }
##
{ 'command': 'block-set-write-threshold',
  'data': { 'node-name': 'str', 'write-threshold': 'uint64' },
  'allow-preconfig': true }

##
# @x-blockdev-change:
#
# Dynamically reconfigure the block driver state graph.  It can be
# used to add, remove, insert or replace a graph node.  Currently only
# the Quorum driver implements this feature to add or remove its
# child.  This is useful to fix a broken quorum child.
#
# If @node is specified, it will be inserted under @parent.  @child
# may not be specified in this case.  If both @parent and @child are
# specified but @node is not, @child will be detached from @parent.
#
# @parent: the id or name of the parent node.
#
# @child: the name of a child under the given parent node.
#
# @node: the name of the node that will be added.
#
# Features:
#
# @unstable: This command is experimental, and its API is not stable.
#     It does not support all kinds of operations, all kinds of
#     children, nor all block drivers.
#
#     FIXME Removing children from a quorum node means introducing
#     gaps in the child indices.  This cannot be represented in the
#     'children' list of BlockdevOptionsQuorum, as returned by
#     .bdrv_refresh_filename().
#
#     Warning: The data in a new quorum child MUST be consistent with
#     that of the rest of the array.
#
# Since: 2.7
#
# Examples:
#
# 1. Add a new node to a quorum
#
# -> { "execute": "blockdev-add",
#      "arguments": {
#          "driver": "raw",
#          "node-name": "new_node",
#          "file": { "driver": "file",
#                    "filename": "test.raw" } } }
# <- { "return": {} }
# -> { "execute": "x-blockdev-change",
#      "arguments": { "parent": "disk1",
#                     "node": "new_node" } }
# <- { "return": {} }
#
# 2. Delete a quorum's node
#
# -> { "execute": "x-blockdev-change",
#      "arguments": { "parent": "disk1",
#                     "child": "children.1" } }
# <- { "return": {} }
##
{ 'command': 'x-blockdev-change',
  'data' : { 'parent': 'str',
             '*child': 'str',
             '*node': 'str' },
  'features': [ 'unstable' ],
  'allow-preconfig': true }

##
# @x-blockdev-set-iothread:
#
# Move @node and its children into the @iothread.  If @iothread is
# null then move @node and its children into the main loop.
#
# The node must not be attached to a BlockBackend.
#
# @node-name: the name of the block driver node
#
# @iothread: the name of the IOThread object or null for the main loop
#
# @force: true if the node and its children should be moved when a
#     BlockBackend is already attached
#
# Features:
#
# @unstable: This command is experimental and intended for test cases
#     that need control over IOThreads only.
#
# Since: 2.12
#
# Examples:
#
# 1. Move a node into an IOThread
#
# -> { "execute": "x-blockdev-set-iothread",
#      "arguments": { "node-name": "disk1",
#                     "iothread": "iothread0" } }
# <- { "return": {} }
#
# 2. Move a node into the main loop
#
# -> { "execute": "x-blockdev-set-iothread",
#      "arguments": { "node-name": "disk1",
#                     "iothread": null } }
# <- { "return": {} }
##
{ 'command': 'x-blockdev-set-iothread',
  'data' : { 'node-name': 'str',
             'iothread': 'StrOrNull',
             '*force': 'bool' },
  'features': [ 'unstable' ],
  'allow-preconfig': true }

##
# @QuorumOpType:
#
# An enumeration of the quorum operation types
#
# @read: read operation
#
# @write: write operation
#
# @flush: flush operation
#
# Since: 2.6
##
{ 'enum': 'QuorumOpType',
  'data': [ 'read', 'write', 'flush' ] }

##
# @QUORUM_FAILURE:
#
# Emitted by the Quorum block driver if it fails to establish a quorum
#
# @reference: device name if defined else node name
#
# @sector-num: number of the first sector of the failed read operation
#
# @sectors-count: failed read operation sector count
#
# Note: This event is rate-limited.
#
# Since: 2.0
#
# Example:
#
# <- { "event": "QUORUM_FAILURE",
#      "data": { "reference": "usr1", "sector-num": 345435, "sectors-count": 5 },
#      "timestamp": { "seconds": 1344522075, "microseconds": 745528 } }
##
{ 'event': 'QUORUM_FAILURE',
  'data': { 'reference': 'str', 'sector-num': 'int', 'sectors-count': 'int' } }

##
# @QUORUM_REPORT_BAD:
#
# Emitted to report a corruption of a Quorum file
#
# @type: quorum operation type (Since 2.6)
#
# @error: error message.  Only present on failure.  This field
#     contains a human-readable error message.  There are no semantics
#     other than that the block layer reported an error and clients
#     should not try to interpret the error string.
#
# @node-name: the graph node name of the block driver state
#
# @sector-num: number of the first sector of the failed read operation
#
# @sectors-count: failed read operation sector count
#
# Note: This event is rate-limited.
#
# Since: 2.0
#
# Examples:
#
# 1. Read operation
#
# <- { "event": "QUORUM_REPORT_BAD",
#      "data": { "node-name": "node0", "sector-num": 345435, "sectors-count": 5,
#                "type": "read" },
#      "timestamp": { "seconds": 1344522075, "microseconds": 745528 } }
#
# 2. Flush operation
#
# <- { "event": "QUORUM_REPORT_BAD",
#      "data": { "node-name": "node0", "sector-num": 0, "sectors-count": 2097120,
#                "type": "flush", "error": "Broken pipe" },
#      "timestamp": { "seconds": 1456406829, "microseconds": 291763 } }
##
{ 'event': 'QUORUM_REPORT_BAD',
  'data': { 'type': 'QuorumOpType', '*error': 'str', 'node-name': 'str',
            'sector-num': 'int', 'sectors-count': 'int' } }

##
# @BlockdevSnapshotInternal:
#
# @device: the device name or node-name of a root node to generate the
#     snapshot from
#
# @name: the name of the internal snapshot to be created
#
# Notes: In transaction, if @name is empty, or any snapshot matching
#     @name exists, the operation will fail.  Only some image formats
#     support it, for example, qcow2, and rbd.
#
# Since: 1.7
##
{ 'struct': 'BlockdevSnapshotInternal',
  'data': { 'device': 'str', 'name': 'str' } }

##
# @blockdev-snapshot-internal-sync:
#
# Synchronously take an internal snapshot of a block device, when the
# format of the image used supports it.  If the name is an empty
# string, or a snapshot with name already exists, the operation will
# fail.
#
# For the arguments, see the documentation of
# BlockdevSnapshotInternal.
#
# Returns:
#     - nothing on success
#     - If @device is not a valid block device, GenericError
#     - If any snapshot matching @name exists, or @name is empty,
#       GenericError
#     - If the format of the image used does not support it,
#       GenericError
#
# Since: 1.7
#
# Example:
#
# -> { "execute": "blockdev-snapshot-internal-sync",
#      "arguments": { "device": "ide-hd0",
#                     "name": "snapshot0" }
#    }
# <- { "return": {} }
##
{ 'command': 'blockdev-snapshot-internal-sync',
  'data': 'BlockdevSnapshotInternal',
  'allow-preconfig': true }

##
# @blockdev-snapshot-delete-internal-sync:
#
# Synchronously delete an internal snapshot of a block device, when
# the format of the image used support it.  The snapshot is identified
# by name or id or both.  One of the name or id is required.  Return
# SnapshotInfo for the successfully deleted snapshot.
#
# @device: the device name or node-name of a root node to delete the
#     snapshot from
#
# @id: optional the snapshot's ID to be deleted
#
# @name: optional the snapshot's name to be deleted
#
# Returns:
#     - SnapshotInfo on success
#     - If @device is not a valid block device, GenericError
#     - If snapshot not found, GenericError
#     - If the format of the image used does not support it,
#       GenericError
#     - If @id and @name are both not specified, GenericError
#
# Since: 1.7
#
# Example:
#
# -> { "execute": "blockdev-snapshot-delete-internal-sync",
#      "arguments": { "device": "ide-hd0",
#                     "name": "snapshot0" }
#    }
# <- { "return": {
#                    "id": "1",
#                    "name": "snapshot0",
#                    "vm-state-size": 0,
#                    "date-sec": 1000012,
#                    "date-nsec": 10,
#                    "vm-clock-sec": 100,
#                    "vm-clock-nsec": 20,
#                    "icount": 220414
#      }
#    }
##
{ 'command': 'blockdev-snapshot-delete-internal-sync',
  'data': { 'device': 'str', '*id': 'str', '*name': 'str'},
  'returns': 'SnapshotInfo',
  'allow-preconfig': true }

##
# @DummyBlockCoreForceArrays:
#
# Not used by QMP; hack to let us use BlockGraphInfoList internally
#
# Since: 8.0
##
{ 'struct': 'DummyBlockCoreForceArrays',
  'data': { 'unused-block-graph-info': ['BlockGraphInfo'] } }
