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