xref: /openbmc/qemu/qapi/block-core.json (revision 461a2753)
1# -*- Mode: Python -*-
2#
3# QAPI block core definitions (vm unrelated)
4
5# QAPI common definitions
6{ 'include': 'common.json' }
7
8##
9# @SnapshotInfo
10#
11# @id: unique snapshot id
12#
13# @name: user chosen name
14#
15# @vm-state-size: size of the VM state
16#
17# @date-sec: UTC date of the snapshot in seconds
18#
19# @date-nsec: fractional part in nano seconds to be used with date-sec
20#
21# @vm-clock-sec: VM clock relative to boot in seconds
22#
23# @vm-clock-nsec: fractional part in nano seconds to be used with vm-clock-sec
24#
25# Since: 1.3
26#
27##
28
29{ 'type': 'SnapshotInfo',
30  'data': { 'id': 'str', 'name': 'str', 'vm-state-size': 'int',
31            'date-sec': 'int', 'date-nsec': 'int',
32            'vm-clock-sec': 'int', 'vm-clock-nsec': 'int' } }
33
34##
35# @ImageInfoSpecificQCow2:
36#
37# @compat: compatibility level
38#
39# @lazy-refcounts: #optional on or off; only valid for compat >= 1.1
40#
41# Since: 1.7
42##
43{ 'type': 'ImageInfoSpecificQCow2',
44  'data': {
45      'compat': 'str',
46      '*lazy-refcounts': 'bool'
47  } }
48
49##
50# @ImageInfoSpecificVmdk:
51#
52# @create-type: The create type of VMDK image
53#
54# @cid: Content id of image
55#
56# @parent-cid: Parent VMDK image's cid
57#
58# @extents: List of extent files
59#
60# Since: 1.7
61##
62{ 'type': 'ImageInfoSpecificVmdk',
63  'data': {
64      'create-type': 'str',
65      'cid': 'int',
66      'parent-cid': 'int',
67      'extents': ['ImageInfo']
68  } }
69
70##
71# @ImageInfoSpecific:
72#
73# A discriminated record of image format specific information structures.
74#
75# Since: 1.7
76##
77
78{ 'union': 'ImageInfoSpecific',
79  'data': {
80      'qcow2': 'ImageInfoSpecificQCow2',
81      'vmdk': 'ImageInfoSpecificVmdk'
82  } }
83
84##
85# @ImageInfo:
86#
87# Information about a QEMU image file
88#
89# @filename: name of the image file
90#
91# @format: format of the image file
92#
93# @virtual-size: maximum capacity in bytes of the image
94#
95# @actual-size: #optional actual size on disk in bytes of the image
96#
97# @dirty-flag: #optional true if image is not cleanly closed
98#
99# @cluster-size: #optional size of a cluster in bytes
100#
101# @encrypted: #optional true if the image is encrypted
102#
103# @compressed: #optional true if the image is compressed (Since 1.7)
104#
105# @backing-filename: #optional name of the backing file
106#
107# @full-backing-filename: #optional full path of the backing file
108#
109# @backing-filename-format: #optional the format of the backing file
110#
111# @snapshots: #optional list of VM snapshots
112#
113# @backing-image: #optional info of the backing image (since 1.6)
114#
115# @format-specific: #optional structure supplying additional format-specific
116# information (since 1.7)
117#
118# @nocow: #optional info of whether NOCOW flag is set or not. (since 2.2)
119#
120# Since: 1.3
121#
122##
123
124{ 'type': 'ImageInfo',
125  'data': {'filename': 'str', 'format': 'str', '*dirty-flag': 'bool',
126           '*actual-size': 'int', 'virtual-size': 'int',
127           '*cluster-size': 'int', '*encrypted': 'bool', '*compressed': 'bool',
128           '*backing-filename': 'str', '*full-backing-filename': 'str',
129           '*backing-filename-format': 'str', '*snapshots': ['SnapshotInfo'],
130           '*backing-image': 'ImageInfo',
131           '*format-specific': 'ImageInfoSpecific',
132           '*nocow': 'bool' } }
133
134##
135# @ImageCheck:
136#
137# Information about a QEMU image file check
138#
139# @filename: name of the image file checked
140#
141# @format: format of the image file checked
142#
143# @check-errors: number of unexpected errors occurred during check
144#
145# @image-end-offset: #optional offset (in bytes) where the image ends, this
146#                    field is present if the driver for the image format
147#                    supports it
148#
149# @corruptions: #optional number of corruptions found during the check if any
150#
151# @leaks: #optional number of leaks found during the check if any
152#
153# @corruptions-fixed: #optional number of corruptions fixed during the check
154#                     if any
155#
156# @leaks-fixed: #optional number of leaks fixed during the check if any
157#
158# @total-clusters: #optional total number of clusters, this field is present
159#                  if the driver for the image format supports it
160#
161# @allocated-clusters: #optional total number of allocated clusters, this
162#                      field is present if the driver for the image format
163#                      supports it
164#
165# @fragmented-clusters: #optional total number of fragmented clusters, this
166#                       field is present if the driver for the image format
167#                       supports it
168#
169# @compressed-clusters: #optional total number of compressed clusters, this
170#                       field is present if the driver for the image format
171#                       supports it
172#
173# Since: 1.4
174#
175##
176
177{ 'type': 'ImageCheck',
178  'data': {'filename': 'str', 'format': 'str', 'check-errors': 'int',
179           '*image-end-offset': 'int', '*corruptions': 'int', '*leaks': 'int',
180           '*corruptions-fixed': 'int', '*leaks-fixed': 'int',
181           '*total-clusters': 'int', '*allocated-clusters': 'int',
182           '*fragmented-clusters': 'int', '*compressed-clusters': 'int' } }
183
184##
185# @BlockDeviceInfo:
186#
187# Information about the backing device for a block device.
188#
189# @file: the filename of the backing device
190#
191# @node-name: #optional the name of the block driver node (Since 2.0)
192#
193# @ro: true if the backing device was open read-only
194#
195# @drv: the name of the block format used to open the backing device. As of
196#       0.14.0 this can be: 'blkdebug', 'bochs', 'cloop', 'cow', 'dmg',
197#       'file', 'file', 'ftp', 'ftps', 'host_cdrom', 'host_device',
198#       'host_floppy', 'http', 'https', 'nbd', 'parallels', 'qcow',
199#       'qcow2', 'raw', 'tftp', 'vdi', 'vmdk', 'vpc', 'vvfat'
200#       2.2: 'archipelago'
201#
202# @backing_file: #optional the name of the backing file (for copy-on-write)
203#
204# @backing_file_depth: number of files in the backing file chain (since: 1.2)
205#
206# @encrypted: true if the backing device is encrypted
207#
208# @encryption_key_missing: true if the backing device is encrypted but an
209#                          valid encryption key is missing
210#
211# @detect_zeroes: detect and optimize zero writes (Since 2.1)
212#
213# @bps: total throughput limit in bytes per second is specified
214#
215# @bps_rd: read throughput limit in bytes per second is specified
216#
217# @bps_wr: write throughput limit in bytes per second is specified
218#
219# @iops: total I/O operations per second is specified
220#
221# @iops_rd: read I/O operations per second is specified
222#
223# @iops_wr: write I/O operations per second is specified
224#
225# @image: the info of image used (since: 1.6)
226#
227# @bps_max: #optional total max in bytes (Since 1.7)
228#
229# @bps_rd_max: #optional read max in bytes (Since 1.7)
230#
231# @bps_wr_max: #optional write max in bytes (Since 1.7)
232#
233# @iops_max: #optional total I/O operations max (Since 1.7)
234#
235# @iops_rd_max: #optional read I/O operations max (Since 1.7)
236#
237# @iops_wr_max: #optional write I/O operations max (Since 1.7)
238#
239# @iops_size: #optional an I/O size in bytes (Since 1.7)
240#
241# Since: 0.14.0
242#
243##
244{ 'type': 'BlockDeviceInfo',
245  'data': { 'file': 'str', '*node-name': 'str', 'ro': 'bool', 'drv': 'str',
246            '*backing_file': 'str', 'backing_file_depth': 'int',
247            'encrypted': 'bool', 'encryption_key_missing': 'bool',
248            'detect_zeroes': 'BlockdevDetectZeroesOptions',
249            'bps': 'int', 'bps_rd': 'int', 'bps_wr': 'int',
250            'iops': 'int', 'iops_rd': 'int', 'iops_wr': 'int',
251            'image': 'ImageInfo',
252            '*bps_max': 'int', '*bps_rd_max': 'int',
253            '*bps_wr_max': 'int', '*iops_max': 'int',
254            '*iops_rd_max': 'int', '*iops_wr_max': 'int',
255            '*iops_size': 'int' } }
256
257##
258# @BlockDeviceIoStatus:
259#
260# An enumeration of block device I/O status.
261#
262# @ok: The last I/O operation has succeeded
263#
264# @failed: The last I/O operation has failed
265#
266# @nospace: The last I/O operation has failed due to a no-space condition
267#
268# Since: 1.0
269##
270{ 'enum': 'BlockDeviceIoStatus', 'data': [ 'ok', 'failed', 'nospace' ] }
271
272##
273# @BlockDeviceMapEntry:
274#
275# Entry in the metadata map of the device (returned by "qemu-img map")
276#
277# @start: Offset in the image of the first byte described by this entry
278#         (in bytes)
279#
280# @length: Length of the range described by this entry (in bytes)
281#
282# @depth: Number of layers (0 = top image, 1 = top image's backing file, etc.)
283#         before reaching one for which the range is allocated.  The value is
284#         in the range 0 to the depth of the image chain - 1.
285#
286# @zero: the sectors in this range read as zeros
287#
288# @data: reading the image will actually read data from a file (in particular,
289#        if @offset is present this means that the sectors are not simply
290#        preallocated, but contain actual data in raw format)
291#
292# @offset: if present, the image file stores the data for this range in
293#          raw format at the given offset.
294#
295# Since 1.7
296##
297{ 'type': 'BlockDeviceMapEntry',
298  'data': { 'start': 'int', 'length': 'int', 'depth': 'int', 'zero': 'bool',
299            'data': 'bool', '*offset': 'int' } }
300
301##
302# @BlockDirtyInfo:
303#
304# Block dirty bitmap information.
305#
306# @count: number of dirty bytes according to the dirty bitmap
307#
308# @granularity: granularity of the dirty bitmap in bytes (since 1.4)
309#
310# Since: 1.3
311##
312{ 'type': 'BlockDirtyInfo',
313  'data': {'count': 'int', 'granularity': 'int'} }
314
315##
316# @BlockInfo:
317#
318# Block device information.  This structure describes a virtual device and
319# the backing device associated with it.
320#
321# @device: The device name associated with the virtual device.
322#
323# @type: This field is returned only for compatibility reasons, it should
324#        not be used (always returns 'unknown')
325#
326# @removable: True if the device supports removable media.
327#
328# @locked: True if the guest has locked this device from having its media
329#          removed
330#
331# @tray_open: #optional True if the device has a tray and it is open
332#             (only present if removable is true)
333#
334# @dirty-bitmaps: #optional dirty bitmaps information (only present if the
335#                 driver has one or more dirty bitmaps) (Since 2.0)
336#
337# @io-status: #optional @BlockDeviceIoStatus. Only present if the device
338#             supports it and the VM is configured to stop on errors
339#
340# @inserted: #optional @BlockDeviceInfo describing the device if media is
341#            present
342#
343# Since:  0.14.0
344##
345{ 'type': 'BlockInfo',
346  'data': {'device': 'str', 'type': 'str', 'removable': 'bool',
347           'locked': 'bool', '*inserted': 'BlockDeviceInfo',
348           '*tray_open': 'bool', '*io-status': 'BlockDeviceIoStatus',
349           '*dirty-bitmaps': ['BlockDirtyInfo'] } }
350
351##
352# @query-block:
353#
354# Get a list of BlockInfo for all virtual block devices.
355#
356# Returns: a list of @BlockInfo describing each virtual block device
357#
358# Since: 0.14.0
359##
360{ 'command': 'query-block', 'returns': ['BlockInfo'] }
361
362##
363# @BlockDeviceStats:
364#
365# Statistics of a virtual block device or a block backing device.
366#
367# @rd_bytes:      The number of bytes read by the device.
368#
369# @wr_bytes:      The number of bytes written by the device.
370#
371# @rd_operations: The number of read operations performed by the device.
372#
373# @wr_operations: The number of write operations performed by the device.
374#
375# @flush_operations: The number of cache flush operations performed by the
376#                    device (since 0.15.0)
377#
378# @flush_total_time_ns: Total time spend on cache flushes in nano-seconds
379#                       (since 0.15.0).
380#
381# @wr_total_time_ns: Total time spend on writes in nano-seconds (since 0.15.0).
382#
383# @rd_total_time_ns: Total_time_spend on reads in nano-seconds (since 0.15.0).
384#
385# @wr_highest_offset: The offset after the greatest byte written to the
386#                     device.  The intended use of this information is for
387#                     growable sparse files (like qcow2) that are used on top
388#                     of a physical device.
389#
390# Since: 0.14.0
391##
392{ 'type': 'BlockDeviceStats',
393  'data': {'rd_bytes': 'int', 'wr_bytes': 'int', 'rd_operations': 'int',
394           'wr_operations': 'int', 'flush_operations': 'int',
395           'flush_total_time_ns': 'int', 'wr_total_time_ns': 'int',
396           'rd_total_time_ns': 'int', 'wr_highest_offset': 'int' } }
397
398##
399# @BlockStats:
400#
401# Statistics of a virtual block device or a block backing device.
402#
403# @device: #optional If the stats are for a virtual block device, the name
404#          corresponding to the virtual block device.
405#
406# @stats:  A @BlockDeviceStats for the device.
407#
408# @parent: #optional This describes the file block device if it has one.
409#
410# @backing: #optional This describes the backing block device if it has one.
411#           (Since 2.0)
412#
413# Since: 0.14.0
414##
415{ 'type': 'BlockStats',
416  'data': {'*device': 'str', 'stats': 'BlockDeviceStats',
417           '*parent': 'BlockStats',
418           '*backing': 'BlockStats'} }
419
420##
421# @query-blockstats:
422#
423# Query the @BlockStats for all virtual block devices.
424#
425# Returns: A list of @BlockStats for each virtual block devices.
426#
427# Since: 0.14.0
428##
429{ 'command': 'query-blockstats', 'returns': ['BlockStats'] }
430
431##
432# @BlockdevOnError:
433#
434# An enumeration of possible behaviors for errors on I/O operations.
435# The exact meaning depends on whether the I/O was initiated by a guest
436# or by a block job
437#
438# @report: for guest operations, report the error to the guest;
439#          for jobs, cancel the job
440#
441# @ignore: ignore the error, only report a QMP event (BLOCK_IO_ERROR
442#          or BLOCK_JOB_ERROR)
443#
444# @enospc: same as @stop on ENOSPC, same as @report otherwise.
445#
446# @stop: for guest operations, stop the virtual machine;
447#        for jobs, pause the job
448#
449# Since: 1.3
450##
451{ 'enum': 'BlockdevOnError',
452  'data': ['report', 'ignore', 'enospc', 'stop'] }
453
454##
455# @MirrorSyncMode:
456#
457# An enumeration of possible behaviors for the initial synchronization
458# phase of storage mirroring.
459#
460# @top: copies data in the topmost image to the destination
461#
462# @full: copies data from all images to the destination
463#
464# @none: only copy data written from now on
465#
466# Since: 1.3
467##
468{ 'enum': 'MirrorSyncMode',
469  'data': ['top', 'full', 'none'] }
470
471##
472# @BlockJobType:
473#
474# Type of a block job.
475#
476# @commit: block commit job type, see "block-commit"
477#
478# @stream: block stream job type, see "block-stream"
479#
480# @mirror: drive mirror job type, see "drive-mirror"
481#
482# @backup: drive backup job type, see "drive-backup"
483#
484# Since: 1.7
485##
486{ 'enum': 'BlockJobType',
487  'data': ['commit', 'stream', 'mirror', 'backup'] }
488
489##
490# @BlockJobInfo:
491#
492# Information about a long-running block device operation.
493#
494# @type: the job type ('stream' for image streaming)
495#
496# @device: the block device name
497#
498# @len: the maximum progress value
499#
500# @busy: false if the job is known to be in a quiescent state, with
501#        no pending I/O.  Since 1.3.
502#
503# @paused: whether the job is paused or, if @busy is true, will
504#          pause itself as soon as possible.  Since 1.3.
505#
506# @offset: the current progress value
507#
508# @speed: the rate limit, bytes per second
509#
510# @io-status: the status of the job (since 1.3)
511#
512# Since: 1.1
513##
514{ 'type': 'BlockJobInfo',
515  'data': {'type': 'str', 'device': 'str', 'len': 'int',
516           'offset': 'int', 'busy': 'bool', 'paused': 'bool', 'speed': 'int',
517           'io-status': 'BlockDeviceIoStatus'} }
518
519##
520# @query-block-jobs:
521#
522# Return information about long-running block device operations.
523#
524# Returns: a list of @BlockJobInfo for each active block job
525#
526# Since: 1.1
527##
528{ 'command': 'query-block-jobs', 'returns': ['BlockJobInfo'] }
529
530##
531# @block_passwd:
532#
533# This command sets the password of a block device that has not been open
534# with a password and requires one.
535#
536# The two cases where this can happen are a block device is created through
537# QEMU's initial command line or a block device is changed through the legacy
538# @change interface.
539#
540# In the event that the block device is created through the initial command
541# line, the VM will start in the stopped state regardless of whether '-S' is
542# used.  The intention is for a management tool to query the block devices to
543# determine which ones are encrypted, set the passwords with this command, and
544# then start the guest with the @cont command.
545#
546# Either @device or @node-name must be set but not both.
547#
548# @device: #optional the name of the block backend device to set the password on
549#
550# @node-name: #optional graph node name to set the password on (Since 2.0)
551#
552# @password: the password to use for the device
553#
554# Returns: nothing on success
555#          If @device is not a valid block device, DeviceNotFound
556#          If @device is not encrypted, DeviceNotEncrypted
557#
558# Notes:  Not all block formats support encryption and some that do are not
559#         able to validate that a password is correct.  Disk corruption may
560#         occur if an invalid password is specified.
561#
562# Since: 0.14.0
563##
564{ 'command': 'block_passwd', 'data': {'*device': 'str',
565                                      '*node-name': 'str', 'password': 'str'} }
566
567##
568# @block_resize
569#
570# Resize a block image while a guest is running.
571#
572# Either @device or @node-name must be set but not both.
573#
574# @device: #optional the name of the device to get the image resized
575#
576# @node-name: #optional graph node name to get the image resized (Since 2.0)
577#
578# @size:  new image size in bytes
579#
580# Returns: nothing on success
581#          If @device is not a valid block device, DeviceNotFound
582#
583# Since: 0.14.0
584##
585{ 'command': 'block_resize', 'data': { '*device': 'str',
586                                       '*node-name': 'str',
587                                       'size': 'int' }}
588
589##
590# @NewImageMode
591#
592# An enumeration that tells QEMU how to set the backing file path in
593# a new image file.
594#
595# @existing: QEMU should look for an existing image file.
596#
597# @absolute-paths: QEMU should create a new image with absolute paths
598# for the backing file. If there is no backing file available, the new
599# image will not be backed either.
600#
601# Since: 1.1
602##
603{ 'enum': 'NewImageMode',
604  'data': [ 'existing', 'absolute-paths' ] }
605
606##
607# @BlockdevSnapshot
608#
609# Either @device or @node-name must be set but not both.
610#
611# @device: #optional the name of the device to generate the snapshot from.
612#
613# @node-name: #optional graph node name to generate the snapshot from (Since 2.0)
614#
615# @snapshot-file: the target of the new image. A new file will be created.
616#
617# @snapshot-node-name: #optional the graph node name of the new image (Since 2.0)
618#
619# @format: #optional the format of the snapshot image, default is 'qcow2'.
620#
621# @mode: #optional whether and how QEMU should create a new image, default is
622#        'absolute-paths'.
623##
624{ 'type': 'BlockdevSnapshot',
625  'data': { '*device': 'str', '*node-name': 'str',
626            'snapshot-file': 'str', '*snapshot-node-name': 'str',
627            '*format': 'str', '*mode': 'NewImageMode' } }
628
629##
630# @DriveBackup
631#
632# @device: the name of the device which should be copied.
633#
634# @target: the target of the new image. If the file exists, or if it
635#          is a device, the existing file/device will be used as the new
636#          destination.  If it does not exist, a new file will be created.
637#
638# @format: #optional the format of the new destination, default is to
639#          probe if @mode is 'existing', else the format of the source
640#
641# @sync: what parts of the disk image should be copied to the destination
642#        (all the disk, only the sectors allocated in the topmost image, or
643#        only new I/O).
644#
645# @mode: #optional whether and how QEMU should create a new image, default is
646#        'absolute-paths'.
647#
648# @speed: #optional the maximum speed, in bytes per second
649#
650# @on-source-error: #optional the action to take on an error on the source,
651#                   default 'report'.  'stop' and 'enospc' can only be used
652#                   if the block device supports io-status (see BlockInfo).
653#
654# @on-target-error: #optional the action to take on an error on the target,
655#                   default 'report' (no limitations, since this applies to
656#                   a different block device than @device).
657#
658# Note that @on-source-error and @on-target-error only affect background I/O.
659# If an error occurs during a guest write request, the device's rerror/werror
660# actions will be used.
661#
662# Since: 1.6
663##
664{ 'type': 'DriveBackup',
665  'data': { 'device': 'str', 'target': 'str', '*format': 'str',
666            'sync': 'MirrorSyncMode', '*mode': 'NewImageMode',
667            '*speed': 'int',
668            '*on-source-error': 'BlockdevOnError',
669            '*on-target-error': 'BlockdevOnError' } }
670
671##
672# @blockdev-snapshot-sync
673#
674# Generates a synchronous snapshot of a block device.
675#
676# For the arguments, see the documentation of BlockdevSnapshot.
677#
678# Returns: nothing on success
679#          If @device is not a valid block device, DeviceNotFound
680#
681# Since 0.14.0
682##
683{ 'command': 'blockdev-snapshot-sync',
684  'data': 'BlockdevSnapshot' }
685
686##
687# @change-backing-file
688#
689# Change the backing file in the image file metadata.  This does not
690# cause QEMU to reopen the image file to reparse the backing filename
691# (it may, however, perform a reopen to change permissions from
692# r/o -> r/w -> r/o, if needed). The new backing file string is written
693# into the image file metadata, and the QEMU internal strings are
694# updated.
695#
696# @image-node-name: The name of the block driver state node of the
697#                   image to modify.
698#
699# @device:          The name of the device that owns image-node-name.
700#
701# @backing-file:    The string to write as the backing file.  This
702#                   string is not validated, so care should be taken
703#                   when specifying the string or the image chain may
704#                   not be able to be reopened again.
705#
706# Since: 2.1
707##
708{ 'command': 'change-backing-file',
709  'data': { 'device': 'str', 'image-node-name': 'str',
710            'backing-file': 'str' } }
711
712##
713# @block-commit
714#
715# Live commit of data from overlay image nodes into backing nodes - i.e.,
716# writes data between 'top' and 'base' into 'base'.
717#
718# @device:  the name of the device
719#
720# @base:   #optional The file name of the backing image to write data into.
721#                    If not specified, this is the deepest backing image
722#
723# @top:    #optional The file name of the backing image within the image chain,
724#                    which contains the topmost data to be committed down. If
725#                    not specified, this is the active layer.
726#
727# @backing-file:  #optional The backing file string to write into the overlay
728#                           image of 'top'.  If 'top' is the active layer,
729#                           specifying a backing file string is an error. This
730#                           filename is not validated.
731#
732#                           If a pathname string is such that it cannot be
733#                           resolved by QEMU, that means that subsequent QMP or
734#                           HMP commands must use node-names for the image in
735#                           question, as filename lookup methods will fail.
736#
737#                           If not specified, QEMU will automatically determine
738#                           the backing file string to use, or error out if
739#                           there is no obvious choice. Care should be taken
740#                           when specifying the string, to specify a valid
741#                           filename or protocol.
742#                           (Since 2.1)
743#
744#                    If top == base, that is an error.
745#                    If top == active, the job will not be completed by itself,
746#                    user needs to complete the job with the block-job-complete
747#                    command after getting the ready event. (Since 2.0)
748#
749#                    If the base image is smaller than top, then the base image
750#                    will be resized to be the same size as top.  If top is
751#                    smaller than the base image, the base will not be
752#                    truncated.  If you want the base image size to match the
753#                    size of the smaller top, you can safely truncate it
754#                    yourself once the commit operation successfully completes.
755#
756# @speed:  #optional the maximum speed, in bytes per second
757#
758# Returns: Nothing on success
759#          If commit or stream is already active on this device, DeviceInUse
760#          If @device does not exist, DeviceNotFound
761#          If image commit is not supported by this device, NotSupported
762#          If @base or @top is invalid, a generic error is returned
763#          If @speed is invalid, InvalidParameter
764#
765# Since: 1.3
766#
767##
768{ 'command': 'block-commit',
769  'data': { 'device': 'str', '*base': 'str', '*top': 'str',
770            '*backing-file': 'str', '*speed': 'int' } }
771
772##
773# @drive-backup
774#
775# Start a point-in-time copy of a block device to a new destination.  The
776# status of ongoing drive-backup operations can be checked with
777# query-block-jobs where the BlockJobInfo.type field has the value 'backup'.
778# The operation can be stopped before it has completed using the
779# block-job-cancel command.
780#
781# For the arguments, see the documentation of DriveBackup.
782#
783# Returns: nothing on success
784#          If @device is not a valid block device, DeviceNotFound
785#
786# Since 1.6
787##
788{ 'command': 'drive-backup', 'data': 'DriveBackup' }
789
790##
791# @query-named-block-nodes
792#
793# Get the named block driver list
794#
795# Returns: the list of BlockDeviceInfo
796#
797# Since 2.0
798##
799{ 'command': 'query-named-block-nodes', 'returns': [ 'BlockDeviceInfo' ] }
800
801##
802# @drive-mirror
803#
804# Start mirroring a block device's writes to a new destination.
805#
806# @device:  the name of the device whose writes should be mirrored.
807#
808# @target: the target of the new image. If the file exists, or if it
809#          is a device, the existing file/device will be used as the new
810#          destination.  If it does not exist, a new file will be created.
811#
812# @format: #optional the format of the new destination, default is to
813#          probe if @mode is 'existing', else the format of the source
814#
815# @node-name: #optional the new block driver state node name in the graph
816#             (Since 2.1)
817#
818# @replaces: #optional with sync=full graph node name to be replaced by the new
819#            image when a whole image copy is done. This can be used to repair
820#            broken Quorum files. (Since 2.1)
821#
822# @mode: #optional whether and how QEMU should create a new image, default is
823#        'absolute-paths'.
824#
825# @speed:  #optional the maximum speed, in bytes per second
826#
827# @sync: what parts of the disk image should be copied to the destination
828#        (all the disk, only the sectors allocated in the topmost image, or
829#        only new I/O).
830#
831# @granularity: #optional granularity of the dirty bitmap, default is 64K
832#               if the image format doesn't have clusters, 4K if the clusters
833#               are smaller than that, else the cluster size.  Must be a
834#               power of 2 between 512 and 64M (since 1.4).
835#
836# @buf-size: #optional maximum amount of data in flight from source to
837#            target (since 1.4).
838#
839# @on-source-error: #optional the action to take on an error on the source,
840#                   default 'report'.  'stop' and 'enospc' can only be used
841#                   if the block device supports io-status (see BlockInfo).
842#
843# @on-target-error: #optional the action to take on an error on the target,
844#                   default 'report' (no limitations, since this applies to
845#                   a different block device than @device).
846#
847# Returns: nothing on success
848#          If @device is not a valid block device, DeviceNotFound
849#
850# Since 1.3
851##
852{ 'command': 'drive-mirror',
853  'data': { 'device': 'str', 'target': 'str', '*format': 'str',
854            '*node-name': 'str', '*replaces': 'str',
855            'sync': 'MirrorSyncMode', '*mode': 'NewImageMode',
856            '*speed': 'int', '*granularity': 'uint32',
857            '*buf-size': 'int', '*on-source-error': 'BlockdevOnError',
858            '*on-target-error': 'BlockdevOnError' } }
859
860##
861# @block_set_io_throttle:
862#
863# Change I/O throttle limits for a block drive.
864#
865# @device: The name of the device
866#
867# @bps: total throughput limit in bytes per second
868#
869# @bps_rd: read throughput limit in bytes per second
870#
871# @bps_wr: write throughput limit in bytes per second
872#
873# @iops: total I/O operations per second
874#
875# @ops_rd: read I/O operations per second
876#
877# @iops_wr: write I/O operations per second
878#
879# @bps_max: #optional total max in bytes (Since 1.7)
880#
881# @bps_rd_max: #optional read max in bytes (Since 1.7)
882#
883# @bps_wr_max: #optional write max in bytes (Since 1.7)
884#
885# @iops_max: #optional total I/O operations max (Since 1.7)
886#
887# @iops_rd_max: #optional read I/O operations max (Since 1.7)
888#
889# @iops_wr_max: #optional write I/O operations max (Since 1.7)
890#
891# @iops_size: #optional an I/O size in bytes (Since 1.7)
892#
893# Returns: Nothing on success
894#          If @device is not a valid block device, DeviceNotFound
895#
896# Since: 1.1
897##
898{ 'command': 'block_set_io_throttle',
899  'data': { 'device': 'str', 'bps': 'int', 'bps_rd': 'int', 'bps_wr': 'int',
900            'iops': 'int', 'iops_rd': 'int', 'iops_wr': 'int',
901            '*bps_max': 'int', '*bps_rd_max': 'int',
902            '*bps_wr_max': 'int', '*iops_max': 'int',
903            '*iops_rd_max': 'int', '*iops_wr_max': 'int',
904            '*iops_size': 'int' } }
905
906##
907# @block-stream:
908#
909# Copy data from a backing file into a block device.
910#
911# The block streaming operation is performed in the background until the entire
912# backing file has been copied.  This command returns immediately once streaming
913# has started.  The status of ongoing block streaming operations can be checked
914# with query-block-jobs.  The operation can be stopped before it has completed
915# using the block-job-cancel command.
916#
917# If a base file is specified then sectors are not copied from that base file and
918# its backing chain.  When streaming completes the image file will have the base
919# file as its backing file.  This can be used to stream a subset of the backing
920# file chain instead of flattening the entire image.
921#
922# On successful completion the image file is updated to drop the backing file
923# and the BLOCK_JOB_COMPLETED event is emitted.
924#
925# @device: the device name
926#
927# @base:   #optional the common backing file name
928#
929# @backing-file: #optional The backing file string to write into the active
930#                          layer. This filename is not validated.
931#
932#                          If a pathname string is such that it cannot be
933#                          resolved by QEMU, that means that subsequent QMP or
934#                          HMP commands must use node-names for the image in
935#                          question, as filename lookup methods will fail.
936#
937#                          If not specified, QEMU will automatically determine
938#                          the backing file string to use, or error out if there
939#                          is no obvious choice.  Care should be taken when
940#                          specifying the string, to specify a valid filename or
941#                          protocol.
942#                          (Since 2.1)
943#
944# @speed:  #optional the maximum speed, in bytes per second
945#
946# @on-error: #optional the action to take on an error (default report).
947#            'stop' and 'enospc' can only be used if the block device
948#            supports io-status (see BlockInfo).  Since 1.3.
949#
950# Returns: Nothing on success
951#          If @device does not exist, DeviceNotFound
952#
953# Since: 1.1
954##
955{ 'command': 'block-stream',
956  'data': { 'device': 'str', '*base': 'str', '*backing-file': 'str',
957            '*speed': 'int', '*on-error': 'BlockdevOnError' } }
958
959##
960# @block-job-set-speed:
961#
962# Set maximum speed for a background block operation.
963#
964# This command can only be issued when there is an active block job.
965#
966# Throttling can be disabled by setting the speed to 0.
967#
968# @device: the device name
969#
970# @speed:  the maximum speed, in bytes per second, or 0 for unlimited.
971#          Defaults to 0.
972#
973# Returns: Nothing on success
974#          If no background operation is active on this device, DeviceNotActive
975#
976# Since: 1.1
977##
978{ 'command': 'block-job-set-speed',
979  'data': { 'device': 'str', 'speed': 'int' } }
980
981##
982# @block-job-cancel:
983#
984# Stop an active background block operation.
985#
986# This command returns immediately after marking the active background block
987# operation for cancellation.  It is an error to call this command if no
988# operation is in progress.
989#
990# The operation will cancel as soon as possible and then emit the
991# BLOCK_JOB_CANCELLED event.  Before that happens the job is still visible when
992# enumerated using query-block-jobs.
993#
994# For streaming, the image file retains its backing file unless the streaming
995# operation happens to complete just as it is being cancelled.  A new streaming
996# operation can be started at a later time to finish copying all data from the
997# backing file.
998#
999# @device: the device name
1000#
1001# @force: #optional whether to allow cancellation of a paused job (default
1002#         false).  Since 1.3.
1003#
1004# Returns: Nothing on success
1005#          If no background operation is active on this device, DeviceNotActive
1006#
1007# Since: 1.1
1008##
1009{ 'command': 'block-job-cancel', 'data': { 'device': 'str', '*force': 'bool' } }
1010
1011##
1012# @block-job-pause:
1013#
1014# Pause an active background block operation.
1015#
1016# This command returns immediately after marking the active background block
1017# operation for pausing.  It is an error to call this command if no
1018# operation is in progress.  Pausing an already paused job has no cumulative
1019# effect; a single block-job-resume command will resume the job.
1020#
1021# The operation will pause as soon as possible.  No event is emitted when
1022# the operation is actually paused.  Cancelling a paused job automatically
1023# resumes it.
1024#
1025# @device: the device name
1026#
1027# Returns: Nothing on success
1028#          If no background operation is active on this device, DeviceNotActive
1029#
1030# Since: 1.3
1031##
1032{ 'command': 'block-job-pause', 'data': { 'device': 'str' } }
1033
1034##
1035# @block-job-resume:
1036#
1037# Resume an active background block operation.
1038#
1039# This command returns immediately after resuming a paused background block
1040# operation.  It is an error to call this command if no operation is in
1041# progress.  Resuming an already running job is not an error.
1042#
1043# This command also clears the error status of the job.
1044#
1045# @device: the device name
1046#
1047# Returns: Nothing on success
1048#          If no background operation is active on this device, DeviceNotActive
1049#
1050# Since: 1.3
1051##
1052{ 'command': 'block-job-resume', 'data': { 'device': 'str' } }
1053
1054##
1055# @block-job-complete:
1056#
1057# Manually trigger completion of an active background block operation.  This
1058# is supported for drive mirroring, where it also switches the device to
1059# write to the target path only.  The ability to complete is signaled with
1060# a BLOCK_JOB_READY event.
1061#
1062# This command completes an active background block operation synchronously.
1063# The ordering of this command's return with the BLOCK_JOB_COMPLETED event
1064# is not defined.  Note that if an I/O error occurs during the processing of
1065# this command: 1) the command itself will fail; 2) the error will be processed
1066# according to the rerror/werror arguments that were specified when starting
1067# the operation.
1068#
1069# A cancelled or paused job cannot be completed.
1070#
1071# @device: the device name
1072#
1073# Returns: Nothing on success
1074#          If no background operation is active on this device, DeviceNotActive
1075#
1076# Since: 1.3
1077##
1078{ 'command': 'block-job-complete', 'data': { 'device': 'str' } }
1079
1080##
1081# @BlockdevDiscardOptions
1082#
1083# Determines how to handle discard requests.
1084#
1085# @ignore:      Ignore the request
1086# @unmap:       Forward as an unmap request
1087#
1088# Since: 1.7
1089##
1090{ 'enum': 'BlockdevDiscardOptions',
1091  'data': [ 'ignore', 'unmap' ] }
1092
1093##
1094# @BlockdevDetectZeroesOptions
1095#
1096# Describes the operation mode for the automatic conversion of plain
1097# zero writes by the OS to driver specific optimized zero write commands.
1098#
1099# @off:      Disabled (default)
1100# @on:       Enabled
1101# @unmap:    Enabled and even try to unmap blocks if possible. This requires
1102#            also that @BlockdevDiscardOptions is set to unmap for this device.
1103#
1104# Since: 2.1
1105##
1106{ 'enum': 'BlockdevDetectZeroesOptions',
1107  'data': [ 'off', 'on', 'unmap' ] }
1108
1109##
1110# @BlockdevAioOptions
1111#
1112# Selects the AIO backend to handle I/O requests
1113#
1114# @threads:     Use qemu's thread pool
1115# @native:      Use native AIO backend (only Linux and Windows)
1116#
1117# Since: 1.7
1118##
1119{ 'enum': 'BlockdevAioOptions',
1120  'data': [ 'threads', 'native' ] }
1121
1122##
1123# @BlockdevCacheOptions
1124#
1125# Includes cache-related options for block devices
1126#
1127# @writeback:   #optional enables writeback mode for any caches (default: true)
1128# @direct:      #optional enables use of O_DIRECT (bypass the host page cache;
1129#               default: false)
1130# @no-flush:    #optional ignore any flush requests for the device (default:
1131#               false)
1132#
1133# Since: 1.7
1134##
1135{ 'type': 'BlockdevCacheOptions',
1136  'data': { '*writeback': 'bool',
1137            '*direct': 'bool',
1138            '*no-flush': 'bool' } }
1139
1140##
1141# @BlockdevDriver
1142#
1143# Drivers that are supported in block device operations.
1144#
1145# @host_device, @host_cdrom, @host_floppy: Since 2.1
1146#
1147# Since: 2.0
1148##
1149{ 'enum': 'BlockdevDriver',
1150  'data': [ 'archipelago', 'file', 'host_device', 'host_cdrom', 'host_floppy',
1151            'http', 'https', 'ftp', 'ftps', 'tftp', 'vvfat', 'blkdebug',
1152            'blkverify', 'bochs', 'cloop', 'cow', 'dmg', 'parallels', 'qcow',
1153            'qcow2', 'qed', 'raw', 'vdi', 'vhdx', 'vmdk', 'vpc', 'quorum' ] }
1154
1155##
1156# @BlockdevOptionsBase
1157#
1158# Options that are available for all block devices, independent of the block
1159# driver.
1160#
1161# @driver:        block driver name
1162# @id:            #optional id by which the new block device can be referred to.
1163#                 This is a required option on the top level of blockdev-add, and
1164#                 currently not allowed on any other level.
1165# @node-name:     #optional the name of a block driver state node (Since 2.0)
1166# @discard:       #optional discard-related options (default: ignore)
1167# @cache:         #optional cache-related options
1168# @aio:           #optional AIO backend (default: threads)
1169# @rerror:        #optional how to handle read errors on the device
1170#                 (default: report)
1171# @werror:        #optional how to handle write errors on the device
1172#                 (default: enospc)
1173# @read-only:     #optional whether the block device should be read-only
1174#                 (default: false)
1175# @detect-zeroes: #optional detect and optimize zero writes (Since 2.1)
1176#                 (default: off)
1177#
1178# Since: 1.7
1179##
1180{ 'type': 'BlockdevOptionsBase',
1181  'data': { 'driver': 'BlockdevDriver',
1182            '*id': 'str',
1183            '*node-name': 'str',
1184            '*discard': 'BlockdevDiscardOptions',
1185            '*cache': 'BlockdevCacheOptions',
1186            '*aio': 'BlockdevAioOptions',
1187            '*rerror': 'BlockdevOnError',
1188            '*werror': 'BlockdevOnError',
1189            '*read-only': 'bool',
1190            '*detect-zeroes': 'BlockdevDetectZeroesOptions' } }
1191
1192##
1193# @BlockdevOptionsFile
1194#
1195# Driver specific block device options for the file backend and similar
1196# protocols.
1197#
1198# @filename:    path to the image file
1199#
1200# Since: 1.7
1201##
1202{ 'type': 'BlockdevOptionsFile',
1203  'data': { 'filename': 'str' } }
1204
1205##
1206# @BlockdevOptionsVVFAT
1207#
1208# Driver specific block device options for the vvfat protocol.
1209#
1210# @dir:         directory to be exported as FAT image
1211# @fat-type:    #optional FAT type: 12, 16 or 32
1212# @floppy:      #optional whether to export a floppy image (true) or
1213#               partitioned hard disk (false; default)
1214# @rw:          #optional whether to allow write operations (default: false)
1215#
1216# Since: 1.7
1217##
1218{ 'type': 'BlockdevOptionsVVFAT',
1219  'data': { 'dir': 'str', '*fat-type': 'int', '*floppy': 'bool',
1220            '*rw': 'bool' } }
1221
1222##
1223# @BlockdevOptionsGenericFormat
1224#
1225# Driver specific block device options for image format that have no option
1226# besides their data source.
1227#
1228# @file:        reference to or definition of the data source block device
1229#
1230# Since: 1.7
1231##
1232{ 'type': 'BlockdevOptionsGenericFormat',
1233  'data': { 'file': 'BlockdevRef' } }
1234
1235##
1236# @BlockdevOptionsGenericCOWFormat
1237#
1238# Driver specific block device options for image format that have no option
1239# besides their data source and an optional backing file.
1240#
1241# @backing:     #optional reference to or definition of the backing file block
1242#               device (if missing, taken from the image file content). It is
1243#               allowed to pass an empty string here in order to disable the
1244#               default backing file.
1245#
1246# Since: 1.7
1247##
1248{ 'type': 'BlockdevOptionsGenericCOWFormat',
1249  'base': 'BlockdevOptionsGenericFormat',
1250  'data': { '*backing': 'BlockdevRef' } }
1251
1252##
1253# @BlockdevOptionsQcow2
1254#
1255# Driver specific block device options for qcow2.
1256#
1257# @lazy-refcounts:        #optional whether to enable the lazy refcounts
1258#                         feature (default is taken from the image file)
1259#
1260# @pass-discard-request:  #optional whether discard requests to the qcow2
1261#                         device should be forwarded to the data source
1262#
1263# @pass-discard-snapshot: #optional whether discard requests for the data source
1264#                         should be issued when a snapshot operation (e.g.
1265#                         deleting a snapshot) frees clusters in the qcow2 file
1266#
1267# @pass-discard-other:    #optional whether discard requests for the data source
1268#                         should be issued on other occasions where a cluster
1269#                         gets freed
1270#
1271# Since: 1.7
1272##
1273{ 'type': 'BlockdevOptionsQcow2',
1274  'base': 'BlockdevOptionsGenericCOWFormat',
1275  'data': { '*lazy-refcounts': 'bool',
1276            '*pass-discard-request': 'bool',
1277            '*pass-discard-snapshot': 'bool',
1278            '*pass-discard-other': 'bool' } }
1279
1280
1281##
1282# @BlockdevOptionsArchipelago
1283#
1284# Driver specific block device options for Archipelago.
1285#
1286# @volume:              Name of the Archipelago volume image
1287#
1288# @mport:               #optional The port number on which mapperd is
1289#                       listening. This is optional
1290#                       and if not specified, QEMU will make Archipelago
1291#                       use the default port (1001).
1292#
1293# @vport:               #optional The port number on which vlmcd is
1294#                       listening. This is optional
1295#                       and if not specified, QEMU will make Archipelago
1296#                       use the default port (501).
1297#
1298# @segment:             #optional The name of the shared memory segment
1299#                       Archipelago stack is using. This is optional
1300#                       and if not specified, QEMU will make Archipelago
1301#                       use the default value, 'archipelago'.
1302# Since: 2.2
1303##
1304{ 'type': 'BlockdevOptionsArchipelago',
1305  'data': { 'volume': 'str',
1306            '*mport': 'int',
1307            '*vport': 'int',
1308            '*segment': 'str' } }
1309
1310
1311##
1312# @BlkdebugEvent
1313#
1314# Trigger events supported by blkdebug.
1315##
1316{ 'enum': 'BlkdebugEvent',
1317  'data': [ 'l1_update', 'l1_grow.alloc_table', 'l1_grow.write_table',
1318            'l1_grow.activate_table', 'l2_load', 'l2_update',
1319            'l2_update_compressed', 'l2_alloc.cow_read', 'l2_alloc.write',
1320            'read_aio', 'read_backing_aio', 'read_compressed', 'write_aio',
1321            'write_compressed', 'vmstate_load', 'vmstate_save', 'cow_read',
1322            'cow_write', 'reftable_load', 'reftable_grow', 'reftable_update',
1323            'refblock_load', 'refblock_update', 'refblock_update_part',
1324            'refblock_alloc', 'refblock_alloc.hookup', 'refblock_alloc.write',
1325            'refblock_alloc.write_blocks', 'refblock_alloc.write_table',
1326            'refblock_alloc.switch_table', 'cluster_alloc',
1327            'cluster_alloc_bytes', 'cluster_free', 'flush_to_os',
1328            'flush_to_disk' ] }
1329
1330##
1331# @BlkdebugInjectErrorOptions
1332#
1333# Describes a single error injection for blkdebug.
1334#
1335# @event:       trigger event
1336#
1337# @state:       #optional the state identifier blkdebug needs to be in to
1338#               actually trigger the event; defaults to "any"
1339#
1340# @errno:       #optional error identifier (errno) to be returned; defaults to
1341#               EIO
1342#
1343# @sector:      #optional specifies the sector index which has to be affected
1344#               in order to actually trigger the event; defaults to "any
1345#               sector"
1346#
1347# @once:        #optional disables further events after this one has been
1348#               triggered; defaults to false
1349#
1350# @immediately: #optional fail immediately; defaults to false
1351#
1352# Since: 2.0
1353##
1354{ 'type': 'BlkdebugInjectErrorOptions',
1355  'data': { 'event': 'BlkdebugEvent',
1356            '*state': 'int',
1357            '*errno': 'int',
1358            '*sector': 'int',
1359            '*once': 'bool',
1360            '*immediately': 'bool' } }
1361
1362##
1363# @BlkdebugSetStateOptions
1364#
1365# Describes a single state-change event for blkdebug.
1366#
1367# @event:       trigger event
1368#
1369# @state:       #optional the current state identifier blkdebug needs to be in;
1370#               defaults to "any"
1371#
1372# @new_state:   the state identifier blkdebug is supposed to assume if
1373#               this event is triggered
1374#
1375# Since: 2.0
1376##
1377{ 'type': 'BlkdebugSetStateOptions',
1378  'data': { 'event': 'BlkdebugEvent',
1379            '*state': 'int',
1380            'new_state': 'int' } }
1381
1382##
1383# @BlockdevOptionsBlkdebug
1384#
1385# Driver specific block device options for blkdebug.
1386#
1387# @image:           underlying raw block device (or image file)
1388#
1389# @config:          #optional filename of the configuration file
1390#
1391# @align:           #optional required alignment for requests in bytes
1392#
1393# @inject-error:    #optional array of error injection descriptions
1394#
1395# @set-state:       #optional array of state-change descriptions
1396#
1397# Since: 2.0
1398##
1399{ 'type': 'BlockdevOptionsBlkdebug',
1400  'data': { 'image': 'BlockdevRef',
1401            '*config': 'str',
1402            '*align': 'int',
1403            '*inject-error': ['BlkdebugInjectErrorOptions'],
1404            '*set-state': ['BlkdebugSetStateOptions'] } }
1405
1406##
1407# @BlockdevOptionsBlkverify
1408#
1409# Driver specific block device options for blkverify.
1410#
1411# @test:    block device to be tested
1412#
1413# @raw:     raw image used for verification
1414#
1415# Since: 2.0
1416##
1417{ 'type': 'BlockdevOptionsBlkverify',
1418  'data': { 'test': 'BlockdevRef',
1419            'raw': 'BlockdevRef' } }
1420
1421##
1422# @QuorumReadPattern
1423#
1424# An enumeration of quorum read patterns.
1425#
1426# @quorum: read all the children and do a quorum vote on reads
1427#
1428# @fifo: read only from the first child that has not failed
1429#
1430# Since: 2.2
1431##
1432{ 'enum': 'QuorumReadPattern', 'data': [ 'quorum', 'fifo' ] }
1433
1434##
1435# @BlockdevOptionsQuorum
1436#
1437# Driver specific block device options for Quorum
1438#
1439# @blkverify:      #optional true if the driver must print content mismatch
1440#                  set to false by default
1441#
1442# @children:       the children block devices to use
1443#
1444# @vote-threshold: the vote limit under which a read will fail
1445#
1446# @rewrite-corrupted: #optional rewrite corrupted data when quorum is reached
1447#                     (Since 2.1)
1448#
1449# @read-pattern: #optional choose read pattern and set to quorum by default
1450#                (Since 2.2)
1451#
1452# Since: 2.0
1453##
1454{ 'type': 'BlockdevOptionsQuorum',
1455  'data': { '*blkverify': 'bool',
1456            'children': [ 'BlockdevRef' ],
1457            'vote-threshold': 'int',
1458            '*rewrite-corrupted': 'bool',
1459            '*read-pattern': 'QuorumReadPattern' } }
1460
1461##
1462# @BlockdevOptions
1463#
1464# Options for creating a block device.
1465#
1466# Since: 1.7
1467##
1468{ 'union': 'BlockdevOptions',
1469  'base': 'BlockdevOptionsBase',
1470  'discriminator': 'driver',
1471  'data': {
1472      'archipelago':'BlockdevOptionsArchipelago',
1473      'file':       'BlockdevOptionsFile',
1474      'host_device':'BlockdevOptionsFile',
1475      'host_cdrom': 'BlockdevOptionsFile',
1476      'host_floppy':'BlockdevOptionsFile',
1477      'http':       'BlockdevOptionsFile',
1478      'https':      'BlockdevOptionsFile',
1479      'ftp':        'BlockdevOptionsFile',
1480      'ftps':       'BlockdevOptionsFile',
1481      'tftp':       'BlockdevOptionsFile',
1482# TODO gluster: Wait for structured options
1483# TODO iscsi: Wait for structured options
1484# TODO nbd: Should take InetSocketAddress for 'host'?
1485# TODO nfs: Wait for structured options
1486# TODO rbd: Wait for structured options
1487# TODO sheepdog: Wait for structured options
1488# TODO ssh: Should take InetSocketAddress for 'host'?
1489      'vvfat':      'BlockdevOptionsVVFAT',
1490      'blkdebug':   'BlockdevOptionsBlkdebug',
1491      'blkverify':  'BlockdevOptionsBlkverify',
1492      'bochs':      'BlockdevOptionsGenericFormat',
1493      'cloop':      'BlockdevOptionsGenericFormat',
1494      'cow':        'BlockdevOptionsGenericCOWFormat',
1495      'dmg':        'BlockdevOptionsGenericFormat',
1496      'parallels':  'BlockdevOptionsGenericFormat',
1497      'qcow':       'BlockdevOptionsGenericCOWFormat',
1498      'qcow2':      'BlockdevOptionsQcow2',
1499      'qed':        'BlockdevOptionsGenericCOWFormat',
1500      'raw':        'BlockdevOptionsGenericFormat',
1501      'vdi':        'BlockdevOptionsGenericFormat',
1502      'vhdx':       'BlockdevOptionsGenericFormat',
1503      'vmdk':       'BlockdevOptionsGenericCOWFormat',
1504      'vpc':        'BlockdevOptionsGenericFormat',
1505      'quorum':     'BlockdevOptionsQuorum'
1506  } }
1507
1508##
1509# @BlockdevRef
1510#
1511# Reference to a block device.
1512#
1513# @definition:      defines a new block device inline
1514# @reference:       references the ID of an existing block device. An
1515#                   empty string means that no block device should be
1516#                   referenced.
1517#
1518# Since: 1.7
1519##
1520{ 'union': 'BlockdevRef',
1521  'discriminator': {},
1522  'data': { 'definition': 'BlockdevOptions',
1523            'reference': 'str' } }
1524
1525##
1526# @blockdev-add:
1527#
1528# Creates a new block device.
1529#
1530# @options: block device options for the new device
1531#
1532# Since: 1.7
1533##
1534{ 'command': 'blockdev-add', 'data': { 'options': 'BlockdevOptions' } }
1535
1536
1537##
1538# @BlockErrorAction
1539#
1540# An enumeration of action that has been taken when a DISK I/O occurs
1541#
1542# @ignore: error has been ignored
1543#
1544# @report: error has been reported to the device
1545#
1546# @stop: error caused VM to be stopped
1547#
1548# Since: 2.1
1549##
1550{ 'enum': 'BlockErrorAction',
1551  'data': [ 'ignore', 'report', 'stop' ] }
1552
1553
1554##
1555# @BLOCK_IMAGE_CORRUPTED
1556#
1557# Emitted when a disk image is being marked corrupt
1558#
1559# @device: device name
1560#
1561# @msg: informative message for human consumption, such as the kind of
1562#       corruption being detected. It should not be parsed by machine as it is
1563#       not guaranteed to be stable
1564#
1565# @offset: #optional, if the corruption resulted from an image access, this is
1566#          the access offset into the image
1567#
1568# @size: #optional, if the corruption resulted from an image access, this is
1569#        the access size
1570#
1571# Since: 1.7
1572##
1573{ 'event': 'BLOCK_IMAGE_CORRUPTED',
1574  'data': { 'device' : 'str',
1575            'msg'    : 'str',
1576            '*offset': 'int',
1577            '*size'  : 'int' } }
1578
1579##
1580# @BLOCK_IO_ERROR
1581#
1582# Emitted when a disk I/O error occurs
1583#
1584# @device: device name
1585#
1586# @operation: I/O operation
1587#
1588# @action: action that has been taken
1589#
1590# Note: If action is "stop", a STOP event will eventually follow the
1591# BLOCK_IO_ERROR event
1592#
1593# Since: 0.13.0
1594##
1595{ 'event': 'BLOCK_IO_ERROR',
1596  'data': { 'device': 'str', 'operation': 'IoOperationType',
1597            'action': 'BlockErrorAction' } }
1598
1599##
1600# @BLOCK_JOB_COMPLETED
1601#
1602# Emitted when a block job has completed
1603#
1604# @type: job type
1605#
1606# @device: device name
1607#
1608# @len: maximum progress value
1609#
1610# @offset: current progress value. On success this is equal to len.
1611#          On failure this is less than len
1612#
1613# @speed: rate limit, bytes per second
1614#
1615# @error: #optional, error message. Only present on failure. This field
1616#         contains a human-readable error message. There are no semantics
1617#         other than that streaming has failed and clients should not try to
1618#         interpret the error string
1619#
1620# Since: 1.1
1621##
1622{ 'event': 'BLOCK_JOB_COMPLETED',
1623  'data': { 'type'  : 'BlockJobType',
1624            'device': 'str',
1625            'len'   : 'int',
1626            'offset': 'int',
1627            'speed' : 'int',
1628            '*error': 'str' } }
1629
1630##
1631# @BLOCK_JOB_CANCELLED
1632#
1633# Emitted when a block job has been cancelled
1634#
1635# @type: job type
1636#
1637# @device: device name
1638#
1639# @len: maximum progress value
1640#
1641# @offset: current progress value. On success this is equal to len.
1642#          On failure this is less than len
1643#
1644# @speed: rate limit, bytes per second
1645#
1646# Since: 1.1
1647##
1648{ 'event': 'BLOCK_JOB_CANCELLED',
1649  'data': { 'type'  : 'BlockJobType',
1650            'device': 'str',
1651            'len'   : 'int',
1652            'offset': 'int',
1653            'speed' : 'int' } }
1654
1655##
1656# @BLOCK_JOB_ERROR
1657#
1658# Emitted when a block job encounters an error
1659#
1660# @device: device name
1661#
1662# @operation: I/O operation
1663#
1664# @action: action that has been taken
1665#
1666# Since: 1.3
1667##
1668{ 'event': 'BLOCK_JOB_ERROR',
1669  'data': { 'device'   : 'str',
1670            'operation': 'IoOperationType',
1671            'action'   : 'BlockErrorAction' } }
1672
1673##
1674# @BLOCK_JOB_READY
1675#
1676# Emitted when a block job is ready to complete
1677#
1678# @type: job type
1679#
1680# @device: device name
1681#
1682# @len: maximum progress value
1683#
1684# @offset: current progress value. On success this is equal to len.
1685#          On failure this is less than len
1686#
1687# @speed: rate limit, bytes per second
1688#
1689# Note: The "ready to complete" status is always reset by a @BLOCK_JOB_ERROR
1690# event
1691#
1692# Since: 1.3
1693##
1694{ 'event': 'BLOCK_JOB_READY',
1695  'data': { 'type'  : 'BlockJobType',
1696            'device': 'str',
1697            'len'   : 'int',
1698            'offset': 'int',
1699            'speed' : 'int' } }
1700