xref: /openbmc/qemu/qapi/block-core.json (revision e67b7aef7c7f67ecd0282e903e0daff806d5d680)
15db15096SBenoît Canet# -*- Mode: Python -*-
2f7160f32SAndrea Bolognani# vim: filetype=python
3d3a48372SMarc-André Lureau
4d3a48372SMarc-André Lureau##
5f5cf31c5SMarkus Armbruster# == Block core (VM unrelated)
6d3a48372SMarc-André Lureau##
75db15096SBenoît Canet
85db15096SBenoît Canet{ 'include': 'common.json' }
92031c133SMarkus Armbruster{ 'include': 'crypto.json' }
10bf42508fSKevin Wolf{ 'include': 'job.json' }
11a2ff5a48SMarkus Armbruster{ 'include': 'sockets.json' }
121ad166b6SBenoît Canet
131ad166b6SBenoît Canet##
145072f7b3SMarc-André Lureau# @SnapshotInfo:
151ad166b6SBenoît Canet#
161ad166b6SBenoît Canet# @id: unique snapshot id
171ad166b6SBenoît Canet#
181ad166b6SBenoît Canet# @name: user chosen name
191ad166b6SBenoît Canet#
201ad166b6SBenoît Canet# @vm-state-size: size of the VM state
211ad166b6SBenoît Canet#
221ad166b6SBenoît Canet# @date-sec: UTC date of the snapshot in seconds
231ad166b6SBenoît Canet#
241ad166b6SBenoît Canet# @date-nsec: fractional part in nano seconds to be used with date-sec
251ad166b6SBenoît Canet#
261ad166b6SBenoît Canet# @vm-clock-sec: VM clock relative to boot in seconds
271ad166b6SBenoît Canet#
28a937b6aaSMarkus Armbruster# @vm-clock-nsec: fractional part in nano seconds to be used with
29a937b6aaSMarkus Armbruster#     vm-clock-sec
301ad166b6SBenoît Canet#
31a937b6aaSMarkus Armbruster# @icount: Current instruction count.  Appears when execution
32a937b6aaSMarkus Armbruster#     record/replay is enabled.  Used for "time-traveling" to match
33a937b6aaSMarkus Armbruster#     the moment in the recorded execution with the snapshots.  This
34a937b6aaSMarkus Armbruster#     counter may be obtained through @query-replay command (since
35a937b6aaSMarkus Armbruster#     5.2)
36b39847a5SPavel Dovgalyuk#
371ad166b6SBenoît Canet# Since: 1.3
381ad166b6SBenoît Canet##
39895a2a80SEric Blake{ 'struct': 'SnapshotInfo',
401ad166b6SBenoît Canet  'data': { 'id': 'str', 'name': 'str', 'vm-state-size': 'int',
411ad166b6SBenoît Canet            'date-sec': 'int', 'date-nsec': 'int',
42b39847a5SPavel Dovgalyuk            'vm-clock-sec': 'int', 'vm-clock-nsec': 'int',
43b39847a5SPavel Dovgalyuk            '*icount': 'int' } }
441ad166b6SBenoît Canet
451ad166b6SBenoît Canet##
460a12f6f8SDaniel P. Berrange# @ImageInfoSpecificQCow2EncryptionBase:
470a12f6f8SDaniel P. Berrange#
480a12f6f8SDaniel P. Berrange# @format: The encryption format
490a12f6f8SDaniel P. Berrange#
500a12f6f8SDaniel P. Berrange# Since: 2.10
510a12f6f8SDaniel P. Berrange##
520a12f6f8SDaniel P. Berrange{ 'struct': 'ImageInfoSpecificQCow2EncryptionBase',
530a12f6f8SDaniel P. Berrange  'data': { 'format': 'BlockdevQcow2EncryptionFormat'}}
540a12f6f8SDaniel P. Berrange
550a12f6f8SDaniel P. Berrange##
560a12f6f8SDaniel P. Berrange# @ImageInfoSpecificQCow2Encryption:
570a12f6f8SDaniel P. Berrange#
580a12f6f8SDaniel P. Berrange# Since: 2.10
590a12f6f8SDaniel P. Berrange##
600a12f6f8SDaniel P. Berrange{ 'union': 'ImageInfoSpecificQCow2Encryption',
610a12f6f8SDaniel P. Berrange  'base': 'ImageInfoSpecificQCow2EncryptionBase',
620a12f6f8SDaniel P. Berrange  'discriminator': 'format',
6329cd0403SAnton Nefedov  'data': { 'luks': 'QCryptoBlockInfoLUKS' } }
640a12f6f8SDaniel P. Berrange
650a12f6f8SDaniel P. Berrange##
661ad166b6SBenoît Canet# @ImageInfoSpecificQCow2:
671ad166b6SBenoît Canet#
681ad166b6SBenoît Canet# @compat: compatibility level
691ad166b6SBenoît Canet#
70a937b6aaSMarkus Armbruster# @data-file: the filename of the external data file that is stored in
71a937b6aaSMarkus Armbruster#     the image and used as a default for opening the image
72a937b6aaSMarkus Armbruster#     (since: 4.0)
739b890bdcSKevin Wolf#
746c3944dcSKevin Wolf# @data-file-raw: True if the external data file must stay valid as a
756c3944dcSKevin Wolf#     standalone (read-only) raw image without looking at qcow2
766c3944dcSKevin Wolf#     metadata (since: 4.0)
776c3944dcSKevin Wolf#
78a937b6aaSMarkus Armbruster# @extended-l2: true if the image has extended L2 entries; only valid
79a937b6aaSMarkus Armbruster#     for compat >= 1.1 (since 5.2)
807be20252SAlberto Garcia#
811d8bda12SMarkus Armbruster# @lazy-refcounts: on or off; only valid for compat >= 1.1
821ad166b6SBenoît Canet#
831d8bda12SMarkus Armbruster# @corrupt: true if the image has been marked corrupt; only valid for
849009b196SMax Reitz#     compat >= 1.1 (since 2.2)
859009b196SMax Reitz#
860709c5a1SMax Reitz# @refcount-bits: width of a refcount entry in bits (since 2.3)
870709c5a1SMax Reitz#
88a937b6aaSMarkus Armbruster# @encrypt: details about encryption parameters; only set if image is
89a937b6aaSMarkus Armbruster#     encrypted (since 2.10)
900a12f6f8SDaniel P. Berrange#
91b8968c87SAndrey Shinkevich# @bitmaps: A list of qcow2 bitmap details (since 4.0)
92b8968c87SAndrey Shinkevich#
93572ad978SDenis Plotnikov# @compression-type: the image cluster compression method (since 5.1)
94572ad978SDenis Plotnikov#
951ad166b6SBenoît Canet# Since: 1.7
961ad166b6SBenoît Canet##
97895a2a80SEric Blake{ 'struct': 'ImageInfoSpecificQCow2',
981ad166b6SBenoît Canet  'data': {
991ad166b6SBenoît Canet      'compat': 'str',
1009b890bdcSKevin Wolf      '*data-file': 'str',
1016c3944dcSKevin Wolf      '*data-file-raw': 'bool',
1027be20252SAlberto Garcia      '*extended-l2': 'bool',
1039009b196SMax Reitz      '*lazy-refcounts': 'bool',
1040709c5a1SMax Reitz      '*corrupt': 'bool',
1050a12f6f8SDaniel P. Berrange      'refcount-bits': 'int',
106b8968c87SAndrey Shinkevich      '*encrypt': 'ImageInfoSpecificQCow2Encryption',
107572ad978SDenis Plotnikov      '*bitmaps': ['Qcow2BitmapInfo'],
108572ad978SDenis Plotnikov      'compression-type': 'Qcow2CompressionType'
1091ad166b6SBenoît Canet  } }
1101ad166b6SBenoît Canet
1111ad166b6SBenoît Canet##
1121ad166b6SBenoît Canet# @ImageInfoSpecificVmdk:
1131ad166b6SBenoît Canet#
1141ad166b6SBenoît Canet# @create-type: The create type of VMDK image
1151ad166b6SBenoît Canet#
1161ad166b6SBenoît Canet# @cid: Content id of image
1171ad166b6SBenoît Canet#
1181ad166b6SBenoît Canet# @parent-cid: Parent VMDK image's cid
1191ad166b6SBenoît Canet#
1201ad166b6SBenoît Canet# @extents: List of extent files
1211ad166b6SBenoît Canet#
1221ad166b6SBenoît Canet# Since: 1.7
1231ad166b6SBenoît Canet##
124895a2a80SEric Blake{ 'struct': 'ImageInfoSpecificVmdk',
1251ad166b6SBenoît Canet  'data': {
1261ad166b6SBenoît Canet      'create-type': 'str',
1271ad166b6SBenoît Canet      'cid': 'int',
1281ad166b6SBenoît Canet      'parent-cid': 'int',
129456e7517SHanna Reitz      'extents': ['VmdkExtentInfo']
130456e7517SHanna Reitz  } }
131456e7517SHanna Reitz
132456e7517SHanna Reitz##
133456e7517SHanna Reitz# @VmdkExtentInfo:
134456e7517SHanna Reitz#
135456e7517SHanna Reitz# Information about a VMDK extent file
136456e7517SHanna Reitz#
137456e7517SHanna Reitz# @filename: Name of the extent file
138456e7517SHanna Reitz#
139456e7517SHanna Reitz# @format: Extent type (e.g. FLAT or SPARSE)
140456e7517SHanna Reitz#
141456e7517SHanna Reitz# @virtual-size: Number of bytes covered by this extent
142456e7517SHanna Reitz#
143456e7517SHanna Reitz# @cluster-size: Cluster size in bytes (for non-flat extents)
144456e7517SHanna Reitz#
145456e7517SHanna Reitz# @compressed: Whether this extent contains compressed data
146456e7517SHanna Reitz#
147456e7517SHanna Reitz# Since: 8.0
148456e7517SHanna Reitz##
149456e7517SHanna Reitz{ 'struct': 'VmdkExtentInfo',
150456e7517SHanna Reitz  'data': {
151456e7517SHanna Reitz      'filename': 'str',
152456e7517SHanna Reitz      'format': 'str',
153456e7517SHanna Reitz      'virtual-size': 'int',
154456e7517SHanna Reitz      '*cluster-size': 'int',
155456e7517SHanna Reitz      '*compressed': 'bool'
1561ad166b6SBenoît Canet  } }
1571ad166b6SBenoît Canet
1581ad166b6SBenoît Canet##
15942e4ac9eSOr Ozeri# @ImageInfoSpecificRbd:
16042e4ac9eSOr Ozeri#
16142e4ac9eSOr Ozeri# @encryption-format: Image encryption format
16242e4ac9eSOr Ozeri#
16342e4ac9eSOr Ozeri# Since: 6.1
16442e4ac9eSOr Ozeri##
16542e4ac9eSOr Ozeri{ 'struct': 'ImageInfoSpecificRbd',
16642e4ac9eSOr Ozeri  'data': {
16742e4ac9eSOr Ozeri      '*encryption-format': 'RbdImageEncryptionFormat'
16842e4ac9eSOr Ozeri  } }
16942e4ac9eSOr Ozeri
17042e4ac9eSOr Ozeri##
1717f36a50aSHanna Reitz# @ImageInfoSpecificFile:
1727f36a50aSHanna Reitz#
1737f36a50aSHanna Reitz# @extent-size-hint: Extent size hint (if available)
1747f36a50aSHanna Reitz#
1757f36a50aSHanna Reitz# Since: 8.0
1767f36a50aSHanna Reitz##
1777f36a50aSHanna Reitz{ 'struct': 'ImageInfoSpecificFile',
1787f36a50aSHanna Reitz  'data': {
1797f36a50aSHanna Reitz      '*extent-size-hint': 'size'
1807f36a50aSHanna Reitz  } }
1817f36a50aSHanna Reitz
1827f36a50aSHanna Reitz##
1830db4f503SMarkus Armbruster# @ImageInfoSpecificKind:
1840db4f503SMarkus Armbruster#
1850db4f503SMarkus Armbruster# @luks: Since 2.7
186a937b6aaSMarkus Armbruster#
1870db4f503SMarkus Armbruster# @rbd: Since 6.1
188a937b6aaSMarkus Armbruster#
1897f36a50aSHanna Reitz# @file: Since 8.0
1900db4f503SMarkus Armbruster#
1910db4f503SMarkus Armbruster# Since: 1.7
1920db4f503SMarkus Armbruster##
1930db4f503SMarkus Armbruster{ 'enum': 'ImageInfoSpecificKind',
1947f36a50aSHanna Reitz  'data': [ 'qcow2', 'vmdk', 'luks', 'rbd', 'file' ] }
1950db4f503SMarkus Armbruster
1960db4f503SMarkus Armbruster##
1970db4f503SMarkus Armbruster# @ImageInfoSpecificQCow2Wrapper:
1980db4f503SMarkus Armbruster#
1992fecccbcSMarkus Armbruster# @data: image information specific to QCOW2
2002fecccbcSMarkus Armbruster#
2010db4f503SMarkus Armbruster# Since: 1.7
2020db4f503SMarkus Armbruster##
2030db4f503SMarkus Armbruster{ 'struct': 'ImageInfoSpecificQCow2Wrapper',
2040db4f503SMarkus Armbruster  'data': { 'data': 'ImageInfoSpecificQCow2' } }
2050db4f503SMarkus Armbruster
2060db4f503SMarkus Armbruster##
2070db4f503SMarkus Armbruster# @ImageInfoSpecificVmdkWrapper:
2080db4f503SMarkus Armbruster#
2092fecccbcSMarkus Armbruster# @data: image information specific to VMDK
2102fecccbcSMarkus Armbruster#
2110db4f503SMarkus Armbruster# Since: 6.1
2120db4f503SMarkus Armbruster##
2130db4f503SMarkus Armbruster{ 'struct': 'ImageInfoSpecificVmdkWrapper',
2140db4f503SMarkus Armbruster  'data': { 'data': 'ImageInfoSpecificVmdk' } }
2150db4f503SMarkus Armbruster
2160db4f503SMarkus Armbruster##
2170db4f503SMarkus Armbruster# @ImageInfoSpecificLUKSWrapper:
2180db4f503SMarkus Armbruster#
2192fecccbcSMarkus Armbruster# @data: image information specific to LUKS
2202fecccbcSMarkus Armbruster#
2210db4f503SMarkus Armbruster# Since: 2.7
2220db4f503SMarkus Armbruster##
2230db4f503SMarkus Armbruster{ 'struct': 'ImageInfoSpecificLUKSWrapper',
2240db4f503SMarkus Armbruster  'data': { 'data': 'QCryptoBlockInfoLUKS' } }
2250db4f503SMarkus Armbruster# If we need to add block driver specific parameters for
2260db4f503SMarkus Armbruster# LUKS in future, then we'll subclass QCryptoBlockInfoLUKS
2270db4f503SMarkus Armbruster# to define a ImageInfoSpecificLUKS
2280db4f503SMarkus Armbruster
2290db4f503SMarkus Armbruster##
2300db4f503SMarkus Armbruster# @ImageInfoSpecificRbdWrapper:
2310db4f503SMarkus Armbruster#
2322fecccbcSMarkus Armbruster# @data: image information specific to RBD
2332fecccbcSMarkus Armbruster#
2340db4f503SMarkus Armbruster# Since: 6.1
2350db4f503SMarkus Armbruster##
2360db4f503SMarkus Armbruster{ 'struct': 'ImageInfoSpecificRbdWrapper',
2370db4f503SMarkus Armbruster  'data': { 'data': 'ImageInfoSpecificRbd' } }
2380db4f503SMarkus Armbruster
2390db4f503SMarkus Armbruster##
2407f36a50aSHanna Reitz# @ImageInfoSpecificFileWrapper:
2417f36a50aSHanna Reitz#
2422fecccbcSMarkus Armbruster# @data: image information specific to files
2432fecccbcSMarkus Armbruster#
2447f36a50aSHanna Reitz# Since: 8.0
2457f36a50aSHanna Reitz##
2467f36a50aSHanna Reitz{ 'struct': 'ImageInfoSpecificFileWrapper',
2477f36a50aSHanna Reitz  'data': { 'data': 'ImageInfoSpecificFile' } }
2487f36a50aSHanna Reitz
2497f36a50aSHanna Reitz##
2501ad166b6SBenoît Canet# @ImageInfoSpecific:
2511ad166b6SBenoît Canet#
252a937b6aaSMarkus Armbruster# A discriminated record of image format specific information
253a937b6aaSMarkus Armbruster# structures.
2541ad166b6SBenoît Canet#
25589a2273bSMarkus Armbruster# @type: block driver name
25689a2273bSMarkus Armbruster#
2571ad166b6SBenoît Canet# Since: 1.7
2581ad166b6SBenoît Canet##
2591ad166b6SBenoît Canet{ 'union': 'ImageInfoSpecific',
2600db4f503SMarkus Armbruster  'base': { 'type': 'ImageInfoSpecificKind' },
2610db4f503SMarkus Armbruster  'discriminator': 'type',
2621ad166b6SBenoît Canet  'data': {
2630db4f503SMarkus Armbruster      'qcow2': 'ImageInfoSpecificQCow2Wrapper',
2640db4f503SMarkus Armbruster      'vmdk': 'ImageInfoSpecificVmdkWrapper',
2650db4f503SMarkus Armbruster      'luks': 'ImageInfoSpecificLUKSWrapper',
2667f36a50aSHanna Reitz      'rbd': 'ImageInfoSpecificRbdWrapper',
2677f36a50aSHanna Reitz      'file': 'ImageInfoSpecificFileWrapper'
2681ad166b6SBenoît Canet  } }
2691ad166b6SBenoît Canet
2701ad166b6SBenoît Canet##
271a2085f89SHanna Reitz# @BlockNodeInfo:
2721ad166b6SBenoît Canet#
2731ad166b6SBenoît Canet# Information about a QEMU image file
2741ad166b6SBenoît Canet#
2751ad166b6SBenoît Canet# @filename: name of the image file
2761ad166b6SBenoît Canet#
2771ad166b6SBenoît Canet# @format: format of the image file
2781ad166b6SBenoît Canet#
2791ad166b6SBenoît Canet# @virtual-size: maximum capacity in bytes of the image
2801ad166b6SBenoît Canet#
2811d8bda12SMarkus Armbruster# @actual-size: actual size on disk in bytes of the image
2821ad166b6SBenoît Canet#
2831d8bda12SMarkus Armbruster# @dirty-flag: true if image is not cleanly closed
2841ad166b6SBenoît Canet#
2851d8bda12SMarkus Armbruster# @cluster-size: size of a cluster in bytes
2861ad166b6SBenoît Canet#
2871d8bda12SMarkus Armbruster# @encrypted: true if the image is encrypted
2881ad166b6SBenoît Canet#
2891d8bda12SMarkus Armbruster# @compressed: true if the image is compressed (Since 1.7)
2901ad166b6SBenoît Canet#
2911d8bda12SMarkus Armbruster# @backing-filename: name of the backing file
2921ad166b6SBenoît Canet#
2931d8bda12SMarkus Armbruster# @full-backing-filename: full path of the backing file
2941ad166b6SBenoît Canet#
2951d8bda12SMarkus Armbruster# @backing-filename-format: the format of the backing file
2961ad166b6SBenoît Canet#
2971d8bda12SMarkus Armbruster# @snapshots: list of VM snapshots
2981ad166b6SBenoît Canet#
2991d8bda12SMarkus Armbruster# @format-specific: structure supplying additional format-specific
3001ad166b6SBenoît Canet#     information (since 1.7)
3011ad166b6SBenoît Canet#
302a2085f89SHanna Reitz# Since: 8.0
3031ad166b6SBenoît Canet##
304a2085f89SHanna Reitz{ 'struct': 'BlockNodeInfo',
3051ad166b6SBenoît Canet  'data': {'filename': 'str', 'format': 'str', '*dirty-flag': 'bool',
3061ad166b6SBenoît Canet           '*actual-size': 'int', 'virtual-size': 'int',
3071ad166b6SBenoît Canet           '*cluster-size': 'int', '*encrypted': 'bool', '*compressed': 'bool',
3081ad166b6SBenoît Canet           '*backing-filename': 'str', '*full-backing-filename': 'str',
3091ad166b6SBenoît Canet           '*backing-filename-format': 'str', '*snapshots': ['SnapshotInfo'],
31024bf10daSKevin Wolf           '*format-specific': 'ImageInfoSpecific' } }
3111ad166b6SBenoît Canet
3121ad166b6SBenoît Canet##
313a2085f89SHanna Reitz# @ImageInfo:
314a2085f89SHanna Reitz#
315a937b6aaSMarkus Armbruster# Information about a QEMU image file, and potentially its backing
316a937b6aaSMarkus Armbruster# image
317a2085f89SHanna Reitz#
318a2085f89SHanna Reitz# @backing-image: info of the backing image
319a2085f89SHanna Reitz#
320a2085f89SHanna Reitz# Since: 1.3
321a2085f89SHanna Reitz##
322a2085f89SHanna Reitz{ 'struct': 'ImageInfo',
323a2085f89SHanna Reitz  'base': 'BlockNodeInfo',
324a2085f89SHanna Reitz  'data': {
325a2085f89SHanna Reitz      '*backing-image': 'ImageInfo'
326a2085f89SHanna Reitz  } }
327a2085f89SHanna Reitz
328a2085f89SHanna Reitz##
3296cab3399SHanna Reitz# @BlockChildInfo:
3306cab3399SHanna Reitz#
331a937b6aaSMarkus Armbruster# Information about all nodes in the block graph starting at some
332a937b6aaSMarkus Armbruster# node, annotated with information about that node in relation to its
333a937b6aaSMarkus Armbruster# parent.
3346cab3399SHanna Reitz#
335a937b6aaSMarkus Armbruster# @name: Child name of the root node in the BlockGraphInfo struct, in
336a937b6aaSMarkus Armbruster#     its role as the child of some undescribed parent node
3376cab3399SHanna Reitz#
3386cab3399SHanna Reitz# @info: Block graph information starting at this node
3396cab3399SHanna Reitz#
3406cab3399SHanna Reitz# Since: 8.0
3416cab3399SHanna Reitz##
3426cab3399SHanna Reitz{ 'struct': 'BlockChildInfo',
3436cab3399SHanna Reitz  'data': {
3446cab3399SHanna Reitz      'name': 'str',
3456cab3399SHanna Reitz      'info': 'BlockGraphInfo'
3466cab3399SHanna Reitz  } }
3476cab3399SHanna Reitz
3486cab3399SHanna Reitz##
3496cab3399SHanna Reitz# @BlockGraphInfo:
3506cab3399SHanna Reitz#
351a937b6aaSMarkus Armbruster# Information about all nodes in a block (sub)graph in the form of
352a937b6aaSMarkus Armbruster# BlockNodeInfo data.  The base BlockNodeInfo struct contains the
353a937b6aaSMarkus Armbruster# information for the (sub)graph's root node.
3546cab3399SHanna Reitz#
3556cab3399SHanna Reitz# @children: Array of links to this node's child nodes' information
3566cab3399SHanna Reitz#
3576cab3399SHanna Reitz# Since: 8.0
3586cab3399SHanna Reitz##
3596cab3399SHanna Reitz{ 'struct': 'BlockGraphInfo',
3606cab3399SHanna Reitz  'base': 'BlockNodeInfo',
3616cab3399SHanna Reitz  'data': { 'children': ['BlockChildInfo'] } }
3626cab3399SHanna Reitz
3636cab3399SHanna Reitz##
3641ad166b6SBenoît Canet# @ImageCheck:
3651ad166b6SBenoît Canet#
3661ad166b6SBenoît Canet# Information about a QEMU image file check
3671ad166b6SBenoît Canet#
3681ad166b6SBenoît Canet# @filename: name of the image file checked
3691ad166b6SBenoît Canet#
3701ad166b6SBenoît Canet# @format: format of the image file checked
3711ad166b6SBenoît Canet#
3721ad166b6SBenoît Canet# @check-errors: number of unexpected errors occurred during check
3731ad166b6SBenoît Canet#
3741d8bda12SMarkus Armbruster# @image-end-offset: offset (in bytes) where the image ends, this
375a937b6aaSMarkus Armbruster#     field is present if the driver for the image format supports it
3761ad166b6SBenoît Canet#
3771d8bda12SMarkus Armbruster# @corruptions: number of corruptions found during the check if any
3781ad166b6SBenoît Canet#
3791d8bda12SMarkus Armbruster# @leaks: number of leaks found during the check if any
3801ad166b6SBenoît Canet#
381a937b6aaSMarkus Armbruster# @corruptions-fixed: number of corruptions fixed during the check if
382a937b6aaSMarkus Armbruster#     any
3831ad166b6SBenoît Canet#
3841d8bda12SMarkus Armbruster# @leaks-fixed: number of leaks fixed during the check if any
3851ad166b6SBenoît Canet#
386a937b6aaSMarkus Armbruster# @total-clusters: total number of clusters, this field is present if
387a937b6aaSMarkus Armbruster#     the driver for the image format supports it
3881ad166b6SBenoît Canet#
389a937b6aaSMarkus Armbruster# @allocated-clusters: total number of allocated clusters, this field
390a937b6aaSMarkus Armbruster#     is present if the driver for the image format supports it
3911ad166b6SBenoît Canet#
3921d8bda12SMarkus Armbruster# @fragmented-clusters: total number of fragmented clusters, this
393a937b6aaSMarkus Armbruster#     field is present if the driver for the image format supports it
3941ad166b6SBenoît Canet#
3951d8bda12SMarkus Armbruster# @compressed-clusters: total number of compressed clusters, this
396a937b6aaSMarkus Armbruster#     field is present if the driver for the image format supports it
3971ad166b6SBenoît Canet#
3981ad166b6SBenoît Canet# Since: 1.4
3991ad166b6SBenoît Canet##
400895a2a80SEric Blake{ 'struct': 'ImageCheck',
4011ad166b6SBenoît Canet  'data': {'filename': 'str', 'format': 'str', 'check-errors': 'int',
4021ad166b6SBenoît Canet           '*image-end-offset': 'int', '*corruptions': 'int', '*leaks': 'int',
4031ad166b6SBenoît Canet           '*corruptions-fixed': 'int', '*leaks-fixed': 'int',
4041ad166b6SBenoît Canet           '*total-clusters': 'int', '*allocated-clusters': 'int',
4051ad166b6SBenoît Canet           '*fragmented-clusters': 'int', '*compressed-clusters': 'int' } }
4061ad166b6SBenoît Canet
4071ad166b6SBenoît Canet##
40816b0d555SFam Zheng# @MapEntry:
40916b0d555SFam Zheng#
41016b0d555SFam Zheng# Mapping information from a virtual block range to a host file range
41116b0d555SFam Zheng#
412ffb515faSMax Reitz# @start: virtual (guest) offset of the first byte described by this
413ffb515faSMax Reitz#     entry
41416b0d555SFam Zheng#
41516b0d555SFam Zheng# @length: the number of bytes of the mapped virtual range
41616b0d555SFam Zheng#
417ffb515faSMax Reitz# @data: reading the image will actually read data from a file (in
418ffb515faSMax Reitz#     particular, if @offset is present this means that the sectors
419ffb515faSMax Reitz#     are not simply preallocated, but contain actual data in raw
420ffb515faSMax Reitz#     format)
42116b0d555SFam Zheng#
422ffb515faSMax Reitz# @zero: whether the virtual blocks read as zeroes
42316b0d555SFam Zheng#
42452b10c9cSAndrey Drobyshev via# @compressed: true if the data is stored compressed (since 8.2)
42552b10c9cSAndrey Drobyshev via#
426ffb515faSMax Reitz# @depth: number of layers (0 = top image, 1 = top image's backing
427a937b6aaSMarkus Armbruster#     file, ..., n - 1 = bottom image (where n is the number of images
428a937b6aaSMarkus Armbruster#     in the chain)) before reaching one for which the range is
429a937b6aaSMarkus Armbruster#     allocated
43016b0d555SFam Zheng#
431a937b6aaSMarkus Armbruster# @present: true if this layer provides the data, false if adding a
432a937b6aaSMarkus Armbruster#     backing layer could impact this region (since 6.1)
4338417e137SEric Blake#
434ffb515faSMax Reitz# @offset: if present, the image file stores the data for this range
435ffb515faSMax Reitz#     in raw format at the given (host) offset
43616b0d555SFam Zheng#
4371d8bda12SMarkus Armbruster# @filename: filename that is referred to by @offset
43816b0d555SFam Zheng#
43916b0d555SFam Zheng# Since: 2.6
44016b0d555SFam Zheng##
44116b0d555SFam Zheng{ 'struct': 'MapEntry',
44216b0d555SFam Zheng  'data': {'start': 'int', 'length': 'int', 'data': 'bool',
44352b10c9cSAndrey Drobyshev via           'zero': 'bool', 'compressed': 'bool', 'depth': 'int',
44452b10c9cSAndrey Drobyshev via           'present': 'bool', '*offset': 'int', '*filename': 'str' } }
44516b0d555SFam Zheng
44616b0d555SFam Zheng##
4475072f7b3SMarc-André Lureau# @BlockdevCacheInfo:
4489e193c5aSKevin Wolf#
4499e193c5aSKevin Wolf# Cache mode information for a block device
4509e193c5aSKevin Wolf#
4519e193c5aSKevin Wolf# @writeback: true if writeback mode is enabled
452a937b6aaSMarkus Armbruster#
4539e193c5aSKevin Wolf# @direct: true if the host page cache is bypassed (O_DIRECT)
454a937b6aaSMarkus Armbruster#
4559e193c5aSKevin Wolf# @no-flush: true if flush requests are ignored for the device
4569e193c5aSKevin Wolf#
4579e193c5aSKevin Wolf# Since: 2.3
4589e193c5aSKevin Wolf##
459895a2a80SEric Blake{ 'struct': 'BlockdevCacheInfo',
4609e193c5aSKevin Wolf  'data': { 'writeback': 'bool',
4619e193c5aSKevin Wolf            'direct': 'bool',
4629e193c5aSKevin Wolf            'no-flush': 'bool' } }
4639e193c5aSKevin Wolf
4649e193c5aSKevin Wolf##
4651ad166b6SBenoît Canet# @BlockDeviceInfo:
4661ad166b6SBenoît Canet#
4671ad166b6SBenoît Canet# Information about the backing device for a block device.
4681ad166b6SBenoît Canet#
4691ad166b6SBenoît Canet# @file: the filename of the backing device
4701ad166b6SBenoît Canet#
4711d8bda12SMarkus Armbruster# @node-name: the name of the block driver node (Since 2.0)
4721ad166b6SBenoît Canet#
4731ad166b6SBenoît Canet# @ro: true if the backing device was open read-only
4741ad166b6SBenoît Canet#
475a937b6aaSMarkus Armbruster# @drv: the name of the block format used to open the backing device.
476a937b6aaSMarkus Armbruster#     As of 0.14 this can be: 'blkdebug', 'bochs', 'cloop', 'cow',
477a937b6aaSMarkus Armbruster#     'dmg', 'file', 'file', 'ftp', 'ftps', 'host_cdrom',
478a937b6aaSMarkus Armbruster#     'host_device', 'http', 'https', 'luks', 'nbd', 'parallels',
479a937b6aaSMarkus Armbruster#     'qcow', 'qcow2', 'raw', 'vdi', 'vmdk', 'vpc', 'vvfat' 2.2:
480a937b6aaSMarkus Armbruster#     'archipelago' added, 'cow' dropped 2.3: 'host_floppy' deprecated
481a937b6aaSMarkus Armbruster#     2.5: 'host_floppy' dropped 2.6: 'luks' added 2.8: 'replication'
482a937b6aaSMarkus Armbruster#     added, 'tftp' dropped 2.9: 'archipelago' dropped
4831ad166b6SBenoît Canet#
4841d8bda12SMarkus Armbruster# @backing_file: the name of the backing file (for copy-on-write)
4851ad166b6SBenoît Canet#
486a937b6aaSMarkus Armbruster# @backing_file_depth: number of files in the backing file chain
487a937b6aaSMarkus Armbruster#     (since: 1.2)
4881ad166b6SBenoît Canet#
4891ad166b6SBenoît Canet# @encrypted: true if the backing device is encrypted
4901ad166b6SBenoît Canet#
4911ad166b6SBenoît Canet# @detect_zeroes: detect and optimize zero writes (Since 2.1)
4921ad166b6SBenoît Canet#
4931ad166b6SBenoît Canet# @bps: total throughput limit in bytes per second is specified
4941ad166b6SBenoît Canet#
4951ad166b6SBenoît Canet# @bps_rd: read throughput limit in bytes per second is specified
4961ad166b6SBenoît Canet#
4971ad166b6SBenoît Canet# @bps_wr: write throughput limit in bytes per second is specified
4981ad166b6SBenoît Canet#
4991ad166b6SBenoît Canet# @iops: total I/O operations per second is specified
5001ad166b6SBenoît Canet#
5011ad166b6SBenoît Canet# @iops_rd: read I/O operations per second is specified
5021ad166b6SBenoît Canet#
5031ad166b6SBenoît Canet# @iops_wr: write I/O operations per second is specified
5041ad166b6SBenoît Canet#
5051ad166b6SBenoît Canet# @image: the info of image used (since: 1.6)
5061ad166b6SBenoît Canet#
507a937b6aaSMarkus Armbruster# @bps_max: total throughput limit during bursts, in bytes (Since 1.7)
5081ad166b6SBenoît Canet#
509a937b6aaSMarkus Armbruster# @bps_rd_max: read throughput limit during bursts, in bytes (Since
510a937b6aaSMarkus Armbruster#     1.7)
5111ad166b6SBenoît Canet#
512a937b6aaSMarkus Armbruster# @bps_wr_max: write throughput limit during bursts, in bytes (Since
513a937b6aaSMarkus Armbruster#     1.7)
5141ad166b6SBenoît Canet#
515f2de3b92SMarkus Armbruster# @iops_max: total I/O operations per second during bursts, in bytes
516f2de3b92SMarkus Armbruster#     (Since 1.7)
5171ad166b6SBenoît Canet#
518f2de3b92SMarkus Armbruster# @iops_rd_max: read I/O operations per second during bursts, in bytes
519f2de3b92SMarkus Armbruster#     (Since 1.7)
5201ad166b6SBenoît Canet#
521f2de3b92SMarkus Armbruster# @iops_wr_max: write I/O operations per second during bursts, in
522f2de3b92SMarkus Armbruster#     bytes (Since 1.7)
523398befdfSAlberto Garcia#
524f2de3b92SMarkus Armbruster# @bps_max_length: maximum length of the @bps_max burst period, in
525f2de3b92SMarkus Armbruster#     seconds.  (Since 2.6)
526f2de3b92SMarkus Armbruster#
527f2de3b92SMarkus Armbruster# @bps_rd_max_length: maximum length of the @bps_rd_max burst period,
528f2de3b92SMarkus Armbruster#     in seconds.  (Since 2.6)
529f2de3b92SMarkus Armbruster#
530f2de3b92SMarkus Armbruster# @bps_wr_max_length: maximum length of the @bps_wr_max burst period,
531f2de3b92SMarkus Armbruster#     in seconds.  (Since 2.6)
532f2de3b92SMarkus Armbruster#
533f2de3b92SMarkus Armbruster# @iops_max_length: maximum length of the @iops burst period, in
534f2de3b92SMarkus Armbruster#     seconds.  (Since 2.6)
535f2de3b92SMarkus Armbruster#
536f2de3b92SMarkus Armbruster# @iops_rd_max_length: maximum length of the @iops_rd_max burst
537398befdfSAlberto Garcia#     period, in seconds.  (Since 2.6)
538398befdfSAlberto Garcia#
539f2de3b92SMarkus Armbruster# @iops_wr_max_length: maximum length of the @iops_wr_max burst
540398befdfSAlberto Garcia#     period, in seconds.  (Since 2.6)
541398befdfSAlberto Garcia#
5421d8bda12SMarkus Armbruster# @iops_size: an I/O size in bytes (Since 1.7)
5431ad166b6SBenoît Canet#
5441d8bda12SMarkus Armbruster# @group: throttle group name (Since 2.4)
545b8fe1694SAlberto Garcia#
5469e193c5aSKevin Wolf# @cache: the cache mode used for the block device (since: 2.3)
5479e193c5aSKevin Wolf#
548a937b6aaSMarkus Armbruster# @write_threshold: configured write threshold for the device.  0 if
549a937b6aaSMarkus Armbruster#     disabled.  (Since 2.3)
550e2462113SFrancesco Romani#
551a937b6aaSMarkus Armbruster# @dirty-bitmaps: dirty bitmaps information (only present if node has
552a937b6aaSMarkus Armbruster#     one or more dirty bitmaps) (Since 4.2)
553590a63d5SVladimir Sementsov-Ogievskiy#
5549bc6e893SMarkus Armbruster# Since: 0.14
5551ad166b6SBenoît Canet##
556895a2a80SEric Blake{ 'struct': 'BlockDeviceInfo',
5571ad166b6SBenoît Canet  'data': { 'file': 'str', '*node-name': 'str', 'ro': 'bool', 'drv': 'str',
5581ad166b6SBenoît Canet            '*backing_file': 'str', 'backing_file_depth': 'int',
559df4097aeSMarkus Armbruster            'encrypted': 'bool',
5601ad166b6SBenoît Canet            'detect_zeroes': 'BlockdevDetectZeroesOptions',
5611ad166b6SBenoît Canet            'bps': 'int', 'bps_rd': 'int', 'bps_wr': 'int',
5621ad166b6SBenoît Canet            'iops': 'int', 'iops_rd': 'int', 'iops_wr': 'int',
5631ad166b6SBenoît Canet            'image': 'ImageInfo',
5641ad166b6SBenoît Canet            '*bps_max': 'int', '*bps_rd_max': 'int',
5651ad166b6SBenoît Canet            '*bps_wr_max': 'int', '*iops_max': 'int',
5661ad166b6SBenoît Canet            '*iops_rd_max': 'int', '*iops_wr_max': 'int',
567398befdfSAlberto Garcia            '*bps_max_length': 'int', '*bps_rd_max_length': 'int',
568398befdfSAlberto Garcia            '*bps_wr_max_length': 'int', '*iops_max_length': 'int',
569398befdfSAlberto Garcia            '*iops_rd_max_length': 'int', '*iops_wr_max_length': 'int',
570b8fe1694SAlberto Garcia            '*iops_size': 'int', '*group': 'str', 'cache': 'BlockdevCacheInfo',
571590a63d5SVladimir Sementsov-Ogievskiy            'write_threshold': 'int', '*dirty-bitmaps': ['BlockDirtyInfo'] } }
5721ad166b6SBenoît Canet
5731ad166b6SBenoît Canet##
5741ad166b6SBenoît Canet# @BlockDeviceIoStatus:
5751ad166b6SBenoît Canet#
5761ad166b6SBenoît Canet# An enumeration of block device I/O status.
5771ad166b6SBenoît Canet#
5781ad166b6SBenoît Canet# @ok: The last I/O operation has succeeded
5791ad166b6SBenoît Canet#
5801ad166b6SBenoît Canet# @failed: The last I/O operation has failed
5811ad166b6SBenoît Canet#
582a937b6aaSMarkus Armbruster# @nospace: The last I/O operation has failed due to a no-space
583a937b6aaSMarkus Armbruster#     condition
5841ad166b6SBenoît Canet#
5851ad166b6SBenoît Canet# Since: 1.0
5861ad166b6SBenoît Canet##
5871ad166b6SBenoît Canet{ 'enum': 'BlockDeviceIoStatus', 'data': [ 'ok', 'failed', 'nospace' ] }
5881ad166b6SBenoît Canet
5891ad166b6SBenoît Canet##
5901ad166b6SBenoît Canet# @BlockDirtyInfo:
5911ad166b6SBenoît Canet#
5921ad166b6SBenoît Canet# Block dirty bitmap information.
5931ad166b6SBenoît Canet#
5941d8bda12SMarkus Armbruster# @name: the name of the dirty bitmap (Since 2.4)
5950db6e54aSFam Zheng#
5961ad166b6SBenoît Canet# @count: number of dirty bytes according to the dirty bitmap
5971ad166b6SBenoît Canet#
5981ad166b6SBenoît Canet# @granularity: granularity of the dirty bitmap in bytes (since 1.4)
5991ad166b6SBenoît Canet#
600a937b6aaSMarkus Armbruster# @recording: true if the bitmap is recording new writes from the
601a937b6aaSMarkus Armbruster#     guest.  (since 4.0)
6024db6ceb0SJohn Snow#
6034db6ceb0SJohn Snow# @busy: true if the bitmap is in-use by some operation (NBD or jobs)
6044db6ceb0SJohn Snow#     and cannot be modified via QMP or used by another operation.
6059a5af2f9SMarkus Armbruster#     (since 4.0)
606a113534fSJohn Snow#
607a937b6aaSMarkus Armbruster# @persistent: true if the bitmap was stored on disk, is scheduled to
608a937b6aaSMarkus Armbruster#     be stored on disk, or both.  (since 4.0)
609b0f45559SJohn Snow#
610a937b6aaSMarkus Armbruster# @inconsistent: true if this is a persistent bitmap that was
611a937b6aaSMarkus Armbruster#     improperly stored.  Implies @persistent to be true; @recording
612a937b6aaSMarkus Armbruster#     and @busy to be false.  This bitmap cannot be used.  To remove
613b0f45559SJohn Snow#     it, use @block-dirty-bitmap-remove.  (Since 4.0)
614f67cf661SEric Blake#
6151ad166b6SBenoît Canet# Since: 1.3
6161ad166b6SBenoît Canet##
617895a2a80SEric Blake{ 'struct': 'BlockDirtyInfo',
618a113534fSJohn Snow  'data': {'*name': 'str', 'count': 'int', 'granularity': 'uint32',
619df4097aeSMarkus Armbruster           'recording': 'bool', 'busy': 'bool',
620b0f45559SJohn Snow           'persistent': 'bool', '*inconsistent': 'bool' } }
6211ad166b6SBenoît Canet
6221ad166b6SBenoît Canet##
623b8968c87SAndrey Shinkevich# @Qcow2BitmapInfoFlags:
624b8968c87SAndrey Shinkevich#
625b8968c87SAndrey Shinkevich# An enumeration of flags that a bitmap can report to the user.
626b8968c87SAndrey Shinkevich#
627a937b6aaSMarkus Armbruster# @in-use: This flag is set by any process actively modifying the
628a937b6aaSMarkus Armbruster#     qcow2 file, and cleared when the updated bitmap is flushed to
629a937b6aaSMarkus Armbruster#     the qcow2 image.  The presence of this flag in an offline image
630a937b6aaSMarkus Armbruster#     means that the bitmap was not saved correctly after its last
631a937b6aaSMarkus Armbruster#     usage, and may contain inconsistent data.
632b8968c87SAndrey Shinkevich#
633a937b6aaSMarkus Armbruster# @auto: The bitmap must reflect all changes of the virtual disk by
634a937b6aaSMarkus Armbruster#     any application that would write to this qcow2 file.
635b8968c87SAndrey Shinkevich#
636b8968c87SAndrey Shinkevich# Since: 4.0
637b8968c87SAndrey Shinkevich##
638b8968c87SAndrey Shinkevich{ 'enum': 'Qcow2BitmapInfoFlags',
639b8968c87SAndrey Shinkevich  'data': ['in-use', 'auto'] }
640b8968c87SAndrey Shinkevich
641b8968c87SAndrey Shinkevich##
642b8968c87SAndrey Shinkevich# @Qcow2BitmapInfo:
643b8968c87SAndrey Shinkevich#
644b8968c87SAndrey Shinkevich# Qcow2 bitmap information.
645b8968c87SAndrey Shinkevich#
646b8968c87SAndrey Shinkevich# @name: the name of the bitmap
647b8968c87SAndrey Shinkevich#
648b8968c87SAndrey Shinkevich# @granularity: granularity of the bitmap in bytes
649b8968c87SAndrey Shinkevich#
650b8968c87SAndrey Shinkevich# @flags: flags of the bitmap
651b8968c87SAndrey Shinkevich#
652b8968c87SAndrey Shinkevich# Since: 4.0
653b8968c87SAndrey Shinkevich##
654b8968c87SAndrey Shinkevich{ 'struct': 'Qcow2BitmapInfo',
655b8968c87SAndrey Shinkevich  'data': {'name': 'str', 'granularity': 'uint32',
656b8968c87SAndrey Shinkevich           'flags': ['Qcow2BitmapInfoFlags'] } }
657b8968c87SAndrey Shinkevich
658b8968c87SAndrey Shinkevich##
6597e5c776dSVladimir Sementsov-Ogievskiy# @BlockLatencyHistogramInfo:
6607e5c776dSVladimir Sementsov-Ogievskiy#
6617e5c776dSVladimir Sementsov-Ogievskiy# Block latency histogram.
6627e5c776dSVladimir Sementsov-Ogievskiy#
663a937b6aaSMarkus Armbruster# @boundaries: list of interval boundary values in nanoseconds, all
664a937b6aaSMarkus Armbruster#     greater than zero and in ascending order.  For example, the list
665a937b6aaSMarkus Armbruster#     [10, 50, 100] produces the following histogram intervals: [0,
666a937b6aaSMarkus Armbruster#     10), [10, 50), [50, 100), [100, +inf).
6677e5c776dSVladimir Sementsov-Ogievskiy#
668a937b6aaSMarkus Armbruster# @bins: list of io request counts corresponding to histogram
669dad3c956SMarkus Armbruster#     intervals, one more element than @boundaries has.  For the
670dad3c956SMarkus Armbruster#     example above, @bins may be something like [3, 1, 5, 2], and
671d9884878SMarkus Armbruster#     corresponding histogram looks like::
672a0fcff38SPeter Maydell#
673a0fcff38SPeter Maydell#        5|           *
674a0fcff38SPeter Maydell#        4|           *
675a0fcff38SPeter Maydell#        3| *         *
676a0fcff38SPeter Maydell#        2| *         *    *
677a0fcff38SPeter Maydell#        1| *    *    *    *
678a0fcff38SPeter Maydell#         +------------------
679a0fcff38SPeter Maydell#             10   50   100
6807e5c776dSVladimir Sementsov-Ogievskiy#
681cb8aac37SVladimir Sementsov-Ogievskiy# Since: 4.0
6827e5c776dSVladimir Sementsov-Ogievskiy##
6837e5c776dSVladimir Sementsov-Ogievskiy{ 'struct': 'BlockLatencyHistogramInfo',
6847e5c776dSVladimir Sementsov-Ogievskiy  'data': {'boundaries': ['uint64'], 'bins': ['uint64'] } }
6857e5c776dSVladimir Sementsov-Ogievskiy
6867e5c776dSVladimir Sementsov-Ogievskiy##
6871ad166b6SBenoît Canet# @BlockInfo:
6881ad166b6SBenoît Canet#
689a937b6aaSMarkus Armbruster# Block device information.  This structure describes a virtual device
690a937b6aaSMarkus Armbruster# and the backing device associated with it.
6911ad166b6SBenoît Canet#
6921ad166b6SBenoît Canet# @device: The device name associated with the virtual device.
6931ad166b6SBenoît Canet#
694a937b6aaSMarkus Armbruster# @qdev: The qdev ID, or if no ID is assigned, the QOM path of the
695a937b6aaSMarkus Armbruster#     block device.  (since 2.10)
69646eade7bSKevin Wolf#
697a937b6aaSMarkus Armbruster# @type: This field is returned only for compatibility reasons, it
698a937b6aaSMarkus Armbruster#     should not be used (always returns 'unknown')
6991ad166b6SBenoît Canet#
7001ad166b6SBenoît Canet# @removable: True if the device supports removable media.
7011ad166b6SBenoît Canet#
702a937b6aaSMarkus Armbruster# @locked: True if the guest has locked this device from having its
703a937b6aaSMarkus Armbruster#     media removed
7041ad166b6SBenoît Canet#
705a937b6aaSMarkus Armbruster# @tray_open: True if the device's tray is open (only present if it
706a937b6aaSMarkus Armbruster#     has a tray)
7071ad166b6SBenoît Canet#
7081d8bda12SMarkus Armbruster# @io-status: @BlockDeviceIoStatus.  Only present if the device
7091ad166b6SBenoît Canet#     supports it and the VM is configured to stop on errors
710f6f55affSMarkus Armbruster#     (supported device models: virtio-blk, IDE, SCSI except
711f6f55affSMarkus Armbruster#     scsi-generic)
7121ad166b6SBenoît Canet#
7131d8bda12SMarkus Armbruster# @inserted: @BlockDeviceInfo describing the device if media is
7141ad166b6SBenoît Canet#     present
7151ad166b6SBenoît Canet#
7169bc6e893SMarkus Armbruster# Since: 0.14
7171ad166b6SBenoît Canet##
718895a2a80SEric Blake{ 'struct': 'BlockInfo',
71946eade7bSKevin Wolf  'data': {'device': 'str', '*qdev': 'str', 'type': 'str', 'removable': 'bool',
7201ad166b6SBenoît Canet           'locked': 'bool', '*inserted': 'BlockDeviceInfo',
721e67d8e29SDaniel P. Berrangé           '*tray_open': 'bool', '*io-status': 'BlockDeviceIoStatus' } }
7221ad166b6SBenoît Canet
7231ad166b6SBenoît Canet##
72490880ff1SStefan Hajnoczi# @BlockMeasureInfo:
72590880ff1SStefan Hajnoczi#
726a937b6aaSMarkus Armbruster# Image file size calculation information.  This structure describes
727a937b6aaSMarkus Armbruster# the size requirements for creating a new image file.
72890880ff1SStefan Hajnoczi#
729a937b6aaSMarkus Armbruster# The size requirements depend on the new image file format.  File
730a937b6aaSMarkus Armbruster# size always equals virtual disk size for the 'raw' format, even for
731a937b6aaSMarkus Armbruster# sparse POSIX files.  Compact formats such as 'qcow2' represent
732a937b6aaSMarkus Armbruster# unallocated and zero regions efficiently so file size may be smaller
733a937b6aaSMarkus Armbruster# than virtual disk size.
73490880ff1SStefan Hajnoczi#
735a937b6aaSMarkus Armbruster# The values are upper bounds that are guaranteed to fit the new image
736a937b6aaSMarkus Armbruster# file.  Subsequent modification, such as internal snapshot or further
737a937b6aaSMarkus Armbruster# bitmap creation, may require additional space and is not covered
738a937b6aaSMarkus Armbruster# here.
73990880ff1SStefan Hajnoczi#
740a937b6aaSMarkus Armbruster# @required: Size required for a new image file, in bytes, when
741a937b6aaSMarkus Armbruster#     copying just allocated guest-visible contents.
74290880ff1SStefan Hajnoczi#
743a937b6aaSMarkus Armbruster# @fully-allocated: Image file size, in bytes, once data has been
744a937b6aaSMarkus Armbruster#     written to all sectors, when copying just guest-visible
745a937b6aaSMarkus Armbruster#     contents.
7465d72c68bSEric Blake#
747a937b6aaSMarkus Armbruster# @bitmaps: Additional size required if all the top-level bitmap
748a937b6aaSMarkus Armbruster#     metadata in the source image were to be copied to the
749a937b6aaSMarkus Armbruster#     destination, present only when source and destination both
750a937b6aaSMarkus Armbruster#     support persistent bitmaps.  (since 5.1)
75190880ff1SStefan Hajnoczi#
75290880ff1SStefan Hajnoczi# Since: 2.10
75390880ff1SStefan Hajnoczi##
75490880ff1SStefan Hajnoczi{ 'struct': 'BlockMeasureInfo',
7555d72c68bSEric Blake  'data': {'required': 'int', 'fully-allocated': 'int', '*bitmaps': 'int'} }
75690880ff1SStefan Hajnoczi
75790880ff1SStefan Hajnoczi##
7581ad166b6SBenoît Canet# @query-block:
7591ad166b6SBenoît Canet#
7601ad166b6SBenoît Canet# Get a list of BlockInfo for all virtual block devices.
7611ad166b6SBenoît Canet#
762a937b6aaSMarkus Armbruster# Returns: a list of @BlockInfo describing each virtual block device.
763a937b6aaSMarkus Armbruster#     Filter nodes that were created implicitly are skipped over.
7641ad166b6SBenoît Canet#
7659bc6e893SMarkus Armbruster# Since: 0.14
766978cceabSMarc-André Lureau#
76714b48aaaSJohn Snow# .. qmp-example::
768978cceabSMarc-André Lureau#
769978cceabSMarc-André Lureau#     -> { "execute": "query-block" }
770978cceabSMarc-André Lureau#     <- {
771978cceabSMarc-André Lureau#           "return":[
772978cceabSMarc-André Lureau#              {
773978cceabSMarc-André Lureau#                 "io-status": "ok",
774978cceabSMarc-André Lureau#                 "device":"ide0-hd0",
775978cceabSMarc-André Lureau#                 "locked":false,
776978cceabSMarc-André Lureau#                 "removable":false,
777978cceabSMarc-André Lureau#                 "inserted":{
778978cceabSMarc-André Lureau#                    "ro":false,
779978cceabSMarc-André Lureau#                    "drv":"qcow2",
780978cceabSMarc-André Lureau#                    "encrypted":false,
781978cceabSMarc-André Lureau#                    "file":"disks/test.qcow2",
782978cceabSMarc-André Lureau#                    "backing_file_depth":1,
783978cceabSMarc-André Lureau#                    "bps":1000000,
784978cceabSMarc-André Lureau#                    "bps_rd":0,
785978cceabSMarc-André Lureau#                    "bps_wr":0,
786978cceabSMarc-André Lureau#                    "iops":1000000,
787978cceabSMarc-André Lureau#                    "iops_rd":0,
788978cceabSMarc-André Lureau#                    "iops_wr":0,
789978cceabSMarc-André Lureau#                    "bps_max": 8000000,
790978cceabSMarc-André Lureau#                    "bps_rd_max": 0,
791978cceabSMarc-André Lureau#                    "bps_wr_max": 0,
792978cceabSMarc-André Lureau#                    "iops_max": 0,
793978cceabSMarc-André Lureau#                    "iops_rd_max": 0,
794978cceabSMarc-André Lureau#                    "iops_wr_max": 0,
795978cceabSMarc-André Lureau#                    "iops_size": 0,
796978cceabSMarc-André Lureau#                    "detect_zeroes": "on",
797978cceabSMarc-André Lureau#                    "write_threshold": 0,
798978cceabSMarc-André Lureau#                    "image":{
799978cceabSMarc-André Lureau#                       "filename":"disks/test.qcow2",
800978cceabSMarc-André Lureau#                       "format":"qcow2",
801978cceabSMarc-André Lureau#                       "virtual-size":2048000,
802978cceabSMarc-André Lureau#                       "backing_file":"base.qcow2",
803978cceabSMarc-André Lureau#                       "full-backing-filename":"disks/base.qcow2",
804978cceabSMarc-André Lureau#                       "backing-filename-format":"qcow2",
805978cceabSMarc-André Lureau#                       "snapshots":[
806978cceabSMarc-André Lureau#                          {
807978cceabSMarc-André Lureau#                             "id": "1",
808978cceabSMarc-André Lureau#                             "name": "snapshot1",
809978cceabSMarc-André Lureau#                             "vm-state-size": 0,
810978cceabSMarc-André Lureau#                             "date-sec": 10000200,
811978cceabSMarc-André Lureau#                             "date-nsec": 12,
812978cceabSMarc-André Lureau#                             "vm-clock-sec": 206,
813978cceabSMarc-André Lureau#                             "vm-clock-nsec": 30
814978cceabSMarc-André Lureau#                          }
815978cceabSMarc-André Lureau#                       ],
816978cceabSMarc-André Lureau#                       "backing-image":{
817978cceabSMarc-André Lureau#                           "filename":"disks/base.qcow2",
818978cceabSMarc-André Lureau#                           "format":"qcow2",
819978cceabSMarc-André Lureau#                           "virtual-size":2048000
820978cceabSMarc-André Lureau#                       }
821978cceabSMarc-André Lureau#                    }
822978cceabSMarc-André Lureau#                 },
82346eade7bSKevin Wolf#                 "qdev": "ide_disk",
824978cceabSMarc-André Lureau#                 "type":"unknown"
825978cceabSMarc-André Lureau#              },
826978cceabSMarc-André Lureau#              {
827978cceabSMarc-André Lureau#                 "io-status": "ok",
828978cceabSMarc-André Lureau#                 "device":"ide1-cd0",
829978cceabSMarc-André Lureau#                 "locked":false,
830978cceabSMarc-André Lureau#                 "removable":true,
83146eade7bSKevin Wolf#                 "qdev": "/machine/unattached/device[23]",
83246eade7bSKevin Wolf#                 "tray_open": false,
833978cceabSMarc-André Lureau#                 "type":"unknown"
834978cceabSMarc-André Lureau#              },
835978cceabSMarc-André Lureau#              {
836978cceabSMarc-André Lureau#                 "device":"floppy0",
837978cceabSMarc-André Lureau#                 "locked":false,
838978cceabSMarc-André Lureau#                 "removable":true,
83946eade7bSKevin Wolf#                 "qdev": "/machine/unattached/device[20]",
840978cceabSMarc-André Lureau#                 "type":"unknown"
841978cceabSMarc-André Lureau#              },
842978cceabSMarc-André Lureau#              {
843978cceabSMarc-André Lureau#                 "device":"sd0",
844978cceabSMarc-André Lureau#                 "locked":false,
845978cceabSMarc-André Lureau#                 "removable":true,
846978cceabSMarc-André Lureau#                 "type":"unknown"
847978cceabSMarc-André Lureau#              }
848978cceabSMarc-André Lureau#           ]
849978cceabSMarc-André Lureau#        }
8501ad166b6SBenoît Canet##
851f55ba801SPaolo Bonzini{ 'command': 'query-block', 'returns': ['BlockInfo'],
852f55ba801SPaolo Bonzini  'allow-preconfig': true }
8531ad166b6SBenoît Canet
854979e9b03SAlberto Garcia##
855979e9b03SAlberto Garcia# @BlockDeviceTimedStats:
856979e9b03SAlberto Garcia#
857979e9b03SAlberto Garcia# Statistics of a block device during a given interval of time.
858979e9b03SAlberto Garcia#
859a937b6aaSMarkus Armbruster# @interval_length: Interval used for calculating the statistics, in
860a937b6aaSMarkus Armbruster#     seconds.
861979e9b03SAlberto Garcia#
862979e9b03SAlberto Garcia# @min_rd_latency_ns: Minimum latency of read operations in the
863979e9b03SAlberto Garcia#     defined interval, in nanoseconds.
864979e9b03SAlberto Garcia#
865979e9b03SAlberto Garcia# @min_wr_latency_ns: Minimum latency of write operations in the
866979e9b03SAlberto Garcia#     defined interval, in nanoseconds.
867979e9b03SAlberto Garcia#
8689e272073SMarkus Armbruster# @min_zone_append_latency_ns: Minimum latency of zone append
8699e272073SMarkus Armbruster#     operations in the defined interval, in nanoseconds (since 8.1)
87052eb76f4SSam Li#
871979e9b03SAlberto Garcia# @min_flush_latency_ns: Minimum latency of flush operations in the
872979e9b03SAlberto Garcia#     defined interval, in nanoseconds.
873979e9b03SAlberto Garcia#
874979e9b03SAlberto Garcia# @max_rd_latency_ns: Maximum latency of read operations in the
875979e9b03SAlberto Garcia#     defined interval, in nanoseconds.
876979e9b03SAlberto Garcia#
877979e9b03SAlberto Garcia# @max_wr_latency_ns: Maximum latency of write operations in the
878979e9b03SAlberto Garcia#     defined interval, in nanoseconds.
879979e9b03SAlberto Garcia#
8809e272073SMarkus Armbruster# @max_zone_append_latency_ns: Maximum latency of zone append
8819e272073SMarkus Armbruster#     operations in the defined interval, in nanoseconds (since 8.1)
88252eb76f4SSam Li#
883979e9b03SAlberto Garcia# @max_flush_latency_ns: Maximum latency of flush operations in the
884979e9b03SAlberto Garcia#     defined interval, in nanoseconds.
885979e9b03SAlberto Garcia#
886979e9b03SAlberto Garcia# @avg_rd_latency_ns: Average latency of read operations in the
887979e9b03SAlberto Garcia#     defined interval, in nanoseconds.
888979e9b03SAlberto Garcia#
889979e9b03SAlberto Garcia# @avg_wr_latency_ns: Average latency of write operations in the
890979e9b03SAlberto Garcia#     defined interval, in nanoseconds.
891979e9b03SAlberto Garcia#
8929e272073SMarkus Armbruster# @avg_zone_append_latency_ns: Average latency of zone append
8939e272073SMarkus Armbruster#     operations in the defined interval, in nanoseconds (since 8.1)
89452eb76f4SSam Li#
895979e9b03SAlberto Garcia# @avg_flush_latency_ns: Average latency of flush operations in the
896979e9b03SAlberto Garcia#     defined interval, in nanoseconds.
897979e9b03SAlberto Garcia#
898a937b6aaSMarkus Armbruster# @avg_rd_queue_depth: Average number of pending read operations in
899a937b6aaSMarkus Armbruster#     the defined interval.
90096e4dedaSAlberto Garcia#
901a937b6aaSMarkus Armbruster# @avg_wr_queue_depth: Average number of pending write operations in
902a937b6aaSMarkus Armbruster#     the defined interval.
90396e4dedaSAlberto Garcia#
90452eb76f4SSam Li# @avg_zone_append_queue_depth: Average number of pending zone append
9059e272073SMarkus Armbruster#     operations in the defined interval (since 8.1).
90652eb76f4SSam Li#
907979e9b03SAlberto Garcia# Since: 2.5
908979e9b03SAlberto Garcia##
909979e9b03SAlberto Garcia{ 'struct': 'BlockDeviceTimedStats',
910979e9b03SAlberto Garcia  'data': { 'interval_length': 'int', 'min_rd_latency_ns': 'int',
911979e9b03SAlberto Garcia            'max_rd_latency_ns': 'int', 'avg_rd_latency_ns': 'int',
912979e9b03SAlberto Garcia            'min_wr_latency_ns': 'int', 'max_wr_latency_ns': 'int',
91352eb76f4SSam Li            'avg_wr_latency_ns': 'int', 'min_zone_append_latency_ns': 'int',
91452eb76f4SSam Li            'max_zone_append_latency_ns': 'int',
91552eb76f4SSam Li            'avg_zone_append_latency_ns': 'int',
91652eb76f4SSam Li            'min_flush_latency_ns': 'int', 'max_flush_latency_ns': 'int',
91752eb76f4SSam Li            'avg_flush_latency_ns': 'int', 'avg_rd_queue_depth': 'number',
91852eb76f4SSam Li            'avg_wr_queue_depth': 'number',
91952eb76f4SSam Li            'avg_zone_append_queue_depth': 'number'  } }
920979e9b03SAlberto Garcia
9211ad166b6SBenoît Canet##
9221ad166b6SBenoît Canet# @BlockDeviceStats:
9231ad166b6SBenoît Canet#
9241ad166b6SBenoît Canet# Statistics of a virtual block device or a block backing device.
9251ad166b6SBenoît Canet#
9261ad166b6SBenoît Canet# @rd_bytes: The number of bytes read by the device.
9271ad166b6SBenoît Canet#
9281ad166b6SBenoît Canet# @wr_bytes: The number of bytes written by the device.
9291ad166b6SBenoît Canet#
9309e272073SMarkus Armbruster# @zone_append_bytes: The number of bytes appended by the zoned
9319e272073SMarkus Armbruster#     devices (since 8.1)
93252eb76f4SSam Li#
933159f85ddSAnton Nefedov# @unmap_bytes: The number of bytes unmapped by the device (Since 4.2)
934159f85ddSAnton Nefedov#
935a937b6aaSMarkus Armbruster# @rd_operations: The number of read operations performed by the
936a937b6aaSMarkus Armbruster#     device.
9371ad166b6SBenoît Canet#
938a937b6aaSMarkus Armbruster# @wr_operations: The number of write operations performed by the
939a937b6aaSMarkus Armbruster#     device.
9401ad166b6SBenoît Canet#
9419e272073SMarkus Armbruster# @zone_append_operations: The number of zone append operations
9429e272073SMarkus Armbruster#     performed by the zoned devices (since 8.1)
94352eb76f4SSam Li#
944a937b6aaSMarkus Armbruster# @flush_operations: The number of cache flush operations performed by
945a937b6aaSMarkus Armbruster#     the device (since 0.15)
9461ad166b6SBenoît Canet#
947a937b6aaSMarkus Armbruster# @unmap_operations: The number of unmap operations performed by the
948a937b6aaSMarkus Armbruster#     device (Since 4.2)
949159f85ddSAnton Nefedov#
950a937b6aaSMarkus Armbruster# @rd_total_time_ns: Total time spent on reads in nanoseconds (since
951a937b6aaSMarkus Armbruster#     0.15).
952329d27e3SAnton Nefedov#
953a937b6aaSMarkus Armbruster# @wr_total_time_ns: Total time spent on writes in nanoseconds (since
954a937b6aaSMarkus Armbruster#     0.15).
955329d27e3SAnton Nefedov#
95652eb76f4SSam Li# @zone_append_total_time_ns: Total time spent on zone append writes
95752eb76f4SSam Li#     in nanoseconds (since 8.1)
95852eb76f4SSam Li#
959a937b6aaSMarkus Armbruster# @flush_total_time_ns: Total time spent on cache flushes in
960a937b6aaSMarkus Armbruster#     nanoseconds (since 0.15).
9611ad166b6SBenoît Canet#
962a937b6aaSMarkus Armbruster# @unmap_total_time_ns: Total time spent on unmap operations in
963a937b6aaSMarkus Armbruster#     nanoseconds (Since 4.2)
964159f85ddSAnton Nefedov#
965a937b6aaSMarkus Armbruster# @wr_highest_offset: The offset after the greatest byte written to
966a937b6aaSMarkus Armbruster#     the device.  The intended use of this information is for
967a937b6aaSMarkus Armbruster#     growable sparse files (like qcow2) that are used on top of a
968a937b6aaSMarkus Armbruster#     physical device.
9691ad166b6SBenoît Canet#
970a937b6aaSMarkus Armbruster# @rd_merged: Number of read requests that have been merged into
971a937b6aaSMarkus Armbruster#     another request (Since 2.3).
972f4564d53SPeter Lieven#
973a937b6aaSMarkus Armbruster# @wr_merged: Number of write requests that have been merged into
974a937b6aaSMarkus Armbruster#     another request (Since 2.3).
975f4564d53SPeter Lieven#
9769e272073SMarkus Armbruster# @zone_append_merged: Number of zone append requests that have been
9779e272073SMarkus Armbruster#     merged into another request (since 8.1)
97852eb76f4SSam Li#
979a937b6aaSMarkus Armbruster# @unmap_merged: Number of unmap requests that have been merged into
980a937b6aaSMarkus Armbruster#     another request (Since 4.2)
981159f85ddSAnton Nefedov#
982a937b6aaSMarkus Armbruster# @idle_time_ns: Time since the last I/O operation, in nanoseconds.
983a937b6aaSMarkus Armbruster#     If the field is absent it means that there haven't been any
984a937b6aaSMarkus Armbruster#     operations yet (Since 2.5).
985cb38fffbSAlberto Garcia#
9867ee12dafSAlberto Garcia# @failed_rd_operations: The number of failed read operations
9877ee12dafSAlberto Garcia#     performed by the device (Since 2.5)
9887ee12dafSAlberto Garcia#
9897ee12dafSAlberto Garcia# @failed_wr_operations: The number of failed write operations
9907ee12dafSAlberto Garcia#     performed by the device (Since 2.5)
9917ee12dafSAlberto Garcia#
9929e272073SMarkus Armbruster# @failed_zone_append_operations: The number of failed zone append
9939e272073SMarkus Armbruster#     write operations performed by the zoned devices (since 8.1)
99452eb76f4SSam Li#
9957ee12dafSAlberto Garcia# @failed_flush_operations: The number of failed flush operations
9967ee12dafSAlberto Garcia#     performed by the device (Since 2.5)
9977ee12dafSAlberto Garcia#
998a937b6aaSMarkus Armbruster# @failed_unmap_operations: The number of failed unmap operations
999a937b6aaSMarkus Armbruster#     performed by the device (Since 4.2)
1000159f85ddSAnton Nefedov#
10017ee12dafSAlberto Garcia# @invalid_rd_operations: The number of invalid read operations
10027ee12dafSAlberto Garcia#     performed by the device (Since 2.5)
10037ee12dafSAlberto Garcia#
10047ee12dafSAlberto Garcia# @invalid_wr_operations: The number of invalid write operations
10057ee12dafSAlberto Garcia#     performed by the device (Since 2.5)
10067ee12dafSAlberto Garcia#
10079e272073SMarkus Armbruster# @invalid_zone_append_operations: The number of invalid zone append
10089e272073SMarkus Armbruster#     operations performed by the zoned device (since 8.1)
100952eb76f4SSam Li#
10107ee12dafSAlberto Garcia# @invalid_flush_operations: The number of invalid flush operations
10117ee12dafSAlberto Garcia#     performed by the device (Since 2.5)
10127ee12dafSAlberto Garcia#
1013a937b6aaSMarkus Armbruster# @invalid_unmap_operations: The number of invalid unmap operations
1014a937b6aaSMarkus Armbruster#     performed by the device (Since 4.2)
1015159f85ddSAnton Nefedov#
1016362e9299SAlberto Garcia# @account_invalid: Whether invalid operations are included in the
1017362e9299SAlberto Garcia#     last access statistics (Since 2.5)
1018362e9299SAlberto Garcia#
1019362e9299SAlberto Garcia# @account_failed: Whether failed operations are included in the
1020362e9299SAlberto Garcia#     latency and last access statistics (Since 2.5)
1021362e9299SAlberto Garcia#
1022979e9b03SAlberto Garcia# @timed_stats: Statistics specific to the set of previously defined
1023979e9b03SAlberto Garcia#     intervals of time (Since 2.5)
1024979e9b03SAlberto Garcia#
1025cb8aac37SVladimir Sementsov-Ogievskiy# @rd_latency_histogram: @BlockLatencyHistogramInfo.  (Since 4.0)
10267e5c776dSVladimir Sementsov-Ogievskiy#
1027cb8aac37SVladimir Sementsov-Ogievskiy# @wr_latency_histogram: @BlockLatencyHistogramInfo.  (Since 4.0)
10287e5c776dSVladimir Sementsov-Ogievskiy#
10299e272073SMarkus Armbruster# @zone_append_latency_histogram: @BlockLatencyHistogramInfo.
10309e272073SMarkus Armbruster#     (since 8.1)
103152eb76f4SSam Li#
1032cb8aac37SVladimir Sementsov-Ogievskiy# @flush_latency_histogram: @BlockLatencyHistogramInfo.  (Since 4.0)
10337e5c776dSVladimir Sementsov-Ogievskiy#
10349bc6e893SMarkus Armbruster# Since: 0.14
10351ad166b6SBenoît Canet##
1036895a2a80SEric Blake{ 'struct': 'BlockDeviceStats',
103752eb76f4SSam Li  'data': {'rd_bytes': 'int', 'wr_bytes': 'int', 'zone_append_bytes': 'int',
103852eb76f4SSam Li           'unmap_bytes' : 'int', 'rd_operations': 'int',
103952eb76f4SSam Li           'wr_operations': 'int', 'zone_append_operations': 'int',
1040159f85ddSAnton Nefedov           'flush_operations': 'int', 'unmap_operations': 'int',
1041329d27e3SAnton Nefedov           'rd_total_time_ns': 'int', 'wr_total_time_ns': 'int',
104252eb76f4SSam Li           'zone_append_total_time_ns': 'int', 'flush_total_time_ns': 'int',
104352eb76f4SSam Li           'unmap_total_time_ns': 'int', 'wr_highest_offset': 'int',
104452eb76f4SSam Li           'rd_merged': 'int', 'wr_merged': 'int', 'zone_append_merged': 'int',
104552eb76f4SSam Li           'unmap_merged': 'int', '*idle_time_ns': 'int',
10467ee12dafSAlberto Garcia           'failed_rd_operations': 'int', 'failed_wr_operations': 'int',
104752eb76f4SSam Li           'failed_zone_append_operations': 'int',
104852eb76f4SSam Li           'failed_flush_operations': 'int',
104952eb76f4SSam Li           'failed_unmap_operations': 'int', 'invalid_rd_operations': 'int',
105052eb76f4SSam Li           'invalid_wr_operations': 'int',
105152eb76f4SSam Li           'invalid_zone_append_operations': 'int',
1052159f85ddSAnton Nefedov           'invalid_flush_operations': 'int', 'invalid_unmap_operations': 'int',
1053979e9b03SAlberto Garcia           'account_invalid': 'bool', 'account_failed': 'bool',
10547e5c776dSVladimir Sementsov-Ogievskiy           'timed_stats': ['BlockDeviceTimedStats'],
1055cb8aac37SVladimir Sementsov-Ogievskiy           '*rd_latency_histogram': 'BlockLatencyHistogramInfo',
1056cb8aac37SVladimir Sementsov-Ogievskiy           '*wr_latency_histogram': 'BlockLatencyHistogramInfo',
105752eb76f4SSam Li           '*zone_append_latency_histogram': 'BlockLatencyHistogramInfo',
1058cb8aac37SVladimir Sementsov-Ogievskiy           '*flush_latency_histogram': 'BlockLatencyHistogramInfo' } }
10591ad166b6SBenoît Canet
10601ad166b6SBenoît Canet##
1061d9245599SAnton Nefedov# @BlockStatsSpecificFile:
1062d9245599SAnton Nefedov#
1063d9245599SAnton Nefedov# File driver statistics
1064d9245599SAnton Nefedov#
1065a937b6aaSMarkus Armbruster# @discard-nb-ok: The number of successful discard operations
1066a937b6aaSMarkus Armbruster#     performed by the driver.
1067d9245599SAnton Nefedov#
1068a937b6aaSMarkus Armbruster# @discard-nb-failed: The number of failed discard operations
1069a937b6aaSMarkus Armbruster#     performed by the driver.
1070d9245599SAnton Nefedov#
1071d9245599SAnton Nefedov# @discard-bytes-ok: The number of bytes discarded by the driver.
1072d9245599SAnton Nefedov#
1073d9245599SAnton Nefedov# Since: 4.2
1074d9245599SAnton Nefedov##
1075d9245599SAnton Nefedov{ 'struct': 'BlockStatsSpecificFile',
1076d9245599SAnton Nefedov  'data': {
1077d9245599SAnton Nefedov      'discard-nb-ok': 'uint64',
1078d9245599SAnton Nefedov      'discard-nb-failed': 'uint64',
1079d9245599SAnton Nefedov      'discard-bytes-ok': 'uint64' } }
1080d9245599SAnton Nefedov
1081d9245599SAnton Nefedov##
1082f25e7ab2SPhilippe Mathieu-Daudé# @BlockStatsSpecificNvme:
1083f25e7ab2SPhilippe Mathieu-Daudé#
1084f25e7ab2SPhilippe Mathieu-Daudé# NVMe driver statistics
1085f25e7ab2SPhilippe Mathieu-Daudé#
1086f25e7ab2SPhilippe Mathieu-Daudé# @completion-errors: The number of completion errors.
1087f25e7ab2SPhilippe Mathieu-Daudé#
1088a937b6aaSMarkus Armbruster# @aligned-accesses: The number of aligned accesses performed by the
1089a937b6aaSMarkus Armbruster#     driver.
1090f25e7ab2SPhilippe Mathieu-Daudé#
1091f25e7ab2SPhilippe Mathieu-Daudé# @unaligned-accesses: The number of unaligned accesses performed by
1092f25e7ab2SPhilippe Mathieu-Daudé#     the driver.
1093f25e7ab2SPhilippe Mathieu-Daudé#
1094f25e7ab2SPhilippe Mathieu-Daudé# Since: 5.2
1095f25e7ab2SPhilippe Mathieu-Daudé##
1096f25e7ab2SPhilippe Mathieu-Daudé{ 'struct': 'BlockStatsSpecificNvme',
1097f25e7ab2SPhilippe Mathieu-Daudé  'data': {
1098f25e7ab2SPhilippe Mathieu-Daudé      'completion-errors': 'uint64',
1099f25e7ab2SPhilippe Mathieu-Daudé      'aligned-accesses': 'uint64',
1100f25e7ab2SPhilippe Mathieu-Daudé      'unaligned-accesses': 'uint64' } }
1101f25e7ab2SPhilippe Mathieu-Daudé
1102f25e7ab2SPhilippe Mathieu-Daudé##
1103d9245599SAnton Nefedov# @BlockStatsSpecific:
1104d9245599SAnton Nefedov#
1105d9245599SAnton Nefedov# Block driver specific statistics
1106d9245599SAnton Nefedov#
110789a2273bSMarkus Armbruster# @driver: block driver name
110889a2273bSMarkus Armbruster#
1109d9245599SAnton Nefedov# Since: 4.2
1110d9245599SAnton Nefedov##
1111d9245599SAnton Nefedov{ 'union': 'BlockStatsSpecific',
1112d9245599SAnton Nefedov  'base': { 'driver': 'BlockdevDriver' },
1113d9245599SAnton Nefedov  'discriminator': 'driver',
1114d9245599SAnton Nefedov  'data': {
1115d9245599SAnton Nefedov      'file': 'BlockStatsSpecificFile',
111614176c8dSJoelle van Dyne      'host_device': { 'type': 'BlockStatsSpecificFile',
11178a9f1e1dSMarc-André Lureau                       'if': 'HAVE_HOST_BLOCK_DEVICE' },
1118f25e7ab2SPhilippe Mathieu-Daudé      'nvme': 'BlockStatsSpecificNvme' } }
1119d9245599SAnton Nefedov
1120d9245599SAnton Nefedov##
11211ad166b6SBenoît Canet# @BlockStats:
11221ad166b6SBenoît Canet#
11231ad166b6SBenoît Canet# Statistics of a virtual block device or a block backing device.
11241ad166b6SBenoît Canet#
11251d8bda12SMarkus Armbruster# @device: If the stats are for a virtual block device, the name
11261ad166b6SBenoît Canet#     corresponding to the virtual block device.
11271ad166b6SBenoît Canet#
11281d8bda12SMarkus Armbruster# @node-name: The node name of the device.  (Since 2.3)
11294875a779SFam Zheng#
1130a937b6aaSMarkus Armbruster# @qdev: The qdev ID, or if no ID is assigned, the QOM path of the
1131a937b6aaSMarkus Armbruster#     block device.  (since 3.0)
11325a9cb5a9SKevin Wolf#
11331ad166b6SBenoît Canet# @stats: A @BlockDeviceStats for the device.
11341ad166b6SBenoît Canet#
1135d9245599SAnton Nefedov# @driver-specific: Optional driver-specific stats.  (Since 4.2)
1136d9245599SAnton Nefedov#
11371d8bda12SMarkus Armbruster# @parent: This describes the file block device if it has one.
1138a937b6aaSMarkus Armbruster#     Contains recursively the statistics of the underlying protocol
1139a937b6aaSMarkus Armbruster#     (e.g. the host file for a qcow2 image).  If there is no
1140a937b6aaSMarkus Armbruster#     underlying protocol, this field is omitted
11411ad166b6SBenoît Canet#
11421d8bda12SMarkus Armbruster# @backing: This describes the backing block device if it has one.
11431ad166b6SBenoît Canet#     (Since 2.0)
11441ad166b6SBenoît Canet#
11459bc6e893SMarkus Armbruster# Since: 0.14
11461ad166b6SBenoît Canet##
1147895a2a80SEric Blake{ 'struct': 'BlockStats',
11485a9cb5a9SKevin Wolf  'data': {'*device': 'str', '*qdev': 'str', '*node-name': 'str',
11494875a779SFam Zheng           'stats': 'BlockDeviceStats',
1150d9245599SAnton Nefedov           '*driver-specific': 'BlockStatsSpecific',
11511ad166b6SBenoît Canet           '*parent': 'BlockStats',
11521ad166b6SBenoît Canet           '*backing': 'BlockStats'} }
11531ad166b6SBenoît Canet
11541ad166b6SBenoît Canet##
11551ad166b6SBenoît Canet# @query-blockstats:
11561ad166b6SBenoît Canet#
11571ad166b6SBenoît Canet# Query the @BlockStats for all virtual block devices.
11581ad166b6SBenoît Canet#
11591d8bda12SMarkus Armbruster# @query-nodes: If true, the command will query all the block nodes
1160f71eaa74SFam Zheng#     that have a node name, in a list which will include "parent"
1161a937b6aaSMarkus Armbruster#     information, but not "backing".  If false or omitted, the
1162a937b6aaSMarkus Armbruster#     behavior is as before - query all the device backends,
116301bed0ffSMarkus Armbruster#     recursively including their "parent" and "backing".  Filter
116401bed0ffSMarkus Armbruster#     nodes that were created implicitly are skipped over in this
116501bed0ffSMarkus Armbruster#     mode.  (Since 2.3)
1166f71eaa74SFam Zheng#
11671ad166b6SBenoît Canet# Returns: A list of @BlockStats for each virtual block devices.
11681ad166b6SBenoît Canet#
11699bc6e893SMarkus Armbruster# Since: 0.14
1170f2eaea18SMarc-André Lureau#
117114b48aaaSJohn Snow# .. qmp-example::
1172f2eaea18SMarc-André Lureau#
1173f2eaea18SMarc-André Lureau#     -> { "execute": "query-blockstats" }
1174f2eaea18SMarc-André Lureau#     <- {
1175f2eaea18SMarc-André Lureau#           "return":[
1176f2eaea18SMarc-André Lureau#              {
1177f2eaea18SMarc-André Lureau#                 "device":"ide0-hd0",
1178f2eaea18SMarc-André Lureau#                 "parent":{
1179f2eaea18SMarc-André Lureau#                    "stats":{
1180f2eaea18SMarc-André Lureau#                       "wr_highest_offset":3686448128,
1181f2eaea18SMarc-André Lureau#                       "wr_bytes":9786368,
1182f2eaea18SMarc-André Lureau#                       "wr_operations":751,
1183f2eaea18SMarc-André Lureau#                       "rd_bytes":122567168,
1184f2eaea18SMarc-André Lureau#                       "rd_operations":36772
1185f2eaea18SMarc-André Lureau#                       "wr_total_times_ns":313253456
1186f2eaea18SMarc-André Lureau#                       "rd_total_times_ns":3465673657
1187f2eaea18SMarc-André Lureau#                       "flush_total_times_ns":49653
1188f2eaea18SMarc-André Lureau#                       "flush_operations":61,
1189f2eaea18SMarc-André Lureau#                       "rd_merged":0,
1190f2eaea18SMarc-André Lureau#                       "wr_merged":0,
1191f2eaea18SMarc-André Lureau#                       "idle_time_ns":2953431879,
1192f2eaea18SMarc-André Lureau#                       "account_invalid":true,
1193f2eaea18SMarc-André Lureau#                       "account_failed":false
1194f2eaea18SMarc-André Lureau#                    }
1195f2eaea18SMarc-André Lureau#                 },
1196f2eaea18SMarc-André Lureau#                 "stats":{
1197f2eaea18SMarc-André Lureau#                    "wr_highest_offset":2821110784,
1198f2eaea18SMarc-André Lureau#                    "wr_bytes":9786368,
1199f2eaea18SMarc-André Lureau#                    "wr_operations":692,
1200f2eaea18SMarc-André Lureau#                    "rd_bytes":122739200,
1201f2eaea18SMarc-André Lureau#                    "rd_operations":36604
1202f2eaea18SMarc-André Lureau#                    "flush_operations":51,
1203f2eaea18SMarc-André Lureau#                    "wr_total_times_ns":313253456
1204f2eaea18SMarc-André Lureau#                    "rd_total_times_ns":3465673657
1205f2eaea18SMarc-André Lureau#                    "flush_total_times_ns":49653,
1206f2eaea18SMarc-André Lureau#                    "rd_merged":0,
1207f2eaea18SMarc-André Lureau#                    "wr_merged":0,
1208f2eaea18SMarc-André Lureau#                    "idle_time_ns":2953431879,
1209f2eaea18SMarc-André Lureau#                    "account_invalid":true,
1210f2eaea18SMarc-André Lureau#                    "account_failed":false
12115a9cb5a9SKevin Wolf#                 },
12125a9cb5a9SKevin Wolf#                 "qdev": "/machine/unattached/device[23]"
1213f2eaea18SMarc-André Lureau#              },
1214f2eaea18SMarc-André Lureau#              {
1215f2eaea18SMarc-André Lureau#                 "device":"ide1-cd0",
1216f2eaea18SMarc-André Lureau#                 "stats":{
1217f2eaea18SMarc-André Lureau#                    "wr_highest_offset":0,
1218f2eaea18SMarc-André Lureau#                    "wr_bytes":0,
1219f2eaea18SMarc-André Lureau#                    "wr_operations":0,
1220f2eaea18SMarc-André Lureau#                    "rd_bytes":0,
1221f2eaea18SMarc-André Lureau#                    "rd_operations":0
1222f2eaea18SMarc-André Lureau#                    "flush_operations":0,
1223f2eaea18SMarc-André Lureau#                    "wr_total_times_ns":0
1224f2eaea18SMarc-André Lureau#                    "rd_total_times_ns":0
1225f2eaea18SMarc-André Lureau#                    "flush_total_times_ns":0,
1226f2eaea18SMarc-André Lureau#                    "rd_merged":0,
1227f2eaea18SMarc-André Lureau#                    "wr_merged":0,
1228f2eaea18SMarc-André Lureau#                    "account_invalid":false,
1229f2eaea18SMarc-André Lureau#                    "account_failed":false
12305a9cb5a9SKevin Wolf#                 },
12315a9cb5a9SKevin Wolf#                 "qdev": "/machine/unattached/device[24]"
1232f2eaea18SMarc-André Lureau#              },
1233f2eaea18SMarc-André Lureau#              {
1234f2eaea18SMarc-André Lureau#                 "device":"floppy0",
1235f2eaea18SMarc-André Lureau#                 "stats":{
1236f2eaea18SMarc-André Lureau#                    "wr_highest_offset":0,
1237f2eaea18SMarc-André Lureau#                    "wr_bytes":0,
1238f2eaea18SMarc-André Lureau#                    "wr_operations":0,
1239f2eaea18SMarc-André Lureau#                    "rd_bytes":0,
1240f2eaea18SMarc-André Lureau#                    "rd_operations":0
1241f2eaea18SMarc-André Lureau#                    "flush_operations":0,
1242f2eaea18SMarc-André Lureau#                    "wr_total_times_ns":0
1243f2eaea18SMarc-André Lureau#                    "rd_total_times_ns":0
1244f2eaea18SMarc-André Lureau#                    "flush_total_times_ns":0,
1245f2eaea18SMarc-André Lureau#                    "rd_merged":0,
1246f2eaea18SMarc-André Lureau#                    "wr_merged":0,
1247f2eaea18SMarc-André Lureau#                    "account_invalid":false,
1248f2eaea18SMarc-André Lureau#                    "account_failed":false
12495a9cb5a9SKevin Wolf#                 },
12505a9cb5a9SKevin Wolf#                 "qdev": "/machine/unattached/device[16]"
1251f2eaea18SMarc-André Lureau#              },
1252f2eaea18SMarc-André Lureau#              {
1253f2eaea18SMarc-André Lureau#                 "device":"sd0",
1254f2eaea18SMarc-André Lureau#                 "stats":{
1255f2eaea18SMarc-André Lureau#                    "wr_highest_offset":0,
1256f2eaea18SMarc-André Lureau#                    "wr_bytes":0,
1257f2eaea18SMarc-André Lureau#                    "wr_operations":0,
1258f2eaea18SMarc-André Lureau#                    "rd_bytes":0,
1259f2eaea18SMarc-André Lureau#                    "rd_operations":0
1260f2eaea18SMarc-André Lureau#                    "flush_operations":0,
1261f2eaea18SMarc-André Lureau#                    "wr_total_times_ns":0
1262f2eaea18SMarc-André Lureau#                    "rd_total_times_ns":0
1263f2eaea18SMarc-André Lureau#                    "flush_total_times_ns":0,
1264f2eaea18SMarc-André Lureau#                    "rd_merged":0,
1265f2eaea18SMarc-André Lureau#                    "wr_merged":0,
1266f2eaea18SMarc-André Lureau#                    "account_invalid":false,
1267f2eaea18SMarc-André Lureau#                    "account_failed":false
1268f2eaea18SMarc-André Lureau#                 }
1269f2eaea18SMarc-André Lureau#              }
1270f2eaea18SMarc-André Lureau#           ]
1271f2eaea18SMarc-André Lureau#        }
12721ad166b6SBenoît Canet##
1273f71eaa74SFam Zheng{ 'command': 'query-blockstats',
1274f71eaa74SFam Zheng  'data': { '*query-nodes': 'bool' },
1275f55ba801SPaolo Bonzini  'returns': ['BlockStats'],
1276f55ba801SPaolo Bonzini  'allow-preconfig': true }
12771ad166b6SBenoît Canet
12781ad166b6SBenoît Canet##
12791ad166b6SBenoît Canet# @BlockdevOnError:
12801ad166b6SBenoît Canet#
12811ad166b6SBenoît Canet# An enumeration of possible behaviors for errors on I/O operations.
1282a937b6aaSMarkus Armbruster# The exact meaning depends on whether the I/O was initiated by a
1283a937b6aaSMarkus Armbruster# guest or by a block job
12841ad166b6SBenoît Canet#
1285a937b6aaSMarkus Armbruster# @report: for guest operations, report the error to the guest; for
1286a937b6aaSMarkus Armbruster#     jobs, cancel the job
12871ad166b6SBenoît Canet#
12881ad166b6SBenoît Canet# @ignore: ignore the error, only report a QMP event (BLOCK_IO_ERROR
1289a937b6aaSMarkus Armbruster#     or BLOCK_JOB_ERROR).  The backup, mirror and commit block jobs
1290a937b6aaSMarkus Armbruster#     retry the failing request later and may still complete
1291a937b6aaSMarkus Armbruster#     successfully.  The stream block job continues to stream and will
1292a937b6aaSMarkus Armbruster#     complete with an error.
12931ad166b6SBenoît Canet#
12941ad166b6SBenoît Canet# @enospc: same as @stop on ENOSPC, same as @report otherwise.
12951ad166b6SBenoît Canet#
1296a937b6aaSMarkus Armbruster# @stop: for guest operations, stop the virtual machine; for jobs,
1297a937b6aaSMarkus Armbruster#     pause the job
12981ad166b6SBenoît Canet#
12998c398252SKevin Wolf# @auto: inherit the error handling policy of the backend (since: 2.7)
13008c398252SKevin Wolf#
13011ad166b6SBenoît Canet# Since: 1.3
13021ad166b6SBenoît Canet##
13031ad166b6SBenoît Canet{ 'enum': 'BlockdevOnError',
13048c398252SKevin Wolf  'data': ['report', 'ignore', 'enospc', 'stop', 'auto'] }
13051ad166b6SBenoît Canet
13061ad166b6SBenoît Canet##
13071ad166b6SBenoît Canet# @MirrorSyncMode:
13081ad166b6SBenoît Canet#
13091ad166b6SBenoît Canet# An enumeration of possible behaviors for the initial synchronization
13101ad166b6SBenoît Canet# phase of storage mirroring.
13111ad166b6SBenoît Canet#
13121ad166b6SBenoît Canet# @top: copies data in the topmost image to the destination
13131ad166b6SBenoît Canet#
13141ad166b6SBenoît Canet# @full: copies data from all images to the destination
13151ad166b6SBenoît Canet#
13161ad166b6SBenoît Canet# @none: only copy data written from now on
13171ad166b6SBenoît Canet#
1318a937b6aaSMarkus Armbruster# @incremental: only copy data described by the dirty bitmap.
1319a937b6aaSMarkus Armbruster#     (since: 2.4)
1320c8b56501SJohn Snow#
1321c8b56501SJohn Snow# @bitmap: only copy data described by the dirty bitmap.  (since: 4.2)
1322c8b56501SJohn Snow#     Behavior on completion is determined by the BitmapSyncMode.
1323d58d8453SJohn Snow#
13241ad166b6SBenoît Canet# Since: 1.3
13251ad166b6SBenoît Canet##
13261ad166b6SBenoît Canet{ 'enum': 'MirrorSyncMode',
1327c8b56501SJohn Snow  'data': ['top', 'full', 'none', 'incremental', 'bitmap'] }
13281ad166b6SBenoît Canet
13291ad166b6SBenoît Canet##
133000a463b1SJohn Snow# @BitmapSyncMode:
133100a463b1SJohn Snow#
1332a937b6aaSMarkus Armbruster# An enumeration of possible behaviors for the synchronization of a
1333a937b6aaSMarkus Armbruster# bitmap when used for data copy operations.
133400a463b1SJohn Snow#
1335a937b6aaSMarkus Armbruster# @on-success: The bitmap is only synced when the operation is
1336a937b6aaSMarkus Armbruster#     successful.  This is the behavior always used for 'INCREMENTAL'
1337a937b6aaSMarkus Armbruster#     backups.
133800a463b1SJohn Snow#
1339cf0cd293SJohn Snow# @never: The bitmap is never synchronized with the operation, and is
1340cf0cd293SJohn Snow#     treated solely as a read-only manifest of blocks to copy.
1341cf0cd293SJohn Snow#
1342c23909e5SJohn Snow# @always: The bitmap is always synchronized with the operation,
1343c23909e5SJohn Snow#     regardless of whether or not the operation was successful.
1344c23909e5SJohn Snow#
134500a463b1SJohn Snow# Since: 4.2
134600a463b1SJohn Snow##
134700a463b1SJohn Snow{ 'enum': 'BitmapSyncMode',
1348c23909e5SJohn Snow  'data': ['on-success', 'never', 'always'] }
134900a463b1SJohn Snow
135000a463b1SJohn Snow##
1351d06107adSMax Reitz# @MirrorCopyMode:
1352d06107adSMax Reitz#
1353d06107adSMax Reitz# An enumeration whose values tell the mirror block job when to
1354d06107adSMax Reitz# trigger writes to the target.
1355d06107adSMax Reitz#
1356d06107adSMax Reitz# @background: copy data in background only.
1357d06107adSMax Reitz#
1358d06107adSMax Reitz# @write-blocking: when data is written to the source, write it
1359a937b6aaSMarkus Armbruster#     (synchronously) to the target as well.  In addition, data is
1360a937b6aaSMarkus Armbruster#     copied in background just like in @background mode.
1361d06107adSMax Reitz#
1362d06107adSMax Reitz# Since: 3.0
1363d06107adSMax Reitz##
1364d06107adSMax Reitz{ 'enum': 'MirrorCopyMode',
1365d06107adSMax Reitz  'data': ['background', 'write-blocking'] }
1366d06107adSMax Reitz
1367d06107adSMax Reitz##
136876cb2f24SFiona Ebner# @BlockJobInfoMirror:
136976cb2f24SFiona Ebner#
137076cb2f24SFiona Ebner# Information specific to mirror block jobs.
137176cb2f24SFiona Ebner#
137276cb2f24SFiona Ebner# @actively-synced: Whether the source is actively synced to the
137376cb2f24SFiona Ebner#     target, i.e. same data and new writes are done synchronously to
137476cb2f24SFiona Ebner#     both.
137576cb2f24SFiona Ebner#
137637507c14SMarkus Armbruster# Since: 8.2
137776cb2f24SFiona Ebner##
137876cb2f24SFiona Ebner{ 'struct': 'BlockJobInfoMirror',
137976cb2f24SFiona Ebner  'data': { 'actively-synced': 'bool' } }
138076cb2f24SFiona Ebner
138176cb2f24SFiona Ebner##
13821ad166b6SBenoît Canet# @BlockJobInfo:
13831ad166b6SBenoît Canet#
13841ad166b6SBenoît Canet# Information about a long-running block device operation.
13851ad166b6SBenoît Canet#
13861ad166b6SBenoît Canet# @type: the job type ('stream' for image streaming)
13871ad166b6SBenoît Canet#
13886aae5be6SAlberto Garcia# @device: The job identifier.  Originally the device name but other
13896aae5be6SAlberto Garcia#     values are allowed since QEMU 2.7
13901ad166b6SBenoît Canet#
1391a937b6aaSMarkus Armbruster# @len: Estimated @offset value at the completion of the job.  This
1392a937b6aaSMarkus Armbruster#     value can arbitrarily change while the job is running, in both
1393a937b6aaSMarkus Armbruster#     directions.
1394a81e0a82SKevin Wolf#
1395a937b6aaSMarkus Armbruster# @offset: Progress made until now.  The unit is arbitrary and the
1396a937b6aaSMarkus Armbruster#     value can only meaningfully be used for the ratio of @offset to
1397a937b6aaSMarkus Armbruster#     @len.  The value is monotonically increasing.
13981ad166b6SBenoît Canet#
1399a937b6aaSMarkus Armbruster# @busy: false if the job is known to be in a quiescent state, with no
1400a937b6aaSMarkus Armbruster#     pending I/O.  (Since 1.3)
14011ad166b6SBenoît Canet#
1402a937b6aaSMarkus Armbruster# @paused: whether the job is paused or, if @busy is true, will pause
1403a937b6aaSMarkus Armbruster#     itself as soon as possible.  (Since 1.3)
14041ad166b6SBenoît Canet#
14051ad166b6SBenoît Canet# @speed: the rate limit, bytes per second
14061ad166b6SBenoît Canet#
14071ad166b6SBenoît Canet# @io-status: the status of the job (since 1.3)
14081ad166b6SBenoît Canet#
1409ef6dbf1eSMax Reitz# @ready: true if the job may be completed (since 2.2)
1410ef6dbf1eSMax Reitz#
141158b295baSJohn Snow# @status: Current job state/status (since 2.12)
141258b295baSJohn Snow#
1413a937b6aaSMarkus Armbruster# @auto-finalize: Job will finalize itself when PENDING, moving to the
1414a937b6aaSMarkus Armbruster#     CONCLUDED state.  (since 2.12)
1415b40dacdcSJohn Snow#
1416a937b6aaSMarkus Armbruster# @auto-dismiss: Job will dismiss itself when CONCLUDED, moving to the
1417a937b6aaSMarkus Armbruster#     NULL state and disappearing from the query list.  (since 2.12)
1418b40dacdcSJohn Snow#
1419ab9ba614SJohn Snow# @error: Error information if the job did not complete successfully.
1420ab9ba614SJohn Snow#     Not set if the job completed successfully.  (since 2.12.1)
1421ab9ba614SJohn Snow#
14221ad166b6SBenoît Canet# Since: 1.1
14231ad166b6SBenoît Canet##
1424701efc9fSFiona Ebner{ 'union': 'BlockJobInfo',
1425701efc9fSFiona Ebner  'base': {'type': 'JobType', 'device': 'str', 'len': 'int',
14261ad166b6SBenoît Canet           'offset': 'int', 'busy': 'bool', 'paused': 'bool', 'speed': 'int',
142758b295baSJohn Snow           'io-status': 'BlockDeviceIoStatus', 'ready': 'bool',
1428a50c2ab8SKevin Wolf           'status': 'JobStatus',
1429ab9ba614SJohn Snow           'auto-finalize': 'bool', 'auto-dismiss': 'bool',
1430701efc9fSFiona Ebner           '*error': 'str' },
1431701efc9fSFiona Ebner  'discriminator': 'type',
143276cb2f24SFiona Ebner  'data': { 'mirror': 'BlockJobInfoMirror' } }
14331ad166b6SBenoît Canet
14341ad166b6SBenoît Canet##
14351ad166b6SBenoît Canet# @query-block-jobs:
14361ad166b6SBenoît Canet#
14371ad166b6SBenoît Canet# Return information about long-running block device operations.
14381ad166b6SBenoît Canet#
14391ad166b6SBenoît Canet# Returns: a list of @BlockJobInfo for each active block job
14401ad166b6SBenoît Canet#
14411ad166b6SBenoît Canet# Since: 1.1
14421ad166b6SBenoît Canet##
1443f55ba801SPaolo Bonzini{ 'command': 'query-block-jobs', 'returns': ['BlockJobInfo'],
1444f55ba801SPaolo Bonzini  'allow-preconfig': true }
14451ad166b6SBenoît Canet
14461ad166b6SBenoît Canet##
14475072f7b3SMarc-André Lureau# @block_resize:
14481ad166b6SBenoît Canet#
14491ad166b6SBenoît Canet# Resize a block image while a guest is running.
14501ad166b6SBenoît Canet#
14511ad166b6SBenoît Canet# Either @device or @node-name must be set but not both.
14521ad166b6SBenoît Canet#
14531d8bda12SMarkus Armbruster# @device: the name of the device to get the image resized
14541ad166b6SBenoît Canet#
14551d8bda12SMarkus Armbruster# @node-name: graph node name to get the image resized (Since 2.0)
14561ad166b6SBenoît Canet#
14571ad166b6SBenoît Canet# @size: new image size in bytes
14581ad166b6SBenoît Canet#
14592746f060SMarkus Armbruster# Errors:
1460e050e426SPeter Maydell#     - If @device is not a valid block device, DeviceNotFound
14611ad166b6SBenoît Canet#
14629bc6e893SMarkus Armbruster# Since: 0.14
14630dc869cfSMarc-André Lureau#
146414b48aaaSJohn Snow# .. qmp-example::
14650dc869cfSMarc-André Lureau#
14660dc869cfSMarc-André Lureau#     -> { "execute": "block_resize",
14670dc869cfSMarc-André Lureau#          "arguments": { "device": "scratch", "size": 1073741824 } }
14680dc869cfSMarc-André Lureau#     <- { "return": {} }
14691ad166b6SBenoît Canet##
1470b0ddeba2SMarc-André Lureau{ 'command': 'block_resize',
1471b0ddeba2SMarc-André Lureau  'data': { '*device': 'str',
14721ad166b6SBenoît Canet            '*node-name': 'str',
1473eb94b81aSKevin Wolf            'size': 'int' },
1474f55ba801SPaolo Bonzini  'coroutine': true,
1475f55ba801SPaolo Bonzini  'allow-preconfig': true }
14761ad166b6SBenoît Canet
14771ad166b6SBenoît Canet##
14785072f7b3SMarc-André Lureau# @NewImageMode:
14791ad166b6SBenoît Canet#
1480a937b6aaSMarkus Armbruster# An enumeration that tells QEMU how to set the backing file path in a
1481a937b6aaSMarkus Armbruster# new image file.
14821ad166b6SBenoît Canet#
14831ad166b6SBenoît Canet# @existing: QEMU should look for an existing image file.
14841ad166b6SBenoît Canet#
14851ad166b6SBenoît Canet# @absolute-paths: QEMU should create a new image with absolute paths
1486a937b6aaSMarkus Armbruster#     for the backing file.  If there is no backing file available,
1487a937b6aaSMarkus Armbruster#     the new image will not be backed either.
14881ad166b6SBenoît Canet#
14891ad166b6SBenoît Canet# Since: 1.1
14901ad166b6SBenoît Canet##
14911ad166b6SBenoît Canet{ 'enum': 'NewImageMode',
14921ad166b6SBenoît Canet  'data': [ 'existing', 'absolute-paths' ] }
14931ad166b6SBenoît Canet
14941ad166b6SBenoît Canet##
14955072f7b3SMarc-André Lureau# @BlockdevSnapshotSync:
14961ad166b6SBenoît Canet#
14971ad166b6SBenoît Canet# Either @device or @node-name must be set but not both.
14981ad166b6SBenoît Canet#
1499681b86acSMax Reitz# @device: the name of the device to take a snapshot of.
15001ad166b6SBenoît Canet#
1501a937b6aaSMarkus Armbruster# @node-name: graph node name to generate the snapshot from (Since
1502a937b6aaSMarkus Armbruster#     2.0)
15031ad166b6SBenoît Canet#
1504681b86acSMax Reitz# @snapshot-file: the target of the new overlay image.  If the file
1505681b86acSMax Reitz#     exists, or if it is a device, the overlay will be created in the
1506681b86acSMax Reitz#     existing file/device.  Otherwise, a new file will be created.
15071ad166b6SBenoît Canet#
1508a937b6aaSMarkus Armbruster# @snapshot-node-name: the graph node name of the new image (Since
1509a937b6aaSMarkus Armbruster#     2.0)
15101ad166b6SBenoît Canet#
1511681b86acSMax Reitz# @format: the format of the overlay image, default is 'qcow2'.
15121ad166b6SBenoît Canet#
15131d8bda12SMarkus Armbruster# @mode: whether and how QEMU should create a new image, default is
15141ad166b6SBenoît Canet#     'absolute-paths'.
15151ad166b6SBenoît Canet##
1516a911e6aeSAlberto Garcia{ 'struct': 'BlockdevSnapshotSync',
15171ad166b6SBenoît Canet  'data': { '*device': 'str', '*node-name': 'str',
15181ad166b6SBenoît Canet            'snapshot-file': 'str', '*snapshot-node-name': 'str',
15191ad166b6SBenoît Canet            '*format': 'str', '*mode': 'NewImageMode' } }
15201ad166b6SBenoît Canet
15211ad166b6SBenoît Canet##
15225072f7b3SMarc-André Lureau# @BlockdevSnapshot:
152343de7e2dSAlberto Garcia#
1524681b86acSMax Reitz# @node: device or node name that will have a snapshot taken.
152543de7e2dSAlberto Garcia#
152643de7e2dSAlberto Garcia# @overlay: reference to the existing block device that will become
1527a937b6aaSMarkus Armbruster#     the overlay of @node, as part of taking the snapshot.  It must
1528a937b6aaSMarkus Armbruster#     not have a current backing file (this can be achieved by passing
1529a937b6aaSMarkus Armbruster#     "backing": null to blockdev-add).
153043de7e2dSAlberto Garcia#
15315072f7b3SMarc-André Lureau# Since: 2.5
153243de7e2dSAlberto Garcia##
153343de7e2dSAlberto Garcia{ 'struct': 'BlockdevSnapshot',
153443de7e2dSAlberto Garcia  'data': { 'node': 'str', 'overlay': 'str' } }
153543de7e2dSAlberto Garcia
153643de7e2dSAlberto Garcia##
153786c6a3b6SVladimir Sementsov-Ogievskiy# @BackupPerf:
153886c6a3b6SVladimir Sementsov-Ogievskiy#
153986c6a3b6SVladimir Sementsov-Ogievskiy# Optional parameters for backup.  These parameters don't affect
154086c6a3b6SVladimir Sementsov-Ogievskiy# functionality, but may significantly affect performance.
154186c6a3b6SVladimir Sementsov-Ogievskiy#
15426a30f663SVladimir Sementsov-Ogievskiy# @use-copy-range: Use copy offloading.  Default false.
154386c6a3b6SVladimir Sementsov-Ogievskiy#
1544a937b6aaSMarkus Armbruster# @max-workers: Maximum number of parallel requests for the sustained
1545a937b6aaSMarkus Armbruster#     background copying process.  Doesn't influence copy-before-write
1546a937b6aaSMarkus Armbruster#     operations.  Default 64.
15472c59fd83SVladimir Sementsov-Ogievskiy#
1548a937b6aaSMarkus Armbruster# @max-chunk: Maximum request length for the sustained background
1549a937b6aaSMarkus Armbruster#     copying process.  Doesn't influence copy-before-write
1550a937b6aaSMarkus Armbruster#     operations.  0 means unlimited.  If max-chunk is non-zero then
1551a937b6aaSMarkus Armbruster#     it should not be less than job cluster size which is calculated
1552a937b6aaSMarkus Armbruster#     as maximum of target image cluster size and 64k.  Default 0.
15532c59fd83SVladimir Sementsov-Ogievskiy#
15546252deb2SFiona Ebner# @min-cluster-size: Minimum size of blocks used by copy-before-write
15556252deb2SFiona Ebner#     and background copy operations.  Has to be a power of 2.  No
15566252deb2SFiona Ebner#     effect if smaller than the maximum of the target's cluster size
15576252deb2SFiona Ebner#     and 64 KiB.  Default 0.  (Since 9.2)
15586252deb2SFiona Ebner#
155986c6a3b6SVladimir Sementsov-Ogievskiy# Since: 6.0
156086c6a3b6SVladimir Sementsov-Ogievskiy##
156186c6a3b6SVladimir Sementsov-Ogievskiy{ 'struct': 'BackupPerf',
15626252deb2SFiona Ebner  'data': { '*use-copy-range': 'bool', '*max-workers': 'int',
15636252deb2SFiona Ebner            '*max-chunk': 'int64', '*min-cluster-size': 'size' } }
156486c6a3b6SVladimir Sementsov-Ogievskiy
156586c6a3b6SVladimir Sementsov-Ogievskiy##
15663c95037aSJohn Snow# @BackupCommon:
15671ad166b6SBenoît Canet#
1568a937b6aaSMarkus Armbruster# @job-id: identifier for the newly-created block job.  If omitted,
1569a937b6aaSMarkus Armbruster#     the device name will be used.  (Since 2.7)
157070559d49SAlberto Garcia#
1571a937b6aaSMarkus Armbruster# @device: the device name or node-name of a root node which should be
1572a937b6aaSMarkus Armbruster#     copied.
15731ad166b6SBenoît Canet#
1574a937b6aaSMarkus Armbruster# @sync: what parts of the disk image should be copied to the
1575a937b6aaSMarkus Armbruster#     destination (all the disk, only the sectors allocated in the
1576a937b6aaSMarkus Armbruster#     topmost image, from a dirty bitmap, or only new I/O).
15773c95037aSJohn Snow#
15783c95037aSJohn Snow# @speed: the maximum speed, in bytes per second.  The default is 0,
15793c95037aSJohn Snow#     for unlimited.
15803c95037aSJohn Snow#
1581a937b6aaSMarkus Armbruster# @bitmap: The name of a dirty bitmap to use.  Must be present if sync
1582a937b6aaSMarkus Armbruster#     is "bitmap" or "incremental".  Can be present if sync is "full"
1583a937b6aaSMarkus Armbruster#     or "top".  Must not be present otherwise.
1584c8b56501SJohn Snow#     (Since 2.4 (drive-backup), 3.1 (blockdev-backup))
1585c8b56501SJohn Snow#
1586a937b6aaSMarkus Armbruster# @bitmap-mode: Specifies the type of data the bitmap should contain
1587a937b6aaSMarkus Armbruster#     after the operation concludes.  Must be present if a bitmap was
1588a937b6aaSMarkus Armbruster#     provided, Must NOT be present otherwise.  (Since 4.2)
15893c95037aSJohn Snow#
15903c95037aSJohn Snow# @compress: true to compress data, if the target format supports it.
15913c95037aSJohn Snow#     (default: false) (since 2.8)
15923c95037aSJohn Snow#
15933c95037aSJohn Snow# @on-source-error: the action to take on an error on the source,
1594a937b6aaSMarkus Armbruster#     default 'report'.  'stop' and 'enospc' can only be used if the
1595a937b6aaSMarkus Armbruster#     block device supports io-status (see BlockInfo).
15963c95037aSJohn Snow#
15973c95037aSJohn Snow# @on-target-error: the action to take on an error on the target,
1598a937b6aaSMarkus Armbruster#     default 'report' (no limitations, since this applies to a
1599a937b6aaSMarkus Armbruster#     different block device than @device).
16003c95037aSJohn Snow#
1601a937b6aaSMarkus Armbruster# @auto-finalize: When false, this job will wait in a PENDING state
1602a937b6aaSMarkus Armbruster#     after it has finished its work, waiting for @block-job-finalize
1603a937b6aaSMarkus Armbruster#     before making any block graph changes.  When true, this job will
1604a937b6aaSMarkus Armbruster#     automatically perform its abort or commit actions.  Defaults to
1605a937b6aaSMarkus Armbruster#     true.  (Since 2.12)
16063c95037aSJohn Snow#
1607a937b6aaSMarkus Armbruster# @auto-dismiss: When false, this job will wait in a CONCLUDED state
1608a937b6aaSMarkus Armbruster#     after it has completely ceased all work, and awaits
1609a937b6aaSMarkus Armbruster#     @block-job-dismiss.  When true, this job will automatically
1610a937b6aaSMarkus Armbruster#     disappear from the query list without user intervention.
16113c95037aSJohn Snow#     Defaults to true.  (Since 2.12)
16123c95037aSJohn Snow#
161300e30f05SVladimir Sementsov-Ogievskiy# @filter-node-name: the node name that should be assigned to the
1614a937b6aaSMarkus Armbruster#     filter driver that the backup job inserts into the graph above
1615a937b6aaSMarkus Armbruster#     node specified by @drive.  If this option is not given, a node
1616a937b6aaSMarkus Armbruster#     name is autogenerated.  (Since: 4.2)
161700e30f05SVladimir Sementsov-Ogievskiy#
16180fd05c8dSVladimir Sementsov-Ogievskiy# @discard-source: Discard blocks on source which have already been
16190fd05c8dSVladimir Sementsov-Ogievskiy#     copied to the target.  (Since 9.1)
16200fd05c8dSVladimir Sementsov-Ogievskiy#
162186c6a3b6SVladimir Sementsov-Ogievskiy# @x-perf: Performance options.  (Since 6.0)
162286c6a3b6SVladimir Sementsov-Ogievskiy#
16239fb49daaSMarkus Armbruster# Features:
1624a937b6aaSMarkus Armbruster#
16259fb49daaSMarkus Armbruster# @unstable: Member @x-perf is experimental.
16269fb49daaSMarkus Armbruster#
162701bed0ffSMarkus Armbruster# .. note:: @on-source-error and @on-target-error only affect
162801bed0ffSMarkus Armbruster#    background I/O.  If an error occurs during a guest write request,
162901bed0ffSMarkus Armbruster#    the device's rerror/werror actions will be used.
16303c95037aSJohn Snow#
16313c95037aSJohn Snow# Since: 4.2
16323c95037aSJohn Snow##
16333c95037aSJohn Snow{ 'struct': 'BackupCommon',
16343c95037aSJohn Snow  'data': { '*job-id': 'str', 'device': 'str',
16353c95037aSJohn Snow            'sync': 'MirrorSyncMode', '*speed': 'int',
1636c8b56501SJohn Snow            '*bitmap': 'str', '*bitmap-mode': 'BitmapSyncMode',
1637c8b56501SJohn Snow            '*compress': 'bool',
16383c95037aSJohn Snow            '*on-source-error': 'BlockdevOnError',
16393c95037aSJohn Snow            '*on-target-error': 'BlockdevOnError',
164000e30f05SVladimir Sementsov-Ogievskiy            '*auto-finalize': 'bool', '*auto-dismiss': 'bool',
16419fb49daaSMarkus Armbruster            '*filter-node-name': 'str',
16420fd05c8dSVladimir Sementsov-Ogievskiy            '*discard-source': 'bool',
16439fb49daaSMarkus Armbruster            '*x-perf': { 'type': 'BackupPerf',
16449fb49daaSMarkus Armbruster                         'features': [ 'unstable' ] } } }
16453c95037aSJohn Snow
16463c95037aSJohn Snow##
16473c95037aSJohn Snow# @DriveBackup:
16483c95037aSJohn Snow#
16491ad166b6SBenoît Canet# @target: the target of the new image.  If the file exists, or if it
16501ad166b6SBenoît Canet#     is a device, the existing file/device will be used as the new
16511ad166b6SBenoît Canet#     destination.  If it does not exist, a new file will be created.
16521ad166b6SBenoît Canet#
1653a937b6aaSMarkus Armbruster# @format: the format of the new destination, default is to probe if
1654a937b6aaSMarkus Armbruster#     @mode is 'existing', else the format of the source
16551ad166b6SBenoît Canet#
16561d8bda12SMarkus Armbruster# @mode: whether and how QEMU should create a new image, default is
16571ad166b6SBenoît Canet#     'absolute-paths'.
16581ad166b6SBenoît Canet#
16591ad166b6SBenoît Canet# Since: 1.6
16601ad166b6SBenoît Canet##
1661895a2a80SEric Blake{ 'struct': 'DriveBackup',
16623c95037aSJohn Snow  'base': 'BackupCommon',
16633c95037aSJohn Snow  'data': { 'target': 'str',
16643c95037aSJohn Snow            '*format': 'str',
16653c95037aSJohn Snow            '*mode': 'NewImageMode' } }
16661ad166b6SBenoît Canet
16671ad166b6SBenoît Canet##
16685072f7b3SMarc-André Lureau# @BlockdevBackup:
1669c29c1dd3SFam Zheng#
167039d990acSKevin Wolf# @target: the device name or node-name of the backup target node.
1671c29c1dd3SFam Zheng#
1672c29c1dd3SFam Zheng# Since: 2.3
1673c29c1dd3SFam Zheng##
1674895a2a80SEric Blake{ 'struct': 'BlockdevBackup',
16753c95037aSJohn Snow  'base': 'BackupCommon',
16763c95037aSJohn Snow  'data': { 'target': 'str' } }
1677c29c1dd3SFam Zheng
1678c29c1dd3SFam Zheng##
16795072f7b3SMarc-André Lureau# @blockdev-snapshot-sync:
16801ad166b6SBenoît Canet#
1681681b86acSMax Reitz# Takes a synchronous snapshot of a block device.
16821ad166b6SBenoît Canet#
16832746f060SMarkus Armbruster# Errors:
1684e050e426SPeter Maydell#     - If @device is not a valid block device, DeviceNotFound
16851ad166b6SBenoît Canet#
16869bc6e893SMarkus Armbruster# Since: 0.14
1687b4039d8dSMarc-André Lureau#
168814b48aaaSJohn Snow# .. qmp-example::
1689b4039d8dSMarc-André Lureau#
1690b4039d8dSMarc-André Lureau#     -> { "execute": "blockdev-snapshot-sync",
1691b4039d8dSMarc-André Lureau#          "arguments": { "device": "ide-hd0",
1692b4039d8dSMarc-André Lureau#                         "snapshot-file":
1693b4039d8dSMarc-André Lureau#                         "/some/place/my-image",
1694b4039d8dSMarc-André Lureau#                         "format": "qcow2" } }
1695b4039d8dSMarc-André Lureau#     <- { "return": {} }
16961ad166b6SBenoît Canet##
16971ad166b6SBenoît Canet{ 'command': 'blockdev-snapshot-sync',
1698f55ba801SPaolo Bonzini  'data': 'BlockdevSnapshotSync',
1699f55ba801SPaolo Bonzini  'allow-preconfig': true }
17001ad166b6SBenoît Canet
170143de7e2dSAlberto Garcia##
17025072f7b3SMarc-André Lureau# @blockdev-snapshot:
170343de7e2dSAlberto Garcia#
1704681b86acSMax Reitz# Takes a snapshot of a block device.
170543de7e2dSAlberto Garcia#
1706681b86acSMax Reitz# Take a snapshot, by installing 'node' as the backing image of
17073282eca4SMarc-André Lureau# 'overlay'.  Additionally, if 'node' is associated with a block
1708a937b6aaSMarkus Armbruster# device, the block device changes to using 'overlay' as its new
1709a937b6aaSMarkus Armbruster# active image.
17103282eca4SMarc-André Lureau#
1711c6bdc312SPeter Krempa# Features:
1712a937b6aaSMarkus Armbruster#
1713a937b6aaSMarkus Armbruster# @allow-write-only-overlay: If present, the check whether this
1714a937b6aaSMarkus Armbruster#     operation is safe was relaxed so that it can be used to change
1715a937b6aaSMarkus Armbruster#     backing file of a destination of a blockdev-mirror.  (since 5.0)
1716c6bdc312SPeter Krempa#
17175072f7b3SMarc-André Lureau# Since: 2.5
17183282eca4SMarc-André Lureau#
171914b48aaaSJohn Snow# .. qmp-example::
17203282eca4SMarc-André Lureau#
17213282eca4SMarc-André Lureau#     -> { "execute": "blockdev-add",
1722244d04dbSEric Blake#          "arguments": { "driver": "qcow2",
17233282eca4SMarc-André Lureau#                         "node-name": "node1534",
172434f58df5SMarkus Armbruster#                         "file": { "driver": "file",
17253282eca4SMarc-André Lureau#                                   "filename": "hd1.qcow2" },
17264f7be280SMax Reitz#                         "backing": null } }
17273282eca4SMarc-André Lureau#
17283282eca4SMarc-André Lureau#     <- { "return": {} }
17293282eca4SMarc-André Lureau#
17303282eca4SMarc-André Lureau#     -> { "execute": "blockdev-snapshot",
17313282eca4SMarc-André Lureau#          "arguments": { "node": "ide-hd0",
17323282eca4SMarc-André Lureau#                         "overlay": "node1534" } }
17333282eca4SMarc-André Lureau#     <- { "return": {} }
173443de7e2dSAlberto Garcia##
173543de7e2dSAlberto Garcia{ 'command': 'blockdev-snapshot',
1736c6bdc312SPeter Krempa  'data': 'BlockdevSnapshot',
1737f55ba801SPaolo Bonzini  'features': [ 'allow-write-only-overlay' ],
1738f55ba801SPaolo Bonzini  'allow-preconfig': true }
173943de7e2dSAlberto Garcia
17401ad166b6SBenoît Canet##
17415072f7b3SMarc-André Lureau# @change-backing-file:
1742fa40e656SJeff Cody#
1743fa40e656SJeff Cody# Change the backing file in the image file metadata.  This does not
1744fa40e656SJeff Cody# cause QEMU to reopen the image file to reparse the backing filename
1745a937b6aaSMarkus Armbruster# (it may, however, perform a reopen to change permissions from r/o ->
1746a937b6aaSMarkus Armbruster# r/w -> r/o, if needed).  The new backing file string is written into
1747a937b6aaSMarkus Armbruster# the image file metadata, and the QEMU internal strings are updated.
1748fa40e656SJeff Cody#
1749fa40e656SJeff Cody# @image-node-name: The name of the block driver state node of the
1750a937b6aaSMarkus Armbruster#     image to modify.  The "device" argument is used to verify
1751a937b6aaSMarkus Armbruster#     "image-node-name" is in the chain described by "device".
1752fa40e656SJeff Cody#
17537b5dca3fSKevin Wolf# @device: The device name or node-name of the root node that owns
17547b5dca3fSKevin Wolf#     image-node-name.
1755fa40e656SJeff Cody#
1756a937b6aaSMarkus Armbruster# @backing-file: The string to write as the backing file.  This string
1757a937b6aaSMarkus Armbruster#     is not validated, so care should be taken when specifying the
1758a937b6aaSMarkus Armbruster#     string or the image chain may not be able to be reopened again.
1759fa40e656SJeff Cody#
17602746f060SMarkus Armbruster# Errors:
1761a937b6aaSMarkus Armbruster#     - If "device" does not exist or cannot be determined,
1762a937b6aaSMarkus Armbruster#       DeviceNotFound
1763280c4b3cSMarc-André Lureau#
1764fa40e656SJeff Cody# Since: 2.1
1765fa40e656SJeff Cody##
1766fa40e656SJeff Cody{ 'command': 'change-backing-file',
1767fa40e656SJeff Cody  'data': { 'device': 'str', 'image-node-name': 'str',
1768f55ba801SPaolo Bonzini            'backing-file': 'str' },
1769f55ba801SPaolo Bonzini  'allow-preconfig': true }
1770fa40e656SJeff Cody
1771fa40e656SJeff Cody##
17725072f7b3SMarc-André Lureau# @block-commit:
17731ad166b6SBenoît Canet#
1774a937b6aaSMarkus Armbruster# Live commit of data from overlay image nodes into backing nodes -
1775a937b6aaSMarkus Armbruster# i.e., writes data between 'top' and 'base' into 'base'.
17761ad166b6SBenoît Canet#
1777a937b6aaSMarkus Armbruster# If top == base, that is an error.  If top has no overlays on top of
1778a937b6aaSMarkus Armbruster# it, or if it is in use by a writer, the job will not be completed by
1779a937b6aaSMarkus Armbruster# itself.  The user needs to complete the job with the
1780a937b6aaSMarkus Armbruster# block-job-complete command after getting the ready event.  (Since
1781a937b6aaSMarkus Armbruster# 2.0)
178205ea385aSMax Reitz#
178305ea385aSMax Reitz# If the base image is smaller than top, then the base image will be
178405ea385aSMax Reitz# resized to be the same size as top.  If top is smaller than the base
178505ea385aSMax Reitz# image, the base will not be truncated.  If you want the base image
178605ea385aSMax Reitz# size to match the size of the smaller top, you can safely truncate
178705ea385aSMax Reitz# it yourself once the commit operation successfully completes.
178805ea385aSMax Reitz#
1789a937b6aaSMarkus Armbruster# @job-id: identifier for the newly-created block job.  If omitted,
1790a937b6aaSMarkus Armbruster#     the device name will be used.  (Since 2.7)
1791fd62c609SAlberto Garcia#
17921d13b167SKevin Wolf# @device: the device name or node-name of a root node
17931ad166b6SBenoît Canet#
17943c605f40SKevin Wolf# @base-node: The node name of the backing image to write data into.
1795f44fb58fSMarc-André Lureau#     If not specified, this is the deepest backing image.
17963c605f40SKevin Wolf#     (since: 3.1)
17971ad166b6SBenoît Canet#
1798a937b6aaSMarkus Armbruster# @base: Same as @base-node, except that it is a file name rather than
1799a937b6aaSMarkus Armbruster#     a node name.  This must be the exact filename string that was
1800a937b6aaSMarkus Armbruster#     used to open the node; other strings, even if addressing the
1801a937b6aaSMarkus Armbruster#     same file, are not accepted
18023c605f40SKevin Wolf#
18033c605f40SKevin Wolf# @top-node: The node name of the backing image within the image chain
1804a937b6aaSMarkus Armbruster#     which contains the topmost data to be committed down.  If not
1805a937b6aaSMarkus Armbruster#     specified, this is the active layer.  (since: 3.1)
18063c605f40SKevin Wolf#
1807a937b6aaSMarkus Armbruster# @top: Same as @top-node, except that it is a file name rather than a
1808a937b6aaSMarkus Armbruster#     node name.  This must be the exact filename string that was used
1809a937b6aaSMarkus Armbruster#     to open the node; other strings, even if addressing the same
1810a937b6aaSMarkus Armbruster#     file, are not accepted
18111ad166b6SBenoît Canet#
18121d8bda12SMarkus Armbruster# @backing-file: The backing file string to write into the overlay
1813a937b6aaSMarkus Armbruster#     image of 'top'.  If 'top' does not have an overlay image, or if
1814a937b6aaSMarkus Armbruster#     'top' is in use by a writer, specifying a backing file string is
1815a937b6aaSMarkus Armbruster#     an error.
181654e26900SJeff Cody#
1817a937b6aaSMarkus Armbruster#     This filename is not validated.  If a pathname string is such
1818a937b6aaSMarkus Armbruster#     that it cannot be resolved by QEMU, that means that subsequent
1819a937b6aaSMarkus Armbruster#     QMP or HMP commands must use node-names for the image in
1820a937b6aaSMarkus Armbruster#     question, as filename lookup methods will fail.
182154e26900SJeff Cody#
1822a937b6aaSMarkus Armbruster#     If not specified, QEMU will automatically determine the backing
1823a937b6aaSMarkus Armbruster#     file string to use, or error out if there is no obvious choice.
1824a937b6aaSMarkus Armbruster#     Care should be taken when specifying the string, to specify a
1825a937b6aaSMarkus Armbruster#     valid filename or protocol.  (Since 2.1)
182654e26900SJeff Cody#
1827209e64d9SMarkus Armbruster# @backing-mask-protocol: If true, replace any protocol mentioned in
1828209e64d9SMarkus Armbruster#     the 'backing file format' with 'raw', rather than storing the
1829209e64d9SMarkus Armbruster#     protocol name as the backing format.  Can be used even when no
1830209e64d9SMarkus Armbruster#     image header will be updated (default false; since 9.0).
18314b028cbeSPeter Krempa#
18321d8bda12SMarkus Armbruster# @speed: the maximum speed, in bytes per second
18331ad166b6SBenoît Canet#
1834a937b6aaSMarkus Armbruster# @on-error: the action to take on an error.  'ignore' means that the
1835a937b6aaSMarkus Armbruster#     request should be retried.  (default: report; Since: 5.0)
18368faad1c7SKevin Wolf#
18371d8bda12SMarkus Armbruster# @filter-node-name: the node name that should be assigned to the
1838a937b6aaSMarkus Armbruster#     filter driver that the commit job inserts into the graph above
1839a937b6aaSMarkus Armbruster#     @top.  If this option is not given, a node name is
18400db832f4SKevin Wolf#     autogenerated.  (Since: 2.9)
18410db832f4SKevin Wolf#
1842a937b6aaSMarkus Armbruster# @auto-finalize: When false, this job will wait in a PENDING state
1843a937b6aaSMarkus Armbruster#     after it has finished its work, waiting for @block-job-finalize
1844a937b6aaSMarkus Armbruster#     before making any block graph changes.  When true, this job will
1845a937b6aaSMarkus Armbruster#     automatically perform its abort or commit actions.  Defaults to
1846a937b6aaSMarkus Armbruster#     true.  (Since 3.1)
184796fbf534SJohn Snow#
1848a937b6aaSMarkus Armbruster# @auto-dismiss: When false, this job will wait in a CONCLUDED state
1849a937b6aaSMarkus Armbruster#     after it has completely ceased all work, and awaits
1850a937b6aaSMarkus Armbruster#     @block-job-dismiss.  When true, this job will automatically
1851a937b6aaSMarkus Armbruster#     disappear from the query list without user intervention.
185296fbf534SJohn Snow#     Defaults to true.  (Since 3.1)
185396fbf534SJohn Snow#
1854df4097aeSMarkus Armbruster# Features:
1855a937b6aaSMarkus Armbruster#
1856df4097aeSMarkus Armbruster# @deprecated: Members @base and @top are deprecated.  Use @base-node
1857df4097aeSMarkus Armbruster#     and @top-node instead.
1858df4097aeSMarkus Armbruster#
18592746f060SMarkus Armbruster# Errors:
1860e050e426SPeter Maydell#     - If @device does not exist, DeviceNotFound
18611ad166b6SBenoît Canet#
18621ad166b6SBenoît Canet# Since: 1.3
18631ad166b6SBenoît Canet#
186414b48aaaSJohn Snow# .. qmp-example::
1865f44fb58fSMarc-André Lureau#
1866f44fb58fSMarc-André Lureau#     -> { "execute": "block-commit",
1867f44fb58fSMarc-André Lureau#          "arguments": { "device": "virtio0",
1868f44fb58fSMarc-André Lureau#                         "top": "/tmp/snap1.qcow2" } }
1869f44fb58fSMarc-André Lureau#     <- { "return": {} }
18701ad166b6SBenoît Canet##
18711ad166b6SBenoît Canet{ 'command': 'block-commit',
18723c605f40SKevin Wolf  'data': { '*job-id': 'str', 'device': 'str', '*base-node': 'str',
1873df4097aeSMarkus Armbruster            '*base': { 'type': 'str', 'features': [ 'deprecated' ] },
1874df4097aeSMarkus Armbruster            '*top-node': 'str',
1875df4097aeSMarkus Armbruster            '*top': { 'type': 'str', 'features': [ 'deprecated' ] },
18764b028cbeSPeter Krempa            '*backing-file': 'str', '*backing-mask-protocol': 'bool',
18774b028cbeSPeter Krempa            '*speed': 'int',
18788faad1c7SKevin Wolf            '*on-error': 'BlockdevOnError',
187996fbf534SJohn Snow            '*filter-node-name': 'str',
1880f55ba801SPaolo Bonzini            '*auto-finalize': 'bool', '*auto-dismiss': 'bool' },
1881f55ba801SPaolo Bonzini  'allow-preconfig': true }
18821ad166b6SBenoît Canet
18831ad166b6SBenoît Canet##
18845072f7b3SMarc-André Lureau# @drive-backup:
18851ad166b6SBenoît Canet#
1886a937b6aaSMarkus Armbruster# Start a point-in-time copy of a block device to a new destination.
1887a937b6aaSMarkus Armbruster# The status of ongoing drive-backup operations can be checked with
1888a937b6aaSMarkus Armbruster# query-block-jobs where the BlockJobInfo.type field has the value
188901bed0ffSMarkus Armbruster# 'backup'.  The operation can be stopped before it has completed
189001bed0ffSMarkus Armbruster# using the block-job-cancel command.
18911ad166b6SBenoît Canet#
18921084159bSVladimir Sementsov-Ogievskiy# Features:
18931084159bSVladimir Sementsov-Ogievskiy#
1894a937b6aaSMarkus Armbruster# @deprecated: This command is deprecated.  Use @blockdev-backup
1895a937b6aaSMarkus Armbruster#     instead.
1896a937b6aaSMarkus Armbruster#
18972746f060SMarkus Armbruster# Errors:
1898e050e426SPeter Maydell#     - If @device is not a valid block device, GenericError
18991ad166b6SBenoît Canet#
19005072f7b3SMarc-André Lureau# Since: 1.6
1901b0336412SMarc-André Lureau#
190214b48aaaSJohn Snow# .. qmp-example::
1903b0336412SMarc-André Lureau#
1904b0336412SMarc-André Lureau#     -> { "execute": "drive-backup",
1905b0336412SMarc-André Lureau#          "arguments": { "device": "drive0",
1906b0336412SMarc-André Lureau#                         "sync": "full",
1907b0336412SMarc-André Lureau#                         "target": "backup.img" } }
1908b0336412SMarc-André Lureau#     <- { "return": {} }
19091ad166b6SBenoît Canet##
191081206a89SPavel Butsykin{ 'command': 'drive-backup', 'boxed': true,
1911f55ba801SPaolo Bonzini  'data': 'DriveBackup', 'features': ['deprecated'],
1912f55ba801SPaolo Bonzini  'allow-preconfig': true }
19131ad166b6SBenoît Canet
19141ad166b6SBenoît Canet##
19155072f7b3SMarc-André Lureau# @blockdev-backup:
1916c29c1dd3SFam Zheng#
1917a937b6aaSMarkus Armbruster# Start a point-in-time copy of a block device to a new destination.
1918a937b6aaSMarkus Armbruster# The status of ongoing blockdev-backup operations can be checked with
1919a937b6aaSMarkus Armbruster# query-block-jobs where the BlockJobInfo.type field has the value
192001bed0ffSMarkus Armbruster# 'backup'.  The operation can be stopped before it has completed
192101bed0ffSMarkus Armbruster# using the block-job-cancel command.
1922c29c1dd3SFam Zheng#
19232746f060SMarkus Armbruster# Errors:
1924e050e426SPeter Maydell#     - If @device is not a valid block device, DeviceNotFound
1925dc7a4a9eSPavel Butsykin#
19265072f7b3SMarc-André Lureau# Since: 2.3
19271cf75113SMarc-André Lureau#
192814b48aaaSJohn Snow# .. qmp-example::
19294ae65a52SAndrea Bolognani#
19301cf75113SMarc-André Lureau#     -> { "execute": "blockdev-backup",
19311cf75113SMarc-André Lureau#          "arguments": { "device": "src-id",
19321cf75113SMarc-André Lureau#                         "sync": "full",
19331cf75113SMarc-André Lureau#                         "target": "tgt-id" } }
19341cf75113SMarc-André Lureau#     <- { "return": {} }
1935c29c1dd3SFam Zheng##
1936dc7a4a9eSPavel Butsykin{ 'command': 'blockdev-backup', 'boxed': true,
1937f55ba801SPaolo Bonzini  'data': 'BlockdevBackup',
1938f55ba801SPaolo Bonzini  'allow-preconfig': true }
1939c29c1dd3SFam Zheng
1940c29c1dd3SFam Zheng##
19415072f7b3SMarc-André Lureau# @query-named-block-nodes:
19421ad166b6SBenoît Canet#
19431ad166b6SBenoît Canet# Get the named block driver list
19441ad166b6SBenoît Canet#
1945a937b6aaSMarkus Armbruster# @flat: Omit the nested data about backing image ("backing-image"
1946a937b6aaSMarkus Armbruster#     key) if true.  Default is false (Since 5.0)
1947facda544SPeter Krempa#
19481ad166b6SBenoît Canet# Returns: the list of BlockDeviceInfo
19491ad166b6SBenoît Canet#
19505072f7b3SMarc-André Lureau# Since: 2.0
1951e1f34cb2SMarc-André Lureau#
195214b48aaaSJohn Snow# .. qmp-example::
1953e1f34cb2SMarc-André Lureau#
1954e1f34cb2SMarc-André Lureau#     -> { "execute": "query-named-block-nodes" }
1955e1f34cb2SMarc-André Lureau#     <- { "return": [ { "ro":false,
1956e1f34cb2SMarc-André Lureau#                        "drv":"qcow2",
1957e1f34cb2SMarc-André Lureau#                        "encrypted":false,
1958e1f34cb2SMarc-André Lureau#                        "file":"disks/test.qcow2",
1959e1f34cb2SMarc-André Lureau#                        "node-name": "my-node",
1960e1f34cb2SMarc-André Lureau#                        "backing_file_depth":1,
1961016b8359SVictor Toso#                        "detect_zeroes":"off",
1962e1f34cb2SMarc-André Lureau#                        "bps":1000000,
1963e1f34cb2SMarc-André Lureau#                        "bps_rd":0,
1964e1f34cb2SMarc-André Lureau#                        "bps_wr":0,
1965e1f34cb2SMarc-André Lureau#                        "iops":1000000,
1966e1f34cb2SMarc-André Lureau#                        "iops_rd":0,
1967e1f34cb2SMarc-André Lureau#                        "iops_wr":0,
1968e1f34cb2SMarc-André Lureau#                        "bps_max": 8000000,
1969e1f34cb2SMarc-André Lureau#                        "bps_rd_max": 0,
1970e1f34cb2SMarc-André Lureau#                        "bps_wr_max": 0,
1971e1f34cb2SMarc-André Lureau#                        "iops_max": 0,
1972e1f34cb2SMarc-André Lureau#                        "iops_rd_max": 0,
1973e1f34cb2SMarc-André Lureau#                        "iops_wr_max": 0,
1974e1f34cb2SMarc-André Lureau#                        "iops_size": 0,
1975e1f34cb2SMarc-André Lureau#                        "write_threshold": 0,
1976e1f34cb2SMarc-André Lureau#                        "image":{
1977e1f34cb2SMarc-André Lureau#                           "filename":"disks/test.qcow2",
1978e1f34cb2SMarc-André Lureau#                           "format":"qcow2",
1979e1f34cb2SMarc-André Lureau#                           "virtual-size":2048000,
1980e1f34cb2SMarc-André Lureau#                           "backing_file":"base.qcow2",
1981e1f34cb2SMarc-André Lureau#                           "full-backing-filename":"disks/base.qcow2",
1982e1f34cb2SMarc-André Lureau#                           "backing-filename-format":"qcow2",
1983e1f34cb2SMarc-André Lureau#                           "snapshots":[
1984e1f34cb2SMarc-André Lureau#                              {
1985e1f34cb2SMarc-André Lureau#                                 "id": "1",
1986e1f34cb2SMarc-André Lureau#                                 "name": "snapshot1",
1987e1f34cb2SMarc-André Lureau#                                 "vm-state-size": 0,
1988e1f34cb2SMarc-André Lureau#                                 "date-sec": 10000200,
1989e1f34cb2SMarc-André Lureau#                                 "date-nsec": 12,
1990e1f34cb2SMarc-André Lureau#                                 "vm-clock-sec": 206,
1991e1f34cb2SMarc-André Lureau#                                 "vm-clock-nsec": 30
1992e1f34cb2SMarc-André Lureau#                              }
1993e1f34cb2SMarc-André Lureau#                           ],
1994e1f34cb2SMarc-André Lureau#                           "backing-image":{
1995e1f34cb2SMarc-André Lureau#                               "filename":"disks/base.qcow2",
1996e1f34cb2SMarc-André Lureau#                               "format":"qcow2",
1997e1f34cb2SMarc-André Lureau#                               "virtual-size":2048000
1998e1f34cb2SMarc-André Lureau#                           }
1999e1f34cb2SMarc-André Lureau#                        } } ] }
20001ad166b6SBenoît Canet##
2001facda544SPeter Krempa{ 'command': 'query-named-block-nodes',
2002facda544SPeter Krempa  'returns': [ 'BlockDeviceInfo' ],
2003f55ba801SPaolo Bonzini  'data': { '*flat': 'bool' },
2004f55ba801SPaolo Bonzini  'allow-preconfig': true }
20051ad166b6SBenoît Canet
20061ad166b6SBenoît Canet##
20075d3b4e99SVladimir Sementsov-Ogievskiy# @XDbgBlockGraphNodeType:
20085d3b4e99SVladimir Sementsov-Ogievskiy#
20095d3b4e99SVladimir Sementsov-Ogievskiy# @block-backend: corresponds to BlockBackend
20105d3b4e99SVladimir Sementsov-Ogievskiy#
20112400e50cSzhaolichang# @block-job: corresponds to BlockJob
20125d3b4e99SVladimir Sementsov-Ogievskiy#
20135d3b4e99SVladimir Sementsov-Ogievskiy# @block-driver: corresponds to BlockDriverState
20145d3b4e99SVladimir Sementsov-Ogievskiy#
20155d3b4e99SVladimir Sementsov-Ogievskiy# Since: 4.0
20165d3b4e99SVladimir Sementsov-Ogievskiy##
20175d3b4e99SVladimir Sementsov-Ogievskiy{ 'enum': 'XDbgBlockGraphNodeType',
20185d3b4e99SVladimir Sementsov-Ogievskiy  'data': [ 'block-backend', 'block-job', 'block-driver' ] }
20195d3b4e99SVladimir Sementsov-Ogievskiy
20205d3b4e99SVladimir Sementsov-Ogievskiy##
20215d3b4e99SVladimir Sementsov-Ogievskiy# @XDbgBlockGraphNode:
20225d3b4e99SVladimir Sementsov-Ogievskiy#
20235d3b4e99SVladimir Sementsov-Ogievskiy# @id: Block graph node identifier.  This @id is generated only for
2024a937b6aaSMarkus Armbruster#     x-debug-query-block-graph and does not relate to any other
2025a937b6aaSMarkus Armbruster#     identifiers in Qemu.
20265d3b4e99SVladimir Sementsov-Ogievskiy#
2027a937b6aaSMarkus Armbruster# @type: Type of graph node.  Can be one of block-backend, block-job
2028a937b6aaSMarkus Armbruster#     or block-driver-state.
20295d3b4e99SVladimir Sementsov-Ogievskiy#
2030a937b6aaSMarkus Armbruster# @name: Human readable name of the node.  Corresponds to node-name
2031a937b6aaSMarkus Armbruster#     for block-driver-state nodes; is not guaranteed to be unique in
2032a937b6aaSMarkus Armbruster#     the whole graph (with block-jobs and block-backends).
20335d3b4e99SVladimir Sementsov-Ogievskiy#
20345d3b4e99SVladimir Sementsov-Ogievskiy# Since: 4.0
20355d3b4e99SVladimir Sementsov-Ogievskiy##
20365d3b4e99SVladimir Sementsov-Ogievskiy{ 'struct': 'XDbgBlockGraphNode',
20375d3b4e99SVladimir Sementsov-Ogievskiy  'data': { 'id': 'uint64', 'type': 'XDbgBlockGraphNodeType', 'name': 'str' } }
20385d3b4e99SVladimir Sementsov-Ogievskiy
20395d3b4e99SVladimir Sementsov-Ogievskiy##
20405d3b4e99SVladimir Sementsov-Ogievskiy# @BlockPermission:
20415d3b4e99SVladimir Sementsov-Ogievskiy#
20425d3b4e99SVladimir Sementsov-Ogievskiy# Enum of base block permissions.
20435d3b4e99SVladimir Sementsov-Ogievskiy#
2044a937b6aaSMarkus Armbruster# @consistent-read: A user that has the "permission" of consistent
2045a937b6aaSMarkus Armbruster#     reads is guaranteed that their view of the contents of the block
20465d3b4e99SVladimir Sementsov-Ogievskiy#     device is complete and self-consistent, representing the
2047a937b6aaSMarkus Armbruster#     contents of a disk at a specific point.  For most block devices
2048a937b6aaSMarkus Armbruster#     (including their backing files) this is true, but the property
2049a937b6aaSMarkus Armbruster#     cannot be maintained in a few situations like for intermediate
2050a937b6aaSMarkus Armbruster#     nodes of a commit block job.
20515d3b4e99SVladimir Sementsov-Ogievskiy#
2052a937b6aaSMarkus Armbruster# @write: This permission is required to change the visible disk
2053a937b6aaSMarkus Armbruster#     contents.
20545d3b4e99SVladimir Sementsov-Ogievskiy#
2055a937b6aaSMarkus Armbruster# @write-unchanged: This permission (which is weaker than
2056a937b6aaSMarkus Armbruster#     BLK_PERM_WRITE) is both enough and required for writes to the
2057a937b6aaSMarkus Armbruster#     block node when the caller promises that the visible disk
2058a937b6aaSMarkus Armbruster#     content doesn't change.  As the BLK_PERM_WRITE permission is
2059a937b6aaSMarkus Armbruster#     strictly stronger, either is sufficient to perform an unchanging
2060a937b6aaSMarkus Armbruster#     write.
20615d3b4e99SVladimir Sementsov-Ogievskiy#
2062a937b6aaSMarkus Armbruster# @resize: This permission is required to change the size of a block
2063a937b6aaSMarkus Armbruster#     node.
20645d3b4e99SVladimir Sementsov-Ogievskiy#
20655d3b4e99SVladimir Sementsov-Ogievskiy# Since: 4.0
20665d3b4e99SVladimir Sementsov-Ogievskiy##
20675d3b4e99SVladimir Sementsov-Ogievskiy{ 'enum': 'BlockPermission',
206864631f36SVladimir Sementsov-Ogievskiy  'data': [ 'consistent-read', 'write', 'write-unchanged', 'resize' ] }
206964631f36SVladimir Sementsov-Ogievskiy
20705d3b4e99SVladimir Sementsov-Ogievskiy##
20715d3b4e99SVladimir Sementsov-Ogievskiy# @XDbgBlockGraphEdge:
20725d3b4e99SVladimir Sementsov-Ogievskiy#
20735d3b4e99SVladimir Sementsov-Ogievskiy# Block Graph edge description for x-debug-query-block-graph.
20745d3b4e99SVladimir Sementsov-Ogievskiy#
20755d3b4e99SVladimir Sementsov-Ogievskiy# @parent: parent id
20765d3b4e99SVladimir Sementsov-Ogievskiy#
20775d3b4e99SVladimir Sementsov-Ogievskiy# @child: child id
20785d3b4e99SVladimir Sementsov-Ogievskiy#
20795d3b4e99SVladimir Sementsov-Ogievskiy# @name: name of the relation (examples are 'file' and 'backing')
20805d3b4e99SVladimir Sementsov-Ogievskiy#
20815d3b4e99SVladimir Sementsov-Ogievskiy# @perm: granted permissions for the parent operating on the child
20825d3b4e99SVladimir Sementsov-Ogievskiy#
2083a937b6aaSMarkus Armbruster# @shared-perm: permissions that can still be granted to other users
2084a937b6aaSMarkus Armbruster#     of the child while it is still attached to this parent
20855d3b4e99SVladimir Sementsov-Ogievskiy#
20865d3b4e99SVladimir Sementsov-Ogievskiy# Since: 4.0
20875d3b4e99SVladimir Sementsov-Ogievskiy##
20885d3b4e99SVladimir Sementsov-Ogievskiy{ 'struct': 'XDbgBlockGraphEdge',
20895d3b4e99SVladimir Sementsov-Ogievskiy  'data': { 'parent': 'uint64', 'child': 'uint64',
20905d3b4e99SVladimir Sementsov-Ogievskiy            'name': 'str', 'perm': [ 'BlockPermission' ],
20915d3b4e99SVladimir Sementsov-Ogievskiy            'shared-perm': [ 'BlockPermission' ] } }
20925d3b4e99SVladimir Sementsov-Ogievskiy
20935d3b4e99SVladimir Sementsov-Ogievskiy##
20945d3b4e99SVladimir Sementsov-Ogievskiy# @XDbgBlockGraph:
20955d3b4e99SVladimir Sementsov-Ogievskiy#
20965d3b4e99SVladimir Sementsov-Ogievskiy# Block Graph - list of nodes and list of edges.
20975d3b4e99SVladimir Sementsov-Ogievskiy#
20985d3b4e99SVladimir Sementsov-Ogievskiy# Since: 4.0
20995d3b4e99SVladimir Sementsov-Ogievskiy##
21005d3b4e99SVladimir Sementsov-Ogievskiy{ 'struct': 'XDbgBlockGraph',
21015d3b4e99SVladimir Sementsov-Ogievskiy  'data': { 'nodes': ['XDbgBlockGraphNode'], 'edges': ['XDbgBlockGraphEdge'] } }
21025d3b4e99SVladimir Sementsov-Ogievskiy
21035d3b4e99SVladimir Sementsov-Ogievskiy##
21045d3b4e99SVladimir Sementsov-Ogievskiy# @x-debug-query-block-graph:
21055d3b4e99SVladimir Sementsov-Ogievskiy#
21065d3b4e99SVladimir Sementsov-Ogievskiy# Get the block graph.
21075d3b4e99SVladimir Sementsov-Ogievskiy#
21089fb49daaSMarkus Armbruster# Features:
2109a937b6aaSMarkus Armbruster#
21109fb49daaSMarkus Armbruster# @unstable: This command is meant for debugging.
21119fb49daaSMarkus Armbruster#
21125d3b4e99SVladimir Sementsov-Ogievskiy# Since: 4.0
21135d3b4e99SVladimir Sementsov-Ogievskiy##
21149fb49daaSMarkus Armbruster{ 'command': 'x-debug-query-block-graph', 'returns': 'XDbgBlockGraph',
2115f55ba801SPaolo Bonzini  'features': [ 'unstable' ],
2116f55ba801SPaolo Bonzini  'allow-preconfig': true }
21175d3b4e99SVladimir Sementsov-Ogievskiy
21185d3b4e99SVladimir Sementsov-Ogievskiy##
21195072f7b3SMarc-André Lureau# @drive-mirror:
21201ad166b6SBenoît Canet#
2121a937b6aaSMarkus Armbruster# Start mirroring a block device's writes to a new destination.
2122a937b6aaSMarkus Armbruster# target specifies the target of the new image.  If the file exists,
2123a937b6aaSMarkus Armbruster# or if it is a device, it will be used as the new destination for
2124aa03e163SMarkus Armbruster# writes.  If it does not exist, a new file will be created.  @format
2125a937b6aaSMarkus Armbruster# specifies the format of the mirror image, default is to probe if
2126a937b6aaSMarkus Armbruster# mode='existing', else the format of the source.
21271ad166b6SBenoît Canet#
21282746f060SMarkus Armbruster# Errors:
2129e050e426SPeter Maydell#     - If @device is not a valid block device, GenericError
2130faecd40aSEric Blake#
21315072f7b3SMarc-André Lureau# Since: 1.3
213212a21b73SMarc-André Lureau#
213314b48aaaSJohn Snow# .. qmp-example::
213412a21b73SMarc-André Lureau#
213512a21b73SMarc-André Lureau#     -> { "execute": "drive-mirror",
213612a21b73SMarc-André Lureau#          "arguments": { "device": "ide-hd0",
213712a21b73SMarc-André Lureau#                         "target": "/some/place/my-image",
213812a21b73SMarc-André Lureau#                         "sync": "full",
213912a21b73SMarc-André Lureau#                         "format": "qcow2" } }
214012a21b73SMarc-André Lureau#     <- { "return": {} }
2141faecd40aSEric Blake##
2142faecd40aSEric Blake{ 'command': 'drive-mirror', 'boxed': true,
2143f55ba801SPaolo Bonzini  'data': 'DriveMirror',
2144f55ba801SPaolo Bonzini  'allow-preconfig': true }
2145faecd40aSEric Blake
2146faecd40aSEric Blake##
21475072f7b3SMarc-André Lureau# @DriveMirror:
2148faecd40aSEric Blake#
2149faecd40aSEric Blake# A set of parameters describing drive mirror setup.
2150faecd40aSEric Blake#
2151a937b6aaSMarkus Armbruster# @job-id: identifier for the newly-created block job.  If omitted,
2152a937b6aaSMarkus Armbruster#     the device name will be used.  (Since 2.7)
215371aa9867SAlberto Garcia#
2154a937b6aaSMarkus Armbruster# @device: the device name or node-name of a root node whose writes
2155a937b6aaSMarkus Armbruster#     should be mirrored.
21561ad166b6SBenoît Canet#
21571ad166b6SBenoît Canet# @target: the target of the new image.  If the file exists, or if it
21581ad166b6SBenoît Canet#     is a device, the existing file/device will be used as the new
21591ad166b6SBenoît Canet#     destination.  If it does not exist, a new file will be created.
21601ad166b6SBenoît Canet#
2161a937b6aaSMarkus Armbruster# @format: the format of the new destination, default is to probe if
2162a937b6aaSMarkus Armbruster#     @mode is 'existing', else the format of the source
21631ad166b6SBenoît Canet#
2164a937b6aaSMarkus Armbruster# @node-name: the new block driver state node name in the graph (Since
2165a937b6aaSMarkus Armbruster#     2.1)
21664c828dc6SBenoît Canet#
21671d8bda12SMarkus Armbruster# @replaces: with sync=full graph node name to be replaced by the new
2168a937b6aaSMarkus Armbruster#     image when a whole image copy is done.  This can be used to
2169a937b6aaSMarkus Armbruster#     repair broken Quorum files.  By default, @device is replaced,
2170a937b6aaSMarkus Armbruster#     although implicitly created filters on it are kept.  (Since 2.1)
217109158f00SBenoît Canet#
21721d8bda12SMarkus Armbruster# @mode: whether and how QEMU should create a new image, default is
21731ad166b6SBenoît Canet#     'absolute-paths'.
21741ad166b6SBenoît Canet#
21751d8bda12SMarkus Armbruster# @speed: the maximum speed, in bytes per second
21761ad166b6SBenoît Canet#
2177a937b6aaSMarkus Armbruster# @sync: what parts of the disk image should be copied to the
2178a937b6aaSMarkus Armbruster#     destination (all the disk, only the sectors allocated in the
2179a937b6aaSMarkus Armbruster#     topmost image, or only new I/O).
21801ad166b6SBenoît Canet#
2181a937b6aaSMarkus Armbruster# @granularity: granularity of the dirty bitmap, default is 64K if the
2182a937b6aaSMarkus Armbruster#     image format doesn't have clusters, 4K if the clusters are
2183a937b6aaSMarkus Armbruster#     smaller than that, else the cluster size.  Must be a power of 2
2184a937b6aaSMarkus Armbruster#     between 512 and 64M (since 1.4).
21851ad166b6SBenoît Canet#
2186a937b6aaSMarkus Armbruster# @buf-size: maximum amount of data in flight from source to target
2187a937b6aaSMarkus Armbruster#     (since 1.4).
21881ad166b6SBenoît Canet#
21891d8bda12SMarkus Armbruster# @on-source-error: the action to take on an error on the source,
2190a937b6aaSMarkus Armbruster#     default 'report'.  'stop' and 'enospc' can only be used if the
2191a937b6aaSMarkus Armbruster#     block device supports io-status (see BlockInfo).
21921ad166b6SBenoît Canet#
21931d8bda12SMarkus Armbruster# @on-target-error: the action to take on an error on the target,
2194a937b6aaSMarkus Armbruster#     default 'report' (no limitations, since this applies to a
2195a937b6aaSMarkus Armbruster#     different block device than @device).
21964ae65a52SAndrea Bolognani#
2197a937b6aaSMarkus Armbruster# @unmap: Whether to try to unmap target sectors where source has only
2198a937b6aaSMarkus Armbruster#     zero.  If true, and target unallocated sectors will read as
2199a937b6aaSMarkus Armbruster#     zero, target image sectors will be unmapped; otherwise, zeroes
2200a937b6aaSMarkus Armbruster#     will be written.  Both will result in identical contents.
22010fc9f8eaSFam Zheng#     Default is true.  (Since 2.4)
22021ad166b6SBenoît Canet#
2203a937b6aaSMarkus Armbruster# @copy-mode: when to copy data to the destination; defaults to
2204a937b6aaSMarkus Armbruster#     'background' (Since: 3.0)
2205481debaaSMax Reitz#
2206a937b6aaSMarkus Armbruster# @auto-finalize: When false, this job will wait in a PENDING state
2207a937b6aaSMarkus Armbruster#     after it has finished its work, waiting for @block-job-finalize
2208a937b6aaSMarkus Armbruster#     before making any block graph changes.  When true, this job will
2209a937b6aaSMarkus Armbruster#     automatically perform its abort or commit actions.  Defaults to
2210a937b6aaSMarkus Armbruster#     true.  (Since 3.1)
2211a6b58adeSJohn Snow#
2212a937b6aaSMarkus Armbruster# @auto-dismiss: When false, this job will wait in a CONCLUDED state
2213a937b6aaSMarkus Armbruster#     after it has completely ceased all work, and awaits
2214a937b6aaSMarkus Armbruster#     @block-job-dismiss.  When true, this job will automatically
2215a937b6aaSMarkus Armbruster#     disappear from the query list without user intervention.
2216a6b58adeSJohn Snow#     Defaults to true.  (Since 3.1)
22174ae65a52SAndrea Bolognani#
22185072f7b3SMarc-André Lureau# Since: 1.3
22191ad166b6SBenoît Canet##
2220faecd40aSEric Blake{ 'struct': 'DriveMirror',
222171aa9867SAlberto Garcia  'data': { '*job-id': 'str', 'device': 'str', 'target': 'str',
222271aa9867SAlberto Garcia            '*format': 'str', '*node-name': 'str', '*replaces': 'str',
22231ad166b6SBenoît Canet            'sync': 'MirrorSyncMode', '*mode': 'NewImageMode',
22241ad166b6SBenoît Canet            '*speed': 'int', '*granularity': 'uint32',
22251ad166b6SBenoît Canet            '*buf-size': 'int', '*on-source-error': 'BlockdevOnError',
22260fc9f8eaSFam Zheng            '*on-target-error': 'BlockdevOnError',
2227a6b58adeSJohn Snow            '*unmap': 'bool', '*copy-mode': 'MirrorCopyMode',
2228a6b58adeSJohn Snow            '*auto-finalize': 'bool', '*auto-dismiss': 'bool' } }
22291ad166b6SBenoît Canet
22301ad166b6SBenoît Canet##
22315072f7b3SMarc-André Lureau# @BlockDirtyBitmap:
2232341ebc2fSJohn Snow#
2233341ebc2fSJohn Snow# @node: name of device/node which the bitmap is tracking
2234341ebc2fSJohn Snow#
2235341ebc2fSJohn Snow# @name: name of the dirty bitmap
2236341ebc2fSJohn Snow#
22375072f7b3SMarc-André Lureau# Since: 2.4
2238341ebc2fSJohn Snow##
2239895a2a80SEric Blake{ 'struct': 'BlockDirtyBitmap',
2240341ebc2fSJohn Snow  'data': { 'node': 'str', 'name': 'str' } }
2241341ebc2fSJohn Snow
2242341ebc2fSJohn Snow##
22435072f7b3SMarc-André Lureau# @BlockDirtyBitmapAdd:
2244341ebc2fSJohn Snow#
2245341ebc2fSJohn Snow# @node: name of device/node which the bitmap is tracking
2246341ebc2fSJohn Snow#
2247cf7c49cfSEric Blake# @name: name of the dirty bitmap (must be less than 1024 bytes)
2248341ebc2fSJohn Snow#
22491d8bda12SMarkus Armbruster# @granularity: the bitmap granularity, default is 64k for
2250341ebc2fSJohn Snow#     block-dirty-bitmap-add
2251341ebc2fSJohn Snow#
2252fd5ae4ccSVladimir Sementsov-Ogievskiy# @persistent: the bitmap is persistent, i.e. it will be saved to the
2253a937b6aaSMarkus Armbruster#     corresponding block device image file on its close.  For now
2254a937b6aaSMarkus Armbruster#     only Qcow2 disks support persistent bitmaps.  Default is false
2255a937b6aaSMarkus Armbruster#     for block-dirty-bitmap-add.  (Since: 2.10)
2256fd5ae4ccSVladimir Sementsov-Ogievskiy#
2257a937b6aaSMarkus Armbruster# @disabled: the bitmap is created in the disabled state, which means
2258a937b6aaSMarkus Armbruster#     that it will not track drive changes.  The bitmap may be enabled
2259a937b6aaSMarkus Armbruster#     with block-dirty-bitmap-enable.  Default is false.  (Since: 4.0)
2260a6e2ca5fSVladimir Sementsov-Ogievskiy#
22615072f7b3SMarc-André Lureau# Since: 2.4
2262341ebc2fSJohn Snow##
2263895a2a80SEric Blake{ 'struct': 'BlockDirtyBitmapAdd',
2264fd5ae4ccSVladimir Sementsov-Ogievskiy  'data': { 'node': 'str', 'name': 'str', '*granularity': 'uint32',
22653264ffceSJohn Snow            '*persistent': 'bool', '*disabled': 'bool' } }
2266341ebc2fSJohn Snow
2267341ebc2fSJohn Snow##
22681466ef6cSVladimir Sementsov-Ogievskiy# @BlockDirtyBitmapOrStr:
2269eff0829bSVladimir Sementsov-Ogievskiy#
2270a937b6aaSMarkus Armbruster# @local: name of the bitmap, attached to the same node as target
2271a937b6aaSMarkus Armbruster#     bitmap.
2272eff0829bSVladimir Sementsov-Ogievskiy#
2273eff0829bSVladimir Sementsov-Ogievskiy# @external: bitmap with specified node
2274eff0829bSVladimir Sementsov-Ogievskiy#
2275eff0829bSVladimir Sementsov-Ogievskiy# Since: 4.1
2276eff0829bSVladimir Sementsov-Ogievskiy##
22771466ef6cSVladimir Sementsov-Ogievskiy{ 'alternate': 'BlockDirtyBitmapOrStr',
2278eff0829bSVladimir Sementsov-Ogievskiy  'data': { 'local': 'str',
2279eff0829bSVladimir Sementsov-Ogievskiy            'external': 'BlockDirtyBitmap' } }
2280eff0829bSVladimir Sementsov-Ogievskiy
2281eff0829bSVladimir Sementsov-Ogievskiy##
2282b598e531SVladimir Sementsov-Ogievskiy# @BlockDirtyBitmapMerge:
2283b598e531SVladimir Sementsov-Ogievskiy#
2284eff0829bSVladimir Sementsov-Ogievskiy# @node: name of device/node which the @target bitmap is tracking
2285b598e531SVladimir Sementsov-Ogievskiy#
2286360d4e4eSJohn Snow# @target: name of the destination dirty bitmap
2287b598e531SVladimir Sementsov-Ogievskiy#
2288a937b6aaSMarkus Armbruster# @bitmaps: name(s) of the source dirty bitmap(s) at @node and/or
2289a937b6aaSMarkus Armbruster#     fully specified BlockDirtyBitmap elements.  The latter are
2290a937b6aaSMarkus Armbruster#     supported since 4.1.
2291b598e531SVladimir Sementsov-Ogievskiy#
22920e2b7f09SJohn Snow# Since: 4.0
2293b598e531SVladimir Sementsov-Ogievskiy##
2294b598e531SVladimir Sementsov-Ogievskiy{ 'struct': 'BlockDirtyBitmapMerge',
2295eff0829bSVladimir Sementsov-Ogievskiy  'data': { 'node': 'str', 'target': 'str',
22961466ef6cSVladimir Sementsov-Ogievskiy            'bitmaps': ['BlockDirtyBitmapOrStr'] } }
2297b598e531SVladimir Sementsov-Ogievskiy
2298b598e531SVladimir Sementsov-Ogievskiy##
22995072f7b3SMarc-André Lureau# @block-dirty-bitmap-add:
2300341ebc2fSJohn Snow#
2301a937b6aaSMarkus Armbruster# Create a dirty bitmap with a name on the node, and start tracking
2302a937b6aaSMarkus Armbruster# the writes.
2303341ebc2fSJohn Snow#
23042746f060SMarkus Armbruster# Errors:
2305e050e426SPeter Maydell#     - If @node is not a valid block device or node, DeviceNotFound
23060d5b2062SMarkus Armbruster#     - If @name is already taken, GenericError
2307341ebc2fSJohn Snow#
23085072f7b3SMarc-André Lureau# Since: 2.4
23092258a5dbSMarc-André Lureau#
231014b48aaaSJohn Snow# .. qmp-example::
23112258a5dbSMarc-André Lureau#
23122258a5dbSMarc-André Lureau#     -> { "execute": "block-dirty-bitmap-add",
23132258a5dbSMarc-André Lureau#          "arguments": { "node": "drive0", "name": "bitmap0" } }
23142258a5dbSMarc-André Lureau#     <- { "return": {} }
2315341ebc2fSJohn Snow##
2316341ebc2fSJohn Snow{ 'command': 'block-dirty-bitmap-add',
2317f55ba801SPaolo Bonzini  'data': 'BlockDirtyBitmapAdd',
2318f55ba801SPaolo Bonzini  'allow-preconfig': true }
2319341ebc2fSJohn Snow
2320341ebc2fSJohn Snow##
23215072f7b3SMarc-André Lureau# @block-dirty-bitmap-remove:
2322341ebc2fSJohn Snow#
23234bbca422SMarc-André Lureau# Stop write tracking and remove the dirty bitmap that was created
2324a937b6aaSMarkus Armbruster# with block-dirty-bitmap-add.  If the bitmap is persistent, remove it
2325a937b6aaSMarkus Armbruster# from its storage too.
2326341ebc2fSJohn Snow#
23272746f060SMarkus Armbruster# Errors:
2328e050e426SPeter Maydell#     - If @node is not a valid block device or node, DeviceNotFound
23290d5b2062SMarkus Armbruster#     - If @name is not found, GenericError
2330e050e426SPeter Maydell#     - if @name is frozen by an operation, GenericError
2331341ebc2fSJohn Snow#
23325072f7b3SMarc-André Lureau# Since: 2.4
23334bbca422SMarc-André Lureau#
233414b48aaaSJohn Snow# .. qmp-example::
23354bbca422SMarc-André Lureau#
23364bbca422SMarc-André Lureau#     -> { "execute": "block-dirty-bitmap-remove",
23374bbca422SMarc-André Lureau#          "arguments": { "node": "drive0", "name": "bitmap0" } }
23384bbca422SMarc-André Lureau#     <- { "return": {} }
2339341ebc2fSJohn Snow##
2340341ebc2fSJohn Snow{ 'command': 'block-dirty-bitmap-remove',
2341f55ba801SPaolo Bonzini  'data': 'BlockDirtyBitmap',
2342f55ba801SPaolo Bonzini  'allow-preconfig': true }
2343341ebc2fSJohn Snow
2344341ebc2fSJohn Snow##
23455072f7b3SMarc-André Lureau# @block-dirty-bitmap-clear:
2346e74e6b78SJohn Snow#
234773dffdc8SMarc-André Lureau# Clear (reset) a dirty bitmap on the device, so that an incremental
234873dffdc8SMarc-André Lureau# backup from this point in time forward will only backup clusters
234973dffdc8SMarc-André Lureau# modified after this clear operation.
2350e74e6b78SJohn Snow#
23512746f060SMarkus Armbruster# Errors:
2352e050e426SPeter Maydell#     - If @node is not a valid block device, DeviceNotFound
23530d5b2062SMarkus Armbruster#     - If @name is not found, GenericError
2354e74e6b78SJohn Snow#
23555072f7b3SMarc-André Lureau# Since: 2.4
235673dffdc8SMarc-André Lureau#
235714b48aaaSJohn Snow# .. qmp-example::
235873dffdc8SMarc-André Lureau#
235973dffdc8SMarc-André Lureau#     -> { "execute": "block-dirty-bitmap-clear",
236073dffdc8SMarc-André Lureau#          "arguments": { "node": "drive0", "name": "bitmap0" } }
236173dffdc8SMarc-André Lureau#     <- { "return": {} }
2362e74e6b78SJohn Snow##
2363e74e6b78SJohn Snow{ 'command': 'block-dirty-bitmap-clear',
2364f55ba801SPaolo Bonzini  'data': 'BlockDirtyBitmap',
2365f55ba801SPaolo Bonzini  'allow-preconfig': true }
2366e74e6b78SJohn Snow
2367e74e6b78SJohn Snow##
23680e2b7f09SJohn Snow# @block-dirty-bitmap-enable:
23695c5d2e50SVladimir Sementsov-Ogievskiy#
23705c5d2e50SVladimir Sementsov-Ogievskiy# Enables a dirty bitmap so that it will begin tracking disk changes.
23715c5d2e50SVladimir Sementsov-Ogievskiy#
23722746f060SMarkus Armbruster# Errors:
2373e050e426SPeter Maydell#     - If @node is not a valid block device, DeviceNotFound
23740d5b2062SMarkus Armbruster#     - If @name is not found, GenericError
23755c5d2e50SVladimir Sementsov-Ogievskiy#
23760e2b7f09SJohn Snow# Since: 4.0
23775c5d2e50SVladimir Sementsov-Ogievskiy#
237814b48aaaSJohn Snow# .. qmp-example::
23795c5d2e50SVladimir Sementsov-Ogievskiy#
23800e2b7f09SJohn Snow#     -> { "execute": "block-dirty-bitmap-enable",
23815c5d2e50SVladimir Sementsov-Ogievskiy#          "arguments": { "node": "drive0", "name": "bitmap0" } }
23825c5d2e50SVladimir Sementsov-Ogievskiy#     <- { "return": {} }
23835c5d2e50SVladimir Sementsov-Ogievskiy##
23840e2b7f09SJohn Snow{ 'command': 'block-dirty-bitmap-enable',
2385f55ba801SPaolo Bonzini  'data': 'BlockDirtyBitmap',
2386f55ba801SPaolo Bonzini  'allow-preconfig': true }
23875c5d2e50SVladimir Sementsov-Ogievskiy
23885c5d2e50SVladimir Sementsov-Ogievskiy##
23890e2b7f09SJohn Snow# @block-dirty-bitmap-disable:
23905c5d2e50SVladimir Sementsov-Ogievskiy#
23915c5d2e50SVladimir Sementsov-Ogievskiy# Disables a dirty bitmap so that it will stop tracking disk changes.
23925c5d2e50SVladimir Sementsov-Ogievskiy#
23932746f060SMarkus Armbruster# Errors:
2394e050e426SPeter Maydell#     - If @node is not a valid block device, DeviceNotFound
23950d5b2062SMarkus Armbruster#     - If @name is not found, GenericError
23965c5d2e50SVladimir Sementsov-Ogievskiy#
23970e2b7f09SJohn Snow# Since: 4.0
23985c5d2e50SVladimir Sementsov-Ogievskiy#
239914b48aaaSJohn Snow# .. qmp-example::
24005c5d2e50SVladimir Sementsov-Ogievskiy#
24010e2b7f09SJohn Snow#     -> { "execute": "block-dirty-bitmap-disable",
24025c5d2e50SVladimir Sementsov-Ogievskiy#          "arguments": { "node": "drive0", "name": "bitmap0" } }
24035c5d2e50SVladimir Sementsov-Ogievskiy#     <- { "return": {} }
24045c5d2e50SVladimir Sementsov-Ogievskiy##
24050e2b7f09SJohn Snow{ 'command': 'block-dirty-bitmap-disable',
2406f55ba801SPaolo Bonzini  'data': 'BlockDirtyBitmap',
2407f55ba801SPaolo Bonzini  'allow-preconfig': true }
24085c5d2e50SVladimir Sementsov-Ogievskiy
24095c5d2e50SVladimir Sementsov-Ogievskiy##
24100e2b7f09SJohn Snow# @block-dirty-bitmap-merge:
2411b598e531SVladimir Sementsov-Ogievskiy#
2412360d4e4eSJohn Snow# Merge dirty bitmaps listed in @bitmaps to the @target dirty bitmap.
2413a937b6aaSMarkus Armbruster# Dirty bitmaps in @bitmaps will be unchanged, except if it also
2414a937b6aaSMarkus Armbruster# appears as the @target bitmap.  Any bits already set in @target will
2415a937b6aaSMarkus Armbruster# still be set after the merge, i.e., this operation does not clear
2416a937b6aaSMarkus Armbruster# the target.  On error, @target is unchanged.
2417b598e531SVladimir Sementsov-Ogievskiy#
2418a937b6aaSMarkus Armbruster# The resulting bitmap will count as dirty any clusters that were
2419a937b6aaSMarkus Armbruster# dirty in any of the source bitmaps.  This can be used to achieve
2420a937b6aaSMarkus Armbruster# backup checkpoints, or in simpler usages, to copy bitmaps.
242173ab5d60SJohn Snow#
24222746f060SMarkus Armbruster# Errors:
2423e050e426SPeter Maydell#     - If @node is not a valid block device, DeviceNotFound
2424a937b6aaSMarkus Armbruster#     - If any bitmap in @bitmaps or @target is not found,
2425a937b6aaSMarkus Armbruster#       GenericError
2426e050e426SPeter Maydell#     - If any of the bitmaps have different sizes or granularities,
2427360d4e4eSJohn Snow#       GenericError
2428b598e531SVladimir Sementsov-Ogievskiy#
24290e2b7f09SJohn Snow# Since: 4.0
2430b598e531SVladimir Sementsov-Ogievskiy#
243114b48aaaSJohn Snow# .. qmp-example::
2432b598e531SVladimir Sementsov-Ogievskiy#
24330e2b7f09SJohn Snow#     -> { "execute": "block-dirty-bitmap-merge",
2434360d4e4eSJohn Snow#          "arguments": { "node": "drive0", "target": "bitmap0",
2435360d4e4eSJohn Snow#                         "bitmaps": ["bitmap1"] } }
2436b598e531SVladimir Sementsov-Ogievskiy#     <- { "return": {} }
2437b598e531SVladimir Sementsov-Ogievskiy##
24380e2b7f09SJohn Snow{ 'command': 'block-dirty-bitmap-merge',
2439f55ba801SPaolo Bonzini  'data': 'BlockDirtyBitmapMerge',
2440f55ba801SPaolo Bonzini  'allow-preconfig': true }
2441b598e531SVladimir Sementsov-Ogievskiy
2442b598e531SVladimir Sementsov-Ogievskiy##
2443a3b52535SVladimir Sementsov-Ogievskiy# @BlockDirtyBitmapSha256:
2444a3b52535SVladimir Sementsov-Ogievskiy#
2445a3b52535SVladimir Sementsov-Ogievskiy# SHA256 hash of dirty bitmap data
2446a3b52535SVladimir Sementsov-Ogievskiy#
2447a3b52535SVladimir Sementsov-Ogievskiy# @sha256: ASCII representation of SHA256 bitmap hash
2448a3b52535SVladimir Sementsov-Ogievskiy#
2449a3b52535SVladimir Sementsov-Ogievskiy# Since: 2.10
2450a3b52535SVladimir Sementsov-Ogievskiy##
2451a3b52535SVladimir Sementsov-Ogievskiy{ 'struct': 'BlockDirtyBitmapSha256',
2452a3b52535SVladimir Sementsov-Ogievskiy  'data': {'sha256': 'str'} }
2453a3b52535SVladimir Sementsov-Ogievskiy
2454a3b52535SVladimir Sementsov-Ogievskiy##
2455a3b52535SVladimir Sementsov-Ogievskiy# @x-debug-block-dirty-bitmap-sha256:
2456a3b52535SVladimir Sementsov-Ogievskiy#
245773ab5d60SJohn Snow# Get bitmap SHA256.
2458a3b52535SVladimir Sementsov-Ogievskiy#
24599fb49daaSMarkus Armbruster# Features:
2460a937b6aaSMarkus Armbruster#
24619fb49daaSMarkus Armbruster# @unstable: This command is meant for debugging.
24629fb49daaSMarkus Armbruster#
2463a937b6aaSMarkus Armbruster# Returns:
2464e2c1dcbcSMarkus Armbruster#     BlockDirtyBitmapSha256
24652746f060SMarkus Armbruster#
24662746f060SMarkus Armbruster# Errors:
2467e050e426SPeter Maydell#     - If @node is not a valid block device, DeviceNotFound
2468a937b6aaSMarkus Armbruster#     - If @name is not found or if hashing has failed, GenericError
2469a3b52535SVladimir Sementsov-Ogievskiy#
2470a3b52535SVladimir Sementsov-Ogievskiy# Since: 2.10
2471a3b52535SVladimir Sementsov-Ogievskiy##
2472a3b52535SVladimir Sementsov-Ogievskiy{ 'command': 'x-debug-block-dirty-bitmap-sha256',
24739fb49daaSMarkus Armbruster  'data': 'BlockDirtyBitmap', 'returns': 'BlockDirtyBitmapSha256',
2474f55ba801SPaolo Bonzini  'features': [ 'unstable' ],
2475f55ba801SPaolo Bonzini  'allow-preconfig': true }
2476a3b52535SVladimir Sementsov-Ogievskiy
2477a3b52535SVladimir Sementsov-Ogievskiy##
24785072f7b3SMarc-André Lureau# @blockdev-mirror:
2479df92562eSFam Zheng#
2480df92562eSFam Zheng# Start mirroring a block device's writes to a new destination.
2481df92562eSFam Zheng#
2482a937b6aaSMarkus Armbruster# @job-id: identifier for the newly-created block job.  If omitted,
2483a937b6aaSMarkus Armbruster#     the device name will be used.  (Since 2.7)
248471aa9867SAlberto Garcia#
2485a937b6aaSMarkus Armbruster# @device: The device name or node-name of a root node whose writes
2486a937b6aaSMarkus Armbruster#     should be mirrored.
2487df92562eSFam Zheng#
2488a937b6aaSMarkus Armbruster# @target: the id or node-name of the block device to mirror to.  This
2489a937b6aaSMarkus Armbruster#     mustn't be attached to guest.
2490df92562eSFam Zheng#
24911d8bda12SMarkus Armbruster# @replaces: with sync=full graph node name to be replaced by the new
2492a937b6aaSMarkus Armbruster#     image when a whole image copy is done.  This can be used to
2493a937b6aaSMarkus Armbruster#     repair broken Quorum files.  By default, @device is replaced,
2494a937b6aaSMarkus Armbruster#     although implicitly created filters on it are kept.
2495df92562eSFam Zheng#
24961d8bda12SMarkus Armbruster# @speed: the maximum speed, in bytes per second
2497df92562eSFam Zheng#
2498a937b6aaSMarkus Armbruster# @sync: what parts of the disk image should be copied to the
2499a937b6aaSMarkus Armbruster#     destination (all the disk, only the sectors allocated in the
2500a937b6aaSMarkus Armbruster#     topmost image, or only new I/O).
2501df92562eSFam Zheng#
2502a937b6aaSMarkus Armbruster# @granularity: granularity of the dirty bitmap, default is 64K if the
2503a937b6aaSMarkus Armbruster#     image format doesn't have clusters, 4K if the clusters are
2504a937b6aaSMarkus Armbruster#     smaller than that, else the cluster size.  Must be a power of 2
2505a937b6aaSMarkus Armbruster#     between 512 and 64M
2506df92562eSFam Zheng#
2507a937b6aaSMarkus Armbruster# @buf-size: maximum amount of data in flight from source to target
2508df92562eSFam Zheng#
25091d8bda12SMarkus Armbruster# @on-source-error: the action to take on an error on the source,
2510a937b6aaSMarkus Armbruster#     default 'report'.  'stop' and 'enospc' can only be used if the
2511a937b6aaSMarkus Armbruster#     block device supports io-status (see BlockInfo).
2512df92562eSFam Zheng#
25131d8bda12SMarkus Armbruster# @on-target-error: the action to take on an error on the target,
2514a937b6aaSMarkus Armbruster#     default 'report' (no limitations, since this applies to a
2515a937b6aaSMarkus Armbruster#     different block device than @device).
2516df92562eSFam Zheng#
25171d8bda12SMarkus Armbruster# @filter-node-name: the node name that should be assigned to the
2518a937b6aaSMarkus Armbruster#     filter driver that the mirror job inserts into the graph above
2519a937b6aaSMarkus Armbruster#     @device.  If this option is not given, a node name is
25206cdbceb1SKevin Wolf#     autogenerated.  (Since: 2.9)
25216cdbceb1SKevin Wolf#
2522a937b6aaSMarkus Armbruster# @copy-mode: when to copy data to the destination; defaults to
2523a937b6aaSMarkus Armbruster#     'background' (Since: 3.0)
2524481debaaSMax Reitz#
2525a937b6aaSMarkus Armbruster# @auto-finalize: When false, this job will wait in a PENDING state
2526a937b6aaSMarkus Armbruster#     after it has finished its work, waiting for @block-job-finalize
2527a937b6aaSMarkus Armbruster#     before making any block graph changes.  When true, this job will
2528a937b6aaSMarkus Armbruster#     automatically perform its abort or commit actions.  Defaults to
2529a937b6aaSMarkus Armbruster#     true.  (Since 3.1)
2530a6b58adeSJohn Snow#
2531a937b6aaSMarkus Armbruster# @auto-dismiss: When false, this job will wait in a CONCLUDED state
2532a937b6aaSMarkus Armbruster#     after it has completely ceased all work, and awaits
2533a937b6aaSMarkus Armbruster#     @block-job-dismiss.  When true, this job will automatically
2534a937b6aaSMarkus Armbruster#     disappear from the query list without user intervention.
2535a6b58adeSJohn Snow#     Defaults to true.  (Since 3.1)
25364ae65a52SAndrea Bolognani#
25375072f7b3SMarc-André Lureau# Since: 2.6
2538f6235a25SMarc-André Lureau#
253914b48aaaSJohn Snow# .. qmp-example::
2540f6235a25SMarc-André Lureau#
2541f6235a25SMarc-André Lureau#     -> { "execute": "blockdev-mirror",
2542f6235a25SMarc-André Lureau#          "arguments": { "device": "ide-hd0",
2543f6235a25SMarc-André Lureau#                         "target": "target0",
2544f6235a25SMarc-André Lureau#                         "sync": "full" } }
2545f6235a25SMarc-André Lureau#     <- { "return": {} }
2546df92562eSFam Zheng##
2547df92562eSFam Zheng{ 'command': 'blockdev-mirror',
254871aa9867SAlberto Garcia  'data': { '*job-id': 'str', 'device': 'str', 'target': 'str',
2549df92562eSFam Zheng            '*replaces': 'str',
2550df92562eSFam Zheng            'sync': 'MirrorSyncMode',
2551df92562eSFam Zheng            '*speed': 'int', '*granularity': 'uint32',
2552df92562eSFam Zheng            '*buf-size': 'int', '*on-source-error': 'BlockdevOnError',
25536cdbceb1SKevin Wolf            '*on-target-error': 'BlockdevOnError',
2554481debaaSMax Reitz            '*filter-node-name': 'str',
2555a6b58adeSJohn Snow            '*copy-mode': 'MirrorCopyMode',
2556f55ba801SPaolo Bonzini            '*auto-finalize': 'bool', '*auto-dismiss': 'bool' },
2557f55ba801SPaolo Bonzini  'allow-preconfig': true }
2558df92562eSFam Zheng
2559df92562eSFam Zheng##
25605072f7b3SMarc-André Lureau# @BlockIOThrottle:
25614dc9397bSEric Blake#
25624dc9397bSEric Blake# A set of parameters describing block throttling.
25634dc9397bSEric Blake#
2564df4097aeSMarkus Armbruster# @device: Block device name
25657a9877a0SKevin Wolf#
25661d8bda12SMarkus Armbruster# @id: The name or QOM path of the guest device (since: 2.8)
25671ad166b6SBenoît Canet#
25681ad166b6SBenoît Canet# @bps: total throughput limit in bytes per second
25691ad166b6SBenoît Canet#
25701ad166b6SBenoît Canet# @bps_rd: read throughput limit in bytes per second
25711ad166b6SBenoît Canet#
25721ad166b6SBenoît Canet# @bps_wr: write throughput limit in bytes per second
25731ad166b6SBenoît Canet#
25741ad166b6SBenoît Canet# @iops: total I/O operations per second
25751ad166b6SBenoît Canet#
2576f5a845fdSAlberto Garcia# @iops_rd: read I/O operations per second
25771ad166b6SBenoît Canet#
25781ad166b6SBenoît Canet# @iops_wr: write I/O operations per second
25791ad166b6SBenoît Canet#
2580a937b6aaSMarkus Armbruster# @bps_max: total throughput limit during bursts, in bytes (Since 1.7)
25811ad166b6SBenoît Canet#
2582a937b6aaSMarkus Armbruster# @bps_rd_max: read throughput limit during bursts, in bytes (Since
2583a937b6aaSMarkus Armbruster#     1.7)
25841ad166b6SBenoît Canet#
2585a937b6aaSMarkus Armbruster# @bps_wr_max: write throughput limit during bursts, in bytes (Since
2586a937b6aaSMarkus Armbruster#     1.7)
25871ad166b6SBenoît Canet#
2588a937b6aaSMarkus Armbruster# @iops_max: total I/O operations per second during bursts, in bytes
2589a937b6aaSMarkus Armbruster#     (Since 1.7)
25901ad166b6SBenoît Canet#
2591a937b6aaSMarkus Armbruster# @iops_rd_max: read I/O operations per second during bursts, in bytes
2592a937b6aaSMarkus Armbruster#     (Since 1.7)
25931ad166b6SBenoît Canet#
2594a937b6aaSMarkus Armbruster# @iops_wr_max: write I/O operations per second during bursts, in
2595a937b6aaSMarkus Armbruster#     bytes (Since 1.7)
2596dce13204SAlberto Garcia#
2597a937b6aaSMarkus Armbruster# @bps_max_length: maximum length of the @bps_max burst period, in
2598a937b6aaSMarkus Armbruster#     seconds.  It must only be set if @bps_max is set as well.
2599dce13204SAlberto Garcia#     Defaults to 1.  (Since 2.6)
2600dce13204SAlberto Garcia#
2601a937b6aaSMarkus Armbruster# @bps_rd_max_length: maximum length of the @bps_rd_max burst period,
2602a937b6aaSMarkus Armbruster#     in seconds.  It must only be set if @bps_rd_max is set as well.
2603dce13204SAlberto Garcia#     Defaults to 1.  (Since 2.6)
2604dce13204SAlberto Garcia#
2605a937b6aaSMarkus Armbruster# @bps_wr_max_length: maximum length of the @bps_wr_max burst period,
2606a937b6aaSMarkus Armbruster#     in seconds.  It must only be set if @bps_wr_max is set as well.
2607dce13204SAlberto Garcia#     Defaults to 1.  (Since 2.6)
2608dce13204SAlberto Garcia#
2609a937b6aaSMarkus Armbruster# @iops_max_length: maximum length of the @iops burst period, in
2610a937b6aaSMarkus Armbruster#     seconds.  It must only be set if @iops_max is set as well.
2611dce13204SAlberto Garcia#     Defaults to 1.  (Since 2.6)
2612dce13204SAlberto Garcia#
2613a937b6aaSMarkus Armbruster# @iops_rd_max_length: maximum length of the @iops_rd_max burst
2614a937b6aaSMarkus Armbruster#     period, in seconds.  It must only be set if @iops_rd_max is set
2615a937b6aaSMarkus Armbruster#     as well.  Defaults to 1.  (Since 2.6)
2616dce13204SAlberto Garcia#
2617a937b6aaSMarkus Armbruster# @iops_wr_max_length: maximum length of the @iops_wr_max burst
2618a937b6aaSMarkus Armbruster#     period, in seconds.  It must only be set if @iops_wr_max is set
2619a937b6aaSMarkus Armbruster#     as well.  Defaults to 1.  (Since 2.6)
26201ad166b6SBenoît Canet#
26211d8bda12SMarkus Armbruster# @iops_size: an I/O size in bytes (Since 1.7)
26221ad166b6SBenoît Canet#
26231d8bda12SMarkus Armbruster# @group: throttle group name (Since 2.4)
262476f4afb4SAlberto Garcia#
2625df4097aeSMarkus Armbruster# Features:
2626a937b6aaSMarkus Armbruster#
2627df4097aeSMarkus Armbruster# @deprecated: Member @device is deprecated.  Use @id instead.
2628df4097aeSMarkus Armbruster#
26291ad166b6SBenoît Canet# Since: 1.1
26301ad166b6SBenoît Canet##
26314dc9397bSEric Blake{ 'struct': 'BlockIOThrottle',
2632df4097aeSMarkus Armbruster  'data': { '*device': { 'type': 'str', 'features': [ 'deprecated' ] },
2633df4097aeSMarkus Armbruster            '*id': 'str', 'bps': 'int', 'bps_rd': 'int',
26347a9877a0SKevin Wolf            'bps_wr': 'int', 'iops': 'int', 'iops_rd': 'int', 'iops_wr': 'int',
26351ad166b6SBenoît Canet            '*bps_max': 'int', '*bps_rd_max': 'int',
26361ad166b6SBenoît Canet            '*bps_wr_max': 'int', '*iops_max': 'int',
26371ad166b6SBenoît Canet            '*iops_rd_max': 'int', '*iops_wr_max': 'int',
2638dce13204SAlberto Garcia            '*bps_max_length': 'int', '*bps_rd_max_length': 'int',
2639dce13204SAlberto Garcia            '*bps_wr_max_length': 'int', '*iops_max_length': 'int',
2640dce13204SAlberto Garcia            '*iops_rd_max_length': 'int', '*iops_wr_max_length': 'int',
264176f4afb4SAlberto Garcia            '*iops_size': 'int', '*group': 'str' } }
26421ad166b6SBenoît Canet
26431ad166b6SBenoît Canet##
2644432d889eSManos Pitsidianakis# @ThrottleLimits:
2645432d889eSManos Pitsidianakis#
2646a937b6aaSMarkus Armbruster# Limit parameters for throttling.  Since some limit combinations are
2647a937b6aaSMarkus Armbruster# illegal, limits should always be set in one transaction.  All fields
2648a937b6aaSMarkus Armbruster# are optional.  When setting limits, if a field is missing the
2649a937b6aaSMarkus Armbruster# current value is not changed.
2650432d889eSManos Pitsidianakis#
2651432d889eSManos Pitsidianakis# @iops-total: limit total I/O operations per second
2652a937b6aaSMarkus Armbruster#
2653432d889eSManos Pitsidianakis# @iops-total-max: I/O operations burst
2654a937b6aaSMarkus Armbruster#
2655a937b6aaSMarkus Armbruster# @iops-total-max-length: length of the iops-total-max burst period,
2656a937b6aaSMarkus Armbruster#     in seconds It must only be set if @iops-total-max is set as
2657a937b6aaSMarkus Armbruster#     well.
2658a937b6aaSMarkus Armbruster#
2659432d889eSManos Pitsidianakis# @iops-read: limit read operations per second
2660a937b6aaSMarkus Armbruster#
2661432d889eSManos Pitsidianakis# @iops-read-max: I/O operations read burst
2662a937b6aaSMarkus Armbruster#
2663a937b6aaSMarkus Armbruster# @iops-read-max-length: length of the iops-read-max burst period, in
2664a937b6aaSMarkus Armbruster#     seconds It must only be set if @iops-read-max is set as well.
2665a937b6aaSMarkus Armbruster#
2666432d889eSManos Pitsidianakis# @iops-write: limit write operations per second
2667a937b6aaSMarkus Armbruster#
2668432d889eSManos Pitsidianakis# @iops-write-max: I/O operations write burst
2669a937b6aaSMarkus Armbruster#
2670a937b6aaSMarkus Armbruster# @iops-write-max-length: length of the iops-write-max burst period,
2671a937b6aaSMarkus Armbruster#     in seconds It must only be set if @iops-write-max is set as
2672a937b6aaSMarkus Armbruster#     well.
2673a937b6aaSMarkus Armbruster#
2674432d889eSManos Pitsidianakis# @bps-total: limit total bytes per second
2675a937b6aaSMarkus Armbruster#
2676432d889eSManos Pitsidianakis# @bps-total-max: total bytes burst
2677a937b6aaSMarkus Armbruster#
2678a937b6aaSMarkus Armbruster# @bps-total-max-length: length of the bps-total-max burst period, in
2679a937b6aaSMarkus Armbruster#     seconds.  It must only be set if @bps-total-max is set as well.
2680a937b6aaSMarkus Armbruster#
2681432d889eSManos Pitsidianakis# @bps-read: limit read bytes per second
2682a937b6aaSMarkus Armbruster#
2683432d889eSManos Pitsidianakis# @bps-read-max: total bytes read burst
2684a937b6aaSMarkus Armbruster#
2685a937b6aaSMarkus Armbruster# @bps-read-max-length: length of the bps-read-max burst period, in
2686a937b6aaSMarkus Armbruster#     seconds It must only be set if @bps-read-max is set as well.
2687a937b6aaSMarkus Armbruster#
2688432d889eSManos Pitsidianakis# @bps-write: limit write bytes per second
2689a937b6aaSMarkus Armbruster#
2690432d889eSManos Pitsidianakis# @bps-write-max: total bytes write burst
2691a937b6aaSMarkus Armbruster#
2692a937b6aaSMarkus Armbruster# @bps-write-max-length: length of the bps-write-max burst period, in
2693a937b6aaSMarkus Armbruster#     seconds It must only be set if @bps-write-max is set as well.
2694a937b6aaSMarkus Armbruster#
2695432d889eSManos Pitsidianakis# @iops-size: when limiting by iops max size of an I/O in bytes
2696432d889eSManos Pitsidianakis#
2697432d889eSManos Pitsidianakis# Since: 2.11
2698432d889eSManos Pitsidianakis##
2699432d889eSManos Pitsidianakis{ 'struct': 'ThrottleLimits',
2700432d889eSManos Pitsidianakis  'data': { '*iops-total' : 'int', '*iops-total-max' : 'int',
2701432d889eSManos Pitsidianakis            '*iops-total-max-length' : 'int', '*iops-read' : 'int',
2702432d889eSManos Pitsidianakis            '*iops-read-max' : 'int', '*iops-read-max-length' : 'int',
2703432d889eSManos Pitsidianakis            '*iops-write' : 'int', '*iops-write-max' : 'int',
2704432d889eSManos Pitsidianakis            '*iops-write-max-length' : 'int', '*bps-total' : 'int',
2705432d889eSManos Pitsidianakis            '*bps-total-max' : 'int', '*bps-total-max-length' : 'int',
2706432d889eSManos Pitsidianakis            '*bps-read' : 'int', '*bps-read-max' : 'int',
2707432d889eSManos Pitsidianakis            '*bps-read-max-length' : 'int', '*bps-write' : 'int',
2708432d889eSManos Pitsidianakis            '*bps-write-max' : 'int', '*bps-write-max-length' : 'int',
2709432d889eSManos Pitsidianakis            '*iops-size' : 'int' } }
2710432d889eSManos Pitsidianakis
2711432d889eSManos Pitsidianakis##
2712381bd744SKevin Wolf# @ThrottleGroupProperties:
2713381bd744SKevin Wolf#
2714381bd744SKevin Wolf# Properties for throttle-group objects.
2715381bd744SKevin Wolf#
2716381bd744SKevin Wolf# @limits: limits to apply for this throttle group
2717381bd744SKevin Wolf#
27189fb49daaSMarkus Armbruster# Features:
2719a937b6aaSMarkus Armbruster#
27209fb49daaSMarkus Armbruster# @unstable: All members starting with x- are aliases for the same key
27219fb49daaSMarkus Armbruster#     without x- in the @limits object.  This is not a stable
2722a937b6aaSMarkus Armbruster#     interface and may be removed or changed incompatibly in the
2723a937b6aaSMarkus Armbruster#     future.  Use @limits for a supported stable interface.
27249fb49daaSMarkus Armbruster#
2725381bd744SKevin Wolf# Since: 2.11
2726381bd744SKevin Wolf##
2727381bd744SKevin Wolf{ 'struct': 'ThrottleGroupProperties',
2728381bd744SKevin Wolf  'data': { '*limits': 'ThrottleLimits',
27299fb49daaSMarkus Armbruster            '*x-iops-total': { 'type': 'int',
27309fb49daaSMarkus Armbruster                               'features': [ 'unstable' ] },
27319fb49daaSMarkus Armbruster            '*x-iops-total-max': { 'type': 'int',
27329fb49daaSMarkus Armbruster                                   'features': [ 'unstable' ] },
27339fb49daaSMarkus Armbruster            '*x-iops-total-max-length': { 'type': 'int',
27349fb49daaSMarkus Armbruster                                          'features': [ 'unstable' ] },
27359fb49daaSMarkus Armbruster            '*x-iops-read': { 'type': 'int',
27369fb49daaSMarkus Armbruster                              'features': [ 'unstable' ] },
27379fb49daaSMarkus Armbruster            '*x-iops-read-max': { 'type': 'int',
27389fb49daaSMarkus Armbruster                                  'features': [ 'unstable' ] },
27399fb49daaSMarkus Armbruster            '*x-iops-read-max-length': { 'type': 'int',
27409fb49daaSMarkus Armbruster                                         'features': [ 'unstable' ] },
27419fb49daaSMarkus Armbruster            '*x-iops-write': { 'type': 'int',
27429fb49daaSMarkus Armbruster                               'features': [ 'unstable' ] },
27439fb49daaSMarkus Armbruster            '*x-iops-write-max': { 'type': 'int',
27449fb49daaSMarkus Armbruster                                   'features': [ 'unstable' ] },
27459fb49daaSMarkus Armbruster            '*x-iops-write-max-length': { 'type': 'int',
27469fb49daaSMarkus Armbruster                                          'features': [ 'unstable' ] },
27479fb49daaSMarkus Armbruster            '*x-bps-total': { 'type': 'int',
27489fb49daaSMarkus Armbruster                              'features': [ 'unstable' ] },
27499fb49daaSMarkus Armbruster            '*x-bps-total-max': { 'type': 'int',
27509fb49daaSMarkus Armbruster                                  'features': [ 'unstable' ] },
27519fb49daaSMarkus Armbruster            '*x-bps-total-max-length': { 'type': 'int',
27529fb49daaSMarkus Armbruster                                         'features': [ 'unstable' ] },
27539fb49daaSMarkus Armbruster            '*x-bps-read': { 'type': 'int',
27549fb49daaSMarkus Armbruster                             'features': [ 'unstable' ] },
27559fb49daaSMarkus Armbruster            '*x-bps-read-max': { 'type': 'int',
27569fb49daaSMarkus Armbruster                                 'features': [ 'unstable' ] },
27579fb49daaSMarkus Armbruster            '*x-bps-read-max-length': { 'type': 'int',
27589fb49daaSMarkus Armbruster                                        'features': [ 'unstable' ] },
27599fb49daaSMarkus Armbruster            '*x-bps-write': { 'type': 'int',
27609fb49daaSMarkus Armbruster                              'features': [ 'unstable' ] },
27619fb49daaSMarkus Armbruster            '*x-bps-write-max': { 'type': 'int',
27629fb49daaSMarkus Armbruster                                  'features': [ 'unstable' ] },
27639fb49daaSMarkus Armbruster            '*x-bps-write-max-length': { 'type': 'int',
27649fb49daaSMarkus Armbruster                                         'features': [ 'unstable' ] },
27659fb49daaSMarkus Armbruster            '*x-iops-size': { 'type': 'int',
27669fb49daaSMarkus Armbruster                              'features': [ 'unstable' ] } } }
2767381bd744SKevin Wolf
2768381bd744SKevin Wolf##
27691ad166b6SBenoît Canet# @block-stream:
27701ad166b6SBenoît Canet#
27711ad166b6SBenoît Canet# Copy data from a backing file into a block device.
27721ad166b6SBenoît Canet#
2773a937b6aaSMarkus Armbruster# The block streaming operation is performed in the background until
2774a937b6aaSMarkus Armbruster# the entire backing file has been copied.  This command returns
2775a937b6aaSMarkus Armbruster# immediately once streaming has started.  The status of ongoing block
2776a937b6aaSMarkus Armbruster# streaming operations can be checked with query-block-jobs.  The
2777a937b6aaSMarkus Armbruster# operation can be stopped before it has completed using the
2778a937b6aaSMarkus Armbruster# block-job-cancel command.
27791ad166b6SBenoît Canet#
2780a937b6aaSMarkus Armbruster# The node that receives the data is called the top image, can be
2781a937b6aaSMarkus Armbruster# located in any part of the chain (but always above the base image;
2782a937b6aaSMarkus Armbruster# see below) and can be specified using its device or node name.
2783a937b6aaSMarkus Armbruster# Earlier qemu versions only allowed 'device' to name the top level
2784a937b6aaSMarkus Armbruster# node; presence of the 'base-node' parameter during introspection can
2785a937b6aaSMarkus Armbruster# be used as a witness of the enhanced semantics of 'device'.
2786554b6147SAlberto Garcia#
2787a937b6aaSMarkus Armbruster# If a base file is specified then sectors are not copied from that
2788a937b6aaSMarkus Armbruster# base file and its backing chain.  This can be used to stream a
2789a937b6aaSMarkus Armbruster# subset of the backing file chain instead of flattening the entire
2790a937b6aaSMarkus Armbruster# image.  When streaming completes the image file will have the base
2791a937b6aaSMarkus Armbruster# file as its backing file, unless that node was changed while the job
2792a937b6aaSMarkus Armbruster# was running.  In that case, base's parent's backing (or filtered,
2793a937b6aaSMarkus Armbruster# whichever exists) child (i.e., base at the beginning of the job)
2794a937b6aaSMarkus Armbruster# will be the new backing file.
27951ad166b6SBenoît Canet#
2796a937b6aaSMarkus Armbruster# On successful completion the image file is updated to drop the
2797a937b6aaSMarkus Armbruster# backing file and the BLOCK_JOB_COMPLETED event is emitted.
27981ad166b6SBenoît Canet#
2799a937b6aaSMarkus Armbruster# In case @device is a filter node, block-stream modifies the first
2800a937b6aaSMarkus Armbruster# non-filter overlay node below it to point to the new backing node
2801a937b6aaSMarkus Armbruster# instead of modifying @device itself.
280267acfd21SMax Reitz#
2803a937b6aaSMarkus Armbruster# @job-id: identifier for the newly-created block job.  If omitted,
2804a937b6aaSMarkus Armbruster#     the device name will be used.  (Since 2.7)
28052323322eSAlberto Garcia#
2806554b6147SAlberto Garcia# @device: the device or node name of the top image
28071ad166b6SBenoît Canet#
2808a937b6aaSMarkus Armbruster# @base: the common backing file name.  It cannot be set if @base-node
2809a937b6aaSMarkus Armbruster#     or @bottom is also set.
2810312fe09cSAlberto Garcia#
2811a937b6aaSMarkus Armbruster# @base-node: the node name of the backing file.  It cannot be set if
2812a937b6aaSMarkus Armbruster#     @base or @bottom is also set.  (Since 2.8)
28137f4a396dSVladimir Sementsov-Ogievskiy#
28147f4a396dSVladimir Sementsov-Ogievskiy# @bottom: the last node in the chain that should be streamed into
2815a937b6aaSMarkus Armbruster#     top.  It cannot be set if @base or @base-node is also set.  It
2816a937b6aaSMarkus Armbruster#     cannot be filter node.  (Since 6.0)
28171ad166b6SBenoît Canet#
2818a937b6aaSMarkus Armbruster# @backing-file: The backing file string to write into the top image.
2819a937b6aaSMarkus Armbruster#     This filename is not validated.
282013d8cc51SJeff Cody#
2821a937b6aaSMarkus Armbruster#     If a pathname string is such that it cannot be resolved by QEMU,
2822a937b6aaSMarkus Armbruster#     that means that subsequent QMP or HMP commands must use
2823a937b6aaSMarkus Armbruster#     node-names for the image in question, as filename lookup methods
2824a937b6aaSMarkus Armbruster#     will fail.
282513d8cc51SJeff Cody#
2826a937b6aaSMarkus Armbruster#     If not specified, QEMU will automatically determine the backing
2827a937b6aaSMarkus Armbruster#     file string to use, or error out if there is no obvious choice.
2828a937b6aaSMarkus Armbruster#     Care should be taken when specifying the string, to specify a
2829a937b6aaSMarkus Armbruster#     valid filename or protocol.  (Since 2.1)
283013d8cc51SJeff Cody#
2831209e64d9SMarkus Armbruster# @backing-mask-protocol: If true, replace any protocol mentioned in
2832209e64d9SMarkus Armbruster#     the 'backing file format' with 'raw', rather than storing the
2833209e64d9SMarkus Armbruster#     protocol name as the backing format.  Can be used even when no
2834209e64d9SMarkus Armbruster#     image header will be updated (default false; since 9.0).
283572098a3aSPeter Krempa#
28361d8bda12SMarkus Armbruster# @speed: the maximum speed, in bytes per second
28371ad166b6SBenoît Canet#
2838a937b6aaSMarkus Armbruster# @on-error: the action to take on an error (default report).  'stop'
2839a937b6aaSMarkus Armbruster#     and 'enospc' can only be used if the block device supports
2840a937b6aaSMarkus Armbruster#     io-status (see BlockInfo).  (Since 1.3)
28411ad166b6SBenoît Canet#
2842880747a8SAndrey Shinkevich# @filter-node-name: the node name that should be assigned to the
2843a937b6aaSMarkus Armbruster#     filter driver that the stream job inserts into the graph above
2844a937b6aaSMarkus Armbruster#     @device.  If this option is not given, a node name is
2845880747a8SAndrey Shinkevich#     autogenerated.  (Since: 6.0)
2846880747a8SAndrey Shinkevich#
2847a937b6aaSMarkus Armbruster# @auto-finalize: When false, this job will wait in a PENDING state
2848a937b6aaSMarkus Armbruster#     after it has finished its work, waiting for @block-job-finalize
2849a937b6aaSMarkus Armbruster#     before making any block graph changes.  When true, this job will
2850a937b6aaSMarkus Armbruster#     automatically perform its abort or commit actions.  Defaults to
2851a937b6aaSMarkus Armbruster#     true.  (Since 3.1)
2852a937b6aaSMarkus Armbruster#
2853a937b6aaSMarkus Armbruster# @auto-dismiss: When false, this job will wait in a CONCLUDED state
2854a937b6aaSMarkus Armbruster#     after it has completely ceased all work, and awaits
2855a937b6aaSMarkus Armbruster#     @block-job-dismiss.  When true, this job will automatically
2856a937b6aaSMarkus Armbruster#     disappear from the query list without user intervention.
2857241ca1abSJohn Snow#     Defaults to true.  (Since 3.1)
2858241ca1abSJohn Snow#
28592746f060SMarkus Armbruster# Errors:
2860e050e426SPeter Maydell#     - If @device does not exist, DeviceNotFound.
286149b37c23SMarc-André Lureau#
28621ad166b6SBenoît Canet# Since: 1.1
286349b37c23SMarc-André Lureau#
286414b48aaaSJohn Snow# .. qmp-example::
286549b37c23SMarc-André Lureau#
286649b37c23SMarc-André Lureau#     -> { "execute": "block-stream",
286749b37c23SMarc-André Lureau#          "arguments": { "device": "virtio0",
286849b37c23SMarc-André Lureau#                         "base": "/tmp/master.qcow2" } }
286949b37c23SMarc-André Lureau#     <- { "return": {} }
28701ad166b6SBenoît Canet##
28711ad166b6SBenoît Canet{ 'command': 'block-stream',
28722323322eSAlberto Garcia  'data': { '*job-id': 'str', 'device': 'str', '*base': 'str',
287372098a3aSPeter Krempa            '*base-node': 'str', '*backing-file': 'str',
287472098a3aSPeter Krempa            '*backing-mask-protocol': 'bool',
287572098a3aSPeter Krempa            '*bottom': 'str',
28767f4a396dSVladimir Sementsov-Ogievskiy            '*speed': 'int', '*on-error': 'BlockdevOnError',
2877880747a8SAndrey Shinkevich            '*filter-node-name': 'str',
2878f55ba801SPaolo Bonzini            '*auto-finalize': 'bool', '*auto-dismiss': 'bool' },
2879f55ba801SPaolo Bonzini  'allow-preconfig': true }
28801ad166b6SBenoît Canet
28811ad166b6SBenoît Canet##
28821ad166b6SBenoît Canet# @block-job-set-speed:
28831ad166b6SBenoît Canet#
28841ad166b6SBenoît Canet# Set maximum speed for a background block operation.
28851ad166b6SBenoît Canet#
28861ad166b6SBenoît Canet# This command can only be issued when there is an active block job.
28871ad166b6SBenoît Canet#
28881ad166b6SBenoît Canet# Throttling can be disabled by setting the speed to 0.
28891ad166b6SBenoît Canet#
28906aae5be6SAlberto Garcia# @device: The job identifier.  This used to be a device name (hence
2891a937b6aaSMarkus Armbruster#     the name of the parameter), but since QEMU 2.7 it can have other
2892a937b6aaSMarkus Armbruster#     values.
28931ad166b6SBenoît Canet#
28941ad166b6SBenoît Canet# @speed: the maximum speed, in bytes per second, or 0 for unlimited.
28951ad166b6SBenoît Canet#     Defaults to 0.
28961ad166b6SBenoît Canet#
28972746f060SMarkus Armbruster# Errors:
2898a937b6aaSMarkus Armbruster#     - If no background operation is active on this device,
2899a937b6aaSMarkus Armbruster#       DeviceNotActive
29001ad166b6SBenoît Canet#
29011ad166b6SBenoît Canet# Since: 1.1
29021ad166b6SBenoît Canet##
29031ad166b6SBenoît Canet{ 'command': 'block-job-set-speed',
2904f55ba801SPaolo Bonzini  'data': { 'device': 'str', 'speed': 'int' },
2905f55ba801SPaolo Bonzini  'allow-preconfig': true }
29061ad166b6SBenoît Canet
29071ad166b6SBenoît Canet##
29081ad166b6SBenoît Canet# @block-job-cancel:
29091ad166b6SBenoît Canet#
29101ad166b6SBenoît Canet# Stop an active background block operation.
29111ad166b6SBenoît Canet#
2912a937b6aaSMarkus Armbruster# This command returns immediately after marking the active background
2913a937b6aaSMarkus Armbruster# block operation for cancellation.  It is an error to call this
2914a937b6aaSMarkus Armbruster# command if no operation is in progress.
29151ad166b6SBenoît Canet#
29161ad166b6SBenoît Canet# The operation will cancel as soon as possible and then emit the
2917a937b6aaSMarkus Armbruster# BLOCK_JOB_CANCELLED event.  Before that happens the job is still
2918a937b6aaSMarkus Armbruster# visible when enumerated using query-block-jobs.
29191ad166b6SBenoît Canet#
2920a937b6aaSMarkus Armbruster# Note that if you issue 'block-job-cancel' after 'drive-mirror' has
2921a937b6aaSMarkus Armbruster# indicated (via the event BLOCK_JOB_READY) that the source and
2922a937b6aaSMarkus Armbruster# destination are synchronized, then the event triggered by this
2923a937b6aaSMarkus Armbruster# command changes to BLOCK_JOB_COMPLETED, to indicate that the
2924a937b6aaSMarkus Armbruster# mirroring has ended and the destination now has a point-in-time copy
2925a937b6aaSMarkus Armbruster# tied to the time of the cancellation.
2926c117bb14SKashyap Chamarthy#
2927a937b6aaSMarkus Armbruster# For streaming, the image file retains its backing file unless the
2928a937b6aaSMarkus Armbruster# streaming operation happens to complete just as it is being
2929a937b6aaSMarkus Armbruster# cancelled.  A new streaming operation can be started at a later time
2930a937b6aaSMarkus Armbruster# to finish copying all data from the backing file.
29311ad166b6SBenoît Canet#
29326aae5be6SAlberto Garcia# @device: The job identifier.  This used to be a device name (hence
2933a937b6aaSMarkus Armbruster#     the name of the parameter), but since QEMU 2.7 it can have other
2934a937b6aaSMarkus Armbruster#     values.
29351ad166b6SBenoît Canet#
2936a937b6aaSMarkus Armbruster# @force: If true, and the job has already emitted the event
2937a937b6aaSMarkus Armbruster#     BLOCK_JOB_READY, abandon the job immediately (even if it is
2938a937b6aaSMarkus Armbruster#     paused) instead of waiting for the destination to complete its
2939a937b6aaSMarkus Armbruster#     final synchronization (since 1.3)
29401ad166b6SBenoît Canet#
29412746f060SMarkus Armbruster# Errors:
2942a937b6aaSMarkus Armbruster#     - If no background operation is active on this device,
2943a937b6aaSMarkus Armbruster#       DeviceNotActive
29441ad166b6SBenoît Canet#
29451ad166b6SBenoît Canet# Since: 1.1
29461ad166b6SBenoît Canet##
2947f55ba801SPaolo Bonzini{ 'command': 'block-job-cancel', 'data': { 'device': 'str', '*force': 'bool' },
2948f55ba801SPaolo Bonzini  'allow-preconfig': true }
29491ad166b6SBenoît Canet
29501ad166b6SBenoît Canet##
29511ad166b6SBenoît Canet# @block-job-pause:
29521ad166b6SBenoît Canet#
29531ad166b6SBenoît Canet# Pause an active background block operation.
29541ad166b6SBenoît Canet#
2955a937b6aaSMarkus Armbruster# This command returns immediately after marking the active background
2956a937b6aaSMarkus Armbruster# block operation for pausing.  It is an error to call this command if
2957a937b6aaSMarkus Armbruster# no operation is in progress or if the job is already paused.
29581ad166b6SBenoît Canet#
2959a937b6aaSMarkus Armbruster# The operation will pause as soon as possible.  No event is emitted
2960a937b6aaSMarkus Armbruster# when the operation is actually paused.  Cancelling a paused job
2961a937b6aaSMarkus Armbruster# automatically resumes it.
29621ad166b6SBenoît Canet#
29636aae5be6SAlberto Garcia# @device: The job identifier.  This used to be a device name (hence
2964a937b6aaSMarkus Armbruster#     the name of the parameter), but since QEMU 2.7 it can have other
2965a937b6aaSMarkus Armbruster#     values.
29661ad166b6SBenoît Canet#
29672746f060SMarkus Armbruster# Errors:
2968a937b6aaSMarkus Armbruster#     - If no background operation is active on this device,
2969a937b6aaSMarkus Armbruster#       DeviceNotActive
29701ad166b6SBenoît Canet#
29711ad166b6SBenoît Canet# Since: 1.3
29721ad166b6SBenoît Canet##
2973f55ba801SPaolo Bonzini{ 'command': 'block-job-pause', 'data': { 'device': 'str' },
2974f55ba801SPaolo Bonzini  'allow-preconfig': true }
29751ad166b6SBenoît Canet
29761ad166b6SBenoît Canet##
29771ad166b6SBenoît Canet# @block-job-resume:
29781ad166b6SBenoît Canet#
29791ad166b6SBenoît Canet# Resume an active background block operation.
29801ad166b6SBenoît Canet#
2981a937b6aaSMarkus Armbruster# This command returns immediately after resuming a paused background
2982a937b6aaSMarkus Armbruster# block operation.  It is an error to call this command if no
2983a937b6aaSMarkus Armbruster# operation is in progress or if the job is not paused.
29841ad166b6SBenoît Canet#
29851ad166b6SBenoît Canet# This command also clears the error status of the job.
29861ad166b6SBenoît Canet#
29876aae5be6SAlberto Garcia# @device: The job identifier.  This used to be a device name (hence
2988a937b6aaSMarkus Armbruster#     the name of the parameter), but since QEMU 2.7 it can have other
2989a937b6aaSMarkus Armbruster#     values.
29901ad166b6SBenoît Canet#
29912746f060SMarkus Armbruster# Errors:
2992a937b6aaSMarkus Armbruster#     - If no background operation is active on this device,
2993a937b6aaSMarkus Armbruster#       DeviceNotActive
29941ad166b6SBenoît Canet#
29951ad166b6SBenoît Canet# Since: 1.3
29961ad166b6SBenoît Canet##
2997f55ba801SPaolo Bonzini{ 'command': 'block-job-resume', 'data': { 'device': 'str' },
2998f55ba801SPaolo Bonzini  'allow-preconfig': true }
29991ad166b6SBenoît Canet
30001ad166b6SBenoît Canet##
30011ad166b6SBenoît Canet# @block-job-complete:
30021ad166b6SBenoît Canet#
3003a937b6aaSMarkus Armbruster# Manually trigger completion of an active background block operation.
3004a937b6aaSMarkus Armbruster# This is supported for drive mirroring, where it also switches the
3005a937b6aaSMarkus Armbruster# device to write to the target path only.  The ability to complete is
3006a937b6aaSMarkus Armbruster# signaled with a BLOCK_JOB_READY event.
30071ad166b6SBenoît Canet#
3008a937b6aaSMarkus Armbruster# This command completes an active background block operation
3009a937b6aaSMarkus Armbruster# synchronously.  The ordering of this command's return with the
3010a937b6aaSMarkus Armbruster# BLOCK_JOB_COMPLETED event is not defined.  Note that if an I/O error
3011a937b6aaSMarkus Armbruster# occurs during the processing of this command: 1) the command itself
3012a937b6aaSMarkus Armbruster# will fail; 2) the error will be processed according to the
3013a937b6aaSMarkus Armbruster# rerror/werror arguments that were specified when starting the
3014a937b6aaSMarkus Armbruster# operation.
30151ad166b6SBenoît Canet#
30161ad166b6SBenoît Canet# A cancelled or paused job cannot be completed.
30171ad166b6SBenoît Canet#
30186aae5be6SAlberto Garcia# @device: The job identifier.  This used to be a device name (hence
3019a937b6aaSMarkus Armbruster#     the name of the parameter), but since QEMU 2.7 it can have other
3020a937b6aaSMarkus Armbruster#     values.
30211ad166b6SBenoît Canet#
30222746f060SMarkus Armbruster# Errors:
3023a937b6aaSMarkus Armbruster#     - If no background operation is active on this device,
3024a937b6aaSMarkus Armbruster#       DeviceNotActive
30251ad166b6SBenoît Canet#
30261ad166b6SBenoît Canet# Since: 1.3
30271ad166b6SBenoît Canet##
3028f55ba801SPaolo Bonzini{ 'command': 'block-job-complete', 'data': { 'device': 'str' },
3029f55ba801SPaolo Bonzini  'allow-preconfig': true }
30301ad166b6SBenoît Canet
30311ad166b6SBenoît Canet##
303275f71059SJohn Snow# @block-job-dismiss:
303375f71059SJohn Snow#
3034a937b6aaSMarkus Armbruster# For jobs that have already concluded, remove them from the
3035a937b6aaSMarkus Armbruster# block-job-query list.  This command only needs to be run for jobs
3036a937b6aaSMarkus Armbruster# which were started with QEMU 2.12+ job lifetime management
3037a937b6aaSMarkus Armbruster# semantics.
303875f71059SJohn Snow#
3039a937b6aaSMarkus Armbruster# This command will refuse to operate on any job that has not yet
304001bed0ffSMarkus Armbruster# reached its terminal state, JOB_STATUS_CONCLUDED.  For jobs that
304101bed0ffSMarkus Armbruster# make use of the BLOCK_JOB_READY event, block-job-cancel or
3042a937b6aaSMarkus Armbruster# block-job-complete will still need to be used as appropriate.
304375f71059SJohn Snow#
304475f71059SJohn Snow# @id: The job identifier.
304575f71059SJohn Snow#
304675f71059SJohn Snow# Since: 2.12
304775f71059SJohn Snow##
3048f55ba801SPaolo Bonzini{ 'command': 'block-job-dismiss', 'data': { 'id': 'str' },
3049f55ba801SPaolo Bonzini  'allow-preconfig': true }
305075f71059SJohn Snow
305175f71059SJohn Snow##
305211b61fbcSJohn Snow# @block-job-finalize:
305311b61fbcSJohn Snow#
305411b61fbcSJohn Snow# Once a job that has manual=true reaches the pending state, it can be
3055a937b6aaSMarkus Armbruster# instructed to finalize any graph changes and do any necessary
3056a937b6aaSMarkus Armbruster# cleanup via this command.  For jobs in a transaction, instructing
3057a937b6aaSMarkus Armbruster# one job to finalize will force ALL jobs in the transaction to
3058a937b6aaSMarkus Armbruster# finalize, so it is only necessary to instruct a single member job to
3059a937b6aaSMarkus Armbruster# finalize.
306011b61fbcSJohn Snow#
306111b61fbcSJohn Snow# @id: The job identifier.
306211b61fbcSJohn Snow#
306311b61fbcSJohn Snow# Since: 2.12
306411b61fbcSJohn Snow##
3065f55ba801SPaolo Bonzini{ 'command': 'block-job-finalize', 'data': { 'id': 'str' },
3066f55ba801SPaolo Bonzini  'allow-preconfig': true }
306711b61fbcSJohn Snow
306811b61fbcSJohn Snow##
30692d400d15SFiona Ebner# @BlockJobChangeOptionsMirror:
30702d400d15SFiona Ebner#
30712d400d15SFiona Ebner# @copy-mode: Switch to this copy mode.  Currently, only the switch
30722d400d15SFiona Ebner#     from 'background' to 'write-blocking' is implemented.
30732d400d15SFiona Ebner#
30742d400d15SFiona Ebner# Since: 8.2
30752d400d15SFiona Ebner##
30762d400d15SFiona Ebner{ 'struct': 'BlockJobChangeOptionsMirror',
30772d400d15SFiona Ebner  'data': { 'copy-mode' : 'MirrorCopyMode' } }
30782d400d15SFiona Ebner
30792d400d15SFiona Ebner##
308061a3a5a7SFiona Ebner# @BlockJobChangeOptions:
308161a3a5a7SFiona Ebner#
308261a3a5a7SFiona Ebner# Block job options that can be changed after job creation.
308361a3a5a7SFiona Ebner#
308461a3a5a7SFiona Ebner# @id: The job identifier
308561a3a5a7SFiona Ebner#
308661a3a5a7SFiona Ebner# @type: The job type
308761a3a5a7SFiona Ebner#
308837507c14SMarkus Armbruster# Since: 8.2
308961a3a5a7SFiona Ebner##
309061a3a5a7SFiona Ebner{ 'union': 'BlockJobChangeOptions',
309161a3a5a7SFiona Ebner  'base': { 'id': 'str', 'type': 'JobType' },
309261a3a5a7SFiona Ebner  'discriminator': 'type',
30932d400d15SFiona Ebner  'data': { 'mirror': 'BlockJobChangeOptionsMirror' } }
309461a3a5a7SFiona Ebner
309561a3a5a7SFiona Ebner##
309661a3a5a7SFiona Ebner# @block-job-change:
309761a3a5a7SFiona Ebner#
309861a3a5a7SFiona Ebner# Change the block job's options.
309961a3a5a7SFiona Ebner#
310061a3a5a7SFiona Ebner# Since: 8.2
310161a3a5a7SFiona Ebner##
310261a3a5a7SFiona Ebner{ 'command': 'block-job-change',
310361a3a5a7SFiona Ebner  'data': 'BlockJobChangeOptions', 'boxed': true }
310461a3a5a7SFiona Ebner
310561a3a5a7SFiona Ebner##
31065072f7b3SMarc-André Lureau# @BlockdevDiscardOptions:
31071ad166b6SBenoît Canet#
31081ad166b6SBenoît Canet# Determines how to handle discard requests.
31091ad166b6SBenoît Canet#
31101ad166b6SBenoît Canet# @ignore: Ignore the request
3111a937b6aaSMarkus Armbruster#
31121ad166b6SBenoît Canet# @unmap: Forward as an unmap request
31131ad166b6SBenoît Canet#
311479b7a77eSMarkus Armbruster# Since: 2.9
31151ad166b6SBenoît Canet##
31161ad166b6SBenoît Canet{ 'enum': 'BlockdevDiscardOptions',
31171ad166b6SBenoît Canet  'data': [ 'ignore', 'unmap' ] }
31181ad166b6SBenoît Canet
31191ad166b6SBenoît Canet##
31205072f7b3SMarc-André Lureau# @BlockdevDetectZeroesOptions:
31211ad166b6SBenoît Canet#
31221ad166b6SBenoît Canet# Describes the operation mode for the automatic conversion of plain
3123a937b6aaSMarkus Armbruster# zero writes by the OS to driver specific optimized zero write
3124a937b6aaSMarkus Armbruster# commands.
31251ad166b6SBenoît Canet#
31261ad166b6SBenoît Canet# @off: Disabled (default)
3127a937b6aaSMarkus Armbruster#
31281ad166b6SBenoît Canet# @on: Enabled
3129a937b6aaSMarkus Armbruster#
3130a937b6aaSMarkus Armbruster# @unmap: Enabled and even try to unmap blocks if possible.  This
3131a937b6aaSMarkus Armbruster#     requires also that @BlockdevDiscardOptions is set to unmap for
3132a937b6aaSMarkus Armbruster#     this device.
31331ad166b6SBenoît Canet#
31341ad166b6SBenoît Canet# Since: 2.1
31351ad166b6SBenoît Canet##
31361ad166b6SBenoît Canet{ 'enum': 'BlockdevDetectZeroesOptions',
31371ad166b6SBenoît Canet  'data': [ 'off', 'on', 'unmap' ] }
31381ad166b6SBenoît Canet
31391ad166b6SBenoît Canet##
31405072f7b3SMarc-André Lureau# @BlockdevAioOptions:
31411ad166b6SBenoît Canet#
31421ad166b6SBenoît Canet# Selects the AIO backend to handle I/O requests
31431ad166b6SBenoît Canet#
31441ad166b6SBenoît Canet# @threads: Use qemu's thread pool
3145a937b6aaSMarkus Armbruster#
31461ad166b6SBenoît Canet# @native: Use native AIO backend (only Linux and Windows)
3147a937b6aaSMarkus Armbruster#
3148f14beaecSAarushi Mehta# @io_uring: Use linux io_uring (since 5.0)
31491ad166b6SBenoît Canet#
315079b7a77eSMarkus Armbruster# Since: 2.9
31511ad166b6SBenoît Canet##
31521ad166b6SBenoît Canet{ 'enum': 'BlockdevAioOptions',
3153f14beaecSAarushi Mehta  'data': [ 'threads', 'native',
31548a9f1e1dSMarc-André Lureau            { 'name': 'io_uring', 'if': 'CONFIG_LINUX_IO_URING' } ] }
31551ad166b6SBenoît Canet
31561ad166b6SBenoît Canet##
31575072f7b3SMarc-André Lureau# @BlockdevCacheOptions:
31581ad166b6SBenoît Canet#
31591ad166b6SBenoît Canet# Includes cache-related options for block devices
31601ad166b6SBenoît Canet#
31611d8bda12SMarkus Armbruster# @direct: enables use of O_DIRECT (bypass the host page cache;
31621ad166b6SBenoît Canet#     default: false)
3163a937b6aaSMarkus Armbruster#
3164a937b6aaSMarkus Armbruster# @no-flush: ignore any flush requests for the device (default: false)
31651ad166b6SBenoît Canet#
316679b7a77eSMarkus Armbruster# Since: 2.9
31671ad166b6SBenoît Canet##
3168895a2a80SEric Blake{ 'struct': 'BlockdevCacheOptions',
3169aaa436f9SKevin Wolf  'data': { '*direct': 'bool',
31701ad166b6SBenoît Canet            '*no-flush': 'bool' } }
31711ad166b6SBenoît Canet
31721ad166b6SBenoît Canet##
31735072f7b3SMarc-André Lureau# @BlockdevDriver:
31741ad166b6SBenoît Canet#
31751ad166b6SBenoît Canet# Drivers that are supported in block device operations.
31761ad166b6SBenoît Canet#
3177d8e7d87eSManos Pitsidianakis# @throttle: Since 2.11
3178a937b6aaSMarkus Armbruster#
3179d87ee3d7SFam Zheng# @nvme: Since 2.12
3180a937b6aaSMarkus Armbruster#
318151f63ec7SPeter Maydell# @copy-on-read: Since 3.0
3182a937b6aaSMarkus Armbruster#
3183bfcc224eSAapo Vienamo# @blklogwrites: Since 3.0
3184a937b6aaSMarkus Armbruster#
318535e32d9eSPavel Dovgalyuk# @blkreplay: Since 4.2
3186a937b6aaSMarkus Armbruster#
3187f41388e0SAndrey Shinkevich# @compress: Since 5.0
3188a937b6aaSMarkus Armbruster#
3189783b2825SVladimir Sementsov-Ogievskiy# @copy-before-write: Since 6.2
3190a937b6aaSMarkus Armbruster#
31911c14eaabSVladimir Sementsov-Ogievskiy# @snapshot-access: Since 7.0
3192da92c3ffSAshish Mittal#
3193b8734638SThomas Huth# Features:
3194b8734638SThomas Huth#
3195b8734638SThomas Huth# @deprecated: Member @gluster is deprecated because GlusterFS
3196b8734638SThomas Huth#     development ceased.
3197b8734638SThomas Huth#
319879b7a77eSMarkus Armbruster# Since: 2.9
31991ad166b6SBenoît Canet##
32001ad166b6SBenoît Canet{ 'enum': 'BlockdevDriver',
320135e32d9eSPavel Dovgalyuk  'data': [ 'blkdebug', 'blklogwrites', 'blkreplay', 'blkverify', 'bochs',
3202783b2825SVladimir Sementsov-Ogievskiy            'cloop', 'compress', 'copy-before-write', 'copy-on-read', 'dmg',
3203b8734638SThomas Huth            'file', 'snapshot-access', 'ftp', 'ftps',
3204b8734638SThomas Huth            {'name': 'gluster', 'features': [ 'deprecated' ] },
32058a9f1e1dSMarc-André Lureau            {'name': 'host_cdrom', 'if': 'HAVE_HOST_BLOCK_DEVICE' },
32068a9f1e1dSMarc-André Lureau            {'name': 'host_device', 'if': 'HAVE_HOST_BLOCK_DEVICE' },
3207fd66dbd4SStefan Hajnoczi            'http', 'https',
3208fd66dbd4SStefan Hajnoczi            { 'name': 'io_uring', 'if': 'CONFIG_BLKIO' },
3209fd66dbd4SStefan Hajnoczi            'iscsi',
3210fd66dbd4SStefan Hajnoczi            'luks', 'nbd', 'nfs', 'null-aio', 'null-co', 'nvme',
3211fd66dbd4SStefan Hajnoczi            { 'name': 'nvme-io_uring', 'if': 'CONFIG_BLKIO' },
3212fd66dbd4SStefan Hajnoczi            'parallels', 'preallocate', 'qcow', 'qcow2', 'qed', 'quorum',
3213fd66dbd4SStefan Hajnoczi            'raw', 'rbd',
32148a9f1e1dSMarc-André Lureau            { 'name': 'replication', 'if': 'CONFIG_REPLICATION' },
3215fd66dbd4SStefan Hajnoczi            'ssh', 'throttle', 'vdi', 'vhdx',
321603d9e4c0SAlberto Faria            { 'name': 'virtio-blk-vfio-pci', 'if': 'CONFIG_BLKIO' },
3217fd66dbd4SStefan Hajnoczi            { 'name': 'virtio-blk-vhost-user', 'if': 'CONFIG_BLKIO' },
3218fd66dbd4SStefan Hajnoczi            { 'name': 'virtio-blk-vhost-vdpa', 'if': 'CONFIG_BLKIO' },
3219fd66dbd4SStefan Hajnoczi            'vmdk', 'vpc', 'vvfat' ] }
32201ad166b6SBenoît Canet
32211ad166b6SBenoît Canet##
32225072f7b3SMarc-André Lureau# @BlockdevOptionsFile:
32231ad166b6SBenoît Canet#
322468555285SKevin Wolf# Driver specific block device options for the file backend.
32251ad166b6SBenoît Canet#
32261ad166b6SBenoît Canet# @filename: path to the image file
3227a937b6aaSMarkus Armbruster#
3228a937b6aaSMarkus Armbruster# @pr-manager: the id for the object that will handle persistent
3229a937b6aaSMarkus Armbruster#     reservations for this device (default: none, forward the
3230a937b6aaSMarkus Armbruster#     commands via SG_IO; since 2.11)
3231a937b6aaSMarkus Armbruster#
32321d8bda12SMarkus Armbruster# @aio: AIO backend (default: threads) (since: 2.8)
3233a937b6aaSMarkus Armbruster#
3234a937b6aaSMarkus Armbruster# @aio-max-batch: maximum number of requests to batch together into a
3235a937b6aaSMarkus Armbruster#     single submission in the AIO backend.  The smallest value
3236a937b6aaSMarkus Armbruster#     between this and the aio-max-batch value of the IOThread object
3237a937b6aaSMarkus Armbruster#     is chosen.  0 means that the AIO backend will handle it
3238a937b6aaSMarkus Armbruster#     automatically.  (default: 0, since 6.2)
3239a937b6aaSMarkus Armbruster#
3240a937b6aaSMarkus Armbruster# @locking: whether to enable file locking.  If set to 'auto', only
3241a937b6aaSMarkus Armbruster#     enable when Open File Descriptor (OFD) locking API is available
324216b48d5dSFam Zheng#     (default: auto, since 2.10)
3243a937b6aaSMarkus Armbruster#
3244a937b6aaSMarkus Armbruster# @drop-cache: invalidate page cache during live migration.  This
3245a937b6aaSMarkus Armbruster#     prevents stale data on the migration destination with
3246a937b6aaSMarkus Armbruster#     cache.direct=off.  Currently only supported on Linux hosts.
3247f357fcd8SStefan Hajnoczi#     (default: on, since: 4.0)
3248a937b6aaSMarkus Armbruster#
3249a937b6aaSMarkus Armbruster# @x-check-cache-dropped: whether to check that page cache was dropped
3250a937b6aaSMarkus Armbruster#     on live migration.  May cause noticeable delays if the image
3251a937b6aaSMarkus Armbruster#     file is large, do not use in production.  (default: off)
3252a937b6aaSMarkus Armbruster#     (since: 3.0)
32531ad166b6SBenoît Canet#
3254c9d40709SKevin Wolf# Features:
3255a937b6aaSMarkus Armbruster#
3256a937b6aaSMarkus Armbruster# @dynamic-auto-read-only: If present, enabled auto-read-only means
3257a937b6aaSMarkus Armbruster#     that the driver will open the image read-only at first,
3258a937b6aaSMarkus Armbruster#     dynamically reopen the image file read-write when the first
3259a937b6aaSMarkus Armbruster#     writer is attached to the node and reopen read-only when the
3260a937b6aaSMarkus Armbruster#     last writer is detached.  This allows giving QEMU write
3261a937b6aaSMarkus Armbruster#     permissions only on demand when an operation actually needs
3262a937b6aaSMarkus Armbruster#     write access.
3263a937b6aaSMarkus Armbruster#
32649fb49daaSMarkus Armbruster# @unstable: Member x-check-cache-dropped is meant for debugging.
3265c9d40709SKevin Wolf#
326679b7a77eSMarkus Armbruster# Since: 2.9
32671ad166b6SBenoît Canet##
3268895a2a80SEric Blake{ 'struct': 'BlockdevOptionsFile',
32690a4279d9SKevin Wolf  'data': { 'filename': 'str',
32707c9e5276SPaolo Bonzini            '*pr-manager': 'str',
327116b48d5dSFam Zheng            '*locking': 'OnOffAuto',
327231be8a2aSStefan Hajnoczi            '*aio': 'BlockdevAioOptions',
3273684960d4SStefano Garzarella            '*aio-max-batch': 'int',
3274f357fcd8SStefan Hajnoczi            '*drop-cache': {'type': 'bool',
32758a9f1e1dSMarc-André Lureau                            'if': 'CONFIG_LINUX'},
32769fb49daaSMarkus Armbruster            '*x-check-cache-dropped': { 'type': 'bool',
32779fb49daaSMarkus Armbruster                                        'features': [ 'unstable' ] } },
3278c9d40709SKevin Wolf  'features': [ { 'name': 'dynamic-auto-read-only',
32798a9f1e1dSMarc-André Lureau                  'if': 'CONFIG_POSIX' } ] }
32801ad166b6SBenoît Canet
32811ad166b6SBenoît Canet##
32825072f7b3SMarc-André Lureau# @BlockdevOptionsNull:
3283e819ab22SFam Zheng#
3284e819ab22SFam Zheng# Driver specific block device options for the null backend.
3285e819ab22SFam Zheng#
32861d8bda12SMarkus Armbruster# @size: size of the device in bytes.
3287a937b6aaSMarkus Armbruster#
32881d8bda12SMarkus Armbruster# @latency-ns: emulated latency (in nanoseconds) in processing
3289e5e51dd3SFam Zheng#     requests.  Default to zero which completes requests immediately.
3290e5e51dd3SFam Zheng#     (Since 2.4)
3291a937b6aaSMarkus Armbruster#
3292a937b6aaSMarkus Armbruster# @read-zeroes: if true, reads from the device produce zeroes; if
3293a937b6aaSMarkus Armbruster#     false, the buffer is left unchanged.
3294a937b6aaSMarkus Armbruster#     (default: false; since: 4.1)
3295e819ab22SFam Zheng#
329679b7a77eSMarkus Armbruster# Since: 2.9
3297e819ab22SFam Zheng##
3298895a2a80SEric Blake{ 'struct': 'BlockdevOptionsNull',
3299128b05f7SKevin Wolf  'data': { '*size': 'int', '*latency-ns': 'uint64', '*read-zeroes': 'bool' } }
3300e819ab22SFam Zheng
3301e819ab22SFam Zheng##
3302d87ee3d7SFam Zheng# @BlockdevOptionsNVMe:
3303d87ee3d7SFam Zheng#
3304d87ee3d7SFam Zheng# Driver specific block device options for the NVMe backend.
3305d87ee3d7SFam Zheng#
3306a937b6aaSMarkus Armbruster# @device: PCI controller address of the NVMe device in format
3307a937b6aaSMarkus Armbruster#     hhhh:bb:ss.f (host:bus:slot.function)
3308a937b6aaSMarkus Armbruster#
3309d87ee3d7SFam Zheng# @namespace: namespace number of the device, starting from 1.
3310d87ee3d7SFam Zheng#
3311ecaf647fSDaniel P. Berrangé# Note that the PCI @device must have been unbound from any host
3312ecaf647fSDaniel P. Berrangé# kernel driver before instructing QEMU to add the blockdev.
3313ecaf647fSDaniel P. Berrangé#
3314d87ee3d7SFam Zheng# Since: 2.12
3315d87ee3d7SFam Zheng##
3316d87ee3d7SFam Zheng{ 'struct': 'BlockdevOptionsNVMe',
3317d87ee3d7SFam Zheng  'data': { 'device': 'str', 'namespace': 'int' } }
3318d87ee3d7SFam Zheng
3319d87ee3d7SFam Zheng##
33205072f7b3SMarc-André Lureau# @BlockdevOptionsVVFAT:
33211ad166b6SBenoît Canet#
33221ad166b6SBenoît Canet# Driver specific block device options for the vvfat protocol.
33231ad166b6SBenoît Canet#
33241ad166b6SBenoît Canet# @dir: directory to be exported as FAT image
3325a937b6aaSMarkus Armbruster#
33261d8bda12SMarkus Armbruster# @fat-type: FAT type: 12, 16 or 32
3327a937b6aaSMarkus Armbruster#
3328a937b6aaSMarkus Armbruster# @floppy: whether to export a floppy image (true) or partitioned hard
3329a937b6aaSMarkus Armbruster#     disk (false; default)
3330a937b6aaSMarkus Armbruster#
3331a937b6aaSMarkus Armbruster# @label: set the volume label, limited to 11 bytes.  FAT16 and FAT32
3332a937b6aaSMarkus Armbruster#     traditionally have some restrictions on labels, which are
3333d5941ddaSWolfgang Bumiller#     ignored by most operating systems.  Defaults to "QEMU VVFAT".
3334d5941ddaSWolfgang Bumiller#     (since 2.4)
3335a937b6aaSMarkus Armbruster#
33361d8bda12SMarkus Armbruster# @rw: whether to allow write operations (default: false)
33371ad166b6SBenoît Canet#
333879b7a77eSMarkus Armbruster# Since: 2.9
33391ad166b6SBenoît Canet##
3340895a2a80SEric Blake{ 'struct': 'BlockdevOptionsVVFAT',
33411ad166b6SBenoît Canet  'data': { 'dir': 'str', '*fat-type': 'int', '*floppy': 'bool',
3342d5941ddaSWolfgang Bumiller            '*label': 'str', '*rw': 'bool' } }
33431ad166b6SBenoît Canet
33441ad166b6SBenoît Canet##
33455072f7b3SMarc-André Lureau# @BlockdevOptionsGenericFormat:
33461ad166b6SBenoît Canet#
3347a937b6aaSMarkus Armbruster# Driver specific block device options for image format that have no
3348a937b6aaSMarkus Armbruster# option besides their data source.
33491ad166b6SBenoît Canet#
33501ad166b6SBenoît Canet# @file: reference to or definition of the data source block device
33511ad166b6SBenoît Canet#
335279b7a77eSMarkus Armbruster# Since: 2.9
33531ad166b6SBenoît Canet##
3354895a2a80SEric Blake{ 'struct': 'BlockdevOptionsGenericFormat',
33551ad166b6SBenoît Canet  'data': { 'file': 'BlockdevRef' } }
33561ad166b6SBenoît Canet
33571ad166b6SBenoît Canet##
33585072f7b3SMarc-André Lureau# @BlockdevOptionsLUKS:
335978368575SDaniel P. Berrange#
336078368575SDaniel P. Berrange# Driver specific block device options for LUKS.
336178368575SDaniel P. Berrange#
3362a937b6aaSMarkus Armbruster# @key-secret: the ID of a QCryptoSecret object providing the
3363a937b6aaSMarkus Armbruster#     decryption key (since 2.6).  Mandatory except when doing a
3364a937b6aaSMarkus Armbruster#     metadata-only probe of the image.
336578368575SDaniel P. Berrange#
33669ad5c4e7SHyman Huang# @header: block device holding a detached LUKS header.  (since 9.0)
33679ad5c4e7SHyman Huang#
336879b7a77eSMarkus Armbruster# Since: 2.9
336978368575SDaniel P. Berrange##
337078368575SDaniel P. Berrange{ 'struct': 'BlockdevOptionsLUKS',
337178368575SDaniel P. Berrange  'base': 'BlockdevOptionsGenericFormat',
33729ad5c4e7SHyman Huang  'data': { '*key-secret': 'str',
33739ad5c4e7SHyman Huang            '*header': 'BlockdevRef'} }
337478368575SDaniel P. Berrange
337578368575SDaniel P. Berrange##
33765072f7b3SMarc-André Lureau# @BlockdevOptionsGenericCOWFormat:
33771ad166b6SBenoît Canet#
3378a937b6aaSMarkus Armbruster# Driver specific block device options for image format that have no
3379a937b6aaSMarkus Armbruster# option besides their data source and an optional backing file.
33801ad166b6SBenoît Canet#
33811d8bda12SMarkus Armbruster# @backing: reference to or definition of the backing file block
3382a937b6aaSMarkus Armbruster#     device, null disables the backing file entirely.  Defaults to
3383a937b6aaSMarkus Armbruster#     the backing file stored the image file.
33841ad166b6SBenoît Canet#
338579b7a77eSMarkus Armbruster# Since: 2.9
33861ad166b6SBenoît Canet##
3387895a2a80SEric Blake{ 'struct': 'BlockdevOptionsGenericCOWFormat',
33881ad166b6SBenoît Canet  'base': 'BlockdevOptionsGenericFormat',
3389c42e8742SMarkus Armbruster  'data': { '*backing': 'BlockdevRefOrNull' } }
33901ad166b6SBenoît Canet
33911ad166b6SBenoît Canet##
33925072f7b3SMarc-André Lureau# @Qcow2OverlapCheckMode:
3393f6585811SMax Reitz#
3394f6585811SMax Reitz# General overlap check modes.
3395f6585811SMax Reitz#
3396f6585811SMax Reitz# @none: Do not perform any checks
3397f6585811SMax Reitz#
3398a937b6aaSMarkus Armbruster# @constant: Perform only checks which can be done in constant time
3399a937b6aaSMarkus Armbruster#     and without reading anything from disk
3400f6585811SMax Reitz#
3401a937b6aaSMarkus Armbruster# @cached: Perform only checks which can be done without reading
3402a937b6aaSMarkus Armbruster#     anything from disk
3403f6585811SMax Reitz#
3404f6585811SMax Reitz# @all: Perform all available overlap checks
3405f6585811SMax Reitz#
340679b7a77eSMarkus Armbruster# Since: 2.9
3407f6585811SMax Reitz##
3408f6585811SMax Reitz{ 'enum': 'Qcow2OverlapCheckMode',
3409f6585811SMax Reitz  'data': [ 'none', 'constant', 'cached', 'all' ] }
3410f6585811SMax Reitz
3411f6585811SMax Reitz##
34125072f7b3SMarc-André Lureau# @Qcow2OverlapCheckFlags:
3413f6585811SMax Reitz#
3414a937b6aaSMarkus Armbruster# Structure of flags for each metadata structure.  Setting a field to
3415125f973cSVladimir Sementsov-Ogievskiy# 'true' makes QEMU guard that Qcow2 format structure against
3416125f973cSVladimir Sementsov-Ogievskiy# unintended overwriting.  See Qcow2 format specification for detailed
3417125f973cSVladimir Sementsov-Ogievskiy# information on these structures.  The default value is chosen
3418125f973cSVladimir Sementsov-Ogievskiy# according to the template given.
3419f6585811SMax Reitz#
3420a937b6aaSMarkus Armbruster# @template: Specifies a template mode which can be adjusted using the
3421a937b6aaSMarkus Armbruster#     other flags, defaults to 'cached'
3422f6585811SMax Reitz#
3423125f973cSVladimir Sementsov-Ogievskiy# @main-header: Qcow2 format header
3424125f973cSVladimir Sementsov-Ogievskiy#
3425125f973cSVladimir Sementsov-Ogievskiy# @active-l1: Qcow2 active L1 table
3426125f973cSVladimir Sementsov-Ogievskiy#
3427125f973cSVladimir Sementsov-Ogievskiy# @active-l2: Qcow2 active L2 table
3428125f973cSVladimir Sementsov-Ogievskiy#
3429125f973cSVladimir Sementsov-Ogievskiy# @refcount-table: Qcow2 refcount table
3430125f973cSVladimir Sementsov-Ogievskiy#
3431125f973cSVladimir Sementsov-Ogievskiy# @refcount-block: Qcow2 refcount blocks
3432125f973cSVladimir Sementsov-Ogievskiy#
3433125f973cSVladimir Sementsov-Ogievskiy# @snapshot-table: Qcow2 snapshot table
3434125f973cSVladimir Sementsov-Ogievskiy#
3435125f973cSVladimir Sementsov-Ogievskiy# @inactive-l1: Qcow2 inactive L1 tables
3436125f973cSVladimir Sementsov-Ogievskiy#
3437125f973cSVladimir Sementsov-Ogievskiy# @inactive-l2: Qcow2 inactive L2 tables
3438125f973cSVladimir Sementsov-Ogievskiy#
3439125f973cSVladimir Sementsov-Ogievskiy# @bitmap-directory: Qcow2 bitmap directory (since 3.0)
34400e4e4318SVladimir Sementsov-Ogievskiy#
344179b7a77eSMarkus Armbruster# Since: 2.9
3442f6585811SMax Reitz##
3443895a2a80SEric Blake{ 'struct': 'Qcow2OverlapCheckFlags',
3444f6585811SMax Reitz  'data': { '*template':         'Qcow2OverlapCheckMode',
3445f6585811SMax Reitz            '*main-header':      'bool',
3446f6585811SMax Reitz            '*active-l1':        'bool',
3447f6585811SMax Reitz            '*active-l2':        'bool',
3448f6585811SMax Reitz            '*refcount-table':   'bool',
3449f6585811SMax Reitz            '*refcount-block':   'bool',
3450f6585811SMax Reitz            '*snapshot-table':   'bool',
3451f6585811SMax Reitz            '*inactive-l1':      'bool',
34520e4e4318SVladimir Sementsov-Ogievskiy            '*inactive-l2':      'bool',
34530e4e4318SVladimir Sementsov-Ogievskiy            '*bitmap-directory': 'bool' } }
3454f6585811SMax Reitz
3455f6585811SMax Reitz##
34565072f7b3SMarc-André Lureau# @Qcow2OverlapChecks:
3457f6585811SMax Reitz#
3458a937b6aaSMarkus Armbruster# Specifies which metadata structures should be guarded against
3459a937b6aaSMarkus Armbruster# unintended overwriting.
3460f6585811SMax Reitz#
3461a937b6aaSMarkus Armbruster# @flags: set of flags for separate specification of each metadata
3462a937b6aaSMarkus Armbruster#     structure type
3463f6585811SMax Reitz#
3464f6585811SMax Reitz# @mode: named mode which chooses a specific set of flags
3465f6585811SMax Reitz#
346679b7a77eSMarkus Armbruster# Since: 2.9
3467f6585811SMax Reitz##
3468ab916fadSEric Blake{ 'alternate': 'Qcow2OverlapChecks',
3469f6585811SMax Reitz  'data': { 'flags': 'Qcow2OverlapCheckFlags',
3470f6585811SMax Reitz            'mode':  'Qcow2OverlapCheckMode' } }
3471f6585811SMax Reitz
3472f6585811SMax Reitz##
3473d85f4222SDaniel P. Berrange# @BlockdevQcowEncryptionFormat:
3474d85f4222SDaniel P. Berrange#
3475d85f4222SDaniel P. Berrange# @aes: AES-CBC with plain64 initialization vectors
3476d85f4222SDaniel P. Berrange#
3477d85f4222SDaniel P. Berrange# Since: 2.10
3478d85f4222SDaniel P. Berrange##
3479d85f4222SDaniel P. Berrange{ 'enum': 'BlockdevQcowEncryptionFormat',
3480d85f4222SDaniel P. Berrange  'data': [ 'aes' ] }
3481d85f4222SDaniel P. Berrange
3482d85f4222SDaniel P. Berrange##
3483d85f4222SDaniel P. Berrange# @BlockdevQcowEncryption:
3484d85f4222SDaniel P. Berrange#
348589a2273bSMarkus Armbruster# @format: encryption format
348689a2273bSMarkus Armbruster#
3487d85f4222SDaniel P. Berrange# Since: 2.10
3488d85f4222SDaniel P. Berrange##
3489d85f4222SDaniel P. Berrange{ 'union': 'BlockdevQcowEncryption',
3490d85f4222SDaniel P. Berrange  'base': { 'format': 'BlockdevQcowEncryptionFormat' },
3491d85f4222SDaniel P. Berrange  'discriminator': 'format',
3492d85f4222SDaniel P. Berrange  'data': { 'aes': 'QCryptoBlockOptionsQCow' } }
3493d85f4222SDaniel P. Berrange
3494d85f4222SDaniel P. Berrange##
3495d85f4222SDaniel P. Berrange# @BlockdevOptionsQcow:
3496d85f4222SDaniel P. Berrange#
3497d85f4222SDaniel P. Berrange# Driver specific block device options for qcow.
3498d85f4222SDaniel P. Berrange#
3499a937b6aaSMarkus Armbruster# @encrypt: Image decryption options.  Mandatory for encrypted images,
3500a937b6aaSMarkus Armbruster#     except when doing a metadata-only probe of the image.
3501d85f4222SDaniel P. Berrange#
3502d85f4222SDaniel P. Berrange# Since: 2.10
3503d85f4222SDaniel P. Berrange##
3504d85f4222SDaniel P. Berrange{ 'struct': 'BlockdevOptionsQcow',
3505d85f4222SDaniel P. Berrange  'base': 'BlockdevOptionsGenericCOWFormat',
3506d85f4222SDaniel P. Berrange  'data': { '*encrypt': 'BlockdevQcowEncryption' } }
3507d85f4222SDaniel P. Berrange
3508b25b387fSDaniel P. Berrange##
3509b25b387fSDaniel P. Berrange# @BlockdevQcow2EncryptionFormat:
3510a9e2eb06SJohn Snow#
351158823a0bSEric Blake# @aes: AES-CBC with plain64 initialization vectors
3512b25b387fSDaniel P. Berrange#
3513b25b387fSDaniel P. Berrange# Since: 2.10
3514b25b387fSDaniel P. Berrange##
3515b25b387fSDaniel P. Berrange{ 'enum': 'BlockdevQcow2EncryptionFormat',
35164652b8f3SDaniel P. Berrange  'data': [ 'aes', 'luks' ] }
3517b25b387fSDaniel P. Berrange
3518b25b387fSDaniel P. Berrange##
3519b25b387fSDaniel P. Berrange# @BlockdevQcow2Encryption:
3520b25b387fSDaniel P. Berrange#
352189a2273bSMarkus Armbruster# @format: encryption format
352289a2273bSMarkus Armbruster#
3523b25b387fSDaniel P. Berrange# Since: 2.10
3524b25b387fSDaniel P. Berrange##
3525b25b387fSDaniel P. Berrange{ 'union': 'BlockdevQcow2Encryption',
3526b25b387fSDaniel P. Berrange  'base': { 'format': 'BlockdevQcow2EncryptionFormat' },
3527b25b387fSDaniel P. Berrange  'discriminator': 'format',
35284652b8f3SDaniel P. Berrange  'data': { 'aes': 'QCryptoBlockOptionsQCow',
35294652b8f3SDaniel P. Berrange            'luks': 'QCryptoBlockOptionsLUKS'} }
3530b25b387fSDaniel P. Berrange
3531d85f4222SDaniel P. Berrange##
353233fa2222SVladimir Sementsov-Ogievskiy# @BlockdevOptionsPreallocate:
353333fa2222SVladimir Sementsov-Ogievskiy#
3534a937b6aaSMarkus Armbruster# Filter driver intended to be inserted between format and protocol
3535a937b6aaSMarkus Armbruster# node and do preallocation in protocol node on write.
353633fa2222SVladimir Sementsov-Ogievskiy#
353733fa2222SVladimir Sementsov-Ogievskiy# @prealloc-align: on preallocation, align file length to this number,
353833fa2222SVladimir Sementsov-Ogievskiy#     default 1048576 (1M)
353933fa2222SVladimir Sementsov-Ogievskiy#
354033fa2222SVladimir Sementsov-Ogievskiy# @prealloc-size: how much to preallocate, default 134217728 (128M)
354133fa2222SVladimir Sementsov-Ogievskiy#
354233fa2222SVladimir Sementsov-Ogievskiy# Since: 6.0
354333fa2222SVladimir Sementsov-Ogievskiy##
354433fa2222SVladimir Sementsov-Ogievskiy{ 'struct': 'BlockdevOptionsPreallocate',
354533fa2222SVladimir Sementsov-Ogievskiy  'base': 'BlockdevOptionsGenericFormat',
354633fa2222SVladimir Sementsov-Ogievskiy  'data': { '*prealloc-align': 'int', '*prealloc-size': 'int' } }
354733fa2222SVladimir Sementsov-Ogievskiy
354833fa2222SVladimir Sementsov-Ogievskiy##
35495072f7b3SMarc-André Lureau# @BlockdevOptionsQcow2:
35501ad166b6SBenoît Canet#
35511ad166b6SBenoît Canet# Driver specific block device options for qcow2.
35521ad166b6SBenoît Canet#
3553a937b6aaSMarkus Armbruster# @lazy-refcounts: whether to enable the lazy refcounts feature
3554a937b6aaSMarkus Armbruster#     (default is taken from the image file)
35551ad166b6SBenoît Canet#
3556a937b6aaSMarkus Armbruster# @pass-discard-request: whether discard requests to the qcow2 device
3557a937b6aaSMarkus Armbruster#     should be forwarded to the data source
35581ad166b6SBenoît Canet#
35591d8bda12SMarkus Armbruster# @pass-discard-snapshot: whether discard requests for the data source
3560a937b6aaSMarkus Armbruster#     should be issued when a snapshot operation (e.g. deleting a
3561a937b6aaSMarkus Armbruster#     snapshot) frees clusters in the qcow2 file
35621ad166b6SBenoît Canet#
35631d8bda12SMarkus Armbruster# @pass-discard-other: whether discard requests for the data source
3564a937b6aaSMarkus Armbruster#     should be issued on other occasions where a cluster gets freed
35651ad166b6SBenoît Canet#
3566b2b10904SJean-Louis Dupond# @discard-no-unref: when enabled, data clusters will remain
3567b2b10904SJean-Louis Dupond#     preallocated when they are no longer used, e.g. because they are
3568b2b10904SJean-Louis Dupond#     discarded or converted to zero clusters.  As usual, whether the
3569b2b10904SJean-Louis Dupond#     old data is discarded or kept on the protocol level (i.e. in the
3570b2b10904SJean-Louis Dupond#     image file) depends on the setting of the pass-discard-request
3571b2b10904SJean-Louis Dupond#     option.  Keeping the clusters preallocated prevents qcow2
3572b2b10904SJean-Louis Dupond#     fragmentation that would otherwise be caused by freeing and
3573b2b10904SJean-Louis Dupond#     re-allocating them later.  Besides potential performance
3574b2b10904SJean-Louis Dupond#     degradation, such fragmentation can lead to increased allocation
3575b2b10904SJean-Louis Dupond#     of clusters past the end of the image file, resulting in image
3576209e64d9SMarkus Armbruster#     files whose file length can grow much larger than their guest
3577209e64d9SMarkus Armbruster#     disk size would suggest.  If image file length is of concern
3578209e64d9SMarkus Armbruster#     (e.g. when storing qcow2 images directly on block devices), you
3579209e64d9SMarkus Armbruster#     should consider enabling this option.  (since 8.1)
358042a2890aSJean-Louis Dupond#
3581a937b6aaSMarkus Armbruster# @overlap-check: which overlap checks to perform for writes to the
3582a937b6aaSMarkus Armbruster#     image, defaults to 'cached' (since 2.2)
3583f6585811SMax Reitz#
3584a937b6aaSMarkus Armbruster# @cache-size: the maximum total size of the L2 table and refcount
3585a937b6aaSMarkus Armbruster#     block caches in bytes (since 2.2)
3586f6585811SMax Reitz#
3587a937b6aaSMarkus Armbruster# @l2-cache-size: the maximum size of the L2 table cache in bytes
3588a937b6aaSMarkus Armbruster#     (since 2.2)
3589f6585811SMax Reitz#
35901221fe6fSAlberto Garcia# @l2-cache-entry-size: the size of each entry in the L2 cache in
3591a937b6aaSMarkus Armbruster#     bytes.  It must be a power of two between 512 and the cluster
3592a937b6aaSMarkus Armbruster#     size.  The default value is the cluster size (since 2.12)
35931221fe6fSAlberto Garcia#
35941d8bda12SMarkus Armbruster# @refcount-cache-size: the maximum size of the refcount block cache
3595f6585811SMax Reitz#     in bytes (since 2.2)
3596f6585811SMax Reitz#
35971d8bda12SMarkus Armbruster# @cache-clean-interval: clean unused entries in the L2 and refcount
3598a937b6aaSMarkus Armbruster#     caches.  The interval is in seconds.  The default value is 600
3599a937b6aaSMarkus Armbruster#     on supporting platforms, and 0 on other platforms.  0 disables
3600a937b6aaSMarkus Armbruster#     this feature.  (since 2.5)
3601e957b50bSLeonid Bloch#
3602a937b6aaSMarkus Armbruster# @encrypt: Image decryption options.  Mandatory for encrypted images,
3603a937b6aaSMarkus Armbruster#     except when doing a metadata-only probe of the image.  (since
3604a937b6aaSMarkus Armbruster#     2.10)
3605279621c0SAlberto Garcia#
36060e8c08beSKevin Wolf# @data-file: reference to or definition of the external data file.
3607a937b6aaSMarkus Armbruster#     This may only be specified for images that require an external
3608a937b6aaSMarkus Armbruster#     data file.  If it is not specified for such an image, the data
3609a937b6aaSMarkus Armbruster#     file name is loaded from the image file.  (since 4.0)
36100e8c08beSKevin Wolf#
361179b7a77eSMarkus Armbruster# Since: 2.9
36121ad166b6SBenoît Canet##
3613895a2a80SEric Blake{ 'struct': 'BlockdevOptionsQcow2',
36141ad166b6SBenoît Canet  'base': 'BlockdevOptionsGenericCOWFormat',
36151ad166b6SBenoît Canet  'data': { '*lazy-refcounts': 'bool',
36161ad166b6SBenoît Canet            '*pass-discard-request': 'bool',
36171ad166b6SBenoît Canet            '*pass-discard-snapshot': 'bool',
3618f6585811SMax Reitz            '*pass-discard-other': 'bool',
361942a2890aSJean-Louis Dupond            '*discard-no-unref': 'bool',
3620f6585811SMax Reitz            '*overlap-check': 'Qcow2OverlapChecks',
3621f6585811SMax Reitz            '*cache-size': 'int',
3622f6585811SMax Reitz            '*l2-cache-size': 'int',
36231221fe6fSAlberto Garcia            '*l2-cache-entry-size': 'int',
3624279621c0SAlberto Garcia            '*refcount-cache-size': 'int',
3625b25b387fSDaniel P. Berrange            '*cache-clean-interval': 'int',
36260e8c08beSKevin Wolf            '*encrypt': 'BlockdevQcow2Encryption',
36270e8c08beSKevin Wolf            '*data-file': 'BlockdevRef' } }
3628b1de5f43SChrysostomos Nanakos
3629b1de5f43SChrysostomos Nanakos##
3630ec2f5418SKevin Wolf# @SshHostKeyCheckMode:
3631ec2f5418SKevin Wolf#
3632f5627506SPeter Maydell# @none: Don't check the host key at all
3633a937b6aaSMarkus Armbruster#
3634f5627506SPeter Maydell# @hash: Compare the host key with a given hash
3635a937b6aaSMarkus Armbruster#
3636f5627506SPeter Maydell# @known_hosts: Check the host key against the known_hosts file
3637ec2f5418SKevin Wolf#
3638ec2f5418SKevin Wolf# Since: 2.12
3639ec2f5418SKevin Wolf##
3640ec2f5418SKevin Wolf{ 'enum': 'SshHostKeyCheckMode',
3641ec2f5418SKevin Wolf  'data': [ 'none', 'hash', 'known_hosts' ] }
3642ec2f5418SKevin Wolf
3643ec2f5418SKevin Wolf##
3644ec2f5418SKevin Wolf# @SshHostKeyCheckHashType:
3645ec2f5418SKevin Wolf#
3646f5627506SPeter Maydell# @md5: The given hash is an md5 hash
3647a937b6aaSMarkus Armbruster#
3648f5627506SPeter Maydell# @sha1: The given hash is an sha1 hash
3649a937b6aaSMarkus Armbruster#
3650bf783261SDaniel P. Berrangé# @sha256: The given hash is an sha256 hash
3651ec2f5418SKevin Wolf#
3652ec2f5418SKevin Wolf# Since: 2.12
3653ec2f5418SKevin Wolf##
3654ec2f5418SKevin Wolf{ 'enum': 'SshHostKeyCheckHashType',
3655bf783261SDaniel P. Berrangé  'data': [ 'md5', 'sha1', 'sha256' ] }
3656ec2f5418SKevin Wolf
3657ec2f5418SKevin Wolf##
3658ec2f5418SKevin Wolf# @SshHostKeyHash:
3659ec2f5418SKevin Wolf#
3660f5627506SPeter Maydell# @type: The hash algorithm used for the hash
3661a937b6aaSMarkus Armbruster#
3662f5627506SPeter Maydell# @hash: The expected hash value
3663ec2f5418SKevin Wolf#
3664ec2f5418SKevin Wolf# Since: 2.12
3665ec2f5418SKevin Wolf##
3666ec2f5418SKevin Wolf{ 'struct': 'SshHostKeyHash',
3667ec2f5418SKevin Wolf  'data': { 'type': 'SshHostKeyCheckHashType',
3668ec2f5418SKevin Wolf            'hash': 'str' }}
3669ec2f5418SKevin Wolf
3670ec2f5418SKevin Wolf##
3671ec2f5418SKevin Wolf# @SshHostKeyCheck:
3672ec2f5418SKevin Wolf#
367389a2273bSMarkus Armbruster# @mode: How to check the host key
367489a2273bSMarkus Armbruster#
3675ec2f5418SKevin Wolf# Since: 2.12
3676ec2f5418SKevin Wolf##
3677ec2f5418SKevin Wolf{ 'union': 'SshHostKeyCheck',
3678ec2f5418SKevin Wolf  'base': { 'mode': 'SshHostKeyCheckMode' },
3679ec2f5418SKevin Wolf  'discriminator': 'mode',
368029cd0403SAnton Nefedov  'data': { 'hash': 'SshHostKeyHash' } }
3681ec2f5418SKevin Wolf
3682ec2f5418SKevin Wolf##
36835072f7b3SMarc-André Lureau# @BlockdevOptionsSsh:
3684ad0e90a6SAshijeet Acharya#
3685ad0e90a6SAshijeet Acharya# @server: host address
3686ad0e90a6SAshijeet Acharya#
3687ad0e90a6SAshijeet Acharya# @path: path to the image on the host
3688ad0e90a6SAshijeet Acharya#
3689c0ac533bSAndrea Bolognani# @user: user as which to connect, defaults to current local user name
3690ad0e90a6SAshijeet Acharya#
3691ec2f5418SKevin Wolf# @host-key-check: Defines how and what to check the host key against
3692ec2f5418SKevin Wolf#     (default: known_hosts)
3693ad0e90a6SAshijeet Acharya#
369479b7a77eSMarkus Armbruster# Since: 2.9
3695ad0e90a6SAshijeet Acharya##
3696ad0e90a6SAshijeet Acharya{ 'struct': 'BlockdevOptionsSsh',
3697ad0e90a6SAshijeet Acharya  'data': { 'server': 'InetSocketAddress',
3698ad0e90a6SAshijeet Acharya            'path': 'str',
3699ec2f5418SKevin Wolf            '*user': 'str',
3700ec2f5418SKevin Wolf            '*host-key-check': 'SshHostKeyCheck' } }
3701ad0e90a6SAshijeet Acharya
37021ad166b6SBenoît Canet##
37035072f7b3SMarc-André Lureau# @BlkdebugEvent:
37041ad166b6SBenoît Canet#
37051ad166b6SBenoît Canet# Trigger events supported by blkdebug.
3706a31939e6SEric Blake#
370746b732cdSPavel Butsykin# @l1_shrink_write_table: write zeros to the l1 table to shrink image.
370846b732cdSPavel Butsykin#     (since 2.11)
370946b732cdSPavel Butsykin#
371046b732cdSPavel Butsykin# @l1_shrink_free_l2_clusters: discard the l2 tables.  (since 2.11)
371146b732cdSPavel Butsykin#
3712d855ebcdSEric Blake# @cor_write: a write due to copy-on-read (since 2.11)
3713d855ebcdSEric Blake#
3714a937b6aaSMarkus Armbruster# @cluster_alloc_space: an allocation of file space for a cluster
3715a937b6aaSMarkus Armbruster#     (since 4.1)
3716c8bb23cbSAnton Nefedov#
3717f8cec157SMax Reitz# @none: triggers once at creation of the blkdebug node (since 4.1)
3718f8cec157SMax Reitz#
371979b7a77eSMarkus Armbruster# Since: 2.9
37201ad166b6SBenoît Canet##
3721a31939e6SEric Blake{ 'enum': 'BlkdebugEvent', 'prefix': 'BLKDBG',
37225be5b776SEric Blake  'data': [ 'l1_update', 'l1_grow_alloc_table', 'l1_grow_write_table',
37235be5b776SEric Blake            'l1_grow_activate_table', 'l2_load', 'l2_update',
37245be5b776SEric Blake            'l2_update_compressed', 'l2_alloc_cow_read', 'l2_alloc_write',
37251ad166b6SBenoît Canet            'read_aio', 'read_backing_aio', 'read_compressed', 'write_aio',
37261ad166b6SBenoît Canet            'write_compressed', 'vmstate_load', 'vmstate_save', 'cow_read',
37271ad166b6SBenoît Canet            'cow_write', 'reftable_load', 'reftable_grow', 'reftable_update',
37281ad166b6SBenoît Canet            'refblock_load', 'refblock_update', 'refblock_update_part',
37295be5b776SEric Blake            'refblock_alloc', 'refblock_alloc_hookup', 'refblock_alloc_write',
37305be5b776SEric Blake            'refblock_alloc_write_blocks', 'refblock_alloc_write_table',
37315be5b776SEric Blake            'refblock_alloc_switch_table', 'cluster_alloc',
37321ad166b6SBenoît Canet            'cluster_alloc_bytes', 'cluster_free', 'flush_to_os',
37335be5b776SEric Blake            'flush_to_disk', 'pwritev_rmw_head', 'pwritev_rmw_after_head',
37345be5b776SEric Blake            'pwritev_rmw_tail', 'pwritev_rmw_after_tail', 'pwritev',
373546b732cdSPavel Butsykin            'pwritev_zero', 'pwritev_done', 'empty_image_prepare',
3736d855ebcdSEric Blake            'l1_shrink_write_table', 'l1_shrink_free_l2_clusters',
3737f8cec157SMax Reitz            'cor_write', 'cluster_alloc_space', 'none'] }
37381ad166b6SBenoît Canet
37391ad166b6SBenoît Canet##
374016789db3SMax Reitz# @BlkdebugIOType:
374116789db3SMax Reitz#
374216789db3SMax Reitz# Kinds of I/O that blkdebug can inject errors in.
374316789db3SMax Reitz#
374416789db3SMax Reitz# @read: .bdrv_co_preadv()
374516789db3SMax Reitz#
374616789db3SMax Reitz# @write: .bdrv_co_pwritev()
374716789db3SMax Reitz#
374816789db3SMax Reitz# @write-zeroes: .bdrv_co_pwrite_zeroes()
374916789db3SMax Reitz#
375016789db3SMax Reitz# @discard: .bdrv_co_pdiscard()
375116789db3SMax Reitz#
375216789db3SMax Reitz# @flush: .bdrv_co_flush_to_disk()
375316789db3SMax Reitz#
37541adb0b5eSMax Reitz# @block-status: .bdrv_co_block_status()
37551adb0b5eSMax Reitz#
375616789db3SMax Reitz# Since: 4.1
375716789db3SMax Reitz##
37587b29353fSMarkus Armbruster{ 'enum': 'BlkdebugIOType',
37591adb0b5eSMax Reitz  'data': [ 'read', 'write', 'write-zeroes', 'discard', 'flush',
37601adb0b5eSMax Reitz            'block-status' ] }
376116789db3SMax Reitz
376216789db3SMax Reitz##
37635072f7b3SMarc-André Lureau# @BlkdebugInjectErrorOptions:
37641ad166b6SBenoît Canet#
37651ad166b6SBenoît Canet# Describes a single error injection for blkdebug.
37661ad166b6SBenoît Canet#
37671ad166b6SBenoît Canet# @event: trigger event
37681ad166b6SBenoît Canet#
3769a937b6aaSMarkus Armbruster# @state: the state identifier blkdebug needs to be in to actually
3770a937b6aaSMarkus Armbruster#     trigger the event; defaults to "any"
37711ad166b6SBenoît Canet#
3772a937b6aaSMarkus Armbruster# @iotype: the type of I/O operations on which this error should be
3773a937b6aaSMarkus Armbruster#     injected; defaults to "all read, write, write-zeroes, discard,
3774a937b6aaSMarkus Armbruster#     and flush operations" (since: 4.1)
377516789db3SMax Reitz#
3776a937b6aaSMarkus Armbruster# @errno: error identifier (errno) to be returned; defaults to EIO
37771ad166b6SBenoît Canet#
3778a937b6aaSMarkus Armbruster# @sector: specifies the sector index which has to be affected in
3779a937b6aaSMarkus Armbruster#     order to actually trigger the event; defaults to "any sector"
37801ad166b6SBenoît Canet#
3781a937b6aaSMarkus Armbruster# @once: disables further events after this one has been triggered;
3782a937b6aaSMarkus Armbruster#     defaults to false
37831ad166b6SBenoît Canet#
37841d8bda12SMarkus Armbruster# @immediately: fail immediately; defaults to false
37851ad166b6SBenoît Canet#
378679b7a77eSMarkus Armbruster# Since: 2.9
37871ad166b6SBenoît Canet##
3788895a2a80SEric Blake{ 'struct': 'BlkdebugInjectErrorOptions',
37891ad166b6SBenoît Canet  'data': { 'event': 'BlkdebugEvent',
37901ad166b6SBenoît Canet            '*state': 'int',
379116789db3SMax Reitz            '*iotype': 'BlkdebugIOType',
37921ad166b6SBenoît Canet            '*errno': 'int',
37931ad166b6SBenoît Canet            '*sector': 'int',
37941ad166b6SBenoît Canet            '*once': 'bool',
37951ad166b6SBenoît Canet            '*immediately': 'bool' } }
37961ad166b6SBenoît Canet
37971ad166b6SBenoît Canet##
37985072f7b3SMarc-André Lureau# @BlkdebugSetStateOptions:
37991ad166b6SBenoît Canet#
38001ad166b6SBenoît Canet# Describes a single state-change event for blkdebug.
38011ad166b6SBenoît Canet#
38021ad166b6SBenoît Canet# @event: trigger event
38031ad166b6SBenoît Canet#
38041d8bda12SMarkus Armbruster# @state: the current state identifier blkdebug needs to be in;
38051ad166b6SBenoît Canet#     defaults to "any"
38061ad166b6SBenoît Canet#
38071ad166b6SBenoît Canet# @new_state: the state identifier blkdebug is supposed to assume if
38081ad166b6SBenoît Canet#     this event is triggered
38091ad166b6SBenoît Canet#
381079b7a77eSMarkus Armbruster# Since: 2.9
38111ad166b6SBenoît Canet##
3812895a2a80SEric Blake{ 'struct': 'BlkdebugSetStateOptions',
38131ad166b6SBenoît Canet  'data': { 'event': 'BlkdebugEvent',
38141ad166b6SBenoît Canet            '*state': 'int',
38151ad166b6SBenoît Canet            'new_state': 'int' } }
38161ad166b6SBenoît Canet
38171ad166b6SBenoît Canet##
38185072f7b3SMarc-André Lureau# @BlockdevOptionsBlkdebug:
38191ad166b6SBenoît Canet#
38201ad166b6SBenoît Canet# Driver specific block device options for blkdebug.
38211ad166b6SBenoît Canet#
38221ad166b6SBenoît Canet# @image: underlying raw block device (or image file)
38231ad166b6SBenoît Canet#
38241d8bda12SMarkus Armbruster# @config: filename of the configuration file
38251ad166b6SBenoît Canet#
3826a937b6aaSMarkus Armbruster# @align: required alignment for requests in bytes, must be positive
3827a937b6aaSMarkus Armbruster#     power of 2, or 0 for default
3828430b26a8SEric Blake#
3829430b26a8SEric Blake# @max-transfer: maximum size for I/O transfers in bytes, must be
3830a937b6aaSMarkus Armbruster#     positive multiple of @align and of the underlying file's request
3831a937b6aaSMarkus Armbruster#     alignment (but need not be a power of 2), or 0 for default
3832a937b6aaSMarkus Armbruster#     (since 2.10)
3833a937b6aaSMarkus Armbruster#
3834a937b6aaSMarkus Armbruster# @opt-write-zero: preferred alignment for write zero requests in
3835a937b6aaSMarkus Armbruster#     bytes, must be positive multiple of @align and of the underlying
3836a937b6aaSMarkus Armbruster#     file's request alignment (but need not be a power of 2), or 0
3837a937b6aaSMarkus Armbruster#     for default (since 2.10)
3838a937b6aaSMarkus Armbruster#
3839a937b6aaSMarkus Armbruster# @max-write-zero: maximum size for write zero requests in bytes, must
3840a937b6aaSMarkus Armbruster#     be positive multiple of @align, of @opt-write-zero, and of the
3841a937b6aaSMarkus Armbruster#     underlying file's request alignment (but need not be a power of
3842430b26a8SEric Blake#     2), or 0 for default (since 2.10)
3843430b26a8SEric Blake#
3844a937b6aaSMarkus Armbruster# @opt-discard: preferred alignment for discard requests in bytes,
3845a937b6aaSMarkus Armbruster#     must be positive multiple of @align and of the underlying file's
3846a937b6aaSMarkus Armbruster#     request alignment (but need not be a power of 2), or 0 for
3847a937b6aaSMarkus Armbruster#     default (since 2.10)
3848430b26a8SEric Blake#
3849430b26a8SEric Blake# @max-discard: maximum size for discard requests in bytes, must be
3850a937b6aaSMarkus Armbruster#     positive multiple of @align, of @opt-discard, and of the
3851a937b6aaSMarkus Armbruster#     underlying file's request alignment (but need not be a power of
3852a937b6aaSMarkus Armbruster#     2), or 0 for default (since 2.10)
38531ad166b6SBenoît Canet#
38541d8bda12SMarkus Armbruster# @inject-error: array of error injection descriptions
38551ad166b6SBenoît Canet#
38561d8bda12SMarkus Armbruster# @set-state: array of state-change descriptions
38571ad166b6SBenoît Canet#
385869c6449fSMax Reitz# @take-child-perms: Permissions to take on @image in addition to what
3859a937b6aaSMarkus Armbruster#     is necessary anyway (which depends on how the blkdebug node is
3860a937b6aaSMarkus Armbruster#     used).  Defaults to none.  (since 5.0)
386169c6449fSMax Reitz#
386269c6449fSMax Reitz# @unshare-child-perms: Permissions not to share on @image in addition
3863a937b6aaSMarkus Armbruster#     to what cannot be shared anyway (which depends on how the
3864a937b6aaSMarkus Armbruster#     blkdebug node is used).  Defaults to none.  (since 5.0)
386569c6449fSMax Reitz#
386679b7a77eSMarkus Armbruster# Since: 2.9
38671ad166b6SBenoît Canet##
3868895a2a80SEric Blake{ 'struct': 'BlockdevOptionsBlkdebug',
38691ad166b6SBenoît Canet  'data': { 'image': 'BlockdevRef',
38701ad166b6SBenoît Canet            '*config': 'str',
3871430b26a8SEric Blake            '*align': 'int', '*max-transfer': 'int32',
3872430b26a8SEric Blake            '*opt-write-zero': 'int32', '*max-write-zero': 'int32',
3873430b26a8SEric Blake            '*opt-discard': 'int32', '*max-discard': 'int32',
38741ad166b6SBenoît Canet            '*inject-error': ['BlkdebugInjectErrorOptions'],
387569c6449fSMax Reitz            '*set-state': ['BlkdebugSetStateOptions'],
387669c6449fSMax Reitz            '*take-child-perms': ['BlockPermission'],
387769c6449fSMax Reitz            '*unshare-child-perms': ['BlockPermission'] } }
38781ad166b6SBenoît Canet
38791ad166b6SBenoît Canet##
3880bfcc224eSAapo Vienamo# @BlockdevOptionsBlklogwrites:
3881bfcc224eSAapo Vienamo#
3882bfcc224eSAapo Vienamo# Driver specific block device options for blklogwrites.
3883bfcc224eSAapo Vienamo#
3884bfcc224eSAapo Vienamo# @file: block device
3885bfcc224eSAapo Vienamo#
3886bfcc224eSAapo Vienamo# @log: block device used to log writes to @file
3887bfcc224eSAapo Vienamo#
3888a937b6aaSMarkus Armbruster# @log-sector-size: sector size used in logging writes to @file,
3889a937b6aaSMarkus Armbruster#     determines granularity of offsets and sizes of writes
3890a937b6aaSMarkus Armbruster#     (default: 512)
3891bfcc224eSAapo Vienamo#
38927769eaa5SAri Sundholm# @log-append: append to an existing log (default: false)
38937769eaa5SAri Sundholm#
3894a937b6aaSMarkus Armbruster# @log-super-update-interval: interval of write requests after which
3895a937b6aaSMarkus Armbruster#     the log super block is updated to disk (default: 4096)
38961dce698eSAri Sundholm#
3897bfcc224eSAapo Vienamo# Since: 3.0
3898bfcc224eSAapo Vienamo##
3899bfcc224eSAapo Vienamo{ 'struct': 'BlockdevOptionsBlklogwrites',
3900bfcc224eSAapo Vienamo  'data': { 'file': 'BlockdevRef',
3901bfcc224eSAapo Vienamo            'log': 'BlockdevRef',
39020878b3c1SAri Sundholm            '*log-sector-size': 'uint32',
39031dce698eSAri Sundholm            '*log-append': 'bool',
39041dce698eSAri Sundholm            '*log-super-update-interval': 'uint64' } }
3905bfcc224eSAapo Vienamo
3906bfcc224eSAapo Vienamo##
39075072f7b3SMarc-André Lureau# @BlockdevOptionsBlkverify:
39081ad166b6SBenoît Canet#
39091ad166b6SBenoît Canet# Driver specific block device options for blkverify.
39101ad166b6SBenoît Canet#
39111ad166b6SBenoît Canet# @test: block device to be tested
39121ad166b6SBenoît Canet#
39131ad166b6SBenoît Canet# @raw: raw image used for verification
39141ad166b6SBenoît Canet#
391579b7a77eSMarkus Armbruster# Since: 2.9
39161ad166b6SBenoît Canet##
3917895a2a80SEric Blake{ 'struct': 'BlockdevOptionsBlkverify',
39181ad166b6SBenoît Canet  'data': { 'test': 'BlockdevRef',
39191ad166b6SBenoît Canet            'raw': 'BlockdevRef' } }
39201ad166b6SBenoît Canet
39211ad166b6SBenoît Canet##
392235e32d9eSPavel Dovgalyuk# @BlockdevOptionsBlkreplay:
392335e32d9eSPavel Dovgalyuk#
392435e32d9eSPavel Dovgalyuk# Driver specific block device options for blkreplay.
392535e32d9eSPavel Dovgalyuk#
392635e32d9eSPavel Dovgalyuk# @image: disk image which should be controlled with blkreplay
392735e32d9eSPavel Dovgalyuk#
392835e32d9eSPavel Dovgalyuk# Since: 4.2
392935e32d9eSPavel Dovgalyuk##
393035e32d9eSPavel Dovgalyuk{ 'struct': 'BlockdevOptionsBlkreplay',
393135e32d9eSPavel Dovgalyuk  'data': { 'image': 'BlockdevRef' } }
393235e32d9eSPavel Dovgalyuk
393335e32d9eSPavel Dovgalyuk##
39345072f7b3SMarc-André Lureau# @QuorumReadPattern:
393562c6031fSLiu Yuan#
393662c6031fSLiu Yuan# An enumeration of quorum read patterns.
393762c6031fSLiu Yuan#
393862c6031fSLiu Yuan# @quorum: read all the children and do a quorum vote on reads
393962c6031fSLiu Yuan#
394062c6031fSLiu Yuan# @fifo: read only from the first child that has not failed
394162c6031fSLiu Yuan#
394279b7a77eSMarkus Armbruster# Since: 2.9
394362c6031fSLiu Yuan##
394462c6031fSLiu Yuan{ 'enum': 'QuorumReadPattern', 'data': [ 'quorum', 'fifo' ] }
394562c6031fSLiu Yuan
394662c6031fSLiu Yuan##
39475072f7b3SMarc-André Lureau# @BlockdevOptionsQuorum:
39481ad166b6SBenoît Canet#
39491ad166b6SBenoît Canet# Driver specific block device options for Quorum
39501ad166b6SBenoît Canet#
3951a937b6aaSMarkus Armbruster# @blkverify: true if the driver must print content mismatch set to
3952a937b6aaSMarkus Armbruster#     false by default
39531ad166b6SBenoît Canet#
39541ad166b6SBenoît Canet# @children: the children block devices to use
39551ad166b6SBenoît Canet#
39561ad166b6SBenoît Canet# @vote-threshold: the vote limit under which a read will fail
39571ad166b6SBenoît Canet#
39581d8bda12SMarkus Armbruster# @rewrite-corrupted: rewrite corrupted data when quorum is reached
3959cf29a570SBenoît Canet#     (Since 2.1)
3960cf29a570SBenoît Canet#
39611d8bda12SMarkus Armbruster# @read-pattern: choose read pattern and set to quorum by default
396262c6031fSLiu Yuan#     (Since 2.2)
396362c6031fSLiu Yuan#
396479b7a77eSMarkus Armbruster# Since: 2.9
39651ad166b6SBenoît Canet##
3966895a2a80SEric Blake{ 'struct': 'BlockdevOptionsQuorum',
39671ad166b6SBenoît Canet  'data': { '*blkverify': 'bool',
39681ad166b6SBenoît Canet            'children': [ 'BlockdevRef' ],
396962c6031fSLiu Yuan            'vote-threshold': 'int',
397062c6031fSLiu Yuan            '*rewrite-corrupted': 'bool',
397162c6031fSLiu Yuan            '*read-pattern': 'QuorumReadPattern' } }
39721ad166b6SBenoît Canet
39731ad166b6SBenoît Canet##
39745072f7b3SMarc-André Lureau# @BlockdevOptionsGluster:
39757edac2ddSPrasanna Kumar Kalever#
39767edac2ddSPrasanna Kumar Kalever# Driver specific block device options for Gluster
39777edac2ddSPrasanna Kumar Kalever#
39787edac2ddSPrasanna Kumar Kalever# @volume: name of gluster volume where VM image resides
39797edac2ddSPrasanna Kumar Kalever#
39807edac2ddSPrasanna Kumar Kalever# @path: absolute path to image file in gluster volume
39817edac2ddSPrasanna Kumar Kalever#
39820a189ffbSPrasanna Kumar Kalever# @server: gluster servers description
39837edac2ddSPrasanna Kumar Kalever#
3984a937b6aaSMarkus Armbruster# @debug: libgfapi log level (default '4' which is Error) (Since 2.8)
39857edac2ddSPrasanna Kumar Kalever#
39861d8bda12SMarkus Armbruster# @logfile: libgfapi log file (default /dev/stderr) (Since 2.8)
3987e9db8ff3SPrasanna Kumar Kalever#
398879b7a77eSMarkus Armbruster# Since: 2.9
39897edac2ddSPrasanna Kumar Kalever##
39907edac2ddSPrasanna Kumar Kalever{ 'struct': 'BlockdevOptionsGluster',
39917edac2ddSPrasanna Kumar Kalever  'data': { 'volume': 'str',
39927edac2ddSPrasanna Kumar Kalever            'path': 'str',
399362cf396bSMarkus Armbruster            'server': ['SocketAddress'],
39941a417e46SPrasanna Kumar Kalever            '*debug': 'int',
3995e9db8ff3SPrasanna Kumar Kalever            '*logfile': 'str' } }
39967edac2ddSPrasanna Kumar Kalever
39977edac2ddSPrasanna Kumar Kalever##
3998fd66dbd4SStefan Hajnoczi# @BlockdevOptionsIoUring:
3999fd66dbd4SStefan Hajnoczi#
4000fd66dbd4SStefan Hajnoczi# Driver specific block device options for the io_uring backend.
4001fd66dbd4SStefan Hajnoczi#
4002fd66dbd4SStefan Hajnoczi# @filename: path to the image file
4003fd66dbd4SStefan Hajnoczi#
4004fd66dbd4SStefan Hajnoczi# Since: 7.2
4005fd66dbd4SStefan Hajnoczi##
4006fd66dbd4SStefan Hajnoczi{ 'struct': 'BlockdevOptionsIoUring',
4007fd66dbd4SStefan Hajnoczi  'data': { 'filename': 'str' },
4008fd66dbd4SStefan Hajnoczi  'if': 'CONFIG_BLKIO' }
4009fd66dbd4SStefan Hajnoczi
4010fd66dbd4SStefan Hajnoczi##
4011fd66dbd4SStefan Hajnoczi# @BlockdevOptionsNvmeIoUring:
4012fd66dbd4SStefan Hajnoczi#
4013fd66dbd4SStefan Hajnoczi# Driver specific block device options for the nvme-io_uring backend.
4014fd66dbd4SStefan Hajnoczi#
4015a937b6aaSMarkus Armbruster# @path: path to the NVMe namespace's character device (e.g.
4016a937b6aaSMarkus Armbruster#     /dev/ng0n1).
4017fd66dbd4SStefan Hajnoczi#
4018fd66dbd4SStefan Hajnoczi# Since: 7.2
4019fd66dbd4SStefan Hajnoczi##
4020fd66dbd4SStefan Hajnoczi{ 'struct': 'BlockdevOptionsNvmeIoUring',
40216c32fc0dSAlberto Faria  'data': { 'path': 'str' },
4022fd66dbd4SStefan Hajnoczi  'if': 'CONFIG_BLKIO' }
4023fd66dbd4SStefan Hajnoczi
4024fd66dbd4SStefan Hajnoczi##
402503d9e4c0SAlberto Faria# @BlockdevOptionsVirtioBlkVfioPci:
402603d9e4c0SAlberto Faria#
4027a937b6aaSMarkus Armbruster# Driver specific block device options for the virtio-blk-vfio-pci
4028a937b6aaSMarkus Armbruster# backend.
402903d9e4c0SAlberto Faria#
403003d9e4c0SAlberto Faria# @path: path to the PCI device's sysfs directory (e.g.
403103d9e4c0SAlberto Faria#     /sys/bus/pci/devices/0000:00:01.0).
403203d9e4c0SAlberto Faria#
403303d9e4c0SAlberto Faria# Since: 7.2
403403d9e4c0SAlberto Faria##
403503d9e4c0SAlberto Faria{ 'struct': 'BlockdevOptionsVirtioBlkVfioPci',
403603d9e4c0SAlberto Faria  'data': { 'path': 'str' },
403703d9e4c0SAlberto Faria  'if': 'CONFIG_BLKIO' }
403803d9e4c0SAlberto Faria
403903d9e4c0SAlberto Faria##
4040fd66dbd4SStefan Hajnoczi# @BlockdevOptionsVirtioBlkVhostUser:
4041fd66dbd4SStefan Hajnoczi#
4042a937b6aaSMarkus Armbruster# Driver specific block device options for the virtio-blk-vhost-user
4043a937b6aaSMarkus Armbruster# backend.
4044fd66dbd4SStefan Hajnoczi#
4045fd66dbd4SStefan Hajnoczi# @path: path to the vhost-user UNIX domain socket.
4046fd66dbd4SStefan Hajnoczi#
4047fd66dbd4SStefan Hajnoczi# Since: 7.2
4048fd66dbd4SStefan Hajnoczi##
4049fd66dbd4SStefan Hajnoczi{ 'struct': 'BlockdevOptionsVirtioBlkVhostUser',
4050fd66dbd4SStefan Hajnoczi  'data': { 'path': 'str' },
4051fd66dbd4SStefan Hajnoczi  'if': 'CONFIG_BLKIO' }
4052fd66dbd4SStefan Hajnoczi
4053fd66dbd4SStefan Hajnoczi##
4054fd66dbd4SStefan Hajnoczi# @BlockdevOptionsVirtioBlkVhostVdpa:
4055fd66dbd4SStefan Hajnoczi#
4056a937b6aaSMarkus Armbruster# Driver specific block device options for the virtio-blk-vhost-vdpa
4057a937b6aaSMarkus Armbruster# backend.
4058fd66dbd4SStefan Hajnoczi#
4059fd66dbd4SStefan Hajnoczi# @path: path to the vhost-vdpa character device.
4060fd66dbd4SStefan Hajnoczi#
406198b126f5SStefano Garzarella# Features:
406201bed0ffSMarkus Armbruster#
406398b126f5SStefano Garzarella# @fdset: Member @path supports the special "/dev/fdset/N" path
406498b126f5SStefano Garzarella#     (since 8.1)
406598b126f5SStefano Garzarella#
4066fd66dbd4SStefan Hajnoczi# Since: 7.2
4067fd66dbd4SStefan Hajnoczi##
4068fd66dbd4SStefan Hajnoczi{ 'struct': 'BlockdevOptionsVirtioBlkVhostVdpa',
4069fd66dbd4SStefan Hajnoczi  'data': { 'path': 'str' },
407098b126f5SStefano Garzarella  'features': [ { 'name' :'fdset',
407198b126f5SStefano Garzarella                  'if': 'CONFIG_BLKIO_VHOST_VDPA_FD' } ],
4072fd66dbd4SStefan Hajnoczi  'if': 'CONFIG_BLKIO' }
4073fd66dbd4SStefan Hajnoczi
4074fd66dbd4SStefan Hajnoczi##
407531eb1202SKevin Wolf# @IscsiTransport:
407631eb1202SKevin Wolf#
407731eb1202SKevin Wolf# An enumeration of libiscsi transport types
407831eb1202SKevin Wolf#
407931eb1202SKevin Wolf# Since: 2.9
408031eb1202SKevin Wolf##
408131eb1202SKevin Wolf{ 'enum': 'IscsiTransport',
408231eb1202SKevin Wolf  'data': [ 'tcp', 'iser' ] }
408331eb1202SKevin Wolf
408431eb1202SKevin Wolf##
408531eb1202SKevin Wolf# @IscsiHeaderDigest:
408631eb1202SKevin Wolf#
408731eb1202SKevin Wolf# An enumeration of header digests supported by libiscsi
408831eb1202SKevin Wolf#
408931eb1202SKevin Wolf# Since: 2.9
409031eb1202SKevin Wolf##
409131eb1202SKevin Wolf{ 'enum': 'IscsiHeaderDigest',
409231eb1202SKevin Wolf  'prefix': 'QAPI_ISCSI_HEADER_DIGEST',
409331eb1202SKevin Wolf  'data': [ 'crc32c', 'none', 'crc32c-none', 'none-crc32c' ] }
409431eb1202SKevin Wolf
409531eb1202SKevin Wolf##
409631eb1202SKevin Wolf# @BlockdevOptionsIscsi:
409731eb1202SKevin Wolf#
4098d6a5ca3aSMarkus Armbruster# Driver specific block device options for iscsi
4099d6a5ca3aSMarkus Armbruster#
410051654aa5SJeff Cody# @transport: The iscsi transport type
410131eb1202SKevin Wolf#
410251654aa5SJeff Cody# @portal: The address of the iscsi portal
410331eb1202SKevin Wolf#
410451654aa5SJeff Cody# @target: The target iqn name
410531eb1202SKevin Wolf#
41061d8bda12SMarkus Armbruster# @lun: LUN to connect to.  Defaults to 0.
410731eb1202SKevin Wolf#
4108a937b6aaSMarkus Armbruster# @user: User name to log in with.  If omitted, no CHAP authentication
4109a937b6aaSMarkus Armbruster#     is performed.
411031eb1202SKevin Wolf#
4111a937b6aaSMarkus Armbruster# @password-secret: The ID of a QCryptoSecret object providing the
4112a937b6aaSMarkus Armbruster#     password for the login.  This option is required if @user is
4113a937b6aaSMarkus Armbruster#     specified.
411431eb1202SKevin Wolf#
4115a937b6aaSMarkus Armbruster# @initiator-name: The iqn name we want to identify to the target as.
4116a937b6aaSMarkus Armbruster#     If this option is not specified, an initiator name is generated
4117a937b6aaSMarkus Armbruster#     automatically.
411831eb1202SKevin Wolf#
4119a937b6aaSMarkus Armbruster# @header-digest: The desired header digest.  Defaults to none-crc32c.
412031eb1202SKevin Wolf#
4121a937b6aaSMarkus Armbruster# @timeout: Timeout in seconds after which a request will timeout.  0
4122a937b6aaSMarkus Armbruster#     means no timeout and is the default.
412331eb1202SKevin Wolf#
412431eb1202SKevin Wolf# Since: 2.9
412531eb1202SKevin Wolf##
412631eb1202SKevin Wolf{ 'struct': 'BlockdevOptionsIscsi',
412731eb1202SKevin Wolf  'data': { 'transport': 'IscsiTransport',
412831eb1202SKevin Wolf            'portal': 'str',
412931eb1202SKevin Wolf            'target': 'str',
413031eb1202SKevin Wolf            '*lun': 'int',
413131eb1202SKevin Wolf            '*user': 'str',
413231eb1202SKevin Wolf            '*password-secret': 'str',
413331eb1202SKevin Wolf            '*initiator-name': 'str',
413431eb1202SKevin Wolf            '*header-digest': 'IscsiHeaderDigest',
413531eb1202SKevin Wolf            '*timeout': 'int' } }
413631eb1202SKevin Wolf
41370a55679bSJeff Cody##
4138a3699de4SMarkus Armbruster# @RbdAuthMode:
4139a3699de4SMarkus Armbruster#
4140a3699de4SMarkus Armbruster# Since: 3.0
4141a3699de4SMarkus Armbruster##
4142a3699de4SMarkus Armbruster{ 'enum': 'RbdAuthMode',
4143a3699de4SMarkus Armbruster  'data': [ 'cephx', 'none' ] }
4144a3699de4SMarkus Armbruster
4145a3699de4SMarkus Armbruster##
414642e4ac9eSOr Ozeri# @RbdImageEncryptionFormat:
414742e4ac9eSOr Ozeri#
4148b8f218efSOr Ozeri# @luks-any: Used for opening either luks or luks2 (Since 8.0)
4149b8f218efSOr Ozeri#
415042e4ac9eSOr Ozeri# Since: 6.1
415142e4ac9eSOr Ozeri##
415242e4ac9eSOr Ozeri{ 'enum': 'RbdImageEncryptionFormat',
4153b8f218efSOr Ozeri  'data': [ 'luks', 'luks2', 'luks-any' ] }
415442e4ac9eSOr Ozeri
415542e4ac9eSOr Ozeri##
415642e4ac9eSOr Ozeri# @RbdEncryptionOptionsLUKSBase:
415742e4ac9eSOr Ozeri#
4158a937b6aaSMarkus Armbruster# @key-secret: ID of a QCryptoSecret object providing a passphrase for
4159a937b6aaSMarkus Armbruster#     unlocking the encryption
416042e4ac9eSOr Ozeri#
416142e4ac9eSOr Ozeri# Since: 6.1
416242e4ac9eSOr Ozeri##
416342e4ac9eSOr Ozeri{ 'struct': 'RbdEncryptionOptionsLUKSBase',
416442e4ac9eSOr Ozeri  'data': { 'key-secret': 'str' } }
416542e4ac9eSOr Ozeri
416642e4ac9eSOr Ozeri##
416742e4ac9eSOr Ozeri# @RbdEncryptionCreateOptionsLUKSBase:
416842e4ac9eSOr Ozeri#
416942e4ac9eSOr Ozeri# @cipher-alg: The encryption algorithm
417042e4ac9eSOr Ozeri#
417142e4ac9eSOr Ozeri# Since: 6.1
417242e4ac9eSOr Ozeri##
417342e4ac9eSOr Ozeri{ 'struct': 'RbdEncryptionCreateOptionsLUKSBase',
417442e4ac9eSOr Ozeri  'base': 'RbdEncryptionOptionsLUKSBase',
4175a092c513SMarkus Armbruster  'data': { '*cipher-alg': 'QCryptoCipherAlgo' } }
417642e4ac9eSOr Ozeri
417742e4ac9eSOr Ozeri##
417842e4ac9eSOr Ozeri# @RbdEncryptionOptionsLUKS:
417942e4ac9eSOr Ozeri#
418042e4ac9eSOr Ozeri# Since: 6.1
418142e4ac9eSOr Ozeri##
418242e4ac9eSOr Ozeri{ 'struct': 'RbdEncryptionOptionsLUKS',
418342e4ac9eSOr Ozeri  'base': 'RbdEncryptionOptionsLUKSBase',
418442e4ac9eSOr Ozeri  'data': { } }
418542e4ac9eSOr Ozeri
418642e4ac9eSOr Ozeri##
418742e4ac9eSOr Ozeri# @RbdEncryptionOptionsLUKS2:
418842e4ac9eSOr Ozeri#
418942e4ac9eSOr Ozeri# Since: 6.1
419042e4ac9eSOr Ozeri##
419142e4ac9eSOr Ozeri{ 'struct': 'RbdEncryptionOptionsLUKS2',
419242e4ac9eSOr Ozeri  'base': 'RbdEncryptionOptionsLUKSBase',
419342e4ac9eSOr Ozeri  'data': { } }
419442e4ac9eSOr Ozeri
419542e4ac9eSOr Ozeri##
4196b8f218efSOr Ozeri# @RbdEncryptionOptionsLUKSAny:
4197b8f218efSOr Ozeri#
4198b8f218efSOr Ozeri# Since: 8.0
4199b8f218efSOr Ozeri##
4200b8f218efSOr Ozeri{ 'struct': 'RbdEncryptionOptionsLUKSAny',
4201b8f218efSOr Ozeri  'base': 'RbdEncryptionOptionsLUKSBase',
4202b8f218efSOr Ozeri  'data': { } }
4203b8f218efSOr Ozeri
4204b8f218efSOr Ozeri##
420542e4ac9eSOr Ozeri# @RbdEncryptionCreateOptionsLUKS:
420642e4ac9eSOr Ozeri#
420742e4ac9eSOr Ozeri# Since: 6.1
420842e4ac9eSOr Ozeri##
420942e4ac9eSOr Ozeri{ 'struct': 'RbdEncryptionCreateOptionsLUKS',
421042e4ac9eSOr Ozeri  'base': 'RbdEncryptionCreateOptionsLUKSBase',
421142e4ac9eSOr Ozeri  'data': { } }
421242e4ac9eSOr Ozeri
421342e4ac9eSOr Ozeri##
421442e4ac9eSOr Ozeri# @RbdEncryptionCreateOptionsLUKS2:
421542e4ac9eSOr Ozeri#
421642e4ac9eSOr Ozeri# Since: 6.1
421742e4ac9eSOr Ozeri##
421842e4ac9eSOr Ozeri{ 'struct': 'RbdEncryptionCreateOptionsLUKS2',
421942e4ac9eSOr Ozeri  'base': 'RbdEncryptionCreateOptionsLUKSBase',
422042e4ac9eSOr Ozeri  'data': { } }
422142e4ac9eSOr Ozeri
422242e4ac9eSOr Ozeri##
422342e4ac9eSOr Ozeri# @RbdEncryptionOptions:
422442e4ac9eSOr Ozeri#
42250f385a24SOr Ozeri# @format: Encryption format.
42260f385a24SOr Ozeri#
4227a937b6aaSMarkus Armbruster# @parent: Parent image encryption options (for cloned images).  Can
4228a937b6aaSMarkus Armbruster#     be left unspecified if this cloned image is encrypted using the
4229a937b6aaSMarkus Armbruster#     same format and secret as its parent image (i.e. not explicitly
4230a937b6aaSMarkus Armbruster#     formatted) or if its parent image is not encrypted.  (Since 8.0)
42310f385a24SOr Ozeri#
423242e4ac9eSOr Ozeri# Since: 6.1
423342e4ac9eSOr Ozeri##
423442e4ac9eSOr Ozeri{ 'union': 'RbdEncryptionOptions',
42350f385a24SOr Ozeri  'base': { 'format': 'RbdImageEncryptionFormat',
42360f385a24SOr Ozeri            '*parent': 'RbdEncryptionOptions' },
423742e4ac9eSOr Ozeri  'discriminator': 'format',
423842e4ac9eSOr Ozeri  'data': { 'luks': 'RbdEncryptionOptionsLUKS',
4239b8f218efSOr Ozeri            'luks2': 'RbdEncryptionOptionsLUKS2',
4240b8f218efSOr Ozeri            'luks-any': 'RbdEncryptionOptionsLUKSAny'} }
424142e4ac9eSOr Ozeri
424242e4ac9eSOr Ozeri##
424342e4ac9eSOr Ozeri# @RbdEncryptionCreateOptions:
424442e4ac9eSOr Ozeri#
424589a2273bSMarkus Armbruster# @format: Encryption format.
424689a2273bSMarkus Armbruster#
424742e4ac9eSOr Ozeri# Since: 6.1
424842e4ac9eSOr Ozeri##
424942e4ac9eSOr Ozeri{ 'union': 'RbdEncryptionCreateOptions',
425042e4ac9eSOr Ozeri  'base': { 'format': 'RbdImageEncryptionFormat' },
425142e4ac9eSOr Ozeri  'discriminator': 'format',
425242e4ac9eSOr Ozeri  'data': { 'luks': 'RbdEncryptionCreateOptionsLUKS',
425342e4ac9eSOr Ozeri            'luks2': 'RbdEncryptionCreateOptionsLUKS2' } }
425442e4ac9eSOr Ozeri
425542e4ac9eSOr Ozeri##
42568a47e8ebSJeff Cody# @BlockdevOptionsRbd:
42578a47e8ebSJeff Cody#
42588a47e8ebSJeff Cody# @pool: Ceph pool name.
42598a47e8ebSJeff Cody#
426019ae9ae0SFlorian Florensa# @namespace: Rados namespace name in the Ceph pool.  (Since 5.0)
426119ae9ae0SFlorian Florensa#
42628a47e8ebSJeff Cody# @image: Image name in the Ceph pool.
42638a47e8ebSJeff Cody#
4264a937b6aaSMarkus Armbruster# @conf: path to Ceph configuration file.  Values in the configuration
4265a937b6aaSMarkus Armbruster#     file will be overridden by options specified via QAPI.
42668a47e8ebSJeff Cody#
42671d8bda12SMarkus Armbruster# @snapshot: Ceph snapshot name.
42688a47e8ebSJeff Cody#
426942e4ac9eSOr Ozeri# @encrypt: Image encryption options.  (Since 6.1)
427042e4ac9eSOr Ozeri#
42711d8bda12SMarkus Armbruster# @user: Ceph id name.
42728a47e8ebSJeff Cody#
4273a937b6aaSMarkus Armbruster# @auth-client-required: Acceptable authentication modes.  This maps
4274a937b6aaSMarkus Armbruster#     to Ceph configuration option "auth_client_required".  (Since
4275a937b6aaSMarkus Armbruster#     3.0)
4276a3699de4SMarkus Armbruster#
4277a937b6aaSMarkus Armbruster# @key-secret: ID of a QCryptoSecret object providing a key for cephx
4278a937b6aaSMarkus Armbruster#     authentication.  This maps to Ceph configuration option "key".
4279a937b6aaSMarkus Armbruster#     (Since 3.0)
4280d083f954SMarkus Armbruster#
4281a937b6aaSMarkus Armbruster# @server: Monitor host address and port.  This maps to the "mon_host"
4282a937b6aaSMarkus Armbruster#     Ceph option.
42830a55679bSJeff Cody#
42848a47e8ebSJeff Cody# Since: 2.9
42858a47e8ebSJeff Cody##
42868a47e8ebSJeff Cody{ 'struct': 'BlockdevOptionsRbd',
42878a47e8ebSJeff Cody  'data': { 'pool': 'str',
428819ae9ae0SFlorian Florensa            '*namespace': 'str',
42898a47e8ebSJeff Cody            'image': 'str',
42908a47e8ebSJeff Cody            '*conf': 'str',
42918a47e8ebSJeff Cody            '*snapshot': 'str',
429242e4ac9eSOr Ozeri            '*encrypt': 'RbdEncryptionOptions',
42938a47e8ebSJeff Cody            '*user': 'str',
4294a3699de4SMarkus Armbruster            '*auth-client-required': ['RbdAuthMode'],
4295d083f954SMarkus Armbruster            '*key-secret': 'str',
4296577d8c9aSMarkus Armbruster            '*server': ['InetSocketAddressBase'] } }
42978a47e8ebSJeff Cody
429831eb1202SKevin Wolf##
42995072f7b3SMarc-André Lureau# @ReplicationMode:
4300190b9a8bSChanglong Xie#
4301190b9a8bSChanglong Xie# An enumeration of replication modes.
4302190b9a8bSChanglong Xie#
4303a937b6aaSMarkus Armbruster# @primary: Primary mode, the vm's state will be sent to secondary
4304a937b6aaSMarkus Armbruster#     QEMU.
4305190b9a8bSChanglong Xie#
4306a937b6aaSMarkus Armbruster# @secondary: Secondary mode, receive the vm's state from primary
4307a937b6aaSMarkus Armbruster#     QEMU.
4308190b9a8bSChanglong Xie#
430979b7a77eSMarkus Armbruster# Since: 2.9
4310190b9a8bSChanglong Xie##
4311335d10cdSMarc-André Lureau{ 'enum' : 'ReplicationMode', 'data' : [ 'primary', 'secondary' ],
43128a9f1e1dSMarc-André Lureau  'if': 'CONFIG_REPLICATION' }
4313190b9a8bSChanglong Xie
4314190b9a8bSChanglong Xie##
43155072f7b3SMarc-André Lureau# @BlockdevOptionsReplication:
431682ac5543SWen Congyang#
431782ac5543SWen Congyang# Driver specific block device options for replication
431882ac5543SWen Congyang#
431982ac5543SWen Congyang# @mode: the replication mode
432082ac5543SWen Congyang#
4321a937b6aaSMarkus Armbruster# @top-id: In secondary mode, node name or device ID of the root node
4322a937b6aaSMarkus Armbruster#     who owns the replication node chain.  Must not be given in
4323f4f2539bSChanglong Xie#     primary mode.
432482ac5543SWen Congyang#
432579b7a77eSMarkus Armbruster# Since: 2.9
432682ac5543SWen Congyang##
432782ac5543SWen Congyang{ 'struct': 'BlockdevOptionsReplication',
432882ac5543SWen Congyang  'base': 'BlockdevOptionsGenericFormat',
432982ac5543SWen Congyang  'data': { 'mode': 'ReplicationMode',
4330335d10cdSMarc-André Lureau            '*top-id': 'str' },
43318a9f1e1dSMarc-André Lureau  'if': 'CONFIG_REPLICATION' }
433282ac5543SWen Congyang
433382ac5543SWen Congyang##
43345072f7b3SMarc-André Lureau# @NFSTransport:
4335aa2623d8SAshijeet Acharya#
4336aa2623d8SAshijeet Acharya# An enumeration of NFS transport types
4337aa2623d8SAshijeet Acharya#
4338aa2623d8SAshijeet Acharya# @inet: TCP transport
4339aa2623d8SAshijeet Acharya#
434079b7a77eSMarkus Armbruster# Since: 2.9
4341aa2623d8SAshijeet Acharya##
4342aa2623d8SAshijeet Acharya{ 'enum': 'NFSTransport',
4343aa2623d8SAshijeet Acharya  'data': [ 'inet' ] }
4344aa2623d8SAshijeet Acharya
4345aa2623d8SAshijeet Acharya##
43465072f7b3SMarc-André Lureau# @NFSServer:
4347aa2623d8SAshijeet Acharya#
4348aa2623d8SAshijeet Acharya# Captures the address of the socket
4349aa2623d8SAshijeet Acharya#
4350aa2623d8SAshijeet Acharya# @type: transport type used for NFS (only TCP supported)
4351aa2623d8SAshijeet Acharya#
4352aa2623d8SAshijeet Acharya# @host: host address for NFS server
4353aa2623d8SAshijeet Acharya#
435479b7a77eSMarkus Armbruster# Since: 2.9
4355aa2623d8SAshijeet Acharya##
4356aa2623d8SAshijeet Acharya{ 'struct': 'NFSServer',
4357aa2623d8SAshijeet Acharya  'data': { 'type': 'NFSTransport',
4358aa2623d8SAshijeet Acharya            'host': 'str' } }
4359aa2623d8SAshijeet Acharya
4360aa2623d8SAshijeet Acharya##
43615072f7b3SMarc-André Lureau# @BlockdevOptionsNfs:
4362aa2623d8SAshijeet Acharya#
4363aa2623d8SAshijeet Acharya# Driver specific block device option for NFS
4364aa2623d8SAshijeet Acharya#
4365aa2623d8SAshijeet Acharya# @server: host address
4366aa2623d8SAshijeet Acharya#
4367aa2623d8SAshijeet Acharya# @path: path of the image on the host
4368aa2623d8SAshijeet Acharya#
4369a937b6aaSMarkus Armbruster# @user: UID value to use when talking to the server (defaults to
4370a937b6aaSMarkus Armbruster#     65534 on Windows and getuid() on unix)
4371aa2623d8SAshijeet Acharya#
4372a937b6aaSMarkus Armbruster# @group: GID value to use when talking to the server (defaults to
4373a937b6aaSMarkus Armbruster#     65534 on Windows and getgid() in unix)
4374aa2623d8SAshijeet Acharya#
4375a937b6aaSMarkus Armbruster# @tcp-syn-count: number of SYNs during the session establishment
4376a937b6aaSMarkus Armbruster#     (defaults to libnfs default)
4377aa2623d8SAshijeet Acharya#
4378a937b6aaSMarkus Armbruster# @readahead-size: set the readahead size in bytes (defaults to libnfs
4379a937b6aaSMarkus Armbruster#     default)
4380aa2623d8SAshijeet Acharya#
4381a937b6aaSMarkus Armbruster# @page-cache-size: set the pagecache size in bytes (defaults to
4382a937b6aaSMarkus Armbruster#     libnfs default)
4383aa2623d8SAshijeet Acharya#
4384a937b6aaSMarkus Armbruster# @debug: set the NFS debug level (max 2) (defaults to libnfs default)
4385aa2623d8SAshijeet Acharya#
438679b7a77eSMarkus Armbruster# Since: 2.9
4387aa2623d8SAshijeet Acharya##
4388aa2623d8SAshijeet Acharya{ 'struct': 'BlockdevOptionsNfs',
4389aa2623d8SAshijeet Acharya  'data': { 'server': 'NFSServer',
4390aa2623d8SAshijeet Acharya            'path': 'str',
4391aa2623d8SAshijeet Acharya            '*user': 'int',
4392aa2623d8SAshijeet Acharya            '*group': 'int',
4393aa2623d8SAshijeet Acharya            '*tcp-syn-count': 'int',
4394aa2623d8SAshijeet Acharya            '*readahead-size': 'int',
4395aa2623d8SAshijeet Acharya            '*page-cache-size': 'int',
43967103d916SPrasanna Kumar Kalever            '*debug': 'int' } }
4397aa2623d8SAshijeet Acharya
4398aa2623d8SAshijeet Acharya##
43996b9d62dbSMax Reitz# @BlockdevOptionsCurlBase:
440068555285SKevin Wolf#
4401a937b6aaSMarkus Armbruster# Driver specific block device options shared by all protocols
4402a937b6aaSMarkus Armbruster# supported by the curl backend.
440368555285SKevin Wolf#
44046b9d62dbSMax Reitz# @url: URL of the image file
44056b9d62dbSMax Reitz#
4406a937b6aaSMarkus Armbruster# @readahead: Size of the read-ahead cache; must be a multiple of 512
4407a937b6aaSMarkus Armbruster#     (defaults to 256 kB)
44086b9d62dbSMax Reitz#
44096b9d62dbSMax Reitz# @timeout: Timeout for connections, in seconds (defaults to 5)
44106b9d62dbSMax Reitz#
44116b9d62dbSMax Reitz# @username: Username for authentication (defaults to none)
44126b9d62dbSMax Reitz#
44136b9d62dbSMax Reitz# @password-secret: ID of a QCryptoSecret object providing a password
44146b9d62dbSMax Reitz#     for authentication (defaults to no password)
44156b9d62dbSMax Reitz#
4416a937b6aaSMarkus Armbruster# @proxy-username: Username for proxy authentication (defaults to
4417a937b6aaSMarkus Armbruster#     none)
44186b9d62dbSMax Reitz#
4419a937b6aaSMarkus Armbruster# @proxy-password-secret: ID of a QCryptoSecret object providing a
4420a937b6aaSMarkus Armbruster#     password for proxy authentication (defaults to no password)
442168555285SKevin Wolf#
442279b7a77eSMarkus Armbruster# Since: 2.9
442368555285SKevin Wolf##
44246b9d62dbSMax Reitz{ 'struct': 'BlockdevOptionsCurlBase',
44256b9d62dbSMax Reitz  'data': { 'url': 'str',
44266b9d62dbSMax Reitz            '*readahead': 'int',
44276b9d62dbSMax Reitz            '*timeout': 'int',
44286b9d62dbSMax Reitz            '*username': 'str',
44296b9d62dbSMax Reitz            '*password-secret': 'str',
44306b9d62dbSMax Reitz            '*proxy-username': 'str',
44316b9d62dbSMax Reitz            '*proxy-password-secret': 'str' } }
44326b9d62dbSMax Reitz
44336b9d62dbSMax Reitz##
44346b9d62dbSMax Reitz# @BlockdevOptionsCurlHttp:
44356b9d62dbSMax Reitz#
4436a937b6aaSMarkus Armbruster# Driver specific block device options for HTTP connections over the
4437a937b6aaSMarkus Armbruster# curl backend.  URLs must start with "http://".
44386b9d62dbSMax Reitz#
4439a937b6aaSMarkus Armbruster# @cookie: List of cookies to set; format is "name1=content1;
4440a937b6aaSMarkus Armbruster#     name2=content2;" as explained by CURLOPT_COOKIE(3).  Defaults to
4441a937b6aaSMarkus Armbruster#     no cookies.
44426b9d62dbSMax Reitz#
4443a937b6aaSMarkus Armbruster# @cookie-secret: ID of a QCryptoSecret object providing the cookie
4444a937b6aaSMarkus Armbruster#     data in a secure way.  See @cookie for the format.  (since 2.10)
4445327c8ebdSPeter Krempa#
44466b9d62dbSMax Reitz# Since: 2.9
44476b9d62dbSMax Reitz##
44486b9d62dbSMax Reitz{ 'struct': 'BlockdevOptionsCurlHttp',
44496b9d62dbSMax Reitz  'base': 'BlockdevOptionsCurlBase',
4450327c8ebdSPeter Krempa  'data': { '*cookie': 'str',
4451327c8ebdSPeter Krempa            '*cookie-secret': 'str'} }
44526b9d62dbSMax Reitz
44536b9d62dbSMax Reitz##
44546b9d62dbSMax Reitz# @BlockdevOptionsCurlHttps:
44556b9d62dbSMax Reitz#
4456a937b6aaSMarkus Armbruster# Driver specific block device options for HTTPS connections over the
4457a937b6aaSMarkus Armbruster# curl backend.  URLs must start with "https://".
44586b9d62dbSMax Reitz#
4459a937b6aaSMarkus Armbruster# @cookie: List of cookies to set; format is "name1=content1;
4460a937b6aaSMarkus Armbruster#     name2=content2;" as explained by CURLOPT_COOKIE(3).  Defaults to
4461a937b6aaSMarkus Armbruster#     no cookies.
44626b9d62dbSMax Reitz#
4463a937b6aaSMarkus Armbruster# @sslverify: Whether to verify the SSL certificate's validity
4464a937b6aaSMarkus Armbruster#     (defaults to true)
44656b9d62dbSMax Reitz#
4466a937b6aaSMarkus Armbruster# @cookie-secret: ID of a QCryptoSecret object providing the cookie
4467a937b6aaSMarkus Armbruster#     data in a secure way.  See @cookie for the format.  (since 2.10)
4468327c8ebdSPeter Krempa#
44696b9d62dbSMax Reitz# Since: 2.9
44706b9d62dbSMax Reitz##
44716b9d62dbSMax Reitz{ 'struct': 'BlockdevOptionsCurlHttps',
44726b9d62dbSMax Reitz  'base': 'BlockdevOptionsCurlBase',
44736b9d62dbSMax Reitz  'data': { '*cookie': 'str',
4474327c8ebdSPeter Krempa            '*sslverify': 'bool',
4475327c8ebdSPeter Krempa            '*cookie-secret': 'str'} }
44766b9d62dbSMax Reitz
44776b9d62dbSMax Reitz##
44786b9d62dbSMax Reitz# @BlockdevOptionsCurlFtp:
44796b9d62dbSMax Reitz#
4480a937b6aaSMarkus Armbruster# Driver specific block device options for FTP connections over the
4481a937b6aaSMarkus Armbruster# curl backend.  URLs must start with "ftp://".
44826b9d62dbSMax Reitz#
44836b9d62dbSMax Reitz# Since: 2.9
44846b9d62dbSMax Reitz##
44856b9d62dbSMax Reitz{ 'struct': 'BlockdevOptionsCurlFtp',
44866b9d62dbSMax Reitz  'base': 'BlockdevOptionsCurlBase',
44876b9d62dbSMax Reitz  'data': { } }
44886b9d62dbSMax Reitz
44896b9d62dbSMax Reitz##
44906b9d62dbSMax Reitz# @BlockdevOptionsCurlFtps:
44916b9d62dbSMax Reitz#
4492a937b6aaSMarkus Armbruster# Driver specific block device options for FTPS connections over the
4493a937b6aaSMarkus Armbruster# curl backend.  URLs must start with "ftps://".
44946b9d62dbSMax Reitz#
4495a937b6aaSMarkus Armbruster# @sslverify: Whether to verify the SSL certificate's validity
4496a937b6aaSMarkus Armbruster#     (defaults to true)
44976b9d62dbSMax Reitz#
44986b9d62dbSMax Reitz# Since: 2.9
44996b9d62dbSMax Reitz##
45006b9d62dbSMax Reitz{ 'struct': 'BlockdevOptionsCurlFtps',
45016b9d62dbSMax Reitz  'base': 'BlockdevOptionsCurlBase',
45026b9d62dbSMax Reitz  'data': { '*sslverify': 'bool' } }
450368555285SKevin Wolf
450468555285SKevin Wolf##
45055072f7b3SMarc-André Lureau# @BlockdevOptionsNbd:
45066b02b1f0SMax Reitz#
45076b02b1f0SMax Reitz# Driver specific block device options for NBD.
45086b02b1f0SMax Reitz#
45096b02b1f0SMax Reitz# @server: NBD server address
45106b02b1f0SMax Reitz#
45111d8bda12SMarkus Armbruster# @export: export name
45126b02b1f0SMax Reitz#
45131d8bda12SMarkus Armbruster# @tls-creds: TLS credentials ID
45146b02b1f0SMax Reitz#
4515a937b6aaSMarkus Armbruster# @tls-hostname: TLS hostname override for certificate validation
4516a937b6aaSMarkus Armbruster#     (Since 7.0)
4517a0cd6d29SDaniel P. Berrangé#
4518a937b6aaSMarkus Armbruster# @x-dirty-bitmap: A metadata context name such as
4519a937b6aaSMarkus Armbruster#     "qemu:dirty-bitmap:NAME" or "qemu:allocation-depth" to query in
4520a937b6aaSMarkus Armbruster#     place of the traditional "base:allocation" block status (see
4521a937b6aaSMarkus Armbruster#     NBD_OPT_LIST_META_CONTEXT in the NBD protocol; and yes, naming
4522a937b6aaSMarkus Armbruster#     this option x-context would have made more sense) (since 3.0)
4523216ee365SEric Blake#
4524a937b6aaSMarkus Armbruster# @reconnect-delay: On an unexpected disconnect, the nbd client tries
4525a937b6aaSMarkus Armbruster#     to connect again until succeeding or encountering a serious
4526a937b6aaSMarkus Armbruster#     error.  During the first @reconnect-delay seconds, all requests
4527a937b6aaSMarkus Armbruster#     are paused and will be rerun on a successful reconnect.  After
4528a937b6aaSMarkus Armbruster#     that time, any delayed requests and all future requests before a
4529a937b6aaSMarkus Armbruster#     successful reconnect will immediately fail.  Default 0 (Since
4530a937b6aaSMarkus Armbruster#     4.2)
4531b172ae2eSVladimir Sementsov-Ogievskiy#
4532a937b6aaSMarkus Armbruster# @open-timeout: In seconds.  If zero, the nbd driver tries the
4533a937b6aaSMarkus Armbruster#     connection only once, and fails to open if the connection fails.
4534be16b8bfSVladimir Sementsov-Ogievskiy#     If non-zero, the nbd driver will repeat connection attempts
4535be16b8bfSVladimir Sementsov-Ogievskiy#     until successful or until @open-timeout seconds have elapsed.
4536be16b8bfSVladimir Sementsov-Ogievskiy#     Default 0 (Since 7.0)
4537be16b8bfSVladimir Sementsov-Ogievskiy#
45389fb49daaSMarkus Armbruster# Features:
4539a937b6aaSMarkus Armbruster#
45409fb49daaSMarkus Armbruster# @unstable: Member @x-dirty-bitmap is experimental.
45419fb49daaSMarkus Armbruster#
454279b7a77eSMarkus Armbruster# Since: 2.9
45436b02b1f0SMax Reitz##
45446b02b1f0SMax Reitz{ 'struct': 'BlockdevOptionsNbd',
454562cf396bSMarkus Armbruster  'data': { 'server': 'SocketAddress',
45466b02b1f0SMax Reitz            '*export': 'str',
4547216ee365SEric Blake            '*tls-creds': 'str',
4548a0cd6d29SDaniel P. Berrangé            '*tls-hostname': 'str',
45499fb49daaSMarkus Armbruster            '*x-dirty-bitmap': { 'type': 'str', 'features': [ 'unstable' ] },
4550be16b8bfSVladimir Sementsov-Ogievskiy            '*reconnect-delay': 'uint32',
4551be16b8bfSVladimir Sementsov-Ogievskiy            '*open-timeout': 'uint32' } }
45526b02b1f0SMax Reitz
45536b02b1f0SMax Reitz##
45545072f7b3SMarc-André Lureau# @BlockdevOptionsRaw:
45552fdc7045STomáš Golembiovský#
45562fdc7045STomáš Golembiovský# Driver specific block device options for the raw driver.
45572fdc7045STomáš Golembiovský#
45581d8bda12SMarkus Armbruster# @offset: position where the block device starts
4559a937b6aaSMarkus Armbruster#
45601d8bda12SMarkus Armbruster# @size: the assumed size of the device
45612fdc7045STomáš Golembiovský#
456279b7a77eSMarkus Armbruster# Since: 2.9
45632fdc7045STomáš Golembiovský##
45642fdc7045STomáš Golembiovský{ 'struct': 'BlockdevOptionsRaw',
45652fdc7045STomáš Golembiovský  'base': 'BlockdevOptionsGenericFormat',
45662fdc7045STomáš Golembiovský  'data': { '*offset': 'int', '*size': 'int' } }
45672fdc7045STomáš Golembiovský
45682fdc7045STomáš Golembiovský##
4569d8e7d87eSManos Pitsidianakis# @BlockdevOptionsThrottle:
4570d8e7d87eSManos Pitsidianakis#
4571d8e7d87eSManos Pitsidianakis# Driver specific block device options for the throttle driver
4572d8e7d87eSManos Pitsidianakis#
4573d8e7d87eSManos Pitsidianakis# @throttle-group: the name of the throttle-group object to use.  It
4574d8e7d87eSManos Pitsidianakis#     must already exist.
4575a937b6aaSMarkus Armbruster#
4576d8e7d87eSManos Pitsidianakis# @file: reference to or definition of the data source block device
45774ae65a52SAndrea Bolognani#
4578d8e7d87eSManos Pitsidianakis# Since: 2.11
4579d8e7d87eSManos Pitsidianakis##
4580d8e7d87eSManos Pitsidianakis{ 'struct': 'BlockdevOptionsThrottle',
4581d8e7d87eSManos Pitsidianakis  'data': { 'throttle-group': 'str',
4582d8e7d87eSManos Pitsidianakis            'file' : 'BlockdevRef'
4583d8e7d87eSManos Pitsidianakis             } }
4584e4c8fdddSAndrey Shinkevich
4585e4c8fdddSAndrey Shinkevich##
4586e4c8fdddSAndrey Shinkevich# @BlockdevOptionsCor:
4587e4c8fdddSAndrey Shinkevich#
4588e4c8fdddSAndrey Shinkevich# Driver specific block device options for the copy-on-read driver.
4589e4c8fdddSAndrey Shinkevich#
4590a937b6aaSMarkus Armbruster# @bottom: The name of a non-filter node (allocation-bearing layer)
4591a937b6aaSMarkus Armbruster#     that limits the COR operations in the backing chain (inclusive),
4592a937b6aaSMarkus Armbruster#     so that no data below this node will be copied by this filter.
4593a937b6aaSMarkus Armbruster#     If option is absent, the limit is not applied, so that data from
4594a937b6aaSMarkus Armbruster#     all backing layers may be copied.
4595e4c8fdddSAndrey Shinkevich#
4596e4c8fdddSAndrey Shinkevich# Since: 6.0
4597e4c8fdddSAndrey Shinkevich##
4598e4c8fdddSAndrey Shinkevich{ 'struct': 'BlockdevOptionsCor',
4599e4c8fdddSAndrey Shinkevich  'base': 'BlockdevOptionsGenericFormat',
4600e4c8fdddSAndrey Shinkevich  'data': { '*bottom': 'str' } }
4601e4c8fdddSAndrey Shinkevich
4602d8e7d87eSManos Pitsidianakis##
4603f1bb39a8SVladimir Sementsov-Ogievskiy# @OnCbwError:
4604f1bb39a8SVladimir Sementsov-Ogievskiy#
4605f1bb39a8SVladimir Sementsov-Ogievskiy# An enumeration of possible behaviors for copy-before-write operation
4606f1bb39a8SVladimir Sementsov-Ogievskiy# failures.
4607f1bb39a8SVladimir Sementsov-Ogievskiy#
4608a937b6aaSMarkus Armbruster# @break-guest-write: report the error to the guest.  This way, the
4609a937b6aaSMarkus Armbruster#     guest will not be able to overwrite areas that cannot be backed
4610a937b6aaSMarkus Armbruster#     up, so the backup process remains valid.
4611f1bb39a8SVladimir Sementsov-Ogievskiy#
4612a937b6aaSMarkus Armbruster# @break-snapshot: continue guest write.  Doing so will make the
4613a937b6aaSMarkus Armbruster#     provided snapshot state invalid and any backup or export process
4614a937b6aaSMarkus Armbruster#     based on it will finally fail.
4615f1bb39a8SVladimir Sementsov-Ogievskiy#
4616f1bb39a8SVladimir Sementsov-Ogievskiy# Since: 7.1
4617f1bb39a8SVladimir Sementsov-Ogievskiy##
4618f1bb39a8SVladimir Sementsov-Ogievskiy{ 'enum': 'OnCbwError',
4619f1bb39a8SVladimir Sementsov-Ogievskiy  'data': [ 'break-guest-write', 'break-snapshot' ] }
4620f1bb39a8SVladimir Sementsov-Ogievskiy
4621f1bb39a8SVladimir Sementsov-Ogievskiy##
4622783b2825SVladimir Sementsov-Ogievskiy# @BlockdevOptionsCbw:
4623783b2825SVladimir Sementsov-Ogievskiy#
4624a937b6aaSMarkus Armbruster# Driver specific block device options for the copy-before-write
4625a937b6aaSMarkus Armbruster# driver, which does so called copy-before-write operations: when data
4626a937b6aaSMarkus Armbruster# is written to the filter, the filter first reads corresponding
4627a937b6aaSMarkus Armbruster# blocks from its file child and copies them to @target child.  After
4628a937b6aaSMarkus Armbruster# successfully copying, the write request is propagated to file child.
4629a937b6aaSMarkus Armbruster# If copying fails, the original write request is failed too and no
4630a937b6aaSMarkus Armbruster# data is written to file child.
4631783b2825SVladimir Sementsov-Ogievskiy#
4632783b2825SVladimir Sementsov-Ogievskiy# @target: The target for copy-before-write operations.
4633783b2825SVladimir Sementsov-Ogievskiy#
46345f3a3cd7SVladimir Sementsov-Ogievskiy# @bitmap: If specified, copy-before-write filter will do
46355f3a3cd7SVladimir Sementsov-Ogievskiy#     copy-before-write operations only for dirty regions of the
4636a937b6aaSMarkus Armbruster#     bitmap.  Bitmap size must be equal to length of file and target
4637a937b6aaSMarkus Armbruster#     child of the filter.  Note also, that bitmap is used only to
4638a937b6aaSMarkus Armbruster#     initialize internal bitmap of the process, so further
46395f3a3cd7SVladimir Sementsov-Ogievskiy#     modifications (or removing) of specified bitmap doesn't
46405f3a3cd7SVladimir Sementsov-Ogievskiy#     influence the filter.  (Since 7.0)
46415f3a3cd7SVladimir Sementsov-Ogievskiy#
4642f1bb39a8SVladimir Sementsov-Ogievskiy# @on-cbw-error: Behavior on failure of copy-before-write operation.
4643f1bb39a8SVladimir Sementsov-Ogievskiy#     Default is @break-guest-write.  (Since 7.1)
4644f1bb39a8SVladimir Sementsov-Ogievskiy#
4645a937b6aaSMarkus Armbruster# @cbw-timeout: Zero means no limit.  Non-zero sets the timeout in
4646a937b6aaSMarkus Armbruster#     seconds for copy-before-write operation.  When a timeout occurs,
4647a937b6aaSMarkus Armbruster#     the respective copy-before-write operation will fail, and the
4648a937b6aaSMarkus Armbruster#     @on-cbw-error parameter will decide how this failure is handled.
4649a937b6aaSMarkus Armbruster#     Default 0.  (Since 7.1)
46506db7fd1cSVladimir Sementsov-Ogievskiy#
46519484ad6cSFiona Ebner# @min-cluster-size: Minimum size of blocks used by copy-before-write
46529484ad6cSFiona Ebner#     operations.  Has to be a power of 2.  No effect if smaller than
46539484ad6cSFiona Ebner#     the maximum of the target's cluster size and 64 KiB.  Default 0.
46549484ad6cSFiona Ebner#     (Since 9.2)
46559484ad6cSFiona Ebner#
4656783b2825SVladimir Sementsov-Ogievskiy# Since: 6.2
4657783b2825SVladimir Sementsov-Ogievskiy##
4658783b2825SVladimir Sementsov-Ogievskiy{ 'struct': 'BlockdevOptionsCbw',
4659783b2825SVladimir Sementsov-Ogievskiy  'base': 'BlockdevOptionsGenericFormat',
4660f1bb39a8SVladimir Sementsov-Ogievskiy  'data': { 'target': 'BlockdevRef', '*bitmap': 'BlockDirtyBitmap',
46619484ad6cSFiona Ebner            '*on-cbw-error': 'OnCbwError', '*cbw-timeout': 'uint32',
46629484ad6cSFiona Ebner            '*min-cluster-size': 'size' } }
4663783b2825SVladimir Sementsov-Ogievskiy
4664783b2825SVladimir Sementsov-Ogievskiy##
46655072f7b3SMarc-André Lureau# @BlockdevOptions:
46661ad166b6SBenoît Canet#
4667a937b6aaSMarkus Armbruster# Options for creating a block device.  Many options are available for
4668a937b6aaSMarkus Armbruster# all block devices, independent of the block driver:
46693666a97fSEric Blake#
46703666a97fSEric Blake# @driver: block driver name
4671a937b6aaSMarkus Armbruster#
4672a937b6aaSMarkus Armbruster# @node-name: the node name of the new node (Since 2.0).  This option
4673a937b6aaSMarkus Armbruster#     is required on the top level of blockdev-add.  Valid node names
4674a937b6aaSMarkus Armbruster#     start with an alphabetic character and may contain only
4675a937b6aaSMarkus Armbruster#     alphanumeric characters, '-', '.' and '_'.  Their maximum length
4676a937b6aaSMarkus Armbruster#     is 31 characters.
4677a937b6aaSMarkus Armbruster#
46781d8bda12SMarkus Armbruster# @discard: discard-related options (default: ignore)
4679a937b6aaSMarkus Armbruster#
46801d8bda12SMarkus Armbruster# @cache: cache-related options
4681a937b6aaSMarkus Armbruster#
4682a937b6aaSMarkus Armbruster# @read-only: whether the block device should be read-only (default:
4683a937b6aaSMarkus Armbruster#     false).  Note that some block drivers support only read-only
4684a937b6aaSMarkus Armbruster#     access, either generally or in certain configurations.  In this
4685a937b6aaSMarkus Armbruster#     case, the default value does not work and the option must be
4686398e6ad0SKevin Wolf#     specified explicitly.
4687a937b6aaSMarkus Armbruster#
4688a937b6aaSMarkus Armbruster# @auto-read-only: if true and @read-only is false, QEMU may
4689a937b6aaSMarkus Armbruster#     automatically decide not to open the image read-write as
4690a937b6aaSMarkus Armbruster#     requested, but fall back to read-only instead (and switch
4691a937b6aaSMarkus Armbruster#     between the modes later), e.g. depending on whether the image
4692a937b6aaSMarkus Armbruster#     file is writable or whether a writing user is attached to the
4693a937b6aaSMarkus Armbruster#     node (default: false, since 3.1)
4694a937b6aaSMarkus Armbruster#
46951d8bda12SMarkus Armbruster# @detect-zeroes: detect and optimize zero writes (Since 2.1)
46963666a97fSEric Blake#     (default: off)
4697a937b6aaSMarkus Armbruster#
4698a937b6aaSMarkus Armbruster# @force-share: force share all permission on added nodes.  Requires
4699a937b6aaSMarkus Armbruster#     read-only=true.  (Since 2.10)
47003666a97fSEric Blake#
470179b7a77eSMarkus Armbruster# Since: 2.9
47021ad166b6SBenoît Canet##
47031ad166b6SBenoît Canet{ 'union': 'BlockdevOptions',
47043666a97fSEric Blake  'base': { 'driver': 'BlockdevDriver',
47053666a97fSEric Blake            '*node-name': 'str',
47063666a97fSEric Blake            '*discard': 'BlockdevDiscardOptions',
47073666a97fSEric Blake            '*cache': 'BlockdevCacheOptions',
47083666a97fSEric Blake            '*read-only': 'bool',
4709e35bdc12SKevin Wolf            '*auto-read-only': 'bool',
47105a9347c6SFam Zheng            '*force-share': 'bool',
47113666a97fSEric Blake            '*detect-zeroes': 'BlockdevDetectZeroesOptions' },
47121ad166b6SBenoît Canet  'discriminator': 'driver',
47131ad166b6SBenoît Canet  'data': {
47141ad166b6SBenoît Canet      'blkdebug':   'BlockdevOptionsBlkdebug',
4715bfcc224eSAapo Vienamo      'blklogwrites':'BlockdevOptionsBlklogwrites',
47161ad166b6SBenoît Canet      'blkverify':  'BlockdevOptionsBlkverify',
471735e32d9eSPavel Dovgalyuk      'blkreplay':  'BlockdevOptionsBlkreplay',
47181ad166b6SBenoît Canet      'bochs':      'BlockdevOptionsGenericFormat',
47191ad166b6SBenoît Canet      'cloop':      'BlockdevOptionsGenericFormat',
4720f41388e0SAndrey Shinkevich      'compress':   'BlockdevOptionsGenericFormat',
4721783b2825SVladimir Sementsov-Ogievskiy      'copy-before-write':'BlockdevOptionsCbw',
4722e4c8fdddSAndrey Shinkevich      'copy-on-read':'BlockdevOptionsCor',
47231ad166b6SBenoît Canet      'dmg':        'BlockdevOptionsGenericFormat',
4724db866be9SFam Zheng      'file':       'BlockdevOptionsFile',
47256b9d62dbSMax Reitz      'ftp':        'BlockdevOptionsCurlFtp',
47266b9d62dbSMax Reitz      'ftps':       'BlockdevOptionsCurlFtps',
47277edac2ddSPrasanna Kumar Kalever      'gluster':    'BlockdevOptionsGluster',
472814176c8dSJoelle van Dyne      'host_cdrom':  { 'type': 'BlockdevOptionsFile',
47298a9f1e1dSMarc-André Lureau                       'if': 'HAVE_HOST_BLOCK_DEVICE' },
473014176c8dSJoelle van Dyne      'host_device': { 'type': 'BlockdevOptionsFile',
47318a9f1e1dSMarc-André Lureau                       'if': 'HAVE_HOST_BLOCK_DEVICE' },
47326b9d62dbSMax Reitz      'http':       'BlockdevOptionsCurlHttp',
47336b9d62dbSMax Reitz      'https':      'BlockdevOptionsCurlHttps',
4734fd66dbd4SStefan Hajnoczi      'io_uring':   { 'type': 'BlockdevOptionsIoUring',
4735fd66dbd4SStefan Hajnoczi                      'if': 'CONFIG_BLKIO' },
473631eb1202SKevin Wolf      'iscsi':      'BlockdevOptionsIscsi',
473778368575SDaniel P. Berrange      'luks':       'BlockdevOptionsLUKS',
47386b02b1f0SMax Reitz      'nbd':        'BlockdevOptionsNbd',
4739aa2623d8SAshijeet Acharya      'nfs':        'BlockdevOptionsNfs',
4740db866be9SFam Zheng      'null-aio':   'BlockdevOptionsNull',
4741db866be9SFam Zheng      'null-co':    'BlockdevOptionsNull',
4742d87ee3d7SFam Zheng      'nvme':       'BlockdevOptionsNVMe',
4743fd66dbd4SStefan Hajnoczi      'nvme-io_uring': { 'type': 'BlockdevOptionsNvmeIoUring',
4744fd66dbd4SStefan Hajnoczi                         'if': 'CONFIG_BLKIO' },
47451ad166b6SBenoît Canet      'parallels':  'BlockdevOptionsGenericFormat',
474633fa2222SVladimir Sementsov-Ogievskiy      'preallocate':'BlockdevOptionsPreallocate',
47471ad166b6SBenoît Canet      'qcow2':      'BlockdevOptionsQcow2',
4748d85f4222SDaniel P. Berrange      'qcow':       'BlockdevOptionsQcow',
47491ad166b6SBenoît Canet      'qed':        'BlockdevOptionsGenericCOWFormat',
4750db866be9SFam Zheng      'quorum':     'BlockdevOptionsQuorum',
47512fdc7045STomáš Golembiovský      'raw':        'BlockdevOptionsRaw',
47528a47e8ebSJeff Cody      'rbd':        'BlockdevOptionsRbd',
4753335d10cdSMarc-André Lureau      'replication': { 'type': 'BlockdevOptionsReplication',
47548a9f1e1dSMarc-André Lureau                       'if': 'CONFIG_REPLICATION' },
47551c14eaabSVladimir Sementsov-Ogievskiy      'snapshot-access': 'BlockdevOptionsGenericFormat',
4756ad0e90a6SAshijeet Acharya      'ssh':        'BlockdevOptionsSsh',
4757d8e7d87eSManos Pitsidianakis      'throttle':   'BlockdevOptionsThrottle',
47581ad166b6SBenoît Canet      'vdi':        'BlockdevOptionsGenericFormat',
47591ad166b6SBenoît Canet      'vhdx':       'BlockdevOptionsGenericFormat',
476003d9e4c0SAlberto Faria      'virtio-blk-vfio-pci':
476103d9e4c0SAlberto Faria                    { 'type': 'BlockdevOptionsVirtioBlkVfioPci',
476203d9e4c0SAlberto Faria                      'if': 'CONFIG_BLKIO' },
4763fd66dbd4SStefan Hajnoczi      'virtio-blk-vhost-user':
4764fd66dbd4SStefan Hajnoczi                    { 'type': 'BlockdevOptionsVirtioBlkVhostUser',
4765fd66dbd4SStefan Hajnoczi                      'if': 'CONFIG_BLKIO' },
4766fd66dbd4SStefan Hajnoczi      'virtio-blk-vhost-vdpa':
4767fd66dbd4SStefan Hajnoczi                    { 'type': 'BlockdevOptionsVirtioBlkVhostVdpa',
4768fd66dbd4SStefan Hajnoczi                      'if': 'CONFIG_BLKIO' },
47691ad166b6SBenoît Canet      'vmdk':       'BlockdevOptionsGenericCOWFormat',
47701ad166b6SBenoît Canet      'vpc':        'BlockdevOptionsGenericFormat',
4771a0846452SMarc-André Lureau      'vvfat':      'BlockdevOptionsVVFAT'
47721ad166b6SBenoît Canet  } }
47731ad166b6SBenoît Canet
47741ad166b6SBenoît Canet##
47755072f7b3SMarc-André Lureau# @BlockdevRef:
47761ad166b6SBenoît Canet#
47771ad166b6SBenoît Canet# Reference to a block device.
47781ad166b6SBenoît Canet#
47791ad166b6SBenoît Canet# @definition: defines a new block device inline
4780a937b6aaSMarkus Armbruster#
4781c42e8742SMarkus Armbruster# @reference: references the ID of an existing block device
47821ad166b6SBenoît Canet#
478379b7a77eSMarkus Armbruster# Since: 2.9
47841ad166b6SBenoît Canet##
4785ab916fadSEric Blake{ 'alternate': 'BlockdevRef',
47861ad166b6SBenoît Canet  'data': { 'definition': 'BlockdevOptions',
47871ad166b6SBenoît Canet            'reference': 'str' } }
47881ad166b6SBenoît Canet
47891ad166b6SBenoît Canet##
4790c42e8742SMarkus Armbruster# @BlockdevRefOrNull:
4791c42e8742SMarkus Armbruster#
4792c42e8742SMarkus Armbruster# Reference to a block device.
4793c42e8742SMarkus Armbruster#
4794c42e8742SMarkus Armbruster# @definition: defines a new block device inline
4795a937b6aaSMarkus Armbruster#
4796a937b6aaSMarkus Armbruster# @reference: references the ID of an existing block device.  An empty
4797a937b6aaSMarkus Armbruster#     string means that no block device should be referenced.
4798a937b6aaSMarkus Armbruster#     Deprecated; use null instead.
4799a937b6aaSMarkus Armbruster#
4800c42e8742SMarkus Armbruster# @null: No block device should be referenced (since 2.10)
4801c42e8742SMarkus Armbruster#
4802c42e8742SMarkus Armbruster# Since: 2.9
4803c42e8742SMarkus Armbruster##
4804c42e8742SMarkus Armbruster{ 'alternate': 'BlockdevRefOrNull',
4805c42e8742SMarkus Armbruster  'data': { 'definition': 'BlockdevOptions',
4806c42e8742SMarkus Armbruster            'reference': 'str',
4807c42e8742SMarkus Armbruster            'null': 'null' } }
4808c42e8742SMarkus Armbruster
4809c42e8742SMarkus Armbruster##
48101ad166b6SBenoît Canet# @blockdev-add:
48111ad166b6SBenoît Canet#
4812e947e9c8SKashyap Chamarthy# Creates a new block device.
48131ad166b6SBenoît Canet#
481479b7a77eSMarkus Armbruster# Since: 2.9
4815b4749948SMarc-André Lureau#
481614b48aaaSJohn Snow# .. qmp-example::
4817b4749948SMarc-André Lureau#
4818b4749948SMarc-André Lureau#     -> { "execute": "blockdev-add",
4819b4749948SMarc-André Lureau#          "arguments": {
4820b1660997SJeff Cody#               "driver": "qcow2",
4821b1660997SJeff Cody#               "node-name": "test1",
482234f58df5SMarkus Armbruster#               "file": {
4823b1660997SJeff Cody#                   "driver": "file",
4824b1660997SJeff Cody#                   "filename": "test.qcow2"
4825b1660997SJeff Cody#                }
4826b1660997SJeff Cody#           }
4827b1660997SJeff Cody#         }
4828b4749948SMarc-André Lureau#     <- { "return": {} }
4829b4749948SMarc-André Lureau#
483014b48aaaSJohn Snow# .. qmp-example::
483114b48aaaSJohn Snow#
4832b4749948SMarc-André Lureau#     -> { "execute": "blockdev-add",
4833b4749948SMarc-André Lureau#          "arguments": {
4834b4749948SMarc-André Lureau#               "driver": "qcow2",
4835b4749948SMarc-André Lureau#               "node-name": "node0",
4836b4749948SMarc-André Lureau#               "discard": "unmap",
4837b4749948SMarc-André Lureau#               "cache": {
4838b1660997SJeff Cody#                  "direct": true
4839b4749948SMarc-André Lureau#                },
484034f58df5SMarkus Armbruster#                "file": {
4841b4749948SMarc-André Lureau#                  "driver": "file",
4842b4749948SMarc-André Lureau#                  "filename": "/tmp/test.qcow2"
4843b4749948SMarc-André Lureau#                },
4844b4749948SMarc-André Lureau#                "backing": {
4845b4749948SMarc-André Lureau#                   "driver": "raw",
4846b4749948SMarc-André Lureau#                   "file": {
4847b4749948SMarc-André Lureau#                      "driver": "file",
4848b4749948SMarc-André Lureau#                      "filename": "/dev/fdset/4"
4849b4749948SMarc-André Lureau#                    }
4850b4749948SMarc-André Lureau#                }
4851b4749948SMarc-André Lureau#            }
4852b4749948SMarc-André Lureau#          }
4853b4749948SMarc-André Lureau#
4854b4749948SMarc-André Lureau#     <- { "return": {} }
48551ad166b6SBenoît Canet##
4856f55ba801SPaolo Bonzini{ 'command': 'blockdev-add', 'data': 'BlockdevOptions', 'boxed': true,
4857f55ba801SPaolo Bonzini  'allow-preconfig': true }
48581ad166b6SBenoît Canet
48597d8a9f71SMax Reitz##
4860e60edf69SAlberto Garcia# @blockdev-reopen:
48611479c730SAlberto Garcia#
48623908b7a8SAlberto Garcia# Reopens one or more block devices using the given set of options.
4863a937b6aaSMarkus Armbruster# Any option not specified will be reset to its default value
4864a937b6aaSMarkus Armbruster# regardless of its previous status.  If an option cannot be changed
4865a937b6aaSMarkus Armbruster# or a particular driver does not support reopening then the command
4866a937b6aaSMarkus Armbruster# will return an error.  All devices in the list are reopened in one
4867a937b6aaSMarkus Armbruster# transaction, so if one of them fails then the whole transaction is
4868a937b6aaSMarkus Armbruster# cancelled.
48691479c730SAlberto Garcia#
4870a937b6aaSMarkus Armbruster# The command receives a list of block devices to reopen.  For each
4871a937b6aaSMarkus Armbruster# one of them, the top-level @node-name option (from BlockdevOptions)
4872a937b6aaSMarkus Armbruster# must be specified and is used to select the block device to be
4873a937b6aaSMarkus Armbruster# reopened.  Other @node-name options must be either omitted or set to
4874a937b6aaSMarkus Armbruster# the current name of the appropriate node.  This command won't change
4875a937b6aaSMarkus Armbruster# any node name and any attempt to do it will result in an error.
48761479c730SAlberto Garcia#
48771479c730SAlberto Garcia# In the case of options that refer to child nodes, the behavior of
48781479c730SAlberto Garcia# this command depends on the value:
48791479c730SAlberto Garcia#
48801479c730SAlberto Garcia#  1) A set of options (BlockdevOptions): the child is reopened with
48811479c730SAlberto Garcia#     the specified set of options.
48821479c730SAlberto Garcia#
48831479c730SAlberto Garcia#  2) A reference to the current child: the child is reopened using
48841479c730SAlberto Garcia#     its existing set of options.
48851479c730SAlberto Garcia#
48861479c730SAlberto Garcia#  3) A reference to a different node: the current child is replaced
48871479c730SAlberto Garcia#     with the specified one.
48881479c730SAlberto Garcia#
48891479c730SAlberto Garcia#  4) NULL: the current child (if any) is detached.
48901479c730SAlberto Garcia#
48913908b7a8SAlberto Garcia# Options (1) and (2) are supported in all cases.  Option (3) is
48923908b7a8SAlberto Garcia# supported for @file and @backing, and option (4) for @backing only.
48931479c730SAlberto Garcia#
48941479c730SAlberto Garcia# Unlike with blockdev-add, the @backing option must always be present
48951479c730SAlberto Garcia# unless the node being reopened does not have a backing file and its
48961479c730SAlberto Garcia# image does not have a default backing file name as part of its
48971479c730SAlberto Garcia# metadata.
48981479c730SAlberto Garcia#
4899e60edf69SAlberto Garcia# Since: 6.1
49001479c730SAlberto Garcia##
4901e60edf69SAlberto Garcia{ 'command': 'blockdev-reopen',
4902f55ba801SPaolo Bonzini  'data': { 'options': ['BlockdevOptions'] },
4903f55ba801SPaolo Bonzini  'allow-preconfig': true }
49041479c730SAlberto Garcia
49051479c730SAlberto Garcia##
490679b7a77eSMarkus Armbruster# @blockdev-del:
490781b936aeSAlberto Garcia#
4908a937b6aaSMarkus Armbruster# Deletes a block device that has been added using blockdev-add.  The
4909a937b6aaSMarkus Armbruster# command will fail if the node is attached to a device or is
49109ec8873eSKevin Wolf# otherwise being used.
491181b936aeSAlberto Garcia#
49127a305384SMarc-André Lureau# @node-name: Name of the graph node to delete.
49137a305384SMarc-André Lureau#
491479b7a77eSMarkus Armbruster# Since: 2.9
4915915a213fSMarc-André Lureau#
491614b48aaaSJohn Snow# .. qmp-example::
4917915a213fSMarc-André Lureau#
4918915a213fSMarc-André Lureau#     -> { "execute": "blockdev-add",
4919915a213fSMarc-André Lureau#          "arguments": {
4920915a213fSMarc-André Lureau#               "driver": "qcow2",
4921915a213fSMarc-André Lureau#               "node-name": "node0",
492234f58df5SMarkus Armbruster#               "file": {
4923915a213fSMarc-André Lureau#                   "driver": "file",
4924915a213fSMarc-André Lureau#                   "filename": "test.qcow2"
4925915a213fSMarc-André Lureau#               }
4926915a213fSMarc-André Lureau#          }
4927915a213fSMarc-André Lureau#        }
4928915a213fSMarc-André Lureau#     <- { "return": {} }
4929915a213fSMarc-André Lureau#
493079b7a77eSMarkus Armbruster#     -> { "execute": "blockdev-del",
4931915a213fSMarc-André Lureau#          "arguments": { "node-name": "node0" }
4932915a213fSMarc-André Lureau#        }
4933915a213fSMarc-André Lureau#     <- { "return": {} }
493481b936aeSAlberto Garcia##
4935f55ba801SPaolo Bonzini{ 'command': 'blockdev-del', 'data': { 'node-name': 'str' },
4936f55ba801SPaolo Bonzini  'allow-preconfig': true }
493781b936aeSAlberto Garcia
493881b936aeSAlberto Garcia##
4939927f11e1SKevin Wolf# @BlockdevCreateOptionsFile:
4940927f11e1SKevin Wolf#
4941927f11e1SKevin Wolf# Driver specific image creation options for file.
4942927f11e1SKevin Wolf#
4943f5627506SPeter Maydell# @filename: Filename for the new image file
4944a937b6aaSMarkus Armbruster#
4945f5627506SPeter Maydell# @size: Size of the virtual disk in bytes
4946a937b6aaSMarkus Armbruster#
4947f5627506SPeter Maydell# @preallocation: Preallocation mode for the new image (default: off;
4948a937b6aaSMarkus Armbruster#     allowed values: off, falloc (if CONFIG_POSIX_FALLOCATE), full
4949a937b6aaSMarkus Armbruster#     (if CONFIG_POSIX))
4950a937b6aaSMarkus Armbruster#
4951f5627506SPeter Maydell# @nocow: Turn off copy-on-write (valid only on btrfs; default: off)
4952a937b6aaSMarkus Armbruster#
4953a937b6aaSMarkus Armbruster# @extent-size-hint: Extent size hint to add to the image file; 0 for
4954a937b6aaSMarkus Armbruster#     not adding an extent size hint (default: 1 MB, since 5.1)
4955927f11e1SKevin Wolf#
4956927f11e1SKevin Wolf# Since: 2.12
4957927f11e1SKevin Wolf##
4958927f11e1SKevin Wolf{ 'struct': 'BlockdevCreateOptionsFile',
4959927f11e1SKevin Wolf  'data': { 'filename':             'str',
4960927f11e1SKevin Wolf            'size':                 'size',
4961927f11e1SKevin Wolf            '*preallocation':       'PreallocMode',
4962ffa244c8SKevin Wolf            '*nocow':               'bool',
4963ffa244c8SKevin Wolf            '*extent-size-hint':    'size'} }
4964927f11e1SKevin Wolf
4965927f11e1SKevin Wolf##
4966ab8bda76SKevin Wolf# @BlockdevCreateOptionsGluster:
4967ab8bda76SKevin Wolf#
4968ab8bda76SKevin Wolf# Driver specific image creation options for gluster.
4969ab8bda76SKevin Wolf#
4970f5627506SPeter Maydell# @location: Where to store the new image file
4971a937b6aaSMarkus Armbruster#
4972f5627506SPeter Maydell# @size: Size of the virtual disk in bytes
4973a937b6aaSMarkus Armbruster#
4974f5627506SPeter Maydell# @preallocation: Preallocation mode for the new image (default: off;
4975a937b6aaSMarkus Armbruster#     allowed values: off, falloc (if CONFIG_GLUSTERFS_FALLOCATE),
49768a9f1e1dSMarc-André Lureau#     full (if CONFIG_GLUSTERFS_ZEROFILL))
4977ab8bda76SKevin Wolf#
4978ab8bda76SKevin Wolf# Since: 2.12
4979ab8bda76SKevin Wolf##
4980ab8bda76SKevin Wolf{ 'struct': 'BlockdevCreateOptionsGluster',
4981ab8bda76SKevin Wolf  'data': { 'location':         'BlockdevOptionsGluster',
4982ab8bda76SKevin Wolf            'size':             'size',
4983ab8bda76SKevin Wolf            '*preallocation':   'PreallocMode' } }
4984ab8bda76SKevin Wolf
4985ab8bda76SKevin Wolf##
49861bedcaf1SKevin Wolf# @BlockdevCreateOptionsLUKS:
49871bedcaf1SKevin Wolf#
49881bedcaf1SKevin Wolf# Driver specific image creation options for LUKS.
49891bedcaf1SKevin Wolf#
4990433957bbSHyman Huang# @file: Node to create the image format on, mandatory except when
4991433957bbSHyman Huang#     'preallocation' is not requested
4992a937b6aaSMarkus Armbruster#
4993d0112eb4SHyman Huang# @header: Block device holding a detached LUKS header.  (since 9.0)
4994d0112eb4SHyman Huang#
4995f5627506SPeter Maydell# @size: Size of the virtual disk in bytes
4996a937b6aaSMarkus Armbruster#
4997a937b6aaSMarkus Armbruster# @preallocation: Preallocation mode for the new image (since: 4.2)
4998672de729SMaxim Levitsky#     (default: off; allowed values: off, metadata, falloc, full)
49991bedcaf1SKevin Wolf#
50001bedcaf1SKevin Wolf# Since: 2.12
50011bedcaf1SKevin Wolf##
50021bedcaf1SKevin Wolf{ 'struct': 'BlockdevCreateOptionsLUKS',
50031bedcaf1SKevin Wolf  'base': 'QCryptoBlockCreateOptionsLUKS',
5004433957bbSHyman Huang  'data': { '*file':            'BlockdevRef',
5005d0112eb4SHyman Huang            '*header':          'BlockdevRef',
5006672de729SMaxim Levitsky            'size':             'size',
5007672de729SMaxim Levitsky            '*preallocation':   'PreallocMode' } }
50081bedcaf1SKevin Wolf
50091bedcaf1SKevin Wolf##
5010a1a42af4SKevin Wolf# @BlockdevCreateOptionsNfs:
5011a1a42af4SKevin Wolf#
5012a1a42af4SKevin Wolf# Driver specific image creation options for NFS.
5013a1a42af4SKevin Wolf#
5014f5627506SPeter Maydell# @location: Where to store the new image file
5015a937b6aaSMarkus Armbruster#
5016f5627506SPeter Maydell# @size: Size of the virtual disk in bytes
5017a1a42af4SKevin Wolf#
5018a1a42af4SKevin Wolf# Since: 2.12
5019a1a42af4SKevin Wolf##
5020a1a42af4SKevin Wolf{ 'struct': 'BlockdevCreateOptionsNfs',
5021a1a42af4SKevin Wolf  'data': { 'location':         'BlockdevOptionsNfs',
5022a1a42af4SKevin Wolf            'size':             'size' } }
5023a1a42af4SKevin Wolf
5024a1a42af4SKevin Wolf##
50251511b490SKevin Wolf# @BlockdevCreateOptionsParallels:
50261511b490SKevin Wolf#
50271511b490SKevin Wolf# Driver specific image creation options for parallels.
50281511b490SKevin Wolf#
5029f5627506SPeter Maydell# @file: Node to create the image format on
5030a937b6aaSMarkus Armbruster#
5031f5627506SPeter Maydell# @size: Size of the virtual disk in bytes
5032a937b6aaSMarkus Armbruster#
5033f5627506SPeter Maydell# @cluster-size: Cluster size in bytes (default: 1 MB)
50341511b490SKevin Wolf#
50351511b490SKevin Wolf# Since: 2.12
50361511b490SKevin Wolf##
50371511b490SKevin Wolf{ 'struct': 'BlockdevCreateOptionsParallels',
50381511b490SKevin Wolf  'data': { 'file':             'BlockdevRef',
50391511b490SKevin Wolf            'size':             'size',
50401511b490SKevin Wolf            '*cluster-size':    'size' } }
50411511b490SKevin Wolf
50421511b490SKevin Wolf##
504342a3e1abSKevin Wolf# @BlockdevCreateOptionsQcow:
504442a3e1abSKevin Wolf#
504542a3e1abSKevin Wolf# Driver specific image creation options for qcow.
504642a3e1abSKevin Wolf#
5047f5627506SPeter Maydell# @file: Node to create the image format on
5048a937b6aaSMarkus Armbruster#
5049f5627506SPeter Maydell# @size: Size of the virtual disk in bytes
5050a937b6aaSMarkus Armbruster#
5051f5627506SPeter Maydell# @backing-file: File name of the backing file if a backing file
505242a3e1abSKevin Wolf#     should be used
5053a937b6aaSMarkus Armbruster#
5054f5627506SPeter Maydell# @encrypt: Encryption options if the image should be encrypted
505542a3e1abSKevin Wolf#
505642a3e1abSKevin Wolf# Since: 2.12
505742a3e1abSKevin Wolf##
505842a3e1abSKevin Wolf{ 'struct': 'BlockdevCreateOptionsQcow',
505942a3e1abSKevin Wolf  'data': { 'file':             'BlockdevRef',
506042a3e1abSKevin Wolf            'size':             'size',
506142a3e1abSKevin Wolf            '*backing-file':    'str',
506242a3e1abSKevin Wolf            '*encrypt':         'QCryptoBlockCreateOptions' } }
506342a3e1abSKevin Wolf
506442a3e1abSKevin Wolf##
5065c2808abaSKevin Wolf# @BlockdevQcow2Version:
5066c2808abaSKevin Wolf#
5067a937b6aaSMarkus Armbruster# @v2: The original QCOW2 format as introduced in qemu 0.10 (version
5068a937b6aaSMarkus Armbruster#     2)
5069a937b6aaSMarkus Armbruster#
5070c2808abaSKevin Wolf# @v3: The extended QCOW2 format as introduced in qemu 1.1 (version 3)
5071c2808abaSKevin Wolf#
5072c2808abaSKevin Wolf# Since: 2.12
5073c2808abaSKevin Wolf##
5074c2808abaSKevin Wolf{ 'enum': 'BlockdevQcow2Version',
5075c2808abaSKevin Wolf  'data': [ 'v2', 'v3' ] }
5076c2808abaSKevin Wolf
5077c2808abaSKevin Wolf##
5078572ad978SDenis Plotnikov# @Qcow2CompressionType:
5079572ad978SDenis Plotnikov#
5080572ad978SDenis Plotnikov# Compression type used in qcow2 image file
5081572ad978SDenis Plotnikov#
5082572ad978SDenis Plotnikov# @zlib: zlib compression, see <http://zlib.net/>
5083a937b6aaSMarkus Armbruster#
5084d298ac10SDenis Plotnikov# @zstd: zstd compression, see <http://github.com/facebook/zstd>
5085572ad978SDenis Plotnikov#
5086572ad978SDenis Plotnikov# Since: 5.1
5087572ad978SDenis Plotnikov##
5088572ad978SDenis Plotnikov{ 'enum': 'Qcow2CompressionType',
50898a9f1e1dSMarc-André Lureau  'data': [ 'zlib', { 'name': 'zstd', 'if': 'CONFIG_ZSTD' } ] }
5090572ad978SDenis Plotnikov
5091572ad978SDenis Plotnikov##
5092c2808abaSKevin Wolf# @BlockdevCreateOptionsQcow2:
5093c2808abaSKevin Wolf#
5094c2808abaSKevin Wolf# Driver specific image creation options for qcow2.
5095c2808abaSKevin Wolf#
5096f5627506SPeter Maydell# @file: Node to create the image format on
5097a937b6aaSMarkus Armbruster#
5098f5627506SPeter Maydell# @data-file: Node to use as an external data file in which all guest
5099a937b6aaSMarkus Armbruster#     data is stored so that only metadata remains in the qcow2 file
5100a937b6aaSMarkus Armbruster#     (since: 4.0)
5101a937b6aaSMarkus Armbruster#
5102f5627506SPeter Maydell# @data-file-raw: True if the external data file must stay valid as a
51036c3944dcSKevin Wolf#     standalone (read-only) raw image without looking at qcow2
51046c3944dcSKevin Wolf#     metadata (default: false; since: 4.0)
5105a937b6aaSMarkus Armbruster#
5106826bd069SPeter Maydell# @extended-l2: True to make the image have extended L2 entries
51077be20252SAlberto Garcia#     (default: false; since 5.2)
5108a937b6aaSMarkus Armbruster#
5109f5627506SPeter Maydell# @size: Size of the virtual disk in bytes
5110a937b6aaSMarkus Armbruster#
5111f5627506SPeter Maydell# @version: Compatibility level (default: v3)
5112a937b6aaSMarkus Armbruster#
5113f5627506SPeter Maydell# @backing-file: File name of the backing file if a backing file
5114c2808abaSKevin Wolf#     should be used
5115a937b6aaSMarkus Armbruster#
5116f5627506SPeter Maydell# @backing-fmt: Name of the block driver to use for the backing file
5117a937b6aaSMarkus Armbruster#
5118f5627506SPeter Maydell# @encrypt: Encryption options if the image should be encrypted
5119a937b6aaSMarkus Armbruster#
5120f5627506SPeter Maydell# @cluster-size: qcow2 cluster size in bytes (default: 65536)
5121a937b6aaSMarkus Armbruster#
5122f5627506SPeter Maydell# @preallocation: Preallocation mode for the new image (default: off;
512364c7580cSStefano Garzarella#     allowed values: off, falloc, full, metadata)
5124a937b6aaSMarkus Armbruster#
5125a937b6aaSMarkus Armbruster# @lazy-refcounts: True if refcounts may be updated lazily
5126a937b6aaSMarkus Armbruster#     (default: off)
5127a937b6aaSMarkus Armbruster#
5128f5627506SPeter Maydell# @refcount-bits: Width of reference counts in bits (default: 16)
5129a937b6aaSMarkus Armbruster#
5130572ad978SDenis Plotnikov# @compression-type: The image cluster compression method
5131572ad978SDenis Plotnikov#     (default: zlib, since 5.1)
5132c2808abaSKevin Wolf#
5133c2808abaSKevin Wolf# Since: 2.12
5134c2808abaSKevin Wolf##
5135c2808abaSKevin Wolf{ 'struct': 'BlockdevCreateOptionsQcow2',
5136c2808abaSKevin Wolf  'data': { 'file':             'BlockdevRef',
5137dcc98687SKevin Wolf            '*data-file':       'BlockdevRef',
51386c3944dcSKevin Wolf            '*data-file-raw':   'bool',
51397be20252SAlberto Garcia            '*extended-l2':     'bool',
5140c2808abaSKevin Wolf            'size':             'size',
5141c2808abaSKevin Wolf            '*version':         'BlockdevQcow2Version',
5142c2808abaSKevin Wolf            '*backing-file':    'str',
5143c2808abaSKevin Wolf            '*backing-fmt':     'BlockdevDriver',
5144c2808abaSKevin Wolf            '*encrypt':         'QCryptoBlockCreateOptions',
5145c2808abaSKevin Wolf            '*cluster-size':    'size',
5146c2808abaSKevin Wolf            '*preallocation':   'PreallocMode',
5147c2808abaSKevin Wolf            '*lazy-refcounts':  'bool',
5148572ad978SDenis Plotnikov            '*refcount-bits':   'int',
5149572ad978SDenis Plotnikov            '*compression-type':'Qcow2CompressionType' } }
5150c2808abaSKevin Wolf
5151c2808abaSKevin Wolf##
5152959355a4SKevin Wolf# @BlockdevCreateOptionsQed:
5153959355a4SKevin Wolf#
5154959355a4SKevin Wolf# Driver specific image creation options for qed.
5155959355a4SKevin Wolf#
5156f5627506SPeter Maydell# @file: Node to create the image format on
5157a937b6aaSMarkus Armbruster#
5158f5627506SPeter Maydell# @size: Size of the virtual disk in bytes
5159a937b6aaSMarkus Armbruster#
5160f5627506SPeter Maydell# @backing-file: File name of the backing file if a backing file
5161959355a4SKevin Wolf#     should be used
5162a937b6aaSMarkus Armbruster#
5163f5627506SPeter Maydell# @backing-fmt: Name of the block driver to use for the backing file
5164a937b6aaSMarkus Armbruster#
5165f5627506SPeter Maydell# @cluster-size: Cluster size in bytes (default: 65536)
5166a937b6aaSMarkus Armbruster#
5167f5627506SPeter Maydell# @table-size: L1/L2 table size (in clusters)
5168959355a4SKevin Wolf#
5169959355a4SKevin Wolf# Since: 2.12
5170959355a4SKevin Wolf##
5171959355a4SKevin Wolf{ 'struct': 'BlockdevCreateOptionsQed',
5172959355a4SKevin Wolf  'data': { 'file':             'BlockdevRef',
5173959355a4SKevin Wolf            'size':             'size',
5174959355a4SKevin Wolf            '*backing-file':    'str',
5175959355a4SKevin Wolf            '*backing-fmt':     'BlockdevDriver',
5176959355a4SKevin Wolf            '*cluster-size':    'size',
5177959355a4SKevin Wolf            '*table-size':      'int' } }
5178959355a4SKevin Wolf
5179959355a4SKevin Wolf##
51801bebea37SKevin Wolf# @BlockdevCreateOptionsRbd:
51811bebea37SKevin Wolf#
51821bebea37SKevin Wolf# Driver specific image creation options for rbd/Ceph.
51831bebea37SKevin Wolf#
5184f5627506SPeter Maydell# @location: Where to store the new image file.  This location cannot
51851bebea37SKevin Wolf#     point to a snapshot.
5186a937b6aaSMarkus Armbruster#
5187f5627506SPeter Maydell# @size: Size of the virtual disk in bytes
5188a937b6aaSMarkus Armbruster#
5189f5627506SPeter Maydell# @cluster-size: RBD object size
5190a937b6aaSMarkus Armbruster#
519142e4ac9eSOr Ozeri# @encrypt: Image encryption options.  (Since 6.1)
51921bebea37SKevin Wolf#
51931bebea37SKevin Wolf# Since: 2.12
51941bebea37SKevin Wolf##
51951bebea37SKevin Wolf{ 'struct': 'BlockdevCreateOptionsRbd',
51961bebea37SKevin Wolf  'data': { 'location':         'BlockdevOptionsRbd',
51971bebea37SKevin Wolf            'size':             'size',
519842e4ac9eSOr Ozeri            '*cluster-size' :   'size',
519942e4ac9eSOr Ozeri            '*encrypt' :        'RbdEncryptionCreateOptions' } }
52001bebea37SKevin Wolf
52011bebea37SKevin Wolf##
52023015372dSFam Zheng# @BlockdevVmdkSubformat:
52033015372dSFam Zheng#
52043015372dSFam Zheng# Subformat options for VMDK images
52053015372dSFam Zheng#
52063015372dSFam Zheng# @monolithicSparse: Single file image with sparse cluster allocation
52073015372dSFam Zheng#
52083015372dSFam Zheng# @monolithicFlat: Single flat data image and a descriptor file
52093015372dSFam Zheng#
5210a937b6aaSMarkus Armbruster# @twoGbMaxExtentSparse: Data is split into 2GB (per virtual LBA)
5211a937b6aaSMarkus Armbruster#     sparse extent files, in addition to a descriptor file
52123015372dSFam Zheng#
5213a937b6aaSMarkus Armbruster# @twoGbMaxExtentFlat: Data is split into 2GB (per virtual LBA) flat
5214a937b6aaSMarkus Armbruster#     extent files, in addition to a descriptor file
52153015372dSFam Zheng#
5216a937b6aaSMarkus Armbruster# @streamOptimized: Single file image sparse cluster allocation,
5217a937b6aaSMarkus Armbruster#     optimized for streaming over network.
52183015372dSFam Zheng#
52193015372dSFam Zheng# Since: 4.0
52203015372dSFam Zheng##
52213015372dSFam Zheng{ 'enum': 'BlockdevVmdkSubformat',
52223015372dSFam Zheng  'data': [ 'monolithicSparse', 'monolithicFlat', 'twoGbMaxExtentSparse',
52233015372dSFam Zheng            'twoGbMaxExtentFlat', 'streamOptimized'] }
52243015372dSFam Zheng
52253015372dSFam Zheng##
52263015372dSFam Zheng# @BlockdevVmdkAdapterType:
52273015372dSFam Zheng#
52283015372dSFam Zheng# Adapter type info for VMDK images
52293015372dSFam Zheng#
52303015372dSFam Zheng# Since: 4.0
52313015372dSFam Zheng##
52323015372dSFam Zheng{ 'enum': 'BlockdevVmdkAdapterType',
52333015372dSFam Zheng  'data': [ 'ide', 'buslogic', 'lsilogic', 'legacyESX'] }
52343015372dSFam Zheng
52353015372dSFam Zheng##
52363015372dSFam Zheng# @BlockdevCreateOptionsVmdk:
52373015372dSFam Zheng#
52383015372dSFam Zheng# Driver specific image creation options for VMDK.
52393015372dSFam Zheng#
5240f5627506SPeter Maydell# @file: Where to store the new image file.  This refers to the image
52413015372dSFam Zheng#     file for monolithcSparse and streamOptimized format, or the
52423015372dSFam Zheng#     descriptor file for other formats.
5243a937b6aaSMarkus Armbruster#
5244f5627506SPeter Maydell# @size: Size of the virtual disk in bytes
5245a937b6aaSMarkus Armbruster#
5246a937b6aaSMarkus Armbruster# @extents: Where to store the data extents.  Required for
5247a937b6aaSMarkus Armbruster#     monolithcFlat, twoGbMaxExtentSparse and twoGbMaxExtentFlat
5248a937b6aaSMarkus Armbruster#     formats.  For monolithicFlat, only one entry is required; for
52493015372dSFam Zheng#     twoGbMaxExtent* formats, the number of entries required is
525001bed0ffSMarkus Armbruster#     calculated as extent_number = virtual_size / 2GB.  Providing
525101bed0ffSMarkus Armbruster#     more extents than will be used is an error.
5252a937b6aaSMarkus Armbruster#
5253a937b6aaSMarkus Armbruster# @subformat: The subformat of the VMDK image.  Default:
5254a937b6aaSMarkus Armbruster#     "monolithicSparse".
5255a937b6aaSMarkus Armbruster#
5256a937b6aaSMarkus Armbruster# @backing-file: The path of backing file.  Default: no backing file
5257a937b6aaSMarkus Armbruster#     is used.
5258a937b6aaSMarkus Armbruster#
5259a937b6aaSMarkus Armbruster# @adapter-type: The adapter type used to fill in the descriptor.
5260a937b6aaSMarkus Armbruster#     Default: ide.
5261a937b6aaSMarkus Armbruster#
5262a937b6aaSMarkus Armbruster# @hwversion: Hardware version.  The meaningful options are "4" or
5263a937b6aaSMarkus Armbruster#     "6".  Default: "4".
5264a937b6aaSMarkus Armbruster#
5265a937b6aaSMarkus Armbruster# @toolsversion: VMware guest tools version.  Default: "2147483647"
5266a937b6aaSMarkus Armbruster#     (Since 6.2)
5267a937b6aaSMarkus Armbruster#
5268a937b6aaSMarkus Armbruster# @zeroed-grain: Whether to enable zeroed-grain feature for sparse
5269a937b6aaSMarkus Armbruster#     subformats.  Default: false.
52703015372dSFam Zheng#
52713015372dSFam Zheng# Since: 4.0
52723015372dSFam Zheng##
52733015372dSFam Zheng{ 'struct': 'BlockdevCreateOptionsVmdk',
52743015372dSFam Zheng  'data': { 'file':             'BlockdevRef',
52753015372dSFam Zheng            'size':             'size',
52763015372dSFam Zheng            '*extents':          ['BlockdevRef'],
52773015372dSFam Zheng            '*subformat':       'BlockdevVmdkSubformat',
52783015372dSFam Zheng            '*backing-file':    'str',
52793015372dSFam Zheng            '*adapter-type':    'BlockdevVmdkAdapterType',
52803015372dSFam Zheng            '*hwversion':       'str',
5281f3d43dfdSThomas Weißschuh            '*toolsversion':    'str',
52823015372dSFam Zheng            '*zeroed-grain':    'bool' } }
52833015372dSFam Zheng
52843015372dSFam Zheng##
52854906da7eSKevin Wolf# @BlockdevCreateOptionsSsh:
52864906da7eSKevin Wolf#
52874906da7eSKevin Wolf# Driver specific image creation options for SSH.
52884906da7eSKevin Wolf#
5289f5627506SPeter Maydell# @location: Where to store the new image file
5290a937b6aaSMarkus Armbruster#
5291f5627506SPeter Maydell# @size: Size of the virtual disk in bytes
52924906da7eSKevin Wolf#
52934906da7eSKevin Wolf# Since: 2.12
52944906da7eSKevin Wolf##
52954906da7eSKevin Wolf{ 'struct': 'BlockdevCreateOptionsSsh',
52964906da7eSKevin Wolf  'data': { 'location':         'BlockdevOptionsSsh',
52974906da7eSKevin Wolf            'size':             'size' } }
52984906da7eSKevin Wolf
52994906da7eSKevin Wolf##
530049858b50SMax Reitz# @BlockdevCreateOptionsVdi:
530149858b50SMax Reitz#
530249858b50SMax Reitz# Driver specific image creation options for VDI.
530349858b50SMax Reitz#
5304f5627506SPeter Maydell# @file: Node to create the image format on
5305a937b6aaSMarkus Armbruster#
5306f5627506SPeter Maydell# @size: Size of the virtual disk in bytes
5307a937b6aaSMarkus Armbruster#
5308f5627506SPeter Maydell# @preallocation: Preallocation mode for the new image (default: off;
530964c7580cSStefano Garzarella#     allowed values: off, metadata)
531049858b50SMax Reitz#
531149858b50SMax Reitz# Since: 2.12
531249858b50SMax Reitz##
531349858b50SMax Reitz{ 'struct': 'BlockdevCreateOptionsVdi',
531449858b50SMax Reitz  'data': { 'file':             'BlockdevRef',
531549858b50SMax Reitz            'size':             'size',
531661fa6487SKevin Wolf            '*preallocation':   'PreallocMode' } }
531749858b50SMax Reitz
531849858b50SMax Reitz##
531909b68dabSKevin Wolf# @BlockdevVhdxSubformat:
532009b68dabSKevin Wolf#
532109b68dabSKevin Wolf# @dynamic: Growing image file
5322a937b6aaSMarkus Armbruster#
532309b68dabSKevin Wolf# @fixed: Preallocated fixed-size image file
532409b68dabSKevin Wolf#
532509b68dabSKevin Wolf# Since: 2.12
532609b68dabSKevin Wolf##
532709b68dabSKevin Wolf{ 'enum': 'BlockdevVhdxSubformat',
532809b68dabSKevin Wolf  'data': [ 'dynamic', 'fixed' ] }
532909b68dabSKevin Wolf
533009b68dabSKevin Wolf##
533109b68dabSKevin Wolf# @BlockdevCreateOptionsVhdx:
533209b68dabSKevin Wolf#
533309b68dabSKevin Wolf# Driver specific image creation options for vhdx.
533409b68dabSKevin Wolf#
5335f5627506SPeter Maydell# @file: Node to create the image format on
5336a937b6aaSMarkus Armbruster#
5337f5627506SPeter Maydell# @size: Size of the virtual disk in bytes
5338a937b6aaSMarkus Armbruster#
5339a937b6aaSMarkus Armbruster# @log-size: Log size in bytes, must be a multiple of 1 MB (default: 1
5340a937b6aaSMarkus Armbruster#     MB)
5341a937b6aaSMarkus Armbruster#
5342f5627506SPeter Maydell# @block-size: Block size in bytes, must be a multiple of 1 MB and not
5343a937b6aaSMarkus Armbruster#     larger than 256 MB (default: automatically choose a block size
5344a937b6aaSMarkus Armbruster#     depending on the image size)
5345a937b6aaSMarkus Armbruster#
5346f5627506SPeter Maydell# @subformat: vhdx subformat (default: dynamic)
5347a937b6aaSMarkus Armbruster#
53489e272073SMarkus Armbruster# @block-state-zero: Force use of payload blocks of type 'ZERO'.
53499e272073SMarkus Armbruster#     Non-standard, but default.  Do not set to 'off' when using
53509e272073SMarkus Armbruster#     'qemu-img convert' with subformat=dynamic.
535109b68dabSKevin Wolf#
535209b68dabSKevin Wolf# Since: 2.12
535309b68dabSKevin Wolf##
535409b68dabSKevin Wolf{ 'struct': 'BlockdevCreateOptionsVhdx',
535509b68dabSKevin Wolf  'data': { 'file':                 'BlockdevRef',
535609b68dabSKevin Wolf            'size':                 'size',
535709b68dabSKevin Wolf            '*log-size':            'size',
535809b68dabSKevin Wolf            '*block-size':          'size',
535909b68dabSKevin Wolf            '*subformat':           'BlockdevVhdxSubformat',
536009b68dabSKevin Wolf            '*block-state-zero':    'bool' } }
536109b68dabSKevin Wolf
536209b68dabSKevin Wolf##
5363182c8835SKevin Wolf# @BlockdevVpcSubformat:
5364182c8835SKevin Wolf#
5365182c8835SKevin Wolf# @dynamic: Growing image file
5366a937b6aaSMarkus Armbruster#
5367182c8835SKevin Wolf# @fixed: Preallocated fixed-size image file
5368182c8835SKevin Wolf#
5369182c8835SKevin Wolf# Since: 2.12
5370182c8835SKevin Wolf##
5371182c8835SKevin Wolf{ 'enum': 'BlockdevVpcSubformat',
5372182c8835SKevin Wolf  'data': [ 'dynamic', 'fixed' ] }
5373182c8835SKevin Wolf
5374182c8835SKevin Wolf##
5375182c8835SKevin Wolf# @BlockdevCreateOptionsVpc:
5376182c8835SKevin Wolf#
5377182c8835SKevin Wolf# Driver specific image creation options for vpc (VHD).
5378182c8835SKevin Wolf#
5379f5627506SPeter Maydell# @file: Node to create the image format on
5380a937b6aaSMarkus Armbruster#
5381f5627506SPeter Maydell# @size: Size of the virtual disk in bytes
5382a937b6aaSMarkus Armbruster#
5383f5627506SPeter Maydell# @subformat: vhdx subformat (default: dynamic)
5384a937b6aaSMarkus Armbruster#
5385a937b6aaSMarkus Armbruster# @force-size: Force use of the exact byte size instead of rounding to
5386a937b6aaSMarkus Armbruster#     the next size that can be represented in CHS geometry
5387182c8835SKevin Wolf#     (default: false)
5388182c8835SKevin Wolf#
5389182c8835SKevin Wolf# Since: 2.12
5390182c8835SKevin Wolf##
5391182c8835SKevin Wolf{ 'struct': 'BlockdevCreateOptionsVpc',
5392182c8835SKevin Wolf  'data': { 'file':                 'BlockdevRef',
5393182c8835SKevin Wolf            'size':                 'size',
5394182c8835SKevin Wolf            '*subformat':           'BlockdevVpcSubformat',
5395182c8835SKevin Wolf            '*force-size':          'bool' } }
5396182c8835SKevin Wolf
5397182c8835SKevin Wolf##
539853614689SKevin Wolf# @BlockdevCreateOptions:
539953614689SKevin Wolf#
540053614689SKevin Wolf# Options for creating an image format on a given node.
540153614689SKevin Wolf#
5402f5627506SPeter Maydell# @driver: block driver to create the image format
540353614689SKevin Wolf#
540453614689SKevin Wolf# Since: 2.12
540553614689SKevin Wolf##
540653614689SKevin Wolf{ 'union': 'BlockdevCreateOptions',
540753614689SKevin Wolf  'base': {
540853614689SKevin Wolf      'driver':         'BlockdevDriver' },
540953614689SKevin Wolf  'discriminator': 'driver',
541053614689SKevin Wolf  'data': {
5411927f11e1SKevin Wolf      'file':           'BlockdevCreateOptionsFile',
5412ab8bda76SKevin Wolf      'gluster':        'BlockdevCreateOptionsGluster',
54131bedcaf1SKevin Wolf      'luks':           'BlockdevCreateOptionsLUKS',
5414a1a42af4SKevin Wolf      'nfs':            'BlockdevCreateOptionsNfs',
54151511b490SKevin Wolf      'parallels':      'BlockdevCreateOptionsParallels',
541642a3e1abSKevin Wolf      'qcow':           'BlockdevCreateOptionsQcow',
5417c2808abaSKevin Wolf      'qcow2':          'BlockdevCreateOptionsQcow2',
5418959355a4SKevin Wolf      'qed':            'BlockdevCreateOptionsQed',
54191bebea37SKevin Wolf      'rbd':            'BlockdevCreateOptionsRbd',
54204906da7eSKevin Wolf      'ssh':            'BlockdevCreateOptionsSsh',
5421e3810574SMax Reitz      'vdi':            'BlockdevCreateOptionsVdi',
542209b68dabSKevin Wolf      'vhdx':           'BlockdevCreateOptionsVhdx',
54233015372dSFam Zheng      'vmdk':           'BlockdevCreateOptionsVmdk',
542429cd0403SAnton Nefedov      'vpc':            'BlockdevCreateOptionsVpc'
542553614689SKevin Wolf  } }
542653614689SKevin Wolf
542753614689SKevin Wolf##
54283fb588a0SKevin Wolf# @blockdev-create:
5429b0292b85SKevin Wolf#
5430e5ab4347SKevin Wolf# Starts a job to create an image format on a given node.  The job is
5431e5ab4347SKevin Wolf# automatically finalized, but a manual job-dismiss is required.
5432b0292b85SKevin Wolf#
5433e5ab4347SKevin Wolf# @job-id: Identifier for the newly created job.
5434e5ab4347SKevin Wolf#
5435e5ab4347SKevin Wolf# @options: Options for the image creation.
5436e5ab4347SKevin Wolf#
5437e5ab4347SKevin Wolf# Since: 3.0
5438b0292b85SKevin Wolf##
54393fb588a0SKevin Wolf{ 'command': 'blockdev-create',
5440e5ab4347SKevin Wolf  'data': { 'job-id': 'str',
5441f55ba801SPaolo Bonzini            'options': 'BlockdevCreateOptions' },
5442f55ba801SPaolo Bonzini  'allow-preconfig': true }
5443b0292b85SKevin Wolf
5444b0292b85SKevin Wolf##
544530da9dd8SMaxim Levitsky# @BlockdevAmendOptionsLUKS:
544630da9dd8SMaxim Levitsky#
544730da9dd8SMaxim Levitsky# Driver specific image amend options for LUKS.
544830da9dd8SMaxim Levitsky#
544930da9dd8SMaxim Levitsky# Since: 5.1
545030da9dd8SMaxim Levitsky##
545130da9dd8SMaxim Levitsky{ 'struct': 'BlockdevAmendOptionsLUKS',
545230da9dd8SMaxim Levitsky  'base': 'QCryptoBlockAmendOptionsLUKS',
545330da9dd8SMaxim Levitsky  'data': { }
545430da9dd8SMaxim Levitsky}
545530da9dd8SMaxim Levitsky
545630da9dd8SMaxim Levitsky##
54578ea1613dSMaxim Levitsky# @BlockdevAmendOptionsQcow2:
54588ea1613dSMaxim Levitsky#
5459a937b6aaSMarkus Armbruster# Driver specific image amend options for qcow2.  For now, only
5460a937b6aaSMarkus Armbruster# encryption options can be amended
54618ea1613dSMaxim Levitsky#
546291577c47SMarkus Armbruster# @encrypt: Encryption options to be amended
54638ea1613dSMaxim Levitsky#
54648ea1613dSMaxim Levitsky# Since: 5.1
54658ea1613dSMaxim Levitsky##
54668ea1613dSMaxim Levitsky{ 'struct': 'BlockdevAmendOptionsQcow2',
54678ea1613dSMaxim Levitsky  'data': { '*encrypt':         'QCryptoBlockAmendOptions' } }
54688ea1613dSMaxim Levitsky
54698ea1613dSMaxim Levitsky##
5470ced914d0SMaxim Levitsky# @BlockdevAmendOptions:
5471ced914d0SMaxim Levitsky#
5472ced914d0SMaxim Levitsky# Options for amending an image format
5473ced914d0SMaxim Levitsky#
5474ced914d0SMaxim Levitsky# @driver: Block driver of the node to amend.
5475ced914d0SMaxim Levitsky#
5476ced914d0SMaxim Levitsky# Since: 5.1
5477ced914d0SMaxim Levitsky##
5478ced914d0SMaxim Levitsky{ 'union': 'BlockdevAmendOptions',
5479ced914d0SMaxim Levitsky  'base': {
5480ced914d0SMaxim Levitsky      'driver':         'BlockdevDriver' },
5481ced914d0SMaxim Levitsky  'discriminator': 'driver',
5482ced914d0SMaxim Levitsky  'data': {
54838ea1613dSMaxim Levitsky      'luks':           'BlockdevAmendOptionsLUKS',
54848ea1613dSMaxim Levitsky      'qcow2':          'BlockdevAmendOptionsQcow2' } }
5485ced914d0SMaxim Levitsky
5486ced914d0SMaxim Levitsky##
5487ced914d0SMaxim Levitsky# @x-blockdev-amend:
5488ced914d0SMaxim Levitsky#
5489a937b6aaSMarkus Armbruster# Starts a job to amend format specific options of an existing open
5490a937b6aaSMarkus Armbruster# block device The job is automatically finalized, but a manual
5491a937b6aaSMarkus Armbruster# job-dismiss is required.
5492ced914d0SMaxim Levitsky#
5493ced914d0SMaxim Levitsky# @job-id: Identifier for the newly created job.
5494ced914d0SMaxim Levitsky#
5495ced914d0SMaxim Levitsky# @node-name: Name of the block node to work on
5496ced914d0SMaxim Levitsky#
5497ced914d0SMaxim Levitsky# @options: Options (driver specific)
5498ced914d0SMaxim Levitsky#
5499a937b6aaSMarkus Armbruster# @force: Allow unsafe operations, format specific For luks that
5500a937b6aaSMarkus Armbruster#     allows erase of the last active keyslot (permanent loss of
5501a937b6aaSMarkus Armbruster#     data), and replacement of an active keyslot (possible loss of
5502a937b6aaSMarkus Armbruster#     data if IO error happens)
5503ced914d0SMaxim Levitsky#
55049fb49daaSMarkus Armbruster# Features:
5505a937b6aaSMarkus Armbruster#
55069fb49daaSMarkus Armbruster# @unstable: This command is experimental.
55079fb49daaSMarkus Armbruster#
5508ced914d0SMaxim Levitsky# Since: 5.1
5509ced914d0SMaxim Levitsky##
5510ced914d0SMaxim Levitsky{ 'command': 'x-blockdev-amend',
5511ced914d0SMaxim Levitsky  'data': { 'job-id': 'str',
5512ced914d0SMaxim Levitsky            'node-name': 'str',
5513ced914d0SMaxim Levitsky            'options': 'BlockdevAmendOptions',
55149fb49daaSMarkus Armbruster            '*force': 'bool' },
5515f55ba801SPaolo Bonzini  'features': [ 'unstable' ],
5516f55ba801SPaolo Bonzini  'allow-preconfig': true }
5517ced914d0SMaxim Levitsky
5518ced914d0SMaxim Levitsky##
55195072f7b3SMarc-André Lureau# @BlockErrorAction:
5520a589569fSWenchao Xia#
5521a589569fSWenchao Xia# An enumeration of action that has been taken when a DISK I/O occurs
5522a589569fSWenchao Xia#
5523a589569fSWenchao Xia# @ignore: error has been ignored
5524a589569fSWenchao Xia#
5525a589569fSWenchao Xia# @report: error has been reported to the device
5526a589569fSWenchao Xia#
5527a589569fSWenchao Xia# @stop: error caused VM to be stopped
5528a589569fSWenchao Xia#
5529a589569fSWenchao Xia# Since: 2.1
5530a589569fSWenchao Xia##
5531a589569fSWenchao Xia{ 'enum': 'BlockErrorAction',
5532a589569fSWenchao Xia  'data': [ 'ignore', 'report', 'stop' ] }
55335a2d2cbdSWenchao Xia
55345a2d2cbdSWenchao Xia##
55355072f7b3SMarc-André Lureau# @BLOCK_IMAGE_CORRUPTED:
5536c120f0faSWenchao Xia#
5537370d4ebaSMarc-André Lureau# Emitted when a disk image is being marked corrupt.  The image can be
5538370d4ebaSMarc-André Lureau# identified by its device or node name.  The 'device' field is always
5539370d4ebaSMarc-André Lureau# present for compatibility reasons, but it can be empty ("") if the
5540370d4ebaSMarc-André Lureau# image does not have a device name associated.
5541c120f0faSWenchao Xia#
5542dc881b44SAlberto Garcia# @device: device name.  This is always present for compatibility
5543a937b6aaSMarkus Armbruster#     reasons, but it can be empty ("") if the image does not have a
5544a937b6aaSMarkus Armbruster#     device name associated.
5545dc881b44SAlberto Garcia#
55461d8bda12SMarkus Armbruster# @node-name: node name (Since: 2.4)
5547c120f0faSWenchao Xia#
5548c120f0faSWenchao Xia# @msg: informative message for human consumption, such as the kind of
5549a937b6aaSMarkus Armbruster#     corruption being detected.  It should not be parsed by machine
5550a937b6aaSMarkus Armbruster#     as it is not guaranteed to be stable
5551c120f0faSWenchao Xia#
55521d8bda12SMarkus Armbruster# @offset: if the corruption resulted from an image access, this is
55530caef8f6SAlberto Garcia#     the host's access offset into the image
5554c120f0faSWenchao Xia#
5555a937b6aaSMarkus Armbruster# @size: if the corruption resulted from an image access, this is the
5556a937b6aaSMarkus Armbruster#     access size
5557c120f0faSWenchao Xia#
5558a937b6aaSMarkus Armbruster# @fatal: if set, the image is marked corrupt and therefore unusable
5559a937b6aaSMarkus Armbruster#     after this event and must be repaired (Since 2.2; before, every
55609bf040b9SMax Reitz#     BLOCK_IMAGE_CORRUPTED event was fatal)
55619bf040b9SMax Reitz#
556201bed0ffSMarkus Armbruster# .. note:: If action is "stop", a STOP event will eventually follow
556301bed0ffSMarkus Armbruster#    the BLOCK_IO_ERROR event.
556407c9f583SMarc-André Lureau#
556514b48aaaSJohn Snow# .. qmp-example::
5566370d4ebaSMarc-André Lureau#
5567370d4ebaSMarc-André Lureau#     <- { "event": "BLOCK_IMAGE_CORRUPTED",
5568abbf0473SVictor Toso#          "data": { "device": "", "node-name": "drive", "fatal": false,
5569abbf0473SVictor Toso#                    "msg": "L2 table offset 0x2a2a2a00 unaligned (L1 index: 0)" },
5570abbf0473SVictor Toso#          "timestamp": { "seconds": 1648243240, "microseconds": 906060 } }
5571370d4ebaSMarc-André Lureau#
5572c120f0faSWenchao Xia# Since: 1.7
5573c120f0faSWenchao Xia##
5574c120f0faSWenchao Xia{ 'event': 'BLOCK_IMAGE_CORRUPTED',
5575c120f0faSWenchao Xia  'data': { 'device'     : 'str',
5576dc881b44SAlberto Garcia            '*node-name' : 'str',
5577c120f0faSWenchao Xia            'msg'        : 'str',
5578c120f0faSWenchao Xia            '*offset'    : 'int',
55799bf040b9SMax Reitz            '*size'      : 'int',
55809bf040b9SMax Reitz            'fatal'      : 'bool' } }
5581c120f0faSWenchao Xia
5582c120f0faSWenchao Xia##
55835072f7b3SMarc-André Lureau# @BLOCK_IO_ERROR:
55845a2d2cbdSWenchao Xia#
55855a2d2cbdSWenchao Xia# Emitted when a disk I/O error occurs
55865a2d2cbdSWenchao Xia#
55877452162aSVladimir Sementsov-Ogievskiy# @qom-path: path to the device object in the QOM tree (since 9.2)
55887452162aSVladimir Sementsov-Ogievskiy#
55892bf7e10fSKevin Wolf# @device: device name.  This is always present for compatibility
5590a937b6aaSMarkus Armbruster#     reasons, but it can be empty ("") if the image does not have a
5591a937b6aaSMarkus Armbruster#     device name associated.
55922bf7e10fSKevin Wolf#
5593a937b6aaSMarkus Armbruster# @node-name: node name.  Note that errors may be reported for the
5594a937b6aaSMarkus Armbruster#     root node that is directly attached to a guest device rather
5595a937b6aaSMarkus Armbruster#     than for the node where the error occurred.  The node name is
5596a937b6aaSMarkus Armbruster#     not present if the drive is empty.  (Since: 2.8)
55975a2d2cbdSWenchao Xia#
55985a2d2cbdSWenchao Xia# @operation: I/O operation
55995a2d2cbdSWenchao Xia#
56005a2d2cbdSWenchao Xia# @action: action that has been taken
56015a2d2cbdSWenchao Xia#
5602a937b6aaSMarkus Armbruster# @nospace: true if I/O error was caused due to a no-space condition.
5603a937b6aaSMarkus Armbruster#     This key is only present if query-block's io-status is present,
5604a937b6aaSMarkus Armbruster#     please see query-block documentation for more information
5605a937b6aaSMarkus Armbruster#     (since: 2.2)
5606c7c2ff0cSLuiz Capitulino#
5607a937b6aaSMarkus Armbruster# @reason: human readable string describing the error cause.  (This
5608a937b6aaSMarkus Armbruster#     field is a debugging aid for humans, it should not be parsed by
5609a937b6aaSMarkus Armbruster#     applications) (since: 2.2)
5610624ff573SLuiz Capitulino#
561101bed0ffSMarkus Armbruster# .. note:: If action is "stop", a STOP event will eventually follow
561201bed0ffSMarkus Armbruster#    the BLOCK_IO_ERROR event.
56135a2d2cbdSWenchao Xia#
5614*2155d2ddSLeonid Kaplan# .. note:: This event is rate-limited.
5615*2155d2ddSLeonid Kaplan#
56169bc6e893SMarkus Armbruster# Since: 0.13
561707c9f583SMarc-André Lureau#
561814b48aaaSJohn Snow# .. qmp-example::
561907c9f583SMarc-André Lureau#
562007c9f583SMarc-André Lureau#     <- { "event": "BLOCK_IO_ERROR",
56217452162aSVladimir Sementsov-Ogievskiy#          "data": { "qom-path": "/machine/unattached/device[0]",
56227452162aSVladimir Sementsov-Ogievskiy#                    "device": "ide0-hd1",
562307c9f583SMarc-André Lureau#                    "node-name": "#block212",
562407c9f583SMarc-André Lureau#                    "operation": "write",
562539e8bb22SVictor Toso#                    "action": "stop",
562639e8bb22SVictor Toso#                    "reason": "No space left on device" },
562707c9f583SMarc-André Lureau#          "timestamp": { "seconds": 1265044230, "microseconds": 450486 } }
56285a2d2cbdSWenchao Xia##
56295a2d2cbdSWenchao Xia{ 'event': 'BLOCK_IO_ERROR',
56307452162aSVladimir Sementsov-Ogievskiy  'data': { 'qom-path': 'str', 'device': 'str', '*node-name': 'str',
5631bfe1a14cSKevin Wolf            'operation': 'IoOperationType',
5632624ff573SLuiz Capitulino            'action': 'BlockErrorAction', '*nospace': 'bool',
5633624ff573SLuiz Capitulino            'reason': 'str' } }
56345a2d2cbdSWenchao Xia
56355a2d2cbdSWenchao Xia##
56365072f7b3SMarc-André Lureau# @BLOCK_JOB_COMPLETED:
5637bcada37bSWenchao Xia#
5638bcada37bSWenchao Xia# Emitted when a block job has completed
5639bcada37bSWenchao Xia#
5640bcada37bSWenchao Xia# @type: job type
5641bcada37bSWenchao Xia#
56426aae5be6SAlberto Garcia# @device: The job identifier.  Originally the device name but other
56436aae5be6SAlberto Garcia#     values are allowed since QEMU 2.7
5644bcada37bSWenchao Xia#
5645bcada37bSWenchao Xia# @len: maximum progress value
5646bcada37bSWenchao Xia#
5647bcada37bSWenchao Xia# @offset: current progress value.  On success this is equal to len.
5648bcada37bSWenchao Xia#     On failure this is less than len
5649bcada37bSWenchao Xia#
5650bcada37bSWenchao Xia# @speed: rate limit, bytes per second
5651bcada37bSWenchao Xia#
56521d8bda12SMarkus Armbruster# @error: error message.  Only present on failure.  This field
5653bcada37bSWenchao Xia#     contains a human-readable error message.  There are no semantics
5654a937b6aaSMarkus Armbruster#     other than that streaming has failed and clients should not try
5655a937b6aaSMarkus Armbruster#     to interpret the error string
5656bcada37bSWenchao Xia#
5657bcada37bSWenchao Xia# Since: 1.1
5658e21e65b2SMarc-André Lureau#
565914b48aaaSJohn Snow# .. qmp-example::
5660e21e65b2SMarc-André Lureau#
5661e21e65b2SMarc-André Lureau#     <- { "event": "BLOCK_JOB_COMPLETED",
5662e21e65b2SMarc-André Lureau#          "data": { "type": "stream", "device": "virtio-disk0",
5663e21e65b2SMarc-André Lureau#                    "len": 10737418240, "offset": 10737418240,
5664e21e65b2SMarc-André Lureau#                    "speed": 0 },
5665e21e65b2SMarc-André Lureau#          "timestamp": { "seconds": 1267061043, "microseconds": 959568 } }
5666bcada37bSWenchao Xia##
5667bcada37bSWenchao Xia{ 'event': 'BLOCK_JOB_COMPLETED',
56688e4c8700SKevin Wolf  'data': { 'type'  : 'JobType',
5669bcada37bSWenchao Xia            'device': 'str',
5670bcada37bSWenchao Xia            'len'   : 'int',
5671bcada37bSWenchao Xia            'offset': 'int',
5672bcada37bSWenchao Xia            'speed' : 'int',
5673bcada37bSWenchao Xia            '*error': 'str' } }
5674bcada37bSWenchao Xia
5675bcada37bSWenchao Xia##
56765072f7b3SMarc-André Lureau# @BLOCK_JOB_CANCELLED:
5677bcada37bSWenchao Xia#
5678bcada37bSWenchao Xia# Emitted when a block job has been cancelled
5679bcada37bSWenchao Xia#
5680bcada37bSWenchao Xia# @type: job type
5681bcada37bSWenchao Xia#
56826aae5be6SAlberto Garcia# @device: The job identifier.  Originally the device name but other
56836aae5be6SAlberto Garcia#     values are allowed since QEMU 2.7
5684bcada37bSWenchao Xia#
5685bcada37bSWenchao Xia# @len: maximum progress value
5686bcada37bSWenchao Xia#
5687bcada37bSWenchao Xia# @offset: current progress value.  On success this is equal to len.
5688bcada37bSWenchao Xia#     On failure this is less than len
5689bcada37bSWenchao Xia#
5690bcada37bSWenchao Xia# @speed: rate limit, bytes per second
5691bcada37bSWenchao Xia#
5692bcada37bSWenchao Xia# Since: 1.1
5693e161df39SMarc-André Lureau#
569414b48aaaSJohn Snow# .. qmp-example::
5695e161df39SMarc-André Lureau#
5696e161df39SMarc-André Lureau#     <- { "event": "BLOCK_JOB_CANCELLED",
5697e161df39SMarc-André Lureau#          "data": { "type": "stream", "device": "virtio-disk0",
5698e161df39SMarc-André Lureau#                    "len": 10737418240, "offset": 134217728,
5699e161df39SMarc-André Lureau#                    "speed": 0 },
5700e161df39SMarc-André Lureau#          "timestamp": { "seconds": 1267061043, "microseconds": 959568 } }
5701bcada37bSWenchao Xia##
5702bcada37bSWenchao Xia{ 'event': 'BLOCK_JOB_CANCELLED',
57038e4c8700SKevin Wolf  'data': { 'type'  : 'JobType',
5704bcada37bSWenchao Xia            'device': 'str',
5705bcada37bSWenchao Xia            'len'   : 'int',
5706bcada37bSWenchao Xia            'offset': 'int',
5707bcada37bSWenchao Xia            'speed' : 'int' } }
5708bcada37bSWenchao Xia
5709bcada37bSWenchao Xia##
57105072f7b3SMarc-André Lureau# @BLOCK_JOB_ERROR:
57115a2d2cbdSWenchao Xia#
57125a2d2cbdSWenchao Xia# Emitted when a block job encounters an error
57135a2d2cbdSWenchao Xia#
57146aae5be6SAlberto Garcia# @device: The job identifier.  Originally the device name but other
57156aae5be6SAlberto Garcia#     values are allowed since QEMU 2.7
57165a2d2cbdSWenchao Xia#
57175a2d2cbdSWenchao Xia# @operation: I/O operation
57185a2d2cbdSWenchao Xia#
57195a2d2cbdSWenchao Xia# @action: action that has been taken
57205a2d2cbdSWenchao Xia#
57215a2d2cbdSWenchao Xia# Since: 1.3
5722af0e0910SMarc-André Lureau#
572314b48aaaSJohn Snow# .. qmp-example::
5724af0e0910SMarc-André Lureau#
5725af0e0910SMarc-André Lureau#     <- { "event": "BLOCK_JOB_ERROR",
5726af0e0910SMarc-André Lureau#          "data": { "device": "ide0-hd1",
5727af0e0910SMarc-André Lureau#                    "operation": "write",
5728af0e0910SMarc-André Lureau#                    "action": "stop" },
5729af0e0910SMarc-André Lureau#          "timestamp": { "seconds": 1265044230, "microseconds": 450486 } }
57305a2d2cbdSWenchao Xia##
57315a2d2cbdSWenchao Xia{ 'event': 'BLOCK_JOB_ERROR',
57325a2d2cbdSWenchao Xia  'data': { 'device'   : 'str',
57335a2d2cbdSWenchao Xia            'operation': 'IoOperationType',
5734823c6863SMarkus Armbruster            'action'   : 'BlockErrorAction' } }
5735bcada37bSWenchao Xia
5736bcada37bSWenchao Xia##
57375072f7b3SMarc-André Lureau# @BLOCK_JOB_READY:
5738bcada37bSWenchao Xia#
5739bcada37bSWenchao Xia# Emitted when a block job is ready to complete
5740bcada37bSWenchao Xia#
5741518848a2SMarkus Armbruster# @type: job type
5742518848a2SMarkus Armbruster#
57436aae5be6SAlberto Garcia# @device: The job identifier.  Originally the device name but other
57446aae5be6SAlberto Garcia#     values are allowed since QEMU 2.7
5745bcada37bSWenchao Xia#
5746518848a2SMarkus Armbruster# @len: maximum progress value
5747518848a2SMarkus Armbruster#
5748518848a2SMarkus Armbruster# @offset: current progress value.  On success this is equal to len.
5749518848a2SMarkus Armbruster#     On failure this is less than len
5750518848a2SMarkus Armbruster#
5751518848a2SMarkus Armbruster# @speed: rate limit, bytes per second
5752518848a2SMarkus Armbruster#
5753d461c279SJohn Snow# .. note:: The "ready to complete" status is always reset by a
5754d461c279SJohn Snow#    @BLOCK_JOB_ERROR event.
5755bcada37bSWenchao Xia#
5756bcada37bSWenchao Xia# Since: 1.3
575711a3dee1SMarc-André Lureau#
575814b48aaaSJohn Snow# .. qmp-example::
575911a3dee1SMarc-André Lureau#
576011a3dee1SMarc-André Lureau#     <- { "event": "BLOCK_JOB_READY",
576111a3dee1SMarc-André Lureau#          "data": { "device": "drive0", "type": "mirror", "speed": 0,
5762ccc9ddbcSVictor Toso#                    "len": 2097152, "offset": 2097152 },
576311a3dee1SMarc-André Lureau#          "timestamp": { "seconds": 1265044230, "microseconds": 450486 } }
5764bcada37bSWenchao Xia##
5765bcada37bSWenchao Xia{ 'event': 'BLOCK_JOB_READY',
57668e4c8700SKevin Wolf  'data': { 'type'  : 'JobType',
5767518848a2SMarkus Armbruster            'device': 'str',
5768518848a2SMarkus Armbruster            'len'   : 'int',
5769518848a2SMarkus Armbruster            'offset': 'int',
5770518848a2SMarkus Armbruster            'speed' : 'int' } }
5771ffeaac9bSHu Tao
577249687aceSMarc-André Lureau##
57735f241594SJohn Snow# @BLOCK_JOB_PENDING:
57745f241594SJohn Snow#
5775a937b6aaSMarkus Armbruster# Emitted when a block job is awaiting explicit authorization to
5776a937b6aaSMarkus Armbruster# finalize graph changes via @block-job-finalize.  If this job is part
5777a937b6aaSMarkus Armbruster# of a transaction, it will not emit this event until the transaction
5778a937b6aaSMarkus Armbruster# has converged first.
57795f241594SJohn Snow#
57805f241594SJohn Snow# @type: job type
57815f241594SJohn Snow#
57825f241594SJohn Snow# @id: The job identifier.
57835f241594SJohn Snow#
57845f241594SJohn Snow# Since: 2.12
57855f241594SJohn Snow#
578614b48aaaSJohn Snow# .. qmp-example::
57875f241594SJohn Snow#
57882c29d9b0SVictor Toso#     <- { "event": "BLOCK_JOB_PENDING",
57892c29d9b0SVictor Toso#          "data": { "type": "mirror", "id": "backup_1" },
57905f241594SJohn Snow#          "timestamp": { "seconds": 1265044230, "microseconds": 450486 } }
57915f241594SJohn Snow##
57925f241594SJohn Snow{ 'event': 'BLOCK_JOB_PENDING',
57938e4c8700SKevin Wolf  'data': { 'type'  : 'JobType',
57945f241594SJohn Snow            'id'    : 'str' } }
57955f241594SJohn Snow
57965f241594SJohn Snow##
57975072f7b3SMarc-André Lureau# @PreallocMode:
5798ffeaac9bSHu Tao#
5799ffeaac9bSHu Tao# Preallocation mode of QEMU image file
5800ffeaac9bSHu Tao#
5801ffeaac9bSHu Tao# @off: no preallocation
5802a937b6aaSMarkus Armbruster#
5803ffeaac9bSHu Tao# @metadata: preallocate only for metadata
5804a937b6aaSMarkus Armbruster#
5805ffeaac9bSHu Tao# @falloc: like @full preallocation but allocate disk space by
5806fa27c478SMax Reitz#     posix_fallocate() rather than writing data.
5807a937b6aaSMarkus Armbruster#
5808fa27c478SMax Reitz# @full: preallocate all data by writing it to the device to ensure
5809fa27c478SMax Reitz#     disk space is really available.  This data may or may not be
5810a937b6aaSMarkus Armbruster#     zero, depending on the image format and storage.  @full
5811a937b6aaSMarkus Armbruster#     preallocation also sets up metadata correctly.
5812ffeaac9bSHu Tao#
58135072f7b3SMarc-André Lureau# Since: 2.2
5814ffeaac9bSHu Tao##
5815ffeaac9bSHu Tao{ 'enum': 'PreallocMode',
5816ffeaac9bSHu Tao  'data': [ 'off', 'metadata', 'falloc', 'full' ] }
5817e2462113SFrancesco Romani
5818e2462113SFrancesco Romani##
58195072f7b3SMarc-André Lureau# @BLOCK_WRITE_THRESHOLD:
5820e2462113SFrancesco Romani#
5821e2462113SFrancesco Romani# Emitted when writes on block device reaches or exceeds the
5822e2462113SFrancesco Romani# configured write threshold.  For thin-provisioned devices, this
5823a937b6aaSMarkus Armbruster# means the device should be extended to avoid pausing for disk
5824a937b6aaSMarkus Armbruster# exhaustion.  The event is one shot.  Once triggered, it needs to be
5825f85d66f4SEric Blake# re-registered with another block-set-write-threshold command.
5826e2462113SFrancesco Romani#
5827e2462113SFrancesco Romani# @node-name: graph node name on which the threshold was exceeded.
5828e2462113SFrancesco Romani#
5829a937b6aaSMarkus Armbruster# @amount-exceeded: amount of data which exceeded the threshold, in
5830a937b6aaSMarkus Armbruster#     bytes.
5831e2462113SFrancesco Romani#
5832e2462113SFrancesco Romani# @write-threshold: last configured threshold, in bytes.
5833e2462113SFrancesco Romani#
5834e2462113SFrancesco Romani# Since: 2.3
5835e2462113SFrancesco Romani##
5836e2462113SFrancesco Romani{ 'event': 'BLOCK_WRITE_THRESHOLD',
5837e2462113SFrancesco Romani  'data': { 'node-name': 'str',
5838e2462113SFrancesco Romani            'amount-exceeded': 'uint64',
5839e2462113SFrancesco Romani            'write-threshold': 'uint64' } }
5840e2462113SFrancesco Romani
5841e2462113SFrancesco Romani##
58425072f7b3SMarc-André Lureau# @block-set-write-threshold:
5843e2462113SFrancesco Romani#
5844e817862bSMarc-André Lureau# Change the write threshold for a block drive.  An event will be
5845e817862bSMarc-André Lureau# delivered if a write to this block drive crosses the configured
5846a937b6aaSMarkus Armbruster# threshold.  The threshold is an offset, thus must be non-negative.
5847a937b6aaSMarkus Armbruster# Default is no write threshold.  Setting the threshold to zero
5848a937b6aaSMarkus Armbruster# disables it.
5849e817862bSMarc-André Lureau#
5850a937b6aaSMarkus Armbruster# This is useful to transparently resize thin-provisioned drives
5851a937b6aaSMarkus Armbruster# without the guest OS noticing.
5852e2462113SFrancesco Romani#
5853e2462113SFrancesco Romani# @node-name: graph node name on which the threshold must be set.
5854e2462113SFrancesco Romani#
5855e2462113SFrancesco Romani# @write-threshold: configured threshold for the block device, bytes.
5856e2462113SFrancesco Romani#     Use 0 to disable the threshold.
5857e2462113SFrancesco Romani#
5858e2462113SFrancesco Romani# Since: 2.3
5859e817862bSMarc-André Lureau#
586014b48aaaSJohn Snow# .. qmp-example::
5861e817862bSMarc-André Lureau#
5862e817862bSMarc-André Lureau#     -> { "execute": "block-set-write-threshold",
5863e817862bSMarc-André Lureau#          "arguments": { "node-name": "mydev",
5864e817862bSMarc-André Lureau#                         "write-threshold": 17179869184 } }
5865e817862bSMarc-André Lureau#     <- { "return": {} }
5866e2462113SFrancesco Romani##
5867e2462113SFrancesco Romani{ 'command': 'block-set-write-threshold',
5868f55ba801SPaolo Bonzini  'data': { 'node-name': 'str', 'write-threshold': 'uint64' },
5869f55ba801SPaolo Bonzini  'allow-preconfig': true }
58707f821597SWen Congyang
58717f821597SWen Congyang##
58725072f7b3SMarc-André Lureau# @x-blockdev-change:
58737f821597SWen Congyang#
5874a937b6aaSMarkus Armbruster# Dynamically reconfigure the block driver state graph.  It can be
5875a937b6aaSMarkus Armbruster# used to add, remove, insert or replace a graph node.  Currently only
5876a937b6aaSMarkus Armbruster# the Quorum driver implements this feature to add or remove its
5877a937b6aaSMarkus Armbruster# child.  This is useful to fix a broken quorum child.
58787f821597SWen Congyang#
58797f821597SWen Congyang# If @node is specified, it will be inserted under @parent.  @child
58807f821597SWen Congyang# may not be specified in this case.  If both @parent and @child are
58817f821597SWen Congyang# specified but @node is not, @child will be detached from @parent.
58827f821597SWen Congyang#
58837f821597SWen Congyang# @parent: the id or name of the parent node.
58847f821597SWen Congyang#
58851d8bda12SMarkus Armbruster# @child: the name of a child under the given parent node.
58867f821597SWen Congyang#
58871d8bda12SMarkus Armbruster# @node: the name of the node that will be added.
58887f821597SWen Congyang#
58899fb49daaSMarkus Armbruster# Features:
5890a937b6aaSMarkus Armbruster#
5891a937b6aaSMarkus Armbruster# @unstable: This command is experimental, and its API is not stable.
5892a937b6aaSMarkus Armbruster#     It does not support all kinds of operations, all kinds of
58939fb49daaSMarkus Armbruster#     children, nor all block drivers.
58947f821597SWen Congyang#
58959fb49daaSMarkus Armbruster#     FIXME Removing children from a quorum node means introducing
58969fb49daaSMarkus Armbruster#     gaps in the child indices.  This cannot be represented in the
58979fb49daaSMarkus Armbruster#     'children' list of BlockdevOptionsQuorum, as returned by
58989fb49daaSMarkus Armbruster#     .bdrv_refresh_filename().
58996b4738ceSKevin Wolf#
5900a937b6aaSMarkus Armbruster#     Warning: The data in a new quorum child MUST be consistent with
5901a937b6aaSMarkus Armbruster#     that of the rest of the array.
59027f821597SWen Congyang#
59037f821597SWen Congyang# Since: 2.7
5904bd77ea2eSMarc-André Lureau#
5905a9eab6e2SJohn Snow# .. qmp-example::
5906a9eab6e2SJohn Snow#    :title: Add a new node to a quorum
5907a937b6aaSMarkus Armbruster#
5908bd77ea2eSMarc-André Lureau#     -> { "execute": "blockdev-add",
5909bd77ea2eSMarc-André Lureau#          "arguments": {
5910244d04dbSEric Blake#              "driver": "raw",
5911bd77ea2eSMarc-André Lureau#              "node-name": "new_node",
5912bd77ea2eSMarc-André Lureau#              "file": { "driver": "file",
5913244d04dbSEric Blake#                        "filename": "test.raw" } } }
5914bd77ea2eSMarc-André Lureau#     <- { "return": {} }
5915bd77ea2eSMarc-André Lureau#     -> { "execute": "x-blockdev-change",
5916bd77ea2eSMarc-André Lureau#          "arguments": { "parent": "disk1",
5917bd77ea2eSMarc-André Lureau#                         "node": "new_node" } }
5918bd77ea2eSMarc-André Lureau#     <- { "return": {} }
5919bd77ea2eSMarc-André Lureau#
5920a9eab6e2SJohn Snow# .. qmp-example::
5921a9eab6e2SJohn Snow#    :title: Delete a quorum's node
5922a937b6aaSMarkus Armbruster#
5923bd77ea2eSMarc-André Lureau#     -> { "execute": "x-blockdev-change",
5924bd77ea2eSMarc-André Lureau#          "arguments": { "parent": "disk1",
5925bd77ea2eSMarc-André Lureau#                         "child": "children.1" } }
5926bd77ea2eSMarc-André Lureau#     <- { "return": {} }
59277f821597SWen Congyang##
59287f821597SWen Congyang{ 'command': 'x-blockdev-change',
59297f821597SWen Congyang  'data' : { 'parent': 'str',
59307f821597SWen Congyang             '*child': 'str',
59319fb49daaSMarkus Armbruster             '*node': 'str' },
5932f55ba801SPaolo Bonzini  'features': [ 'unstable' ],
5933f55ba801SPaolo Bonzini  'allow-preconfig': true }
5934ca00bbb1SStefan Hajnoczi
5935ca00bbb1SStefan Hajnoczi##
5936ca00bbb1SStefan Hajnoczi# @x-blockdev-set-iothread:
5937ca00bbb1SStefan Hajnoczi#
5938a937b6aaSMarkus Armbruster# Move @node and its children into the @iothread.  If @iothread is
5939a937b6aaSMarkus Armbruster# null then move @node and its children into the main loop.
5940ca00bbb1SStefan Hajnoczi#
5941ca00bbb1SStefan Hajnoczi# The node must not be attached to a BlockBackend.
5942ca00bbb1SStefan Hajnoczi#
5943ca00bbb1SStefan Hajnoczi# @node-name: the name of the block driver node
5944ca00bbb1SStefan Hajnoczi#
5945ca00bbb1SStefan Hajnoczi# @iothread: the name of the IOThread object or null for the main loop
5946ca00bbb1SStefan Hajnoczi#
5947a937b6aaSMarkus Armbruster# @force: true if the node and its children should be moved when a
5948a937b6aaSMarkus Armbruster#     BlockBackend is already attached
5949882e9b89SStefan Hajnoczi#
59509fb49daaSMarkus Armbruster# Features:
5951a937b6aaSMarkus Armbruster#
5952a937b6aaSMarkus Armbruster# @unstable: This command is experimental and intended for test cases
5953a937b6aaSMarkus Armbruster#     that need control over IOThreads only.
5954ca00bbb1SStefan Hajnoczi#
5955ca00bbb1SStefan Hajnoczi# Since: 2.12
5956ca00bbb1SStefan Hajnoczi#
5957a9eab6e2SJohn Snow# .. qmp-example::
5958a9eab6e2SJohn Snow#    :title: Move a node into an IOThread
5959a937b6aaSMarkus Armbruster#
5960ca00bbb1SStefan Hajnoczi#     -> { "execute": "x-blockdev-set-iothread",
5961ca00bbb1SStefan Hajnoczi#          "arguments": { "node-name": "disk1",
5962ca00bbb1SStefan Hajnoczi#                         "iothread": "iothread0" } }
5963ca00bbb1SStefan Hajnoczi#     <- { "return": {} }
5964ca00bbb1SStefan Hajnoczi#
5965a9eab6e2SJohn Snow# .. qmp-example::
5966a9eab6e2SJohn Snow#    :title: Move a node into the main loop
5967a937b6aaSMarkus Armbruster#
5968ca00bbb1SStefan Hajnoczi#     -> { "execute": "x-blockdev-set-iothread",
5969ca00bbb1SStefan Hajnoczi#          "arguments": { "node-name": "disk1",
5970ca00bbb1SStefan Hajnoczi#                         "iothread": null } }
5971ca00bbb1SStefan Hajnoczi#     <- { "return": {} }
5972ca00bbb1SStefan Hajnoczi##
5973ca00bbb1SStefan Hajnoczi{ 'command': 'x-blockdev-set-iothread',
5974ca00bbb1SStefan Hajnoczi  'data' : { 'node-name': 'str',
5975882e9b89SStefan Hajnoczi             'iothread': 'StrOrNull',
59769fb49daaSMarkus Armbruster             '*force': 'bool' },
5977f55ba801SPaolo Bonzini  'features': [ 'unstable' ],
5978f55ba801SPaolo Bonzini  'allow-preconfig': true }
5979b3cf1ec0SKevin Wolf
5980b3cf1ec0SKevin Wolf##
5981b3cf1ec0SKevin Wolf# @QuorumOpType:
5982b3cf1ec0SKevin Wolf#
5983b3cf1ec0SKevin Wolf# An enumeration of the quorum operation types
5984b3cf1ec0SKevin Wolf#
5985b3cf1ec0SKevin Wolf# @read: read operation
5986b3cf1ec0SKevin Wolf#
5987b3cf1ec0SKevin Wolf# @write: write operation
5988b3cf1ec0SKevin Wolf#
5989b3cf1ec0SKevin Wolf# @flush: flush operation
5990b3cf1ec0SKevin Wolf#
5991b3cf1ec0SKevin Wolf# Since: 2.6
5992b3cf1ec0SKevin Wolf##
5993b3cf1ec0SKevin Wolf{ 'enum': 'QuorumOpType',
5994b3cf1ec0SKevin Wolf  'data': [ 'read', 'write', 'flush' ] }
5995b3cf1ec0SKevin Wolf
5996b3cf1ec0SKevin Wolf##
5997b3cf1ec0SKevin Wolf# @QUORUM_FAILURE:
5998b3cf1ec0SKevin Wolf#
5999b3cf1ec0SKevin Wolf# Emitted by the Quorum block driver if it fails to establish a quorum
6000b3cf1ec0SKevin Wolf#
6001b3cf1ec0SKevin Wolf# @reference: device name if defined else node name
6002b3cf1ec0SKevin Wolf#
6003b3cf1ec0SKevin Wolf# @sector-num: number of the first sector of the failed read operation
6004b3cf1ec0SKevin Wolf#
6005b3cf1ec0SKevin Wolf# @sectors-count: failed read operation sector count
6006b3cf1ec0SKevin Wolf#
6007d461c279SJohn Snow# .. note:: This event is rate-limited.
6008b3cf1ec0SKevin Wolf#
6009b3cf1ec0SKevin Wolf# Since: 2.0
6010b3cf1ec0SKevin Wolf#
601114b48aaaSJohn Snow# .. qmp-example::
6012b3cf1ec0SKevin Wolf#
6013b3cf1ec0SKevin Wolf#     <- { "event": "QUORUM_FAILURE",
6014b3cf1ec0SKevin Wolf#          "data": { "reference": "usr1", "sector-num": 345435, "sectors-count": 5 },
6015b3cf1ec0SKevin Wolf#          "timestamp": { "seconds": 1344522075, "microseconds": 745528 } }
6016b3cf1ec0SKevin Wolf##
6017b3cf1ec0SKevin Wolf{ 'event': 'QUORUM_FAILURE',
6018b3cf1ec0SKevin Wolf  'data': { 'reference': 'str', 'sector-num': 'int', 'sectors-count': 'int' } }
6019b3cf1ec0SKevin Wolf
6020b3cf1ec0SKevin Wolf##
6021b3cf1ec0SKevin Wolf# @QUORUM_REPORT_BAD:
6022b3cf1ec0SKevin Wolf#
6023b3cf1ec0SKevin Wolf# Emitted to report a corruption of a Quorum file
6024b3cf1ec0SKevin Wolf#
6025b3cf1ec0SKevin Wolf# @type: quorum operation type (Since 2.6)
6026b3cf1ec0SKevin Wolf#
6027b3cf1ec0SKevin Wolf# @error: error message.  Only present on failure.  This field
6028a937b6aaSMarkus Armbruster#     contains a human-readable error message.  There are no semantics
6029a937b6aaSMarkus Armbruster#     other than that the block layer reported an error and clients
6030a937b6aaSMarkus Armbruster#     should not try to interpret the error string.
6031b3cf1ec0SKevin Wolf#
6032b3cf1ec0SKevin Wolf# @node-name: the graph node name of the block driver state
6033b3cf1ec0SKevin Wolf#
6034b3cf1ec0SKevin Wolf# @sector-num: number of the first sector of the failed read operation
6035b3cf1ec0SKevin Wolf#
6036b3cf1ec0SKevin Wolf# @sectors-count: failed read operation sector count
6037b3cf1ec0SKevin Wolf#
6038d461c279SJohn Snow# .. note:: This event is rate-limited.
6039b3cf1ec0SKevin Wolf#
6040b3cf1ec0SKevin Wolf# Since: 2.0
6041b3cf1ec0SKevin Wolf#
6042a9eab6e2SJohn Snow# .. qmp-example::
6043a9eab6e2SJohn Snow#    :title: Read operation
6044b3cf1ec0SKevin Wolf#
604537fa48a4SMarkus Armbruster#     <- { "event": "QUORUM_REPORT_BAD",
6046b3cf1ec0SKevin Wolf#          "data": { "node-name": "node0", "sector-num": 345435, "sectors-count": 5,
6047b3cf1ec0SKevin Wolf#                    "type": "read" },
6048b3cf1ec0SKevin Wolf#          "timestamp": { "seconds": 1344522075, "microseconds": 745528 } }
6049b3cf1ec0SKevin Wolf#
6050a9eab6e2SJohn Snow# .. qmp-example::
6051a9eab6e2SJohn Snow#    :title: Flush operation
6052b3cf1ec0SKevin Wolf#
605337fa48a4SMarkus Armbruster#     <- { "event": "QUORUM_REPORT_BAD",
6054b3cf1ec0SKevin Wolf#          "data": { "node-name": "node0", "sector-num": 0, "sectors-count": 2097120,
6055b3cf1ec0SKevin Wolf#                    "type": "flush", "error": "Broken pipe" },
6056b3cf1ec0SKevin Wolf#          "timestamp": { "seconds": 1456406829, "microseconds": 291763 } }
6057b3cf1ec0SKevin Wolf##
6058b3cf1ec0SKevin Wolf{ 'event': 'QUORUM_REPORT_BAD',
6059b3cf1ec0SKevin Wolf  'data': { 'type': 'QuorumOpType', '*error': 'str', 'node-name': 'str',
6060b3cf1ec0SKevin Wolf            'sector-num': 'int', 'sectors-count': 'int' } }
6061b3cf1ec0SKevin Wolf
6062b3cf1ec0SKevin Wolf##
6063b3cf1ec0SKevin Wolf# @BlockdevSnapshotInternal:
6064b3cf1ec0SKevin Wolf#
6065a937b6aaSMarkus Armbruster# @device: the device name or node-name of a root node to generate the
6066a937b6aaSMarkus Armbruster#     snapshot from
6067b3cf1ec0SKevin Wolf#
6068b3cf1ec0SKevin Wolf# @name: the name of the internal snapshot to be created
6069b3cf1ec0SKevin Wolf#
6070b3cf1ec0SKevin Wolf# Since: 1.7
6071b3cf1ec0SKevin Wolf##
6072b3cf1ec0SKevin Wolf{ 'struct': 'BlockdevSnapshotInternal',
6073b3cf1ec0SKevin Wolf  'data': { 'device': 'str', 'name': 'str' } }
6074b3cf1ec0SKevin Wolf
6075b3cf1ec0SKevin Wolf##
6076b3cf1ec0SKevin Wolf# @blockdev-snapshot-internal-sync:
6077b3cf1ec0SKevin Wolf#
6078b3cf1ec0SKevin Wolf# Synchronously take an internal snapshot of a block device, when the
6079b3cf1ec0SKevin Wolf# format of the image used supports it.  If the name is an empty
6080b3cf1ec0SKevin Wolf# string, or a snapshot with name already exists, the operation will
6081b3cf1ec0SKevin Wolf# fail.
6082b3cf1ec0SKevin Wolf#
60832746f060SMarkus Armbruster# Errors:
6084b3cf1ec0SKevin Wolf#     - If @device is not a valid block device, GenericError
6085b3cf1ec0SKevin Wolf#     - If any snapshot matching @name exists, or @name is empty,
6086b3cf1ec0SKevin Wolf#       GenericError
6087b3cf1ec0SKevin Wolf#     - If the format of the image used does not support it,
608871568864SMarkus Armbruster#       GenericError
6089b3cf1ec0SKevin Wolf#
6090f0e0c463SMarkus Armbruster# .. note:: Only some image formats such as qcow2 and rbd support
6091f0e0c463SMarkus Armbruster#    internal snapshots.
6092f0e0c463SMarkus Armbruster#
6093b3cf1ec0SKevin Wolf# Since: 1.7
6094b3cf1ec0SKevin Wolf#
609514b48aaaSJohn Snow# .. qmp-example::
6096b3cf1ec0SKevin Wolf#
6097b3cf1ec0SKevin Wolf#     -> { "execute": "blockdev-snapshot-internal-sync",
6098b3cf1ec0SKevin Wolf#          "arguments": { "device": "ide-hd0",
6099b3cf1ec0SKevin Wolf#                         "name": "snapshot0" }
6100b3cf1ec0SKevin Wolf#        }
6101b3cf1ec0SKevin Wolf#     <- { "return": {} }
6102b3cf1ec0SKevin Wolf##
6103b3cf1ec0SKevin Wolf{ 'command': 'blockdev-snapshot-internal-sync',
6104f55ba801SPaolo Bonzini  'data': 'BlockdevSnapshotInternal',
6105f55ba801SPaolo Bonzini  'allow-preconfig': true }
6106b3cf1ec0SKevin Wolf
6107b3cf1ec0SKevin Wolf##
6108b3cf1ec0SKevin Wolf# @blockdev-snapshot-delete-internal-sync:
6109b3cf1ec0SKevin Wolf#
6110a937b6aaSMarkus Armbruster# Synchronously delete an internal snapshot of a block device, when
6111a937b6aaSMarkus Armbruster# the format of the image used support it.  The snapshot is identified
6112a937b6aaSMarkus Armbruster# by name or id or both.  One of the name or id is required.  Return
6113a937b6aaSMarkus Armbruster# SnapshotInfo for the successfully deleted snapshot.
6114b3cf1ec0SKevin Wolf#
6115a937b6aaSMarkus Armbruster# @device: the device name or node-name of a root node to delete the
6116a937b6aaSMarkus Armbruster#     snapshot from
6117b3cf1ec0SKevin Wolf#
6118b3cf1ec0SKevin Wolf# @id: optional the snapshot's ID to be deleted
6119b3cf1ec0SKevin Wolf#
6120b3cf1ec0SKevin Wolf# @name: optional the snapshot's name to be deleted
6121b3cf1ec0SKevin Wolf#
6122a937b6aaSMarkus Armbruster# Returns:
6123e2c1dcbcSMarkus Armbruster#     SnapshotInfo
61242746f060SMarkus Armbruster#
61252746f060SMarkus Armbruster# Errors:
6126b3cf1ec0SKevin Wolf#     - If @device is not a valid block device, GenericError
6127b3cf1ec0SKevin Wolf#     - If snapshot not found, GenericError
6128b3cf1ec0SKevin Wolf#     - If the format of the image used does not support it,
612971568864SMarkus Armbruster#       GenericError
6130b3cf1ec0SKevin Wolf#     - If @id and @name are both not specified, GenericError
6131b3cf1ec0SKevin Wolf#
6132b3cf1ec0SKevin Wolf# Since: 1.7
6133b3cf1ec0SKevin Wolf#
613414b48aaaSJohn Snow# .. qmp-example::
6135b3cf1ec0SKevin Wolf#
6136b3cf1ec0SKevin Wolf#     -> { "execute": "blockdev-snapshot-delete-internal-sync",
6137b3cf1ec0SKevin Wolf#          "arguments": { "device": "ide-hd0",
6138b3cf1ec0SKevin Wolf#                         "name": "snapshot0" }
6139b3cf1ec0SKevin Wolf#        }
6140b3cf1ec0SKevin Wolf#     <- { "return": {
6141b3cf1ec0SKevin Wolf#                        "id": "1",
6142b3cf1ec0SKevin Wolf#                        "name": "snapshot0",
6143b3cf1ec0SKevin Wolf#                        "vm-state-size": 0,
6144b3cf1ec0SKevin Wolf#                        "date-sec": 1000012,
6145b3cf1ec0SKevin Wolf#                        "date-nsec": 10,
6146b3cf1ec0SKevin Wolf#                        "vm-clock-sec": 100,
6147b39847a5SPavel Dovgalyuk#                        "vm-clock-nsec": 20,
6148b39847a5SPavel Dovgalyuk#                        "icount": 220414
6149b3cf1ec0SKevin Wolf#          }
6150b3cf1ec0SKevin Wolf#        }
6151b3cf1ec0SKevin Wolf##
6152b3cf1ec0SKevin Wolf{ 'command': 'blockdev-snapshot-delete-internal-sync',
6153b3cf1ec0SKevin Wolf  'data': { 'device': 'str', '*id': 'str', '*name': 'str'},
6154f55ba801SPaolo Bonzini  'returns': 'SnapshotInfo',
6155f55ba801SPaolo Bonzini  'allow-preconfig': true }
6156456e7517SHanna Reitz
6157456e7517SHanna Reitz##
6158456e7517SHanna Reitz# @DummyBlockCoreForceArrays:
6159456e7517SHanna Reitz#
6160c04d0ab0SHanna Reitz# Not used by QMP; hack to let us use BlockGraphInfoList internally
6161456e7517SHanna Reitz#
6162456e7517SHanna Reitz# Since: 8.0
6163456e7517SHanna Reitz##
6164456e7517SHanna Reitz{ 'struct': 'DummyBlockCoreForceArrays',
6165c04d0ab0SHanna Reitz  'data': { 'unused-block-graph-info': ['BlockGraphInfo'] } }
6166