aboutsummaryrefslogtreecommitdiff
path: root/qapi
diff options
context:
space:
mode:
Diffstat (limited to 'qapi')
-rw-r--r--qapi/acpi.json20
-rw-r--r--qapi/block-core.json934
-rw-r--r--qapi/block-export.json13
-rw-r--r--qapi/block.json276
-rw-r--r--qapi/char.json234
-rw-r--r--qapi/common.json11
-rw-r--r--qapi/control.json54
-rw-r--r--qapi/crypto.json15
-rw-r--r--qapi/dump.json28
-rw-r--r--qapi/introspect.json4
-rw-r--r--qapi/machine-target.json6
-rw-r--r--qapi/machine.json350
-rw-r--r--qapi/migration.json787
-rw-r--r--qapi/misc-target.json114
-rw-r--r--qapi/misc.json194
-rw-r--r--qapi/net.json145
-rw-r--r--qapi/pci.json252
-rw-r--r--qapi/pragma.json66
-rw-r--r--qapi/qapi-util.c2
-rw-r--r--qapi/qdev.json55
-rw-r--r--qapi/qmp-dispatch.c21
-rw-r--r--qapi/qom.json64
-rw-r--r--qapi/rdma.json14
-rw-r--r--qapi/replay.json16
-rw-r--r--qapi/rocker.json66
-rw-r--r--qapi/run-state.json86
-rw-r--r--qapi/sockets.json48
-rw-r--r--qapi/stats.json2
-rw-r--r--qapi/string-output-visitor.c46
-rw-r--r--qapi/tpm.json40
-rw-r--r--qapi/trace.json12
-rw-r--r--qapi/transaction.json38
-rw-r--r--qapi/ui.json342
-rw-r--r--qapi/virtio.json794
-rw-r--r--qapi/yank.json32
35 files changed, 2733 insertions, 2448 deletions
diff --git a/qapi/acpi.json b/qapi/acpi.json
index e0739bd6ae..aa4dbe5794 100644
--- a/qapi/acpi.json
+++ b/qapi/acpi.json
@@ -113,12 +113,12 @@
#
# Example:
#
-# -> { "execute": "query-acpi-ospm-status" }
-# <- { "return": [ { "device": "d1", "slot": "0", "slot-type": "DIMM", "source": 1, "status": 0},
-# { "slot": "1", "slot-type": "DIMM", "source": 0, "status": 0},
-# { "slot": "2", "slot-type": "DIMM", "source": 0, "status": 0},
-# { "slot": "3", "slot-type": "DIMM", "source": 0, "status": 0}
-# ]}
+# -> { "execute": "query-acpi-ospm-status" }
+# <- { "return": [ { "device": "d1", "slot": "0", "slot-type": "DIMM", "source": 1, "status": 0},
+# { "slot": "1", "slot-type": "DIMM", "source": 0, "status": 0},
+# { "slot": "2", "slot-type": "DIMM", "source": 0, "status": 0},
+# { "slot": "3", "slot-type": "DIMM", "source": 0, "status": 0}
+# ]}
##
{ 'command': 'query-acpi-ospm-status', 'returns': ['ACPIOSTInfo'] }
@@ -133,10 +133,10 @@
#
# Example:
#
-# <- { "event": "ACPI_DEVICE_OST",
-# "data": { "info": { "device": "d1", "slot": "0",
-# "slot-type": "DIMM", "source": 1, "status": 0 } },
-# "timestamp": { "seconds": 1265044230, "microseconds": 450486 } }
+# <- { "event": "ACPI_DEVICE_OST",
+# "data": { "info": { "device": "d1", "slot": "0",
+# "slot-type": "DIMM", "source": 1, "status": 0 } },
+# "timestamp": { "seconds": 1265044230, "microseconds": 450486 } }
##
{ 'event': 'ACPI_DEVICE_OST',
'data': { 'info': 'ACPIOSTInfo' } }
diff --git a/qapi/block-core.json b/qapi/block-core.json
index ca390c5700..22b8634422 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
@@ -196,6 +196,8 @@
##
# @ImageInfoSpecificQCow2Wrapper:
#
+# @data: image information specific to QCOW2
+#
# Since: 1.7
##
{ 'struct': 'ImageInfoSpecificQCow2Wrapper',
@@ -204,6 +206,8 @@
##
# @ImageInfoSpecificVmdkWrapper:
#
+# @data: image information specific to VMDK
+#
# Since: 6.1
##
{ 'struct': 'ImageInfoSpecificVmdkWrapper',
@@ -212,6 +216,8 @@
##
# @ImageInfoSpecificLUKSWrapper:
#
+# @data: image information specific to LUKS
+#
# Since: 2.7
##
{ 'struct': 'ImageInfoSpecificLUKSWrapper',
@@ -223,6 +229,8 @@
##
# @ImageInfoSpecificRbdWrapper:
#
+# @data: image information specific to RBD
+#
# Since: 6.1
##
{ 'struct': 'ImageInfoSpecificRbdWrapper',
@@ -231,6 +239,8 @@
##
# @ImageInfoSpecificFileWrapper:
#
+# @data: image information specific to files
+#
# Since: 8.0
##
{ 'struct': 'ImageInfoSpecificFileWrapper',
@@ -242,6 +252,8 @@
# A discriminated record of image format specific information
# structures.
#
+# @type: block driver name
+#
# Since: 1.7
##
{ 'union': 'ImageInfoSpecific',
@@ -656,9 +668,7 @@
# @bins: list of io request counts corresponding to histogram
# intervals, one more element than @boundaries has. For the
# example above, @bins may be something like [3, 1, 5, 2], and
-# corresponding histogram looks like:
-#
-# ::
+# corresponding histogram looks like::
#
# 5| *
# 4| *
@@ -756,87 +766,87 @@
#
# Example:
#
-# -> { "execute": "query-block" }
-# <- {
-# "return":[
-# {
-# "io-status": "ok",
-# "device":"ide0-hd0",
-# "locked":false,
-# "removable":false,
-# "inserted":{
-# "ro":false,
-# "drv":"qcow2",
-# "encrypted":false,
-# "file":"disks/test.qcow2",
-# "backing_file_depth":1,
-# "bps":1000000,
-# "bps_rd":0,
-# "bps_wr":0,
-# "iops":1000000,
-# "iops_rd":0,
-# "iops_wr":0,
-# "bps_max": 8000000,
-# "bps_rd_max": 0,
-# "bps_wr_max": 0,
-# "iops_max": 0,
-# "iops_rd_max": 0,
-# "iops_wr_max": 0,
-# "iops_size": 0,
-# "detect_zeroes": "on",
-# "write_threshold": 0,
-# "image":{
-# "filename":"disks/test.qcow2",
-# "format":"qcow2",
-# "virtual-size":2048000,
-# "backing_file":"base.qcow2",
-# "full-backing-filename":"disks/base.qcow2",
-# "backing-filename-format":"qcow2",
-# "snapshots":[
-# {
-# "id": "1",
-# "name": "snapshot1",
-# "vm-state-size": 0,
-# "date-sec": 10000200,
-# "date-nsec": 12,
-# "vm-clock-sec": 206,
-# "vm-clock-nsec": 30
-# }
-# ],
-# "backing-image":{
-# "filename":"disks/base.qcow2",
+# -> { "execute": "query-block" }
+# <- {
+# "return":[
+# {
+# "io-status": "ok",
+# "device":"ide0-hd0",
+# "locked":false,
+# "removable":false,
+# "inserted":{
+# "ro":false,
+# "drv":"qcow2",
+# "encrypted":false,
+# "file":"disks/test.qcow2",
+# "backing_file_depth":1,
+# "bps":1000000,
+# "bps_rd":0,
+# "bps_wr":0,
+# "iops":1000000,
+# "iops_rd":0,
+# "iops_wr":0,
+# "bps_max": 8000000,
+# "bps_rd_max": 0,
+# "bps_wr_max": 0,
+# "iops_max": 0,
+# "iops_rd_max": 0,
+# "iops_wr_max": 0,
+# "iops_size": 0,
+# "detect_zeroes": "on",
+# "write_threshold": 0,
+# "image":{
+# "filename":"disks/test.qcow2",
# "format":"qcow2",
-# "virtual-size":2048000
-# }
-# }
-# },
-# "qdev": "ide_disk",
-# "type":"unknown"
-# },
-# {
-# "io-status": "ok",
-# "device":"ide1-cd0",
-# "locked":false,
-# "removable":true,
-# "qdev": "/machine/unattached/device[23]",
-# "tray_open": false,
-# "type":"unknown"
-# },
-# {
-# "device":"floppy0",
-# "locked":false,
-# "removable":true,
-# "qdev": "/machine/unattached/device[20]",
-# "type":"unknown"
-# },
-# {
-# "device":"sd0",
-# "locked":false,
-# "removable":true,
-# "type":"unknown"
-# }
-# ]
-# }
+# "virtual-size":2048000,
+# "backing_file":"base.qcow2",
+# "full-backing-filename":"disks/base.qcow2",
+# "backing-filename-format":"qcow2",
+# "snapshots":[
+# {
+# "id": "1",
+# "name": "snapshot1",
+# "vm-state-size": 0,
+# "date-sec": 10000200,
+# "date-nsec": 12,
+# "vm-clock-sec": 206,
+# "vm-clock-nsec": 30
+# }
+# ],
+# "backing-image":{
+# "filename":"disks/base.qcow2",
+# "format":"qcow2",
+# "virtual-size":2048000
+# }
+# }
+# },
+# "qdev": "ide_disk",
+# "type":"unknown"
+# },
+# {
+# "io-status": "ok",
+# "device":"ide1-cd0",
+# "locked":false,
+# "removable":true,
+# "qdev": "/machine/unattached/device[23]",
+# "tray_open": false,
+# "type":"unknown"
+# },
+# {
+# "device":"floppy0",
+# "locked":false,
+# "removable":true,
+# "qdev": "/machine/unattached/device[20]",
+# "type":"unknown"
+# },
+# {
+# "device":"sd0",
+# "locked":false,
+# "removable":true,
+# "type":"unknown"
+# }
+# ]
+# }
##
{ 'command': 'query-block', 'returns': ['BlockInfo'],
'allow-preconfig': true }
@@ -1094,6 +1104,8 @@
#
# Block driver specific statistics
#
+# @driver: block driver name
+#
# Since: 4.2
##
{ 'union': 'BlockStatsSpecific',
@@ -1158,105 +1170,105 @@
#
# Example:
#
-# -> { "execute": "query-blockstats" }
-# <- {
-# "return":[
-# {
-# "device":"ide0-hd0",
-# "parent":{
-# "stats":{
-# "wr_highest_offset":3686448128,
-# "wr_bytes":9786368,
-# "wr_operations":751,
-# "rd_bytes":122567168,
-# "rd_operations":36772
-# "wr_total_times_ns":313253456
-# "rd_total_times_ns":3465673657
-# "flush_total_times_ns":49653
-# "flush_operations":61,
-# "rd_merged":0,
-# "wr_merged":0,
-# "idle_time_ns":2953431879,
-# "account_invalid":true,
-# "account_failed":false
-# }
-# },
-# "stats":{
-# "wr_highest_offset":2821110784,
-# "wr_bytes":9786368,
-# "wr_operations":692,
-# "rd_bytes":122739200,
-# "rd_operations":36604
-# "flush_operations":51,
-# "wr_total_times_ns":313253456
-# "rd_total_times_ns":3465673657
-# "flush_total_times_ns":49653,
-# "rd_merged":0,
-# "wr_merged":0,
-# "idle_time_ns":2953431879,
-# "account_invalid":true,
-# "account_failed":false
-# },
-# "qdev": "/machine/unattached/device[23]"
-# },
-# {
-# "device":"ide1-cd0",
-# "stats":{
-# "wr_highest_offset":0,
-# "wr_bytes":0,
-# "wr_operations":0,
-# "rd_bytes":0,
-# "rd_operations":0
-# "flush_operations":0,
-# "wr_total_times_ns":0
-# "rd_total_times_ns":0
-# "flush_total_times_ns":0,
-# "rd_merged":0,
-# "wr_merged":0,
-# "account_invalid":false,
-# "account_failed":false
-# },
-# "qdev": "/machine/unattached/device[24]"
-# },
-# {
-# "device":"floppy0",
-# "stats":{
-# "wr_highest_offset":0,
-# "wr_bytes":0,
-# "wr_operations":0,
-# "rd_bytes":0,
-# "rd_operations":0
-# "flush_operations":0,
-# "wr_total_times_ns":0
-# "rd_total_times_ns":0
-# "flush_total_times_ns":0,
-# "rd_merged":0,
-# "wr_merged":0,
-# "account_invalid":false,
-# "account_failed":false
-# },
-# "qdev": "/machine/unattached/device[16]"
-# },
-# {
-# "device":"sd0",
-# "stats":{
-# "wr_highest_offset":0,
-# "wr_bytes":0,
-# "wr_operations":0,
-# "rd_bytes":0,
-# "rd_operations":0
-# "flush_operations":0,
-# "wr_total_times_ns":0
-# "rd_total_times_ns":0
-# "flush_total_times_ns":0,
-# "rd_merged":0,
-# "wr_merged":0,
-# "account_invalid":false,
-# "account_failed":false
-# }
-# }
-# ]
-# }
+# -> { "execute": "query-blockstats" }
+# <- {
+# "return":[
+# {
+# "device":"ide0-hd0",
+# "parent":{
+# "stats":{
+# "wr_highest_offset":3686448128,
+# "wr_bytes":9786368,
+# "wr_operations":751,
+# "rd_bytes":122567168,
+# "rd_operations":36772
+# "wr_total_times_ns":313253456
+# "rd_total_times_ns":3465673657
+# "flush_total_times_ns":49653
+# "flush_operations":61,
+# "rd_merged":0,
+# "wr_merged":0,
+# "idle_time_ns":2953431879,
+# "account_invalid":true,
+# "account_failed":false
+# }
+# },
+# "stats":{
+# "wr_highest_offset":2821110784,
+# "wr_bytes":9786368,
+# "wr_operations":692,
+# "rd_bytes":122739200,
+# "rd_operations":36604
+# "flush_operations":51,
+# "wr_total_times_ns":313253456
+# "rd_total_times_ns":3465673657
+# "flush_total_times_ns":49653,
+# "rd_merged":0,
+# "wr_merged":0,
+# "idle_time_ns":2953431879,
+# "account_invalid":true,
+# "account_failed":false
+# },
+# "qdev": "/machine/unattached/device[23]"
+# },
+# {
+# "device":"ide1-cd0",
+# "stats":{
+# "wr_highest_offset":0,
+# "wr_bytes":0,
+# "wr_operations":0,
+# "rd_bytes":0,
+# "rd_operations":0
+# "flush_operations":0,
+# "wr_total_times_ns":0
+# "rd_total_times_ns":0
+# "flush_total_times_ns":0,
+# "rd_merged":0,
+# "wr_merged":0,
+# "account_invalid":false,
+# "account_failed":false
+# },
+# "qdev": "/machine/unattached/device[24]"
+# },
+# {
+# "device":"floppy0",
+# "stats":{
+# "wr_highest_offset":0,
+# "wr_bytes":0,
+# "wr_operations":0,
+# "rd_bytes":0,
+# "rd_operations":0
+# "flush_operations":0,
+# "wr_total_times_ns":0
+# "rd_total_times_ns":0
+# "flush_total_times_ns":0,
+# "rd_merged":0,
+# "wr_merged":0,
+# "account_invalid":false,
+# "account_failed":false
+# },
+# "qdev": "/machine/unattached/device[16]"
+# },
+# {
+# "device":"sd0",
+# "stats":{
+# "wr_highest_offset":0,
+# "wr_bytes":0,
+# "wr_operations":0,
+# "rd_bytes":0,
+# "rd_operations":0
+# "flush_operations":0,
+# "wr_total_times_ns":0
+# "rd_total_times_ns":0
+# "flush_total_times_ns":0,
+# "rd_merged":0,
+# "wr_merged":0,
+# "account_invalid":false,
+# "account_failed":false
+# }
+# }
+# ]
+# }
##
{ 'command': 'query-blockstats',
'data': { '*query-nodes': 'bool' },
@@ -1361,7 +1373,7 @@
# target, i.e. same data and new writes are done synchronously to
# both.
#
-# Since 8.2
+# Since: 8.2
##
{ 'struct': 'BlockJobInfoMirror',
'data': { 'actively-synced': 'bool' } }
@@ -1452,9 +1464,9 @@
#
# Example:
#
-# -> { "execute": "block_resize",
-# "arguments": { "device": "scratch", "size": 1073741824 } }
-# <- { "return": {} }
+# -> { "execute": "block_resize",
+# "arguments": { "device": "scratch", "size": 1073741824 } }
+# <- { "return": {} }
##
{ 'command': 'block_resize',
'data': { '*device': 'str',
@@ -1670,12 +1682,12 @@
#
# Example:
#
-# -> { "execute": "blockdev-snapshot-sync",
-# "arguments": { "device": "ide-hd0",
-# "snapshot-file":
-# "/some/place/my-image",
-# "format": "qcow2" } }
-# <- { "return": {} }
+# -> { "execute": "blockdev-snapshot-sync",
+# "arguments": { "device": "ide-hd0",
+# "snapshot-file":
+# "/some/place/my-image",
+# "format": "qcow2" } }
+# <- { "return": {} }
##
{ 'command': 'blockdev-snapshot-sync',
'data': 'BlockdevSnapshotSync',
@@ -1703,19 +1715,19 @@
#
# Example:
#
-# -> { "execute": "blockdev-add",
-# "arguments": { "driver": "qcow2",
-# "node-name": "node1534",
-# "file": { "driver": "file",
-# "filename": "hd1.qcow2" },
-# "backing": null } }
+# -> { "execute": "blockdev-add",
+# "arguments": { "driver": "qcow2",
+# "node-name": "node1534",
+# "file": { "driver": "file",
+# "filename": "hd1.qcow2" },
+# "backing": null } }
#
-# <- { "return": {} }
+# <- { "return": {} }
#
-# -> { "execute": "blockdev-snapshot",
-# "arguments": { "node": "ide-hd0",
-# "overlay": "node1534" } }
-# <- { "return": {} }
+# -> { "execute": "blockdev-snapshot",
+# "arguments": { "node": "ide-hd0",
+# "overlay": "node1534" } }
+# <- { "return": {} }
##
{ 'command': 'blockdev-snapshot',
'data': 'BlockdevSnapshot',
@@ -1810,6 +1822,11 @@
# Care should be taken when specifying the string, to specify a
# valid filename or protocol. (Since 2.1)
#
+# @backing-mask-protocol: If true, replace any protocol mentioned in the
+# 'backing file format' with 'raw', rather than storing the protocol
+# name as the backing format. Can be used even when no image header
+# will be updated (default false; since 9.0).
+#
# @speed: the maximum speed, in bytes per second
#
# @on-error: the action to take on an error. 'ignore' means that the
@@ -1846,17 +1863,18 @@
#
# Example:
#
-# -> { "execute": "block-commit",
-# "arguments": { "device": "virtio0",
-# "top": "/tmp/snap1.qcow2" } }
-# <- { "return": {} }
+# -> { "execute": "block-commit",
+# "arguments": { "device": "virtio0",
+# "top": "/tmp/snap1.qcow2" } }
+# <- { "return": {} }
##
{ 'command': 'block-commit',
'data': { '*job-id': 'str', 'device': 'str', '*base-node': 'str',
'*base': { 'type': 'str', 'features': [ 'deprecated' ] },
'*top-node': 'str',
'*top': { 'type': 'str', 'features': [ 'deprecated' ] },
- '*backing-file': 'str', '*speed': 'int',
+ '*backing-file': 'str', '*backing-mask-protocol': 'bool',
+ '*speed': 'int',
'*on-error': 'BlockdevOnError',
'*filter-node-name': 'str',
'*auto-finalize': 'bool', '*auto-dismiss': 'bool' },
@@ -1884,11 +1902,11 @@
#
# Example:
#
-# -> { "execute": "drive-backup",
-# "arguments": { "device": "drive0",
-# "sync": "full",
-# "target": "backup.img" } }
-# <- { "return": {} }
+# -> { "execute": "drive-backup",
+# "arguments": { "device": "drive0",
+# "sync": "full",
+# "target": "backup.img" } }
+# <- { "return": {} }
##
{ 'command': 'drive-backup', 'boxed': true,
'data': 'DriveBackup', 'features': ['deprecated'],
@@ -1911,11 +1929,11 @@
#
# Example:
#
-# -> { "execute": "blockdev-backup",
-# "arguments": { "device": "src-id",
-# "sync": "full",
-# "target": "tgt-id" } }
-# <- { "return": {} }
+# -> { "execute": "blockdev-backup",
+# "arguments": { "device": "src-id",
+# "sync": "full",
+# "target": "tgt-id" } }
+# <- { "return": {} }
##
{ 'command': 'blockdev-backup', 'boxed': true,
'data': 'BlockdevBackup',
@@ -1935,52 +1953,52 @@
#
# Example:
#
-# -> { "execute": "query-named-block-nodes" }
-# <- { "return": [ { "ro":false,
-# "drv":"qcow2",
-# "encrypted":false,
-# "file":"disks/test.qcow2",
-# "node-name": "my-node",
-# "backing_file_depth":1,
-# "detect_zeroes":"off",
-# "bps":1000000,
-# "bps_rd":0,
-# "bps_wr":0,
-# "iops":1000000,
-# "iops_rd":0,
-# "iops_wr":0,
-# "bps_max": 8000000,
-# "bps_rd_max": 0,
-# "bps_wr_max": 0,
-# "iops_max": 0,
-# "iops_rd_max": 0,
-# "iops_wr_max": 0,
-# "iops_size": 0,
-# "write_threshold": 0,
-# "image":{
-# "filename":"disks/test.qcow2",
-# "format":"qcow2",
-# "virtual-size":2048000,
-# "backing_file":"base.qcow2",
-# "full-backing-filename":"disks/base.qcow2",
-# "backing-filename-format":"qcow2",
-# "snapshots":[
-# {
-# "id": "1",
-# "name": "snapshot1",
-# "vm-state-size": 0,
-# "date-sec": 10000200,
-# "date-nsec": 12,
-# "vm-clock-sec": 206,
-# "vm-clock-nsec": 30
-# }
-# ],
-# "backing-image":{
-# "filename":"disks/base.qcow2",
+# -> { "execute": "query-named-block-nodes" }
+# <- { "return": [ { "ro":false,
+# "drv":"qcow2",
+# "encrypted":false,
+# "file":"disks/test.qcow2",
+# "node-name": "my-node",
+# "backing_file_depth":1,
+# "detect_zeroes":"off",
+# "bps":1000000,
+# "bps_rd":0,
+# "bps_wr":0,
+# "iops":1000000,
+# "iops_rd":0,
+# "iops_wr":0,
+# "bps_max": 8000000,
+# "bps_rd_max": 0,
+# "bps_wr_max": 0,
+# "iops_max": 0,
+# "iops_rd_max": 0,
+# "iops_wr_max": 0,
+# "iops_size": 0,
+# "write_threshold": 0,
+# "image":{
+# "filename":"disks/test.qcow2",
# "format":"qcow2",
-# "virtual-size":2048000
-# }
-# } } ] }
+# "virtual-size":2048000,
+# "backing_file":"base.qcow2",
+# "full-backing-filename":"disks/base.qcow2",
+# "backing-filename-format":"qcow2",
+# "snapshots":[
+# {
+# "id": "1",
+# "name": "snapshot1",
+# "vm-state-size": 0,
+# "date-sec": 10000200,
+# "date-nsec": 12,
+# "vm-clock-sec": 206,
+# "vm-clock-nsec": 30
+# }
+# ],
+# "backing-image":{
+# "filename":"disks/base.qcow2",
+# "format":"qcow2",
+# "virtual-size":2048000
+# }
+# } } ] }
##
{ 'command': 'query-named-block-nodes',
'returns': [ 'BlockDeviceInfo' ],
@@ -2117,12 +2135,12 @@
#
# Example:
#
-# -> { "execute": "drive-mirror",
-# "arguments": { "device": "ide-hd0",
-# "target": "/some/place/my-image",
-# "sync": "full",
-# "format": "qcow2" } }
-# <- { "return": {} }
+# -> { "execute": "drive-mirror",
+# "arguments": { "device": "ide-hd0",
+# "target": "/some/place/my-image",
+# "sync": "full",
+# "format": "qcow2" } }
+# <- { "return": {} }
##
{ 'command': 'drive-mirror', 'boxed': true,
'data': 'DriveMirror',
@@ -2295,9 +2313,9 @@
#
# Example:
#
-# -> { "execute": "block-dirty-bitmap-add",
-# "arguments": { "node": "drive0", "name": "bitmap0" } }
-# <- { "return": {} }
+# -> { "execute": "block-dirty-bitmap-add",
+# "arguments": { "node": "drive0", "name": "bitmap0" } }
+# <- { "return": {} }
##
{ 'command': 'block-dirty-bitmap-add',
'data': 'BlockDirtyBitmapAdd',
@@ -2320,9 +2338,9 @@
#
# Example:
#
-# -> { "execute": "block-dirty-bitmap-remove",
-# "arguments": { "node": "drive0", "name": "bitmap0" } }
-# <- { "return": {} }
+# -> { "execute": "block-dirty-bitmap-remove",
+# "arguments": { "node": "drive0", "name": "bitmap0" } }
+# <- { "return": {} }
##
{ 'command': 'block-dirty-bitmap-remove',
'data': 'BlockDirtyBitmap',
@@ -2344,9 +2362,9 @@
#
# Example:
#
-# -> { "execute": "block-dirty-bitmap-clear",
-# "arguments": { "node": "drive0", "name": "bitmap0" } }
-# <- { "return": {} }
+# -> { "execute": "block-dirty-bitmap-clear",
+# "arguments": { "node": "drive0", "name": "bitmap0" } }
+# <- { "return": {} }
##
{ 'command': 'block-dirty-bitmap-clear',
'data': 'BlockDirtyBitmap',
@@ -2366,9 +2384,9 @@
#
# Example:
#
-# -> { "execute": "block-dirty-bitmap-enable",
-# "arguments": { "node": "drive0", "name": "bitmap0" } }
-# <- { "return": {} }
+# -> { "execute": "block-dirty-bitmap-enable",
+# "arguments": { "node": "drive0", "name": "bitmap0" } }
+# <- { "return": {} }
##
{ 'command': 'block-dirty-bitmap-enable',
'data': 'BlockDirtyBitmap',
@@ -2388,9 +2406,9 @@
#
# Example:
#
-# -> { "execute": "block-dirty-bitmap-disable",
-# "arguments": { "node": "drive0", "name": "bitmap0" } }
-# <- { "return": {} }
+# -> { "execute": "block-dirty-bitmap-disable",
+# "arguments": { "node": "drive0", "name": "bitmap0" } }
+# <- { "return": {} }
##
{ 'command': 'block-dirty-bitmap-disable',
'data': 'BlockDirtyBitmap',
@@ -2421,10 +2439,10 @@
#
# Example:
#
-# -> { "execute": "block-dirty-bitmap-merge",
-# "arguments": { "node": "drive0", "target": "bitmap0",
-# "bitmaps": ["bitmap1"] } }
-# <- { "return": {} }
+# -> { "execute": "block-dirty-bitmap-merge",
+# "arguments": { "node": "drive0", "target": "bitmap0",
+# "bitmaps": ["bitmap1"] } }
+# <- { "return": {} }
##
{ 'command': 'block-dirty-bitmap-merge',
'data': 'BlockDirtyBitmapMerge',
@@ -2530,11 +2548,11 @@
#
# Example:
#
-# -> { "execute": "blockdev-mirror",
-# "arguments": { "device": "ide-hd0",
-# "target": "target0",
-# "sync": "full" } }
-# <- { "return": {} }
+# -> { "execute": "blockdev-mirror",
+# "arguments": { "device": "ide-hd0",
+# "target": "target0",
+# "sync": "full" } }
+# <- { "return": {} }
##
{ 'command': 'blockdev-mirror',
'data': { '*job-id': 'str', 'device': 'str', 'target': 'str',
@@ -2820,6 +2838,11 @@
# Care should be taken when specifying the string, to specify a
# valid filename or protocol. (Since 2.1)
#
+# @backing-mask-protocol: If true, replace any protocol mentioned in the
+# 'backing file format' with 'raw', rather than storing the protocol
+# name as the backing format. Can be used even when no image header
+# will be updated (default false; since 9.0).
+#
# @speed: the maximum speed, in bytes per second
#
# @on-error: the action to take on an error (default report). 'stop'
@@ -2851,14 +2874,16 @@
#
# Example:
#
-# -> { "execute": "block-stream",
-# "arguments": { "device": "virtio0",
-# "base": "/tmp/master.qcow2" } }
-# <- { "return": {} }
+# -> { "execute": "block-stream",
+# "arguments": { "device": "virtio0",
+# "base": "/tmp/master.qcow2" } }
+# <- { "return": {} }
##
{ 'command': 'block-stream',
'data': { '*job-id': 'str', 'device': 'str', '*base': 'str',
- '*base-node': 'str', '*backing-file': 'str', '*bottom': 'str',
+ '*base-node': 'str', '*backing-file': 'str',
+ '*backing-mask-protocol': 'bool',
+ '*bottom': 'str',
'*speed': 'int', '*on-error': 'BlockdevOnError',
'*filter-node-name': 'str',
'*auto-finalize': 'bool', '*auto-dismiss': 'bool' },
@@ -3080,7 +3105,7 @@
#
# @type: The job type
#
-# Since 8.2
+# Since: 8.2
##
{ 'union': 'BlockJobChangeOptions',
'base': { 'id': 'str', 'type': 'JobType' },
@@ -3352,11 +3377,14 @@
# decryption key (since 2.6). Mandatory except when doing a
# metadata-only probe of the image.
#
+# @header: block device holding a detached LUKS header. (since 9.0)
+#
# Since: 2.9
##
{ 'struct': 'BlockdevOptionsLUKS',
'base': 'BlockdevOptionsGenericFormat',
- 'data': { '*key-secret': 'str' } }
+ 'data': { '*key-secret': 'str',
+ '*header': 'BlockdevRef'} }
##
# @BlockdevOptionsGenericCOWFormat:
@@ -3451,6 +3479,8 @@
##
# @BlockdevQcowEncryption:
#
+# @format: encryption format
+#
# Since: 2.10
##
{ 'union': 'BlockdevQcowEncryption',
@@ -3485,6 +3515,8 @@
##
# @BlockdevQcow2Encryption:
#
+# @format: encryption format
+#
# Since: 2.10
##
{ 'union': 'BlockdevQcow2Encryption',
@@ -3635,6 +3667,8 @@
##
# @SshHostKeyCheck:
#
+# @mode: How to check the host key
+#
# Since: 2.12
##
{ 'union': 'SshHostKeyCheck',
@@ -4057,6 +4091,8 @@
##
# @BlockdevOptionsIscsi:
#
+# Driver specific block device options for iscsi
+#
# @transport: The iscsi transport type
#
# @portal: The address of the iscsi portal
@@ -4081,8 +4117,6 @@
# @timeout: Timeout in seconds after which a request will timeout. 0
# means no timeout and is the default.
#
-# Driver specific block device options for iscsi
-#
# Since: 2.9
##
{ 'struct': 'BlockdevOptionsIscsi',
@@ -4204,6 +4238,8 @@
##
# @RbdEncryptionCreateOptions:
#
+# @format: Encryption format.
+#
# Since: 6.1
##
{ 'union': 'RbdEncryptionCreateOptions',
@@ -4652,8 +4688,6 @@
# @force-share: force share all permission on added nodes. Requires
# read-only=true. (Since 2.10)
#
-# Remaining options are determined by the block driver.
-#
# Since: 2.9
##
{ 'union': 'BlockdevOptions',
@@ -4771,41 +4805,41 @@
#
# Examples:
#
-# -> { "execute": "blockdev-add",
-# "arguments": {
-# "driver": "qcow2",
-# "node-name": "test1",
-# "file": {
-# "driver": "file",
-# "filename": "test.qcow2"
-# }
-# }
-# }
-# <- { "return": {} }
-#
-# -> { "execute": "blockdev-add",
-# "arguments": {
-# "driver": "qcow2",
-# "node-name": "node0",
-# "discard": "unmap",
-# "cache": {
-# "direct": true
-# },
-# "file": {
-# "driver": "file",
-# "filename": "/tmp/test.qcow2"
-# },
-# "backing": {
-# "driver": "raw",
+# -> { "execute": "blockdev-add",
+# "arguments": {
+# "driver": "qcow2",
+# "node-name": "test1",
# "file": {
+# "driver": "file",
+# "filename": "test.qcow2"
+# }
+# }
+# }
+# <- { "return": {} }
+#
+# -> { "execute": "blockdev-add",
+# "arguments": {
+# "driver": "qcow2",
+# "node-name": "node0",
+# "discard": "unmap",
+# "cache": {
+# "direct": true
+# },
+# "file": {
# "driver": "file",
-# "filename": "/dev/fdset/4"
+# "filename": "/tmp/test.qcow2"
+# },
+# "backing": {
+# "driver": "raw",
+# "file": {
+# "driver": "file",
+# "filename": "/dev/fdset/4"
+# }
# }
# }
-# }
-# }
+# }
#
-# <- { "return": {} }
+# <- { "return": {} }
##
{ 'command': 'blockdev-add', 'data': 'BlockdevOptions', 'boxed': true,
'allow-preconfig': true }
@@ -4869,22 +4903,22 @@
#
# Example:
#
-# -> { "execute": "blockdev-add",
-# "arguments": {
-# "driver": "qcow2",
-# "node-name": "node0",
-# "file": {
-# "driver": "file",
-# "filename": "test.qcow2"
-# }
-# }
-# }
-# <- { "return": {} }
+# -> { "execute": "blockdev-add",
+# "arguments": {
+# "driver": "qcow2",
+# "node-name": "node0",
+# "file": {
+# "driver": "file",
+# "filename": "test.qcow2"
+# }
+# }
+# }
+# <- { "return": {} }
#
-# -> { "execute": "blockdev-del",
-# "arguments": { "node-name": "node0" }
-# }
-# <- { "return": {} }
+# -> { "execute": "blockdev-del",
+# "arguments": { "node-name": "node0" }
+# }
+# <- { "return": {} }
##
{ 'command': 'blockdev-del', 'data': { 'node-name': 'str' },
'allow-preconfig': true }
@@ -4941,7 +4975,10 @@
#
# Driver specific image creation options for LUKS.
#
-# @file: Node to create the image format on
+# @file: Node to create the image format on, mandatory except when
+# 'preallocation' is not requested
+#
+# @header: Block device holding a detached LUKS header. (since 9.0)
#
# @size: Size of the virtual disk in bytes
#
@@ -4952,7 +4989,8 @@
##
{ 'struct': 'BlockdevCreateOptionsLUKS',
'base': 'QCryptoBlockCreateOptionsLUKS',
- 'data': { 'file': 'BlockdevRef',
+ 'data': { '*file': 'BlockdevRef',
+ '*header': 'BlockdevRef',
'size': 'size',
'*preallocation': 'PreallocMode' } }
@@ -5514,10 +5552,10 @@
#
# Example:
#
-# <- { "event": "BLOCK_IMAGE_CORRUPTED",
-# "data": { "device": "", "node-name": "drive", "fatal": false,
-# "msg": "L2 table offset 0x2a2a2a00 unaligned (L1 index: 0)" },
-# "timestamp": { "seconds": 1648243240, "microseconds": 906060 } }
+# <- { "event": "BLOCK_IMAGE_CORRUPTED",
+# "data": { "device": "", "node-name": "drive", "fatal": false,
+# "msg": "L2 table offset 0x2a2a2a00 unaligned (L1 index: 0)" },
+# "timestamp": { "seconds": 1648243240, "microseconds": 906060 } }
#
# Since: 1.7
##
@@ -5563,13 +5601,13 @@
#
# Example:
#
-# <- { "event": "BLOCK_IO_ERROR",
-# "data": { "device": "ide0-hd1",
-# "node-name": "#block212",
-# "operation": "write",
-# "action": "stop",
-# "reason": "No space left on device" },
-# "timestamp": { "seconds": 1265044230, "microseconds": 450486 } }
+# <- { "event": "BLOCK_IO_ERROR",
+# "data": { "device": "ide0-hd1",
+# "node-name": "#block212",
+# "operation": "write",
+# "action": "stop",
+# "reason": "No space left on device" },
+# "timestamp": { "seconds": 1265044230, "microseconds": 450486 } }
##
{ 'event': 'BLOCK_IO_ERROR',
'data': { 'device': 'str', '*node-name': 'str',
@@ -5603,11 +5641,11 @@
#
# Example:
#
-# <- { "event": "BLOCK_JOB_COMPLETED",
-# "data": { "type": "stream", "device": "virtio-disk0",
-# "len": 10737418240, "offset": 10737418240,
-# "speed": 0 },
-# "timestamp": { "seconds": 1267061043, "microseconds": 959568 } }
+# <- { "event": "BLOCK_JOB_COMPLETED",
+# "data": { "type": "stream", "device": "virtio-disk0",
+# "len": 10737418240, "offset": 10737418240,
+# "speed": 0 },
+# "timestamp": { "seconds": 1267061043, "microseconds": 959568 } }
##
{ 'event': 'BLOCK_JOB_COMPLETED',
'data': { 'type' : 'JobType',
@@ -5638,11 +5676,11 @@
#
# Example:
#
-# <- { "event": "BLOCK_JOB_CANCELLED",
-# "data": { "type": "stream", "device": "virtio-disk0",
-# "len": 10737418240, "offset": 134217728,
-# "speed": 0 },
-# "timestamp": { "seconds": 1267061043, "microseconds": 959568 } }
+# <- { "event": "BLOCK_JOB_CANCELLED",
+# "data": { "type": "stream", "device": "virtio-disk0",
+# "len": 10737418240, "offset": 134217728,
+# "speed": 0 },
+# "timestamp": { "seconds": 1267061043, "microseconds": 959568 } }
##
{ 'event': 'BLOCK_JOB_CANCELLED',
'data': { 'type' : 'JobType',
@@ -5667,11 +5705,11 @@
#
# Example:
#
-# <- { "event": "BLOCK_JOB_ERROR",
-# "data": { "device": "ide0-hd1",
-# "operation": "write",
-# "action": "stop" },
-# "timestamp": { "seconds": 1265044230, "microseconds": 450486 } }
+# <- { "event": "BLOCK_JOB_ERROR",
+# "data": { "device": "ide0-hd1",
+# "operation": "write",
+# "action": "stop" },
+# "timestamp": { "seconds": 1265044230, "microseconds": 450486 } }
##
{ 'event': 'BLOCK_JOB_ERROR',
'data': { 'device' : 'str',
@@ -5702,10 +5740,10 @@
#
# Example:
#
-# <- { "event": "BLOCK_JOB_READY",
-# "data": { "device": "drive0", "type": "mirror", "speed": 0,
-# "len": 2097152, "offset": 2097152 },
-# "timestamp": { "seconds": 1265044230, "microseconds": 450486 } }
+# <- { "event": "BLOCK_JOB_READY",
+# "data": { "device": "drive0", "type": "mirror", "speed": 0,
+# "len": 2097152, "offset": 2097152 },
+# "timestamp": { "seconds": 1265044230, "microseconds": 450486 } }
##
{ 'event': 'BLOCK_JOB_READY',
'data': { 'type' : 'JobType',
@@ -5730,9 +5768,9 @@
#
# Example:
#
-# <- { "event": "BLOCK_JOB_PENDING",
-# "data": { "type": "mirror", "id": "backup_1" },
-# "timestamp": { "seconds": 1265044230, "microseconds": 450486 } }
+# <- { "event": "BLOCK_JOB_PENDING",
+# "data": { "type": "mirror", "id": "backup_1" },
+# "timestamp": { "seconds": 1265044230, "microseconds": 450486 } }
##
{ 'event': 'BLOCK_JOB_PENDING',
'data': { 'type' : 'JobType',
@@ -5804,10 +5842,10 @@
#
# Example:
#
-# -> { "execute": "block-set-write-threshold",
-# "arguments": { "node-name": "mydev",
-# "write-threshold": 17179869184 } }
-# <- { "return": {} }
+# -> { "execute": "block-set-write-threshold",
+# "arguments": { "node-name": "mydev",
+# "write-threshold": 17179869184 } }
+# <- { "return": {} }
##
{ 'command': 'block-set-write-threshold',
'data': { 'node-name': 'str', 'write-threshold': 'uint64' },
@@ -5849,26 +5887,26 @@
#
# Examples:
#
-# 1. Add a new node to a quorum
+# 1. Add a new node to a quorum
#
-# -> { "execute": "blockdev-add",
-# "arguments": {
-# "driver": "raw",
-# "node-name": "new_node",
-# "file": { "driver": "file",
-# "filename": "test.raw" } } }
-# <- { "return": {} }
-# -> { "execute": "x-blockdev-change",
-# "arguments": { "parent": "disk1",
-# "node": "new_node" } }
-# <- { "return": {} }
+# -> { "execute": "blockdev-add",
+# "arguments": {
+# "driver": "raw",
+# "node-name": "new_node",
+# "file": { "driver": "file",
+# "filename": "test.raw" } } }
+# <- { "return": {} }
+# -> { "execute": "x-blockdev-change",
+# "arguments": { "parent": "disk1",
+# "node": "new_node" } }
+# <- { "return": {} }
#
-# 2. Delete a quorum's node
+# 2. Delete a quorum's node
#
-# -> { "execute": "x-blockdev-change",
-# "arguments": { "parent": "disk1",
-# "child": "children.1" } }
-# <- { "return": {} }
+# -> { "execute": "x-blockdev-change",
+# "arguments": { "parent": "disk1",
+# "child": "children.1" } }
+# <- { "return": {} }
##
{ 'command': 'x-blockdev-change',
'data' : { 'parent': 'str',
@@ -5901,19 +5939,19 @@
#
# Examples:
#
-# 1. Move a node into an IOThread
+# 1. Move a node into an IOThread
#
-# -> { "execute": "x-blockdev-set-iothread",
-# "arguments": { "node-name": "disk1",
-# "iothread": "iothread0" } }
-# <- { "return": {} }
+# -> { "execute": "x-blockdev-set-iothread",
+# "arguments": { "node-name": "disk1",
+# "iothread": "iothread0" } }
+# <- { "return": {} }
#
-# 2. Move a node into the main loop
+# 2. Move a node into the main loop
#
-# -> { "execute": "x-blockdev-set-iothread",
-# "arguments": { "node-name": "disk1",
-# "iothread": null } }
-# <- { "return": {} }
+# -> { "execute": "x-blockdev-set-iothread",
+# "arguments": { "node-name": "disk1",
+# "iothread": null } }
+# <- { "return": {} }
##
{ 'command': 'x-blockdev-set-iothread',
'data' : { 'node-name': 'str',
@@ -5955,9 +5993,9 @@
#
# Example:
#
-# <- { "event": "QUORUM_FAILURE",
-# "data": { "reference": "usr1", "sector-num": 345435, "sectors-count": 5 },
-# "timestamp": { "seconds": 1344522075, "microseconds": 745528 } }
+# <- { "event": "QUORUM_FAILURE",
+# "data": { "reference": "usr1", "sector-num": 345435, "sectors-count": 5 },
+# "timestamp": { "seconds": 1344522075, "microseconds": 745528 } }
##
{ 'event': 'QUORUM_FAILURE',
'data': { 'reference': 'str', 'sector-num': 'int', 'sectors-count': 'int' } }
@@ -5986,19 +6024,19 @@
#
# Examples:
#
-# 1. Read operation
+# 1. Read operation
#
-# <- { "event": "QUORUM_REPORT_BAD",
-# "data": { "node-name": "node0", "sector-num": 345435, "sectors-count": 5,
-# "type": "read" },
-# "timestamp": { "seconds": 1344522075, "microseconds": 745528 } }
+# <- { "event": "QUORUM_REPORT_BAD",
+# "data": { "node-name": "node0", "sector-num": 345435, "sectors-count": 5,
+# "type": "read" },
+# "timestamp": { "seconds": 1344522075, "microseconds": 745528 } }
#
-# 2. Flush operation
+# 2. Flush operation
#
-# <- { "event": "QUORUM_REPORT_BAD",
-# "data": { "node-name": "node0", "sector-num": 0, "sectors-count": 2097120,
-# "type": "flush", "error": "Broken pipe" },
-# "timestamp": { "seconds": 1456406829, "microseconds": 291763 } }
+# <- { "event": "QUORUM_REPORT_BAD",
+# "data": { "node-name": "node0", "sector-num": 0, "sectors-count": 2097120,
+# "type": "flush", "error": "Broken pipe" },
+# "timestamp": { "seconds": 1456406829, "microseconds": 291763 } }
##
{ 'event': 'QUORUM_REPORT_BAD',
'data': { 'type': 'QuorumOpType', '*error': 'str', 'node-name': 'str',
@@ -6044,11 +6082,11 @@
#
# Example:
#
-# -> { "execute": "blockdev-snapshot-internal-sync",
-# "arguments": { "device": "ide-hd0",
-# "name": "snapshot0" }
-# }
-# <- { "return": {} }
+# -> { "execute": "blockdev-snapshot-internal-sync",
+# "arguments": { "device": "ide-hd0",
+# "name": "snapshot0" }
+# }
+# <- { "return": {} }
##
{ 'command': 'blockdev-snapshot-internal-sync',
'data': 'BlockdevSnapshotInternal',
@@ -6081,21 +6119,21 @@
#
# Example:
#
-# -> { "execute": "blockdev-snapshot-delete-internal-sync",
-# "arguments": { "device": "ide-hd0",
-# "name": "snapshot0" }
-# }
-# <- { "return": {
-# "id": "1",
-# "name": "snapshot0",
-# "vm-state-size": 0,
-# "date-sec": 1000012,
-# "date-nsec": 10,
-# "vm-clock-sec": 100,
-# "vm-clock-nsec": 20,
-# "icount": 220414
-# }
-# }
+# -> { "execute": "blockdev-snapshot-delete-internal-sync",
+# "arguments": { "device": "ide-hd0",
+# "name": "snapshot0" }
+# }
+# <- { "return": {
+# "id": "1",
+# "name": "snapshot0",
+# "vm-state-size": 0,
+# "date-sec": 1000012,
+# "date-nsec": 10,
+# "vm-clock-sec": 100,
+# "vm-clock-nsec": 20,
+# "icount": 220414
+# }
+# }
##
{ 'command': 'blockdev-snapshot-delete-internal-sync',
'data': { 'device': 'str', '*id': 'str', '*name': 'str'},
diff --git a/qapi/block-export.json b/qapi/block-export.json
index 7874a49ba7..d9bd376b48 100644
--- a/qapi/block-export.json
+++ b/qapi/block-export.json
@@ -266,13 +266,14 @@
#
# @hard: Drop all connections immediately and remove export.
#
-# Potential additional modes to be added in the future:
+# TODO: Potential additional modes to be added in the future:
#
-# hide: Just hide export from new clients, leave existing connections
-# as is. Remove export after all clients are disconnected.
+# - hide: Just hide export from new clients, leave existing
+# connections as is. Remove export after all clients are
+# disconnected.
#
-# soft: Hide export from new clients, answer with ESHUTDOWN for all
-# further requests from existing clients.
+# - soft: Hide export from new clients, answer with ESHUTDOWN for
+# all further requests from existing clients.
#
# Since: 2.12
##
@@ -345,6 +346,8 @@
# Describes a block export, i.e. how single node should be exported on
# an external interface.
#
+# @type: Block export type
+#
# @id: A unique identifier for the block export (across all export
# types)
#
diff --git a/qapi/block.json b/qapi/block.json
index 998008cfa8..79a0bcc208 100644
--- a/qapi/block.json
+++ b/qapi/block.json
@@ -120,8 +120,8 @@
#
# Example:
#
-# -> { "execute": "eject", "arguments": { "id": "ide1-0-1" } }
-# <- { "return": {} }
+# -> { "execute": "eject", "arguments": { "id": "ide1-0-1" } }
+# <- { "return": {} }
##
{ 'command': 'eject',
'data': { '*device': { 'type': 'str', 'features': [ 'deprecated' ] },
@@ -164,17 +164,17 @@
#
# Example:
#
-# -> { "execute": "blockdev-open-tray",
-# "arguments": { "id": "ide0-1-0" } }
+# -> { "execute": "blockdev-open-tray",
+# "arguments": { "id": "ide0-1-0" } }
#
-# <- { "timestamp": { "seconds": 1418751016,
-# "microseconds": 716996 },
-# "event": "DEVICE_TRAY_MOVED",
-# "data": { "device": "ide1-cd0",
-# "id": "ide0-1-0",
-# "tray-open": true } }
+# <- { "timestamp": { "seconds": 1418751016,
+# "microseconds": 716996 },
+# "event": "DEVICE_TRAY_MOVED",
+# "data": { "device": "ide1-cd0",
+# "id": "ide0-1-0",
+# "tray-open": true } }
#
-# <- { "return": {} }
+# <- { "return": {} }
##
{ 'command': 'blockdev-open-tray',
'data': { '*device': { 'type': 'str', 'features': [ 'deprecated' ] },
@@ -202,17 +202,17 @@
#
# Example:
#
-# -> { "execute": "blockdev-close-tray",
-# "arguments": { "id": "ide0-1-0" } }
+# -> { "execute": "blockdev-close-tray",
+# "arguments": { "id": "ide0-1-0" } }
#
-# <- { "timestamp": { "seconds": 1418751345,
-# "microseconds": 272147 },
-# "event": "DEVICE_TRAY_MOVED",
-# "data": { "device": "ide1-cd0",
-# "id": "ide0-1-0",
-# "tray-open": false } }
+# <- { "timestamp": { "seconds": 1418751345,
+# "microseconds": 272147 },
+# "event": "DEVICE_TRAY_MOVED",
+# "data": { "device": "ide1-cd0",
+# "id": "ide0-1-0",
+# "tray-open": false } }
#
-# <- { "return": {} }
+# <- { "return": {} }
##
{ 'command': 'blockdev-close-tray',
'data': { '*device': { 'type': 'str', 'features': [ 'deprecated' ] },
@@ -234,28 +234,28 @@
#
# Example:
#
-# -> { "execute": "blockdev-remove-medium",
-# "arguments": { "id": "ide0-1-0" } }
+# -> { "execute": "blockdev-remove-medium",
+# "arguments": { "id": "ide0-1-0" } }
#
-# <- { "error": { "class": "GenericError",
-# "desc": "Tray of device 'ide0-1-0' is not open" } }
+# <- { "error": { "class": "GenericError",
+# "desc": "Tray of device 'ide0-1-0' is not open" } }
#
-# -> { "execute": "blockdev-open-tray",
-# "arguments": { "id": "ide0-1-0" } }
+# -> { "execute": "blockdev-open-tray",
+# "arguments": { "id": "ide0-1-0" } }
#
-# <- { "timestamp": { "seconds": 1418751627,
-# "microseconds": 549958 },
-# "event": "DEVICE_TRAY_MOVED",
-# "data": { "device": "ide1-cd0",
-# "id": "ide0-1-0",
-# "tray-open": true } }
+# <- { "timestamp": { "seconds": 1418751627,
+# "microseconds": 549958 },
+# "event": "DEVICE_TRAY_MOVED",
+# "data": { "device": "ide1-cd0",
+# "id": "ide0-1-0",
+# "tray-open": true } }
#
-# <- { "return": {} }
+# <- { "return": {} }
#
-# -> { "execute": "blockdev-remove-medium",
-# "arguments": { "id": "ide0-1-0" } }
+# -> { "execute": "blockdev-remove-medium",
+# "arguments": { "id": "ide0-1-0" } }
#
-# <- { "return": {} }
+# <- { "return": {} }
##
{ 'command': 'blockdev-remove-medium',
'data': { 'id': 'str' } }
@@ -275,19 +275,19 @@
#
# Example:
#
-# -> { "execute": "blockdev-add",
-# "arguments": {
-# "node-name": "node0",
-# "driver": "raw",
-# "file": { "driver": "file",
-# "filename": "fedora.iso" } } }
-# <- { "return": {} }
+# -> { "execute": "blockdev-add",
+# "arguments": {
+# "node-name": "node0",
+# "driver": "raw",
+# "file": { "driver": "file",
+# "filename": "fedora.iso" } } }
+# <- { "return": {} }
#
-# -> { "execute": "blockdev-insert-medium",
-# "arguments": { "id": "ide0-1-0",
-# "node-name": "node0" } }
+# -> { "execute": "blockdev-insert-medium",
+# "arguments": { "id": "ide0-1-0",
+# "node-name": "node0" } }
#
-# <- { "return": {} }
+# <- { "return": {} }
##
{ 'command': 'blockdev-insert-medium',
'data': { 'id': 'str',
@@ -345,33 +345,33 @@
#
# Examples:
#
-# 1. Change a removable medium
+# 1. Change a removable medium
#
-# -> { "execute": "blockdev-change-medium",
-# "arguments": { "id": "ide0-1-0",
-# "filename": "/srv/images/Fedora-12-x86_64-DVD.iso",
-# "format": "raw" } }
-# <- { "return": {} }
+# -> { "execute": "blockdev-change-medium",
+# "arguments": { "id": "ide0-1-0",
+# "filename": "/srv/images/Fedora-12-x86_64-DVD.iso",
+# "format": "raw" } }
+# <- { "return": {} }
#
-# 2. Load a read-only medium into a writable drive
+# 2. Load a read-only medium into a writable drive
#
-# -> { "execute": "blockdev-change-medium",
-# "arguments": { "id": "floppyA",
-# "filename": "/srv/images/ro.img",
-# "format": "raw",
-# "read-only-mode": "retain" } }
+# -> { "execute": "blockdev-change-medium",
+# "arguments": { "id": "floppyA",
+# "filename": "/srv/images/ro.img",
+# "format": "raw",
+# "read-only-mode": "retain" } }
#
-# <- { "error":
-# { "class": "GenericError",
-# "desc": "Could not open '/srv/images/ro.img': Permission denied" } }
+# <- { "error":
+# { "class": "GenericError",
+# "desc": "Could not open '/srv/images/ro.img': Permission denied" } }
#
-# -> { "execute": "blockdev-change-medium",
-# "arguments": { "id": "floppyA",
-# "filename": "/srv/images/ro.img",
-# "format": "raw",
-# "read-only-mode": "read-only" } }
+# -> { "execute": "blockdev-change-medium",
+# "arguments": { "id": "floppyA",
+# "filename": "/srv/images/ro.img",
+# "format": "raw",
+# "read-only-mode": "read-only" } }
#
-# <- { "return": {} }
+# <- { "return": {} }
##
{ 'command': 'blockdev-change-medium',
'data': { '*device': { 'type': 'str', 'features': [ 'deprecated' ] },
@@ -400,12 +400,12 @@
#
# Example:
#
-# <- { "event": "DEVICE_TRAY_MOVED",
-# "data": { "device": "ide1-cd0",
-# "id": "/machine/unattached/device[22]",
-# "tray-open": true
-# },
-# "timestamp": { "seconds": 1265044230, "microseconds": 450486 } }
+# <- { "event": "DEVICE_TRAY_MOVED",
+# "data": { "device": "ide1-cd0",
+# "id": "/machine/unattached/device[22]",
+# "tray-open": true
+# },
+# "timestamp": { "seconds": 1265044230, "microseconds": 450486 } }
##
{ 'event': 'DEVICE_TRAY_MOVED',
'data': { 'device': 'str', 'id': 'str', 'tray-open': 'bool' } }
@@ -424,11 +424,11 @@
#
# Example:
#
-# <- { "event": "PR_MANAGER_STATUS_CHANGED",
-# "data": { "id": "pr-helper0",
-# "connected": true
-# },
-# "timestamp": { "seconds": 1519840375, "microseconds": 450486 } }
+# <- { "event": "PR_MANAGER_STATUS_CHANGED",
+# "data": { "id": "pr-helper0",
+# "connected": true
+# },
+# "timestamp": { "seconds": 1519840375, "microseconds": 450486 } }
##
{ 'event': 'PR_MANAGER_STATUS_CHANGED',
'data': { 'id': 'str', 'connected': 'bool' } }
@@ -467,41 +467,41 @@
#
# Examples:
#
-# -> { "execute": "block_set_io_throttle",
-# "arguments": { "id": "virtio-blk-pci0/virtio-backend",
-# "bps": 0,
-# "bps_rd": 0,
-# "bps_wr": 0,
-# "iops": 512,
-# "iops_rd": 0,
-# "iops_wr": 0,
-# "bps_max": 0,
-# "bps_rd_max": 0,
-# "bps_wr_max": 0,
-# "iops_max": 0,
-# "iops_rd_max": 0,
-# "iops_wr_max": 0,
-# "bps_max_length": 0,
-# "iops_size": 0 } }
-# <- { "return": {} }
-#
-# -> { "execute": "block_set_io_throttle",
-# "arguments": { "id": "ide0-1-0",
-# "bps": 1000000,
-# "bps_rd": 0,
-# "bps_wr": 0,
-# "iops": 0,
-# "iops_rd": 0,
-# "iops_wr": 0,
-# "bps_max": 8000000,
-# "bps_rd_max": 0,
-# "bps_wr_max": 0,
-# "iops_max": 0,
-# "iops_rd_max": 0,
-# "iops_wr_max": 0,
-# "bps_max_length": 60,
-# "iops_size": 0 } }
-# <- { "return": {} }
+# -> { "execute": "block_set_io_throttle",
+# "arguments": { "id": "virtio-blk-pci0/virtio-backend",
+# "bps": 0,
+# "bps_rd": 0,
+# "bps_wr": 0,
+# "iops": 512,
+# "iops_rd": 0,
+# "iops_wr": 0,
+# "bps_max": 0,
+# "bps_rd_max": 0,
+# "bps_wr_max": 0,
+# "iops_max": 0,
+# "iops_rd_max": 0,
+# "iops_wr_max": 0,
+# "bps_max_length": 0,
+# "iops_size": 0 } }
+# <- { "return": {} }
+#
+# -> { "execute": "block_set_io_throttle",
+# "arguments": { "id": "ide0-1-0",
+# "bps": 1000000,
+# "bps_rd": 0,
+# "bps_wr": 0,
+# "iops": 0,
+# "iops_rd": 0,
+# "iops_wr": 0,
+# "bps_max": 8000000,
+# "bps_rd_max": 0,
+# "bps_wr_max": 0,
+# "iops_max": 0,
+# "iops_rd_max": 0,
+# "iops_wr_max": 0,
+# "bps_max_length": 60,
+# "iops_size": 0 } }
+# <- { "return": {} }
##
{ 'command': 'block_set_io_throttle', 'boxed': true,
'data': 'BlockIOThrottle',
@@ -547,43 +547,43 @@
#
# Example:
#
-# Set new histograms for all io types with intervals [0, 10), [10,
-# 50), [50, 100), [100, +inf):
+# Set new histograms for all io types with intervals [0, 10), [10,
+# 50), [50, 100), [100, +inf):
#
-# -> { "execute": "block-latency-histogram-set",
-# "arguments": { "id": "drive0",
-# "boundaries": [10, 50, 100] } }
-# <- { "return": {} }
+# -> { "execute": "block-latency-histogram-set",
+# "arguments": { "id": "drive0",
+# "boundaries": [10, 50, 100] } }
+# <- { "return": {} }
#
# Example:
#
-# Set new histogram only for write, other histograms will remain not
-# changed (or not created):
+# Set new histogram only for write, other histograms will remain not
+# changed (or not created):
#
-# -> { "execute": "block-latency-histogram-set",
-# "arguments": { "id": "drive0",
-# "boundaries-write": [10, 50, 100] } }
-# <- { "return": {} }
+# -> { "execute": "block-latency-histogram-set",
+# "arguments": { "id": "drive0",
+# "boundaries-write": [10, 50, 100] } }
+# <- { "return": {} }
#
# Example:
#
-# Set new histograms with the following intervals: read, flush: [0,
-# 10), [10, 50), [50, 100), [100, +inf) write: [0, 1000), [1000,
-# 5000), [5000, +inf)
+# Set new histograms with the following intervals: read, flush: [0,
+# 10), [10, 50), [50, 100), [100, +inf) write: [0, 1000), [1000,
+# 5000), [5000, +inf)
#
-# -> { "execute": "block-latency-histogram-set",
-# "arguments": { "id": "drive0",
-# "boundaries": [10, 50, 100],
-# "boundaries-write": [1000, 5000] } }
-# <- { "return": {} }
+# -> { "execute": "block-latency-histogram-set",
+# "arguments": { "id": "drive0",
+# "boundaries": [10, 50, 100],
+# "boundaries-write": [1000, 5000] } }
+# <- { "return": {} }
#
# Example:
#
-# Remove all latency histograms:
+# Remove all latency histograms:
#
-# -> { "execute": "block-latency-histogram-set",
-# "arguments": { "id": "drive0" } }
-# <- { "return": {} }
+# -> { "execute": "block-latency-histogram-set",
+# "arguments": { "id": "drive0" } }
+# <- { "return": {} }
##
{ 'command': 'block-latency-histogram-set',
'data': {'id': 'str',
diff --git a/qapi/char.json b/qapi/char.json
index c1bab7b855..4873bc635a 100644
--- a/qapi/char.json
+++ b/qapi/char.json
@@ -42,26 +42,26 @@
#
# Example:
#
-# -> { "execute": "query-chardev" }
-# <- {
-# "return": [
-# {
-# "label": "charchannel0",
-# "filename": "unix:/var/lib/libvirt/qemu/seabios.rhel6.agent,server=on",
-# "frontend-open": false
-# },
-# {
-# "label": "charmonitor",
-# "filename": "unix:/var/lib/libvirt/qemu/seabios.rhel6.monitor,server=on",
-# "frontend-open": true
-# },
-# {
-# "label": "charserial0",
-# "filename": "pty:/dev/pts/2",
-# "frontend-open": true
-# }
-# ]
-# }
+# -> { "execute": "query-chardev" }
+# <- {
+# "return": [
+# {
+# "label": "charchannel0",
+# "filename": "unix:/var/lib/libvirt/qemu/seabios.rhel6.agent,server=on",
+# "frontend-open": false
+# },
+# {
+# "label": "charmonitor",
+# "filename": "unix:/var/lib/libvirt/qemu/seabios.rhel6.monitor,server=on",
+# "frontend-open": true
+# },
+# {
+# "label": "charserial0",
+# "filename": "pty:/dev/pts/2",
+# "frontend-open": true
+# }
+# ]
+# }
##
{ 'command': 'query-chardev', 'returns': ['ChardevInfo'],
'allow-preconfig': true }
@@ -88,23 +88,23 @@
#
# Example:
#
-# -> { "execute": "query-chardev-backends" }
-# <- {
-# "return":[
-# {
-# "name":"udp"
-# },
-# {
-# "name":"tcp"
-# },
-# {
-# "name":"unix"
-# },
-# {
-# "name":"spiceport"
-# }
-# ]
-# }
+# -> { "execute": "query-chardev-backends" }
+# <- {
+# "return":[
+# {
+# "name":"udp"
+# },
+# {
+# "name":"tcp"
+# },
+# {
+# "name":"unix"
+# },
+# {
+# "name":"spiceport"
+# }
+# ]
+# }
##
{ 'command': 'query-chardev-backends', 'returns': ['ChardevBackendInfo'] }
@@ -145,11 +145,11 @@
#
# Example:
#
-# -> { "execute": "ringbuf-write",
-# "arguments": { "device": "foo",
-# "data": "abcdefgh",
-# "format": "utf8" } }
-# <- { "return": {} }
+# -> { "execute": "ringbuf-write",
+# "arguments": { "device": "foo",
+# "data": "abcdefgh",
+# "format": "utf8" } }
+# <- { "return": {} }
##
{ 'command': 'ringbuf-write',
'data': { 'device': 'str',
@@ -181,11 +181,11 @@
#
# Example:
#
-# -> { "execute": "ringbuf-read",
-# "arguments": { "device": "foo",
-# "size": 1000,
-# "format": "utf8" } }
-# <- { "return": "abcdefgh" }
+# -> { "execute": "ringbuf-read",
+# "arguments": { "device": "foo",
+# "size": 1000,
+# "format": "utf8" } }
+# <- { "return": "abcdefgh" }
##
{ 'command': 'ringbuf-read',
'data': {'device': 'str', 'size': 'int', '*format': 'DataFormat'},
@@ -391,8 +391,8 @@
# @rows: console height, in chars
#
# Note: the options are only effective when the VNC or SDL graphical
-# display backend is active. They are ignored with the GTK, Spice, VNC
-# and D-Bus display backends.
+# display backend is active. They are ignored with the GTK,
+# Spice, VNC and D-Bus display backends.
#
# Since: 1.5
##
@@ -468,12 +468,16 @@
#
# @memory: Since 1.5
#
+# Features:
+#
+# @deprecated: Member @memory is deprecated. Use @ringbuf instead.
+#
# Since: 1.4
##
{ 'enum': 'ChardevBackendKind',
'data': [ 'file',
- 'serial',
- 'parallel',
+ { 'name': 'serial', 'if': 'HAVE_CHARDEV_SERIAL' },
+ { 'name': 'parallel', 'if': 'HAVE_CHARDEV_PARALLEL' },
'pipe',
'socket',
'udp',
@@ -482,22 +486,23 @@
'mux',
'msmouse',
'wctablet',
- 'braille',
+ { 'name': 'braille', 'if': 'CONFIG_BRLAPI' },
'testdev',
'stdio',
- 'console',
+ { 'name': 'console', 'if': 'CONFIG_WIN32' },
{ 'name': 'spicevmc', 'if': 'CONFIG_SPICE' },
{ 'name': 'spiceport', 'if': 'CONFIG_SPICE' },
{ 'name': 'qemu-vdagent', 'if': 'CONFIG_SPICE_PROTOCOL' },
{ 'name': 'dbus', 'if': 'CONFIG_DBUS_DISPLAY' },
'vc',
'ringbuf',
- # next one is just for compatibility
- 'memory' ] }
+ { 'name': 'memory', 'features': [ 'deprecated' ] } ] }
##
# @ChardevFileWrapper:
#
+# @data: Configuration info for file chardevs
+#
# Since: 1.4
##
{ 'struct': 'ChardevFileWrapper',
@@ -506,6 +511,8 @@
##
# @ChardevHostdevWrapper:
#
+# @data: Configuration info for device and pipe chardevs
+#
# Since: 1.4
##
{ 'struct': 'ChardevHostdevWrapper',
@@ -514,6 +521,8 @@
##
# @ChardevSocketWrapper:
#
+# @data: Configuration info for (stream) socket chardevs
+#
# Since: 1.4
##
{ 'struct': 'ChardevSocketWrapper',
@@ -522,6 +531,8 @@
##
# @ChardevUdpWrapper:
#
+# @data: Configuration info for datagram socket chardevs
+#
# Since: 1.5
##
{ 'struct': 'ChardevUdpWrapper',
@@ -530,6 +541,8 @@
##
# @ChardevCommonWrapper:
#
+# @data: Configuration shared across all chardev backends
+#
# Since: 2.6
##
{ 'struct': 'ChardevCommonWrapper',
@@ -538,6 +551,8 @@
##
# @ChardevMuxWrapper:
#
+# @data: Configuration info for mux chardevs
+#
# Since: 1.5
##
{ 'struct': 'ChardevMuxWrapper',
@@ -546,6 +561,8 @@
##
# @ChardevStdioWrapper:
#
+# @data: Configuration info for stdio chardevs
+#
# Since: 1.5
##
{ 'struct': 'ChardevStdioWrapper',
@@ -554,6 +571,8 @@
##
# @ChardevSpiceChannelWrapper:
#
+# @data: Configuration info for spice vm channel chardevs
+#
# Since: 1.5
##
{ 'struct': 'ChardevSpiceChannelWrapper',
@@ -563,6 +582,8 @@
##
# @ChardevSpicePortWrapper:
#
+# @data: Configuration info for spice port chardevs
+#
# Since: 1.5
##
{ 'struct': 'ChardevSpicePortWrapper',
@@ -572,6 +593,8 @@
##
# @ChardevQemuVDAgentWrapper:
#
+# @data: Configuration info for qemu vdagent implementation
+#
# Since: 6.1
##
{ 'struct': 'ChardevQemuVDAgentWrapper',
@@ -581,6 +604,8 @@
##
# @ChardevDBusWrapper:
#
+# @data: Configuration info for DBus chardevs
+#
# Since: 7.0
##
{ 'struct': 'ChardevDBusWrapper',
@@ -590,6 +615,8 @@
##
# @ChardevVCWrapper:
#
+# @data: Configuration info for virtual console chardevs
+#
# Since: 1.5
##
{ 'struct': 'ChardevVCWrapper',
@@ -598,6 +625,8 @@
##
# @ChardevRingbufWrapper:
#
+# @data: Configuration info for ring buffer chardevs
+#
# Since: 1.5
##
{ 'struct': 'ChardevRingbufWrapper',
@@ -608,14 +637,18 @@
#
# Configuration info for the new chardev backend.
#
+# @type: backend type
+#
# Since: 1.4
##
{ 'union': 'ChardevBackend',
'base': { 'type': 'ChardevBackendKind' },
'discriminator': 'type',
'data': { 'file': 'ChardevFileWrapper',
- 'serial': 'ChardevHostdevWrapper',
- 'parallel': 'ChardevHostdevWrapper',
+ 'serial': { 'type': 'ChardevHostdevWrapper',
+ 'if': 'HAVE_CHARDEV_SERIAL' },
+ 'parallel': { 'type': 'ChardevHostdevWrapper',
+ 'if': 'HAVE_CHARDEV_PARALLEL' },
'pipe': 'ChardevHostdevWrapper',
'socket': 'ChardevSocketWrapper',
'udp': 'ChardevUdpWrapper',
@@ -624,10 +657,12 @@
'mux': 'ChardevMuxWrapper',
'msmouse': 'ChardevCommonWrapper',
'wctablet': 'ChardevCommonWrapper',
- 'braille': 'ChardevCommonWrapper',
+ 'braille': { 'type': 'ChardevCommonWrapper',
+ 'if': 'CONFIG_BRLAPI' },
'testdev': 'ChardevCommonWrapper',
'stdio': 'ChardevStdioWrapper',
- 'console': 'ChardevCommonWrapper',
+ 'console': { 'type': 'ChardevCommonWrapper',
+ 'if': 'CONFIG_WIN32' },
'spicevmc': { 'type': 'ChardevSpiceChannelWrapper',
'if': 'CONFIG_SPICE' },
'spiceport': { 'type': 'ChardevSpicePortWrapper',
@@ -638,7 +673,6 @@
'if': 'CONFIG_DBUS_DISPLAY' },
'vc': 'ChardevVCWrapper',
'ringbuf': 'ChardevRingbufWrapper',
- # next one is just for compatibility
'memory': 'ChardevRingbufWrapper' } }
##
@@ -669,21 +703,21 @@
#
# Examples:
#
-# -> { "execute" : "chardev-add",
-# "arguments" : { "id" : "foo",
-# "backend" : { "type" : "null", "data" : {} } } }
-# <- { "return": {} }
+# -> { "execute" : "chardev-add",
+# "arguments" : { "id" : "foo",
+# "backend" : { "type" : "null", "data" : {} } } }
+# <- { "return": {} }
#
-# -> { "execute" : "chardev-add",
-# "arguments" : { "id" : "bar",
-# "backend" : { "type" : "file",
-# "data" : { "out" : "/tmp/bar.log" } } } }
-# <- { "return": {} }
+# -> { "execute" : "chardev-add",
+# "arguments" : { "id" : "bar",
+# "backend" : { "type" : "file",
+# "data" : { "out" : "/tmp/bar.log" } } } }
+# <- { "return": {} }
#
-# -> { "execute" : "chardev-add",
-# "arguments" : { "id" : "baz",
-# "backend" : { "type" : "pty", "data" : {} } } }
-# <- { "return": { "pty" : "/dev/pty/42" } }
+# -> { "execute" : "chardev-add",
+# "arguments" : { "id" : "baz",
+# "backend" : { "type" : "pty", "data" : {} } } }
+# <- { "return": { "pty" : "/dev/pty/42" } }
##
{ 'command': 'chardev-add',
'data': { 'id': 'str',
@@ -705,26 +739,26 @@
#
# Examples:
#
-# -> { "execute" : "chardev-change",
-# "arguments" : { "id" : "baz",
-# "backend" : { "type" : "pty", "data" : {} } } }
-# <- { "return": { "pty" : "/dev/pty/42" } }
-#
-# -> {"execute" : "chardev-change",
-# "arguments" : {
-# "id" : "charchannel2",
-# "backend" : {
-# "type" : "socket",
-# "data" : {
-# "addr" : {
-# "type" : "unix" ,
-# "data" : {
-# "path" : "/tmp/charchannel2.socket"
-# }
-# },
-# "server" : true,
-# "wait" : false }}}}
-# <- {"return": {}}
+# -> { "execute" : "chardev-change",
+# "arguments" : { "id" : "baz",
+# "backend" : { "type" : "pty", "data" : {} } } }
+# <- { "return": { "pty" : "/dev/pty/42" } }
+#
+# -> {"execute" : "chardev-change",
+# "arguments" : {
+# "id" : "charchannel2",
+# "backend" : {
+# "type" : "socket",
+# "data" : {
+# "addr" : {
+# "type" : "unix" ,
+# "data" : {
+# "path" : "/tmp/charchannel2.socket"
+# }
+# },
+# "server" : true,
+# "wait" : false }}}}
+# <- {"return": {}}
##
{ 'command': 'chardev-change',
'data': { 'id': 'str',
@@ -744,8 +778,8 @@
#
# Example:
#
-# -> { "execute": "chardev-remove", "arguments": { "id" : "foo" } }
-# <- { "return": {} }
+# -> { "execute": "chardev-remove", "arguments": { "id" : "foo" } }
+# <- { "return": {} }
##
{ 'command': 'chardev-remove',
'data': { 'id': 'str' } }
@@ -763,8 +797,8 @@
#
# Example:
#
-# -> { "execute": "chardev-send-break", "arguments": { "id" : "foo" } }
-# <- { "return": {} }
+# -> { "execute": "chardev-send-break", "arguments": { "id" : "foo" } }
+# <- { "return": {} }
##
{ 'command': 'chardev-send-break',
'data': { 'id': 'str' } }
@@ -784,9 +818,9 @@
#
# Example:
#
-# <- { "event": "VSERPORT_CHANGE",
-# "data": { "id": "channel0", "open": true },
-# "timestamp": { "seconds": 1401385907, "microseconds": 422329 } }
+# <- { "event": "VSERPORT_CHANGE",
+# "data": { "id": "channel0", "open": true },
+# "timestamp": { "seconds": 1401385907, "microseconds": 422329 } }
##
{ 'event': 'VSERPORT_CHANGE',
'data': { 'id': 'str',
diff --git a/qapi/common.json b/qapi/common.json
index 6fed9cde1a..f1bb841951 100644
--- a/qapi/common.json
+++ b/qapi/common.json
@@ -52,17 +52,6 @@
'data': [ 'on', 'off', 'split' ] }
##
-# @String:
-#
-# A fat type wrapping 'str', to be embedded in lists.
-#
-# Since: 1.2
-##
-{ 'struct': 'String',
- 'data': {
- 'str': 'str' } }
-
-##
# @StrOrNull:
#
# This is a string value or the explicit lack of a string (null
diff --git a/qapi/control.json b/qapi/control.json
index a91fa33407..f404daef60 100644
--- a/qapi/control.json
+++ b/qapi/control.json
@@ -20,9 +20,9 @@
#
# Example:
#
-# -> { "execute": "qmp_capabilities",
-# "arguments": { "enable": [ "oob" ] } }
-# <- { "return": {} }
+# -> { "execute": "qmp_capabilities",
+# "arguments": { "enable": [ "oob" ] } }
+# <- { "return": {} }
#
# Notes: This command is valid exactly when first connecting: it must
# be issued before any other command will be accepted, and will
@@ -102,17 +102,17 @@
#
# Example:
#
-# -> { "execute": "query-version" }
-# <- {
-# "return":{
-# "qemu":{
-# "major":0,
-# "minor":11,
-# "micro":5
-# },
-# "package":""
-# }
-# }
+# -> { "execute": "query-version" }
+# <- {
+# "return":{
+# "qemu":{
+# "major":0,
+# "minor":11,
+# "micro":5
+# },
+# "package":""
+# }
+# }
##
{ 'command': 'query-version', 'returns': 'VersionInfo',
'allow-preconfig': true }
@@ -139,17 +139,17 @@
#
# Example:
#
-# -> { "execute": "query-commands" }
-# <- {
-# "return":[
-# {
-# "name":"query-balloon"
-# },
-# {
-# "name":"system_powerdown"
-# }
-# ]
-# }
+# -> { "execute": "query-commands" }
+# <- {
+# "return":[
+# {
+# "name":"query-balloon"
+# },
+# {
+# "name":"system_powerdown"
+# }
+# ]
+# }
#
# Note: This example has been shortened as the real response is too
# long.
@@ -169,8 +169,8 @@
#
# Example:
#
-# -> { "execute": "quit" }
-# <- { "return": {} }
+# -> { "execute": "quit" }
+# <- { "return": {} }
##
{ 'command': 'quit',
'allow-preconfig': true }
diff --git a/qapi/crypto.json b/qapi/crypto.json
index fd3d46ebd1..931c88e688 100644
--- a/qapi/crypto.json
+++ b/qapi/crypto.json
@@ -94,6 +94,8 @@
#
# @twofish-256: Twofish with 256 bit / 32 byte keys
#
+# @sm4: SM4 with 128 bit / 16 byte keys (since 9.0)
+#
# Since: 2.6
##
{ 'enum': 'QCryptoCipherAlgorithm',
@@ -102,7 +104,8 @@
'des', '3des',
'cast5-128',
'serpent-128', 'serpent-192', 'serpent-256',
- 'twofish-128', 'twofish-192', 'twofish-256']}
+ 'twofish-128', 'twofish-192', 'twofish-256',
+ 'sm4']}
##
# @QCryptoCipherMode:
@@ -223,6 +226,8 @@
# @iter-time: number of milliseconds to spend in PBKDF passphrase
# processing. Currently defaults to 2000. (since 2.8)
#
+# @detached-header: create a detached LUKS header. (since 9.0)
+#
# Since: 2.6
##
{ 'struct': 'QCryptoBlockCreateOptionsLUKS',
@@ -232,7 +237,8 @@
'*ivgen-alg': 'QCryptoIVGenAlgorithm',
'*ivgen-hash-alg': 'QCryptoHashAlgorithm',
'*hash-alg': 'QCryptoHashAlgorithm',
- '*iter-time': 'int'}}
+ '*iter-time': 'int',
+ '*detached-header': 'bool'}}
##
# @QCryptoBlockOpenOptions:
@@ -311,6 +317,8 @@
#
# @hash-alg: the master key hash algorithm
#
+# @detached-header: whether the LUKS header is detached (Since 9.0)
+#
# @payload-offset: offset to the payload data in bytes
#
# @master-key-iters: number of PBKDF2 iterations for key material
@@ -327,6 +335,7 @@
'ivgen-alg': 'QCryptoIVGenAlgorithm',
'*ivgen-hash-alg': 'QCryptoHashAlgorithm',
'hash-alg': 'QCryptoHashAlgorithm',
+ 'detached-header': 'bool',
'payload-offset': 'int',
'master-key-iters': 'int',
'uuid': 'str',
@@ -645,6 +654,8 @@
# The options that are available for all asymmetric key algorithms
# when creating a new QCryptoAkCipher.
#
+# @alg: encryption cipher algorithm
+#
# Since: 7.1
##
{ 'union': 'QCryptoAkCipherOptions',
diff --git a/qapi/dump.json b/qapi/dump.json
index 5cbc237ad9..f82dd6a1af 100644
--- a/qapi/dump.json
+++ b/qapi/dump.json
@@ -98,9 +98,9 @@
#
# Example:
#
-# -> { "execute": "dump-guest-memory",
-# "arguments": { "paging": false, "protocol": "fd:dump" } }
-# <- { "return": {} }
+# -> { "execute": "dump-guest-memory",
+# "arguments": { "paging": false, "protocol": "fd:dump" } }
+# <- { "return": {} }
##
{ 'command': 'dump-guest-memory',
'data': { 'paging': 'bool', 'protocol': 'str', '*detach': 'bool',
@@ -154,9 +154,9 @@
#
# Example:
#
-# -> { "execute": "query-dump" }
-# <- { "return": { "status": "active", "completed": 1024000,
-# "total": 2048000 } }
+# -> { "execute": "query-dump" }
+# <- { "return": { "status": "active", "completed": 1024000,
+# "total": 2048000 } }
##
{ 'command': 'query-dump', 'returns': 'DumpQueryResult' }
@@ -175,10 +175,10 @@
#
# Example:
#
-# <- { "event": "DUMP_COMPLETED",
-# "data": { "result": { "total": 1090650112, "status": "completed",
-# "completed": 1090650112 } },
-# "timestamp": { "seconds": 1648244171, "microseconds": 950316 } }
+# <- { "event": "DUMP_COMPLETED",
+# "data": { "result": { "total": 1090650112, "status": "completed",
+# "completed": 1090650112 } },
+# "timestamp": { "seconds": 1648244171, "microseconds": 950316 } }
##
{ 'event': 'DUMP_COMPLETED' ,
'data': { 'result': 'DumpQueryResult', '*error': 'str' } }
@@ -186,7 +186,7 @@
##
# @DumpGuestMemoryCapability:
#
-# A list of the available formats for dump-guest-memory
+# @formats: the available formats for dump-guest-memory
#
# Since: 2.0
##
@@ -206,9 +206,9 @@
#
# Example:
#
-# -> { "execute": "query-dump-guest-memory-capability" }
-# <- { "return": { "formats":
-# ["elf", "kdump-zlib", "kdump-lzo", "kdump-snappy"] } }
+# -> { "execute": "query-dump-guest-memory-capability" }
+# <- { "return": { "formats":
+# ["elf", "kdump-zlib", "kdump-lzo", "kdump-snappy"] } }
##
{ 'command': 'query-dump-guest-memory-capability',
'returns': 'DumpGuestMemoryCapability' }
diff --git a/qapi/introspect.json b/qapi/introspect.json
index 9173e60fdd..b041b02ba8 100644
--- a/qapi/introspect.json
+++ b/qapi/introspect.json
@@ -93,8 +93,6 @@
# particular order. (since 4.1 for object types, 4.2 for
# commands, 5.0 for the rest)
#
-# Additional members depend on the value of @meta-type.
-#
# Since: 2.5
##
{ 'union': 'SchemaInfo',
@@ -261,7 +259,7 @@
#
# @members: the alternate type's members, in no particular order. The
# members' wire encoding is distinct, see
-# docs/devel/qapi-code-gen.txt section Alternate types.
+# :doc:`/devel/qapi-code-gen` section Alternate types.
#
# On the wire, this can be any of the members.
#
diff --git a/qapi/machine-target.json b/qapi/machine-target.json
index 7b7149f81c..2c5dda735e 100644
--- a/qapi/machine-target.json
+++ b/qapi/machine-target.json
@@ -447,9 +447,9 @@
#
# Example:
#
-# <- { "event": "CPU_POLARIZATION_CHANGE",
-# "data": { "polarization": "horizontal" },
-# "timestamp": { "seconds": 1401385907, "microseconds": 422329 } }
+# <- { "event": "CPU_POLARIZATION_CHANGE",
+# "data": { "polarization": "horizontal" },
+# "timestamp": { "seconds": 1401385907, "microseconds": 422329 } }
##
{ 'event': 'CPU_POLARIZATION_CHANGE',
'data': { 'polarization': 'CpuS390Polarization' },
diff --git a/qapi/machine.json b/qapi/machine.json
index b6d634b30d..93b4677286 100644
--- a/qapi/machine.json
+++ b/qapi/machine.json
@@ -106,32 +106,32 @@
#
# Example:
#
-# -> { "execute": "query-cpus-fast" }
-# <- { "return": [
-# {
-# "thread-id": 25627,
-# "props": {
-# "core-id": 0,
-# "thread-id": 0,
-# "socket-id": 0
+# -> { "execute": "query-cpus-fast" }
+# <- { "return": [
+# {
+# "thread-id": 25627,
+# "props": {
+# "core-id": 0,
+# "thread-id": 0,
+# "socket-id": 0
+# },
+# "qom-path": "/machine/unattached/device[0]",
+# "target":"x86_64",
+# "cpu-index": 0
# },
-# "qom-path": "/machine/unattached/device[0]",
-# "target":"x86_64",
-# "cpu-index": 0
-# },
-# {
-# "thread-id": 25628,
-# "props": {
-# "core-id": 0,
-# "thread-id": 0,
-# "socket-id": 1
-# },
-# "qom-path": "/machine/unattached/device[2]",
-# "target":"x86_64",
-# "cpu-index": 1
-# }
-# ]
-# }
+# {
+# "thread-id": 25628,
+# "props": {
+# "core-id": 0,
+# "thread-id": 0,
+# "socket-id": 1
+# },
+# "qom-path": "/machine/unattached/device[2]",
+# "target":"x86_64",
+# "cpu-index": 1
+# }
+# ]
+# }
##
{ 'command': 'query-cpus-fast', 'returns': [ 'CpuInfoFast' ] }
@@ -258,8 +258,8 @@
#
# Example:
#
-# -> { "execute": "query-uuid" }
-# <- { "return": { "UUID": "550e8400-e29b-41d4-a716-446655440000" } }
+# -> { "execute": "query-uuid" }
+# <- { "return": { "UUID": "550e8400-e29b-41d4-a716-446655440000" } }
##
{ 'command': 'query-uuid', 'returns': 'UuidInfo', 'allow-preconfig': true }
@@ -292,8 +292,8 @@
#
# Example:
#
-# -> { "execute": "system_reset" }
-# <- { "return": {} }
+# -> { "execute": "system_reset" }
+# <- { "return": {} }
##
{ 'command': 'system_reset' }
@@ -311,8 +311,8 @@
#
# Example:
#
-# -> { "execute": "system_powerdown" }
-# <- { "return": {} }
+# -> { "execute": "system_powerdown" }
+# <- { "return": {} }
##
{ 'command': 'system_powerdown' }
@@ -333,8 +333,8 @@
#
# Example:
#
-# -> { "execute": "system_wakeup" }
-# <- { "return": {} }
+# -> { "execute": "system_wakeup" }
+# <- { "return": {} }
##
{ 'command': 'system_wakeup' }
@@ -386,8 +386,8 @@
#
# Example:
#
-# -> { "execute": "inject-nmi" }
-# <- { "return": {} }
+# -> { "execute": "inject-nmi" }
+# <- { "return": {} }
##
{ 'command': 'inject-nmi' }
@@ -415,8 +415,8 @@
#
# Example:
#
-# -> { "execute": "query-kvm" }
-# <- { "return": { "enabled": true, "present": true } }
+# -> { "execute": "query-kvm" }
+# <- { "return": { "enabled": true, "present": true } }
##
{ 'command': 'query-kvm', 'returns': 'KvmInfo' }
@@ -443,6 +443,8 @@
#
# A discriminated record of NUMA options. (for OptsVisitor)
#
+# @type: NUMA option type
+#
# Since: 2.1
##
{ 'union': 'NumaOptions',
@@ -784,11 +786,11 @@
#
# Example:
#
-# -> { "execute": "memsave",
-# "arguments": { "val": 10,
-# "size": 100,
-# "filename": "/tmp/virtual-mem-dump" } }
-# <- { "return": {} }
+# -> { "execute": "memsave",
+# "arguments": { "val": 10,
+# "size": 100,
+# "filename": "/tmp/virtual-mem-dump" } }
+# <- { "return": {} }
##
{ 'command': 'memsave',
'data': {'val': 'int', 'size': 'int', 'filename': 'str', '*cpu-index': 'int'} }
@@ -812,11 +814,11 @@
#
# Example:
#
-# -> { "execute": "pmemsave",
-# "arguments": { "val": 10,
-# "size": 100,
-# "filename": "/tmp/physical-mem-dump" } }
-# <- { "return": {} }
+# -> { "execute": "pmemsave",
+# "arguments": { "val": 10,
+# "size": 100,
+# "filename": "/tmp/physical-mem-dump" } }
+# <- { "return": {} }
##
{ 'command': 'pmemsave',
'data': {'val': 'int', 'size': 'int', 'filename': 'str'} }
@@ -873,29 +875,29 @@
#
# Example:
#
-# -> { "execute": "query-memdev" }
-# <- { "return": [
-# {
-# "id": "mem1",
-# "size": 536870912,
-# "merge": false,
-# "dump": true,
-# "prealloc": false,
-# "share": false,
-# "host-nodes": [0, 1],
-# "policy": "bind"
-# },
-# {
-# "size": 536870912,
-# "merge": false,
-# "dump": true,
-# "prealloc": true,
-# "share": false,
-# "host-nodes": [2, 3],
-# "policy": "preferred"
+# -> { "execute": "query-memdev" }
+# <- { "return": [
+# {
+# "id": "mem1",
+# "size": 536870912,
+# "merge": false,
+# "dump": true,
+# "prealloc": false,
+# "share": false,
+# "host-nodes": [0, 1],
+# "policy": "bind"
+# },
+# {
+# "size": 536870912,
+# "merge": false,
+# "dump": true,
+# "prealloc": true,
+# "share": false,
+# "host-nodes": [2, 3],
+# "policy": "preferred"
+# }
+# ]
# }
-# ]
-# }
##
{ 'command': 'query-memdev', 'returns': ['Memdev'], 'allow-preconfig': true }
@@ -988,47 +990,47 @@
#
# Examples:
#
-# For pseries machine type started with -smp 2,cores=2,maxcpus=4 -cpu
-# POWER8:
-#
-# -> { "execute": "query-hotpluggable-cpus" }
-# <- {"return": [
-# { "props": { "core-id": 8 }, "type": "POWER8-spapr-cpu-core",
-# "vcpus-count": 1 },
-# { "props": { "core-id": 0 }, "type": "POWER8-spapr-cpu-core",
-# "vcpus-count": 1, "qom-path": "/machine/unattached/device[0]"}
-# ]}'
-#
-# For pc machine type started with -smp 1,maxcpus=2:
-#
-# -> { "execute": "query-hotpluggable-cpus" }
-# <- {"return": [
-# {
-# "type": "qemu64-x86_64-cpu", "vcpus-count": 1,
-# "props": {"core-id": 0, "socket-id": 1, "thread-id": 0}
-# },
-# {
-# "qom-path": "/machine/unattached/device[0]",
-# "type": "qemu64-x86_64-cpu", "vcpus-count": 1,
-# "props": {"core-id": 0, "socket-id": 0, "thread-id": 0}
-# }
-# ]}
-#
-# For s390x-virtio-ccw machine type started with -smp 1,maxcpus=2 -cpu
-# qemu (Since: 2.11):
-#
-# -> { "execute": "query-hotpluggable-cpus" }
-# <- {"return": [
-# {
-# "type": "qemu-s390x-cpu", "vcpus-count": 1,
-# "props": { "core-id": 1 }
-# },
-# {
-# "qom-path": "/machine/unattached/device[0]",
-# "type": "qemu-s390x-cpu", "vcpus-count": 1,
-# "props": { "core-id": 0 }
-# }
-# ]}
+# For pseries machine type started with -smp 2,cores=2,maxcpus=4 -cpu
+# POWER8:
+#
+# -> { "execute": "query-hotpluggable-cpus" }
+# <- {"return": [
+# { "props": { "core-id": 8 }, "type": "POWER8-spapr-cpu-core",
+# "vcpus-count": 1 },
+# { "props": { "core-id": 0 }, "type": "POWER8-spapr-cpu-core",
+# "vcpus-count": 1, "qom-path": "/machine/unattached/device[0]"}
+# ]}'
+#
+# For pc machine type started with -smp 1,maxcpus=2:
+#
+# -> { "execute": "query-hotpluggable-cpus" }
+# <- {"return": [
+# {
+# "type": "qemu64-x86_64-cpu", "vcpus-count": 1,
+# "props": {"core-id": 0, "socket-id": 1, "thread-id": 0}
+# },
+# {
+# "qom-path": "/machine/unattached/device[0]",
+# "type": "qemu64-x86_64-cpu", "vcpus-count": 1,
+# "props": {"core-id": 0, "socket-id": 0, "thread-id": 0}
+# }
+# ]}
+#
+# For s390x-virtio-ccw machine type started with -smp 1,maxcpus=2 -cpu
+# qemu (Since: 2.11):
+#
+# -> { "execute": "query-hotpluggable-cpus" }
+# <- {"return": [
+# {
+# "type": "qemu-s390x-cpu", "vcpus-count": 1,
+# "props": { "core-id": 1 }
+# },
+# {
+# "qom-path": "/machine/unattached/device[0]",
+# "type": "qemu-s390x-cpu", "vcpus-count": 1,
+# "props": { "core-id": 0 }
+# }
+# ]}
##
{ 'command': 'query-hotpluggable-cpus', 'returns': ['HotpluggableCPU'],
'allow-preconfig': true }
@@ -1059,10 +1061,10 @@
# From it we have: balloon_size = vm_ram_size - @value
#
# Returns:
-# - Nothing on success
-# - If the balloon driver is enabled but not functional because the
-# KVM kernel module cannot support it, KVMMissingCap
-# - If no balloon device is present, DeviceNotActive
+# - Nothing on success
+# - If the balloon driver is enabled but not functional because
+# the KVM kernel module cannot support it, KVMMissingCap
+# - If no balloon device is present, DeviceNotActive
#
# Notes: This command just issues a request to the guest. When it
# returns, the balloon size may not have changed. A guest can
@@ -1072,10 +1074,10 @@
#
# Example:
#
-# -> { "execute": "balloon", "arguments": { "value": 536870912 } }
-# <- { "return": {} }
+# -> { "execute": "balloon", "arguments": { "value": 536870912 } }
+# <- { "return": {} }
#
-# With a 2.5GiB guest this command inflated the ballon to 3GiB.
+# With a 2.5GiB guest this command inflated the ballon to 3GiB.
##
{ 'command': 'balloon', 'data': {'value': 'int'} }
@@ -1097,20 +1099,20 @@
# Return information about the balloon device.
#
# Returns:
-# - @BalloonInfo on success
-# - If the balloon driver is enabled but not functional because the
-# KVM kernel module cannot support it, KVMMissingCap
-# - If no balloon device is present, DeviceNotActive
+# - @BalloonInfo on success
+# - If the balloon driver is enabled but not functional because
+# the KVM kernel module cannot support it, KVMMissingCap
+# - If no balloon device is present, DeviceNotActive
#
# Since: 0.14
#
# Example:
#
-# -> { "execute": "query-balloon" }
-# <- { "return": {
-# "actual": 1073741824
-# }
-# }
+# -> { "execute": "query-balloon" }
+# <- { "return": {
+# "actual": 1073741824
+# }
+# }
##
{ 'command': 'query-balloon', 'returns': 'BalloonInfo' }
@@ -1130,9 +1132,9 @@
#
# Example:
#
-# <- { "event": "BALLOON_CHANGE",
-# "data": { "actual": 944766976 },
-# "timestamp": { "seconds": 1267020223, "microseconds": 435656 } }
+# <- { "event": "BALLOON_CHANGE",
+# "data": { "actual": 944766976 },
+# "timestamp": { "seconds": 1267020223, "microseconds": 435656 } }
##
{ 'event': 'BALLOON_CHANGE',
'data': { 'actual': 'int' } }
@@ -1161,21 +1163,21 @@
# message from the guest.
#
# Returns:
-# - @HvBalloonInfo on success
-# - If no hv-balloon device is present, guest memory status reporting
-# is not enabled or no guest memory status report received yet,
-# GenericError
+# - @HvBalloonInfo on success
+# - If no hv-balloon device is present, guest memory status
+# reporting is not enabled or no guest memory status report
+# received yet, GenericError
#
# Since: 8.2
#
# Example:
#
-# -> { "execute": "query-hv-balloon-status-report" }
-# <- { "return": {
-# "committed": 816640000,
-# "available": 3333054464
-# }
-# }
+# -> { "execute": "query-hv-balloon-status-report" }
+# <- { "return": {
+# "committed": 816640000,
+# "available": 3333054464
+# }
+# }
##
{ 'command': 'query-hv-balloon-status-report', 'returns': 'HvBalloonInfo' }
@@ -1191,9 +1193,9 @@
#
# Example:
#
-# <- { "event": "HV_BALLOON_STATUS_REPORT",
-# "data": { "committed": 816640000, "available": 3333054464 },
-# "timestamp": { "seconds": 1600295492, "microseconds": 661044 } }
+# <- { "event": "HV_BALLOON_STATUS_REPORT",
+# "data": { "committed": 816640000, "available": 3333054464 },
+# "timestamp": { "seconds": 1600295492, "microseconds": 661044 } }
#
##
{ 'event': 'HV_BALLOON_STATUS_REPORT',
@@ -1224,8 +1226,8 @@
#
# Example:
#
-# -> { "execute": "query-memory-size-summary" }
-# <- { "return": { "base-memory": 4294967296, "plugged-memory": 0 } }
+# -> { "execute": "query-memory-size-summary" }
+# <- { "return": { "base-memory": 4294967296, "plugged-memory": 0 } }
#
# Since: 2.11
##
@@ -1396,6 +1398,8 @@
##
# @PCDIMMDeviceInfoWrapper:
#
+# @data: PCDIMMDevice state information
+#
# Since: 2.1
##
{ 'struct': 'PCDIMMDeviceInfoWrapper',
@@ -1404,6 +1408,8 @@
##
# @VirtioPMEMDeviceInfoWrapper:
#
+# @data: VirtioPMEM state information
+#
# Since: 2.1
##
{ 'struct': 'VirtioPMEMDeviceInfoWrapper',
@@ -1412,6 +1418,8 @@
##
# @VirtioMEMDeviceInfoWrapper:
#
+# @data: VirtioMEMDevice state information
+#
# Since: 2.1
##
{ 'struct': 'VirtioMEMDeviceInfoWrapper',
@@ -1420,6 +1428,8 @@
##
# @SgxEPCDeviceInfoWrapper:
#
+# @data: Sgx EPC state information
+#
# Since: 6.2
##
{ 'struct': 'SgxEPCDeviceInfoWrapper',
@@ -1428,6 +1438,8 @@
##
# @HvBalloonDeviceInfoWrapper:
#
+# @data: hv-balloon provided memory state information
+#
# Since: 8.2
##
{ 'struct': 'HvBalloonDeviceInfoWrapper',
@@ -1438,6 +1450,8 @@
#
# Union containing information about a memory device
#
+# @type: memory device type
+#
# Since: 2.1
##
{ 'union': 'MemoryDeviceInfo',
@@ -1491,18 +1505,18 @@
#
# Example:
#
-# -> { "execute": "query-memory-devices" }
-# <- { "return": [ { "data":
-# { "addr": 5368709120,
-# "hotpluggable": true,
-# "hotplugged": true,
-# "id": "d1",
-# "memdev": "/objects/memX",
-# "node": 0,
-# "size": 1073741824,
-# "slot": 0},
-# "type": "dimm"
-# } ] }
+# -> { "execute": "query-memory-devices" }
+# <- { "return": [ { "data":
+# { "addr": 5368709120,
+# "hotpluggable": true,
+# "hotplugged": true,
+# "id": "d1",
+# "memdev": "/objects/memX",
+# "node": 0,
+# "size": 1073741824,
+# "slot": 0},
+# "type": "dimm"
+# } ] }
##
{ 'command': 'query-memory-devices', 'returns': ['MemoryDeviceInfo'] }
@@ -1525,10 +1539,10 @@
#
# Example:
#
-# <- { "event": "MEMORY_DEVICE_SIZE_CHANGE",
-# "data": { "id": "vm0", "size": 1073741824,
-# "qom-path": "/machine/unattached/device[2]" },
-# "timestamp": { "seconds": 1588168529, "microseconds": 201316 } }
+# <- { "event": "MEMORY_DEVICE_SIZE_CHANGE",
+# "data": { "id": "vm0", "size": 1073741824,
+# "qom-path": "/machine/unattached/device[2]" },
+# "timestamp": { "seconds": 1588168529, "microseconds": 201316 } }
##
{ 'event': 'MEMORY_DEVICE_SIZE_CHANGE',
'data': { '*id': 'str', 'size': 'size', 'qom-path' : 'str'} }
@@ -1551,11 +1565,11 @@
#
# Example:
#
-# <- { "event": "MEM_UNPLUG_ERROR",
-# "data": { "device": "dimm1",
-# "msg": "acpi: device unplug for unsupported device"
-# },
-# "timestamp": { "seconds": 1265044230, "microseconds": 450486 } }
+# <- { "event": "MEM_UNPLUG_ERROR",
+# "data": { "device": "dimm1",
+# "msg": "acpi: device unplug for unsupported device"
+# },
+# "timestamp": { "seconds": 1265044230, "microseconds": 450486 } }
##
{ 'event': 'MEM_UNPLUG_ERROR',
'data': { 'device': 'str', 'msg': 'str' },
@@ -1822,9 +1836,9 @@
#
# Example:
#
-# -> { "execute": "dumpdtb" }
-# "arguments": { "filename": "fdt.dtb" } }
-# <- { "return": {} }
+# -> { "execute": "dumpdtb" }
+# "arguments": { "filename": "fdt.dtb" } }
+# <- { "return": {} }
##
{ 'command': 'dumpdtb',
'data': { 'filename': 'str' },
diff --git a/qapi/migration.json b/qapi/migration.json
index eb2f883513..7303e57e8e 100644
--- a/qapi/migration.json
+++ b/qapi/migration.json
@@ -312,112 +312,112 @@
#
# Examples:
#
-# 1. Before the first migration
-#
-# -> { "execute": "query-migrate" }
-# <- { "return": {} }
-#
-# 2. Migration is done and has succeeded
-#
-# -> { "execute": "query-migrate" }
-# <- { "return": {
-# "status": "completed",
-# "total-time":12345,
-# "setup-time":12345,
-# "downtime":12345,
-# "ram":{
-# "transferred":123,
-# "remaining":123,
-# "total":246,
-# "duplicate":123,
-# "normal":123,
-# "normal-bytes":123456,
-# "dirty-sync-count":15
-# }
-# }
-# }
-#
-# 3. Migration is done and has failed
-#
-# -> { "execute": "query-migrate" }
-# <- { "return": { "status": "failed" } }
-#
-# 4. Migration is being performed and is not a block migration:
-#
-# -> { "execute": "query-migrate" }
-# <- {
-# "return":{
-# "status":"active",
-# "total-time":12345,
-# "setup-time":12345,
-# "expected-downtime":12345,
-# "ram":{
-# "transferred":123,
-# "remaining":123,
-# "total":246,
-# "duplicate":123,
-# "normal":123,
-# "normal-bytes":123456,
-# "dirty-sync-count":15
+# 1. Before the first migration
+#
+# -> { "execute": "query-migrate" }
+# <- { "return": {} }
+#
+# 2. Migration is done and has succeeded
+#
+# -> { "execute": "query-migrate" }
+# <- { "return": {
+# "status": "completed",
+# "total-time":12345,
+# "setup-time":12345,
+# "downtime":12345,
+# "ram":{
+# "transferred":123,
+# "remaining":123,
+# "total":246,
+# "duplicate":123,
+# "normal":123,
+# "normal-bytes":123456,
+# "dirty-sync-count":15
+# }
# }
-# }
-# }
-#
-# 5. Migration is being performed and is a block migration:
-#
-# -> { "execute": "query-migrate" }
-# <- {
-# "return":{
-# "status":"active",
-# "total-time":12345,
-# "setup-time":12345,
-# "expected-downtime":12345,
-# "ram":{
-# "total":1057024,
-# "remaining":1053304,
-# "transferred":3720,
-# "duplicate":123,
-# "normal":123,
-# "normal-bytes":123456,
-# "dirty-sync-count":15
-# },
-# "disk":{
-# "total":20971520,
-# "remaining":20880384,
-# "transferred":91136
-# }
-# }
-# }
-#
-# 6. Migration is being performed and XBZRLE is active:
-#
-# -> { "execute": "query-migrate" }
-# <- {
-# "return":{
-# "status":"active",
-# "total-time":12345,
-# "setup-time":12345,
-# "expected-downtime":12345,
-# "ram":{
-# "total":1057024,
-# "remaining":1053304,
-# "transferred":3720,
-# "duplicate":10,
-# "normal":3333,
-# "normal-bytes":3412992,
-# "dirty-sync-count":15
-# },
-# "xbzrle-cache":{
-# "cache-size":67108864,
-# "bytes":20971520,
-# "pages":2444343,
-# "cache-miss":2244,
-# "cache-miss-rate":0.123,
-# "encoding-rate":80.1,
-# "overflow":34434
-# }
-# }
-# }
+# }
+#
+# 3. Migration is done and has failed
+#
+# -> { "execute": "query-migrate" }
+# <- { "return": { "status": "failed" } }
+#
+# 4. Migration is being performed and is not a block migration:
+#
+# -> { "execute": "query-migrate" }
+# <- {
+# "return":{
+# "status":"active",
+# "total-time":12345,
+# "setup-time":12345,
+# "expected-downtime":12345,
+# "ram":{
+# "transferred":123,
+# "remaining":123,
+# "total":246,
+# "duplicate":123,
+# "normal":123,
+# "normal-bytes":123456,
+# "dirty-sync-count":15
+# }
+# }
+# }
+#
+# 5. Migration is being performed and is a block migration:
+#
+# -> { "execute": "query-migrate" }
+# <- {
+# "return":{
+# "status":"active",
+# "total-time":12345,
+# "setup-time":12345,
+# "expected-downtime":12345,
+# "ram":{
+# "total":1057024,
+# "remaining":1053304,
+# "transferred":3720,
+# "duplicate":123,
+# "normal":123,
+# "normal-bytes":123456,
+# "dirty-sync-count":15
+# },
+# "disk":{
+# "total":20971520,
+# "remaining":20880384,
+# "transferred":91136
+# }
+# }
+# }
+#
+# 6. Migration is being performed and XBZRLE is active:
+#
+# -> { "execute": "query-migrate" }
+# <- {
+# "return":{
+# "status":"active",
+# "total-time":12345,
+# "setup-time":12345,
+# "expected-downtime":12345,
+# "ram":{
+# "total":1057024,
+# "remaining":1053304,
+# "transferred":3720,
+# "duplicate":10,
+# "normal":3333,
+# "normal-bytes":3412992,
+# "dirty-sync-count":15
+# },
+# "xbzrle-cache":{
+# "cache-size":67108864,
+# "bytes":20971520,
+# "pages":2444343,
+# "cache-miss":2244,
+# "cache-miss-rate":0.123,
+# "encoding-rate":80.1,
+# "overflow":34434
+# }
+# }
+# }
##
{ 'command': 'query-migrate', 'returns': 'MigrationInfo' }
@@ -534,7 +534,7 @@
# Features:
#
# @deprecated: Member @block is deprecated. Use blockdev-mirror with
-# NBD instead. Member @compression is deprecated because it is
+# NBD instead. Member @compress is deprecated because it is
# unreliable and untested. It is recommended to use multifd
# migration, which offers an alternative compression
# implementation that is reliable and tested.
@@ -582,9 +582,9 @@
#
# Example:
#
-# -> { "execute": "migrate-set-capabilities" , "arguments":
-# { "capabilities": [ { "capability": "xbzrle", "state": true } ] } }
-# <- { "return": {} }
+# -> { "execute": "migrate-set-capabilities" , "arguments":
+# { "capabilities": [ { "capability": "xbzrle", "state": true } ] } }
+# <- { "return": {} }
##
{ 'command': 'migrate-set-capabilities',
'data': { 'capabilities': ['MigrationCapabilityStatus'] } }
@@ -600,17 +600,17 @@
#
# Example:
#
-# -> { "execute": "query-migrate-capabilities" }
-# <- { "return": [
-# {"state": false, "capability": "xbzrle"},
-# {"state": false, "capability": "rdma-pin-all"},
-# {"state": false, "capability": "auto-converge"},
-# {"state": false, "capability": "zero-blocks"},
-# {"state": false, "capability": "compress"},
-# {"state": true, "capability": "events"},
-# {"state": false, "capability": "postcopy-ram"},
-# {"state": false, "capability": "x-colo"}
-# ]}
+# -> { "execute": "query-migrate-capabilities" }
+# <- { "return": [
+# {"state": false, "capability": "xbzrle"},
+# {"state": false, "capability": "rdma-pin-all"},
+# {"state": false, "capability": "auto-converge"},
+# {"state": false, "capability": "zero-blocks"},
+# {"state": false, "capability": "compress"},
+# {"state": true, "capability": "events"},
+# {"state": false, "capability": "postcopy-ram"},
+# {"state": false, "capability": "x-colo"}
+# ]}
##
{ 'command': 'query-migrate-capabilities', 'returns': ['MigrationCapabilityStatus']}
@@ -980,6 +980,10 @@
# 2.9) Previously (since 2.7), this was reported by omitting
# tls-hostname instead.
#
+# @tls-authz: ID of the 'authz' object subclass that provides access
+# control checking of the TLS x509 certificate distinguished name.
+# (Since 4.0)
+#
# @max-bandwidth: to set maximum speed for migration. maximum speed
# in bytes per second. (Since 2.8)
#
@@ -1126,9 +1130,9 @@
#
# Example:
#
-# -> { "execute": "migrate-set-parameters" ,
-# "arguments": { "multifd-channels": 5 } }
-# <- { "return": {} }
+# -> { "execute": "migrate-set-parameters" ,
+# "arguments": { "multifd-channels": 5 } }
+# <- { "return": {} }
##
{ 'command': 'migrate-set-parameters', 'boxed': true,
'data': 'MigrateSetParameters' }
@@ -1353,15 +1357,15 @@
#
# Example:
#
-# -> { "execute": "query-migrate-parameters" }
-# <- { "return": {
-# "multifd-channels": 2,
-# "cpu-throttle-increment": 10,
-# "cpu-throttle-initial": 20,
-# "max-bandwidth": 33554432,
-# "downtime-limit": 300
-# }
-# }
+# -> { "execute": "query-migrate-parameters" }
+# <- { "return": {
+# "multifd-channels": 2,
+# "cpu-throttle-increment": 10,
+# "cpu-throttle-initial": 20,
+# "max-bandwidth": 33554432,
+# "downtime-limit": 300
+# }
+# }
##
{ 'command': 'query-migrate-parameters',
'returns': 'MigrationParameters' }
@@ -1377,8 +1381,8 @@
#
# Example:
#
-# -> { "execute": "migrate-start-postcopy" }
-# <- { "return": {} }
+# -> { "execute": "migrate-start-postcopy" }
+# <- { "return": {} }
##
{ 'command': 'migrate-start-postcopy' }
@@ -1393,9 +1397,9 @@
#
# Example:
#
-# <- {"timestamp": {"seconds": 1432121972, "microseconds": 744001},
-# "event": "MIGRATION",
-# "data": {"status": "completed"} }
+# <- {"timestamp": {"seconds": 1432121972, "microseconds": 744001},
+# "event": "MIGRATION",
+# "data": {"status": "completed"} }
##
{ 'event': 'MIGRATION',
'data': {'status': 'MigrationStatus'}}
@@ -1412,8 +1416,8 @@
#
# Example:
#
-# <- { "timestamp": {"seconds": 1449669631, "microseconds": 239225},
-# "event": "MIGRATION_PASS", "data": {"pass": 2} }
+# <- { "timestamp": {"seconds": 1449669631, "microseconds": 239225},
+# "event": "MIGRATION_PASS", "data": {"pass": 2} }
##
{ 'event': 'MIGRATION_PASS',
'data': { 'pass': 'int' } }
@@ -1496,8 +1500,8 @@
#
# Example:
#
-# <- { "timestamp": {"seconds": 2032141960, "microseconds": 417172},
-# "event": "COLO_EXIT", "data": {"mode": "primary", "reason": "request" } }
+# <- { "timestamp": {"seconds": 2032141960, "microseconds": 417172},
+# "event": "COLO_EXIT", "data": {"mode": "primary", "reason": "request" } }
##
{ 'event': 'COLO_EXIT',
'data': {'mode': 'COLOMode', 'reason': 'COLOExitReason' } }
@@ -1539,8 +1543,8 @@
#
# Example:
#
-# -> { "execute": "x-colo-lost-heartbeat" }
-# <- { "return": {} }
+# -> { "execute": "x-colo-lost-heartbeat" }
+# <- { "return": {} }
##
{ 'command': 'x-colo-lost-heartbeat',
'features': [ 'unstable' ],
@@ -1560,8 +1564,8 @@
#
# Example:
#
-# -> { "execute": "migrate_cancel" }
-# <- { "return": {} }
+# -> { "execute": "migrate_cancel" }
+# <- { "return": {} }
##
{ 'command': 'migrate_cancel' }
@@ -1578,9 +1582,9 @@
#
# Example:
#
-# -> { "execute": "migrate-continue" , "arguments":
-# { "state": "pre-switchover" } }
-# <- { "return": {} }
+# -> { "execute": "migrate-continue" , "arguments":
+# { "state": "pre-switchover" } }
+# <- { "return": {} }
##
{ 'command': 'migrate-continue', 'data': {'state': 'MigrationStatus'} }
@@ -1597,7 +1601,7 @@
#
# @file: Direct the migration stream to a file.
#
-# Since 8.2
+# Since: 8.2
##
{ 'enum': 'MigrationAddressType',
'data': [ 'socket', 'exec', 'rdma', 'file' ] }
@@ -1609,7 +1613,7 @@
#
# @offset: The file offset where the migration stream will start
#
-# Since 8.2
+# Since: 8.2
##
{ 'struct': 'FileMigrationArgs',
'data': { 'filename': 'str',
@@ -1620,7 +1624,7 @@
#
# @args: command (list head) and arguments to execute.
#
-# Since 8.2
+# Since: 8.2
##
{ 'struct': 'MigrationExecCommand',
'data': {'args': [ 'str' ] } }
@@ -1630,7 +1634,9 @@
#
# Migration endpoint configuration.
#
-# Since 8.2
+# @transport: The migration stream transport mechanism
+#
+# Since: 8.2
##
{ 'union': 'MigrationAddress',
'base': { 'transport' : 'MigrationAddressType'},
@@ -1648,7 +1654,7 @@
#
# @main: Main outbound migration channel.
#
-# Since 8.1
+# Since: 8.1
##
{ 'enum': 'MigrationChannelType',
'data': [ 'main' ] }
@@ -1662,7 +1668,7 @@
#
# @addr: Migration endpoint configuration on destination interface.
#
-# Since 8.1
+# Since: 8.1
##
{ 'struct': 'MigrationChannel',
'data': {
@@ -1699,65 +1705,66 @@
#
# Notes:
#
-# 1. The 'query-migrate' command should be used to check migration's
-# progress and final result (this information is provided by the
-# 'status' member)
+# 1. The 'query-migrate' command should be used to check
+# migration's progress and final result (this information is
+# provided by the 'status' member)
#
-# 2. All boolean arguments default to false
+# 2. All boolean arguments default to false
#
-# 3. The user Monitor's "detach" argument is invalid in QMP and should
-# not be used
+# 3. The user Monitor's "detach" argument is invalid in QMP and
+# should not be used
#
-# 4. The uri argument should have the Uniform Resource Identifier of
-# default destination VM. This connection will be bound to default
-# network.
+# 4. The uri argument should have the Uniform Resource Identifier
+# of default destination VM. This connection will be bound to
+# default network.
#
-# 5. For now, number of migration streams is restricted to one, i.e
-# number of items in 'channels' list is just 1.
+# 5. For now, number of migration streams is restricted to one,
+# i.e number of items in 'channels' list is just 1.
#
-# 6. The 'uri' and 'channels' arguments are mutually exclusive;
-# exactly one of the two should be present.
+# 6. The 'uri' and 'channels' arguments are mutually exclusive;
+# exactly one of the two should be present.
#
# Example:
#
-# -> { "execute": "migrate", "arguments": { "uri": "tcp:0:4446" } }
-# <- { "return": {} }
-# -> { "execute": "migrate",
-# "arguments": {
-# "channels": [ { "channel-type": "main",
-# "addr": { "transport": "socket",
-# "type": "inet",
-# "host": "10.12.34.9",
-# "port": "1050" } } ] } }
-# <- { "return": {} }
-#
-# -> { "execute": "migrate",
-# "arguments": {
-# "channels": [ { "channel-type": "main",
-# "addr": { "transport": "exec",
-# "args": [ "/bin/nc", "-p", "6000",
-# "/some/sock" ] } } ] } }
-# <- { "return": {} }
-#
-# -> { "execute": "migrate",
-# "arguments": {
-# "channels": [ { "channel-type": "main",
-# "addr": { "transport": "rdma",
-# "host": "10.12.34.9",
-# "port": "1050" } } ] } }
-# <- { "return": {} }
-#
-# -> { "execute": "migrate",
-# "arguments": {
-# "channels": [ { "channel-type": "main",
-# "addr": { "transport": "file",
-# "filename": "/tmp/migfile",
-# "offset": "0x1000" } } ] } }
-# <- { "return": {} }
+# -> { "execute": "migrate", "arguments": { "uri": "tcp:0:4446" } }
+# <- { "return": {} }
+#
+# -> { "execute": "migrate",
+# "arguments": {
+# "channels": [ { "channel-type": "main",
+# "addr": { "transport": "socket",
+# "type": "inet",
+# "host": "10.12.34.9",
+# "port": "1050" } } ] } }
+# <- { "return": {} }
+#
+# -> { "execute": "migrate",
+# "arguments": {
+# "channels": [ { "channel-type": "main",
+# "addr": { "transport": "exec",
+# "args": [ "/bin/nc", "-p", "6000",
+# "/some/sock" ] } } ] } }
+# <- { "return": {} }
+#
+# -> { "execute": "migrate",
+# "arguments": {
+# "channels": [ { "channel-type": "main",
+# "addr": { "transport": "rdma",
+# "host": "10.12.34.9",
+# "port": "1050" } } ] } }
+# <- { "return": {} }
+#
+# -> { "execute": "migrate",
+# "arguments": {
+# "channels": [ { "channel-type": "main",
+# "addr": { "transport": "file",
+# "filename": "/tmp/migfile",
+# "offset": "0x1000" } } ] } }
+# <- { "return": {} }
#
##
{ 'command': 'migrate',
- 'data': {'uri': 'str',
+ 'data': {'*uri': 'str',
'*channels': [ 'MigrationChannel' ],
'*blk': { 'type': 'bool', 'features': [ 'deprecated' ] },
'*inc': { 'type': 'bool', 'features': [ 'deprecated' ] },
@@ -1781,51 +1788,51 @@
#
# Notes:
#
-# 1. It's a bad idea to use a string for the uri, but it needs
-# to stay compatible with -incoming and the format of the uri
-# is already exposed above libvirt.
+# 1. It's a bad idea to use a string for the uri, but it needs to
+# stay compatible with -incoming and the format of the uri is
+# already exposed above libvirt.
#
-# 2. QEMU must be started with -incoming defer to allow
-# migrate-incoming to be used.
+# 2. QEMU must be started with -incoming defer to allow
+# migrate-incoming to be used.
#
-# 3. The uri format is the same as for -incoming
+# 3. The uri format is the same as for -incoming
#
-# 5. For now, number of migration streams is restricted to one, i.e
-# number of items in 'channels' list is just 1.
+# 4. For now, number of migration streams is restricted to one,
+# i.e number of items in 'channels' list is just 1.
#
-# 4. The 'uri' and 'channels' arguments are mutually exclusive;
-# exactly one of the two should be present.
+# 5. The 'uri' and 'channels' arguments are mutually exclusive;
+# exactly one of the two should be present.
#
# Example:
#
-# -> { "execute": "migrate-incoming",
-# "arguments": { "uri": "tcp::4446" } }
-# <- { "return": {} }
-#
-# -> { "execute": "migrate",
-# "arguments": {
-# "channels": [ { "channel-type": "main",
-# "addr": { "transport": "socket",
-# "type": "inet",
-# "host": "10.12.34.9",
-# "port": "1050" } } ] } }
-# <- { "return": {} }
-#
-# -> { "execute": "migrate",
-# "arguments": {
-# "channels": [ { "channel-type": "main",
-# "addr": { "transport": "exec",
-# "args": [ "/bin/nc", "-p", "6000",
-# "/some/sock" ] } } ] } }
-# <- { "return": {} }
-#
-# -> { "execute": "migrate",
-# "arguments": {
-# "channels": [ { "channel-type": "main",
-# "addr": { "transport": "rdma",
-# "host": "10.12.34.9",
-# "port": "1050" } } ] } }
-# <- { "return": {} }
+# -> { "execute": "migrate-incoming",
+# "arguments": { "uri": "tcp:0:4446" } }
+# <- { "return": {} }
+#
+# -> { "execute": "migrate-incoming",
+# "arguments": {
+# "channels": [ { "channel-type": "main",
+# "addr": { "transport": "socket",
+# "type": "inet",
+# "host": "10.12.34.9",
+# "port": "1050" } } ] } }
+# <- { "return": {} }
+#
+# -> { "execute": "migrate-incoming",
+# "arguments": {
+# "channels": [ { "channel-type": "main",
+# "addr": { "transport": "exec",
+# "args": [ "/bin/nc", "-p", "6000",
+# "/some/sock" ] } } ] } }
+# <- { "return": {} }
+#
+# -> { "execute": "migrate-incoming",
+# "arguments": {
+# "channels": [ { "channel-type": "main",
+# "addr": { "transport": "rdma",
+# "host": "10.12.34.9",
+# "port": "1050" } } ] } }
+# <- { "return": {} }
##
{ 'command': 'migrate-incoming',
'data': {'*uri': 'str',
@@ -1850,9 +1857,9 @@
#
# Example:
#
-# -> { "execute": "xen-save-devices-state",
-# "arguments": { "filename": "/tmp/save" } }
-# <- { "return": {} }
+# -> { "execute": "xen-save-devices-state",
+# "arguments": { "filename": "/tmp/save" } }
+# <- { "return": {} }
##
{ 'command': 'xen-save-devices-state',
'data': {'filename': 'str', '*live':'bool' } }
@@ -1870,9 +1877,9 @@
#
# Example:
#
-# -> { "execute": "xen-set-global-dirty-log",
-# "arguments": { "enable": true } }
-# <- { "return": {} }
+# -> { "execute": "xen-set-global-dirty-log",
+# "arguments": { "enable": true } }
+# <- { "return": {} }
##
{ 'command': 'xen-set-global-dirty-log', 'data': { 'enable': 'bool' } }
@@ -1890,9 +1897,9 @@
#
# Example:
#
-# -> { "execute": "xen-load-devices-state",
-# "arguments": { "filename": "/tmp/resume" } }
-# <- { "return": {} }
+# -> { "execute": "xen-load-devices-state",
+# "arguments": { "filename": "/tmp/resume" } }
+# <- { "return": {} }
##
{ 'command': 'xen-load-devices-state', 'data': {'filename': 'str'} }
@@ -1912,9 +1919,9 @@
#
# Example:
#
-# -> { "execute": "xen-set-replication",
-# "arguments": {"enable": true, "primary": false} }
-# <- { "return": {} }
+# -> { "execute": "xen-set-replication",
+# "arguments": {"enable": true, "primary": false} }
+# <- { "return": {} }
#
# Since: 2.9
##
@@ -1947,8 +1954,8 @@
#
# Example:
#
-# -> { "execute": "query-xen-replication-status" }
-# <- { "return": { "error": false } }
+# -> { "execute": "query-xen-replication-status" }
+# <- { "return": { "error": false } }
#
# Since: 2.9
##
@@ -1965,8 +1972,8 @@
#
# Example:
#
-# -> { "execute": "xen-colo-do-checkpoint" }
-# <- { "return": {} }
+# -> { "execute": "xen-colo-do-checkpoint" }
+# <- { "return": {} }
#
# Since: 2.9
##
@@ -2003,8 +2010,8 @@
#
# Example:
#
-# -> { "execute": "query-colo-status" }
-# <- { "return": { "mode": "primary", "last-mode": "none", "reason": "request" } }
+# -> { "execute": "query-colo-status" }
+# <- { "return": { "mode": "primary", "last-mode": "none", "reason": "request" } }
#
# Since: 3.1
##
@@ -2023,9 +2030,9 @@
#
# Example:
#
-# -> { "execute": "migrate-recover",
-# "arguments": { "uri": "tcp:192.168.1.200:12345" } }
-# <- { "return": {} }
+# -> { "execute": "migrate-recover",
+# "arguments": { "uri": "tcp:192.168.1.200:12345" } }
+# <- { "return": {} }
#
# Since: 3.0
##
@@ -2042,8 +2049,8 @@
#
# Example:
#
-# -> { "execute": "migrate-pause" }
-# <- { "return": {} }
+# -> { "execute": "migrate-pause" }
+# <- { "return": {} }
#
# Since: 3.0
##
@@ -2063,9 +2070,9 @@
#
# Example:
#
-# <- { "event": "UNPLUG_PRIMARY",
-# "data": { "device-id": "hostdev0" },
-# "timestamp": { "seconds": 1265044230, "microseconds": 450486 } }
+# <- { "event": "UNPLUG_PRIMARY",
+# "data": { "device-id": "hostdev0" },
+# "timestamp": { "seconds": 1265044230, "microseconds": 450486 } }
##
{ 'event': 'UNPLUG_PRIMARY',
'data': { 'device-id': 'str' } }
@@ -2126,7 +2133,7 @@
#
# @millisecond: value is in milliseconds
#
-# Since 8.2
+# Since: 8.2
#
##
{ 'enum': 'TimeUnit',
@@ -2224,16 +2231,16 @@
#
# Example:
#
-# -> {"execute": "calc-dirty-rate", "arguments": {"calc-time": 1,
-# 'sample-pages': 512} }
-# <- { "return": {} }
+# -> {"execute": "calc-dirty-rate", "arguments": {"calc-time": 1,
+# 'sample-pages': 512} }
+# <- { "return": {} }
#
-# Measure dirty rate using dirty bitmap for 500 milliseconds:
+# Measure dirty rate using dirty bitmap for 500 milliseconds:
#
-# -> {"execute": "calc-dirty-rate", "arguments": {"calc-time": 500,
-# "calc-time-unit": "millisecond", "mode": "dirty-bitmap"} }
+# -> {"execute": "calc-dirty-rate", "arguments": {"calc-time": 500,
+# "calc-time-unit": "millisecond", "mode": "dirty-bitmap"} }
#
-# <- { "return": {} }
+# <- { "return": {} }
##
{ 'command': 'calc-dirty-rate', 'data': {'calc-time': 'int64',
'*calc-time-unit': 'TimeUnit',
@@ -2252,17 +2259,17 @@
#
# Examples:
#
-# 1. Measurement is in progress:
+# 1. Measurement is in progress:
#
-# <- {"status": "measuring", "sample-pages": 512,
-# "mode": "page-sampling", "start-time": 1693900454, "calc-time": 10,
-# "calc-time-unit": "second"}
+# <- {"status": "measuring", "sample-pages": 512,
+# "mode": "page-sampling", "start-time": 1693900454, "calc-time": 10,
+# "calc-time-unit": "second"}
#
-# 2. Measurement has been completed:
+# 2. Measurement has been completed:
#
-# <- {"status": "measured", "sample-pages": 512, "dirty-rate": 108,
-# "mode": "page-sampling", "start-time": 1693900454, "calc-time": 10,
-# "calc-time-unit": "second"}
+# <- {"status": "measured", "sample-pages": 512, "dirty-rate": 108,
+# "mode": "page-sampling", "start-time": 1693900454, "calc-time": 10,
+# "calc-time-unit": "second"}
##
{ 'command': 'query-dirty-rate', 'data': {'*calc-time-unit': 'TimeUnit' },
'returns': 'DirtyRateInfo' }
@@ -2303,10 +2310,10 @@
#
# Example:
#
-# -> {"execute": "set-vcpu-dirty-limit"}
-# "arguments": { "dirty-rate": 200,
-# "cpu-index": 1 } }
-# <- { "return": {} }
+# -> {"execute": "set-vcpu-dirty-limit"}
+# "arguments": { "dirty-rate": 200,
+# "cpu-index": 1 } }
+# <- { "return": {} }
##
{ 'command': 'set-vcpu-dirty-limit',
'data': { '*cpu-index': 'int',
@@ -2327,9 +2334,9 @@
#
# Example:
#
-# -> {"execute": "cancel-vcpu-dirty-limit"},
-# "arguments": { "cpu-index": 1 } }
-# <- { "return": {} }
+# -> {"execute": "cancel-vcpu-dirty-limit"},
+# "arguments": { "cpu-index": 1 } }
+# <- { "return": {} }
##
{ 'command': 'cancel-vcpu-dirty-limit',
'data': { '*cpu-index': 'int'} }
@@ -2344,10 +2351,10 @@
#
# Example:
#
-# -> {"execute": "query-vcpu-dirty-limit"}
-# <- {"return": [
-# { "limit-rate": 60, "current-rate": 3, "cpu-index": 0},
-# { "limit-rate": 60, "current-rate": 3, "cpu-index": 1}]}
+# -> {"execute": "query-vcpu-dirty-limit"}
+# <- {"return": [
+# { "limit-rate": 60, "current-rate": 3, "cpu-index": 0},
+# { "limit-rate": 60, "current-rate": 3, "cpu-index": 1}]}
##
{ 'command': 'query-vcpu-dirty-limit',
'returns': [ 'DirtyLimitInfo' ] }
@@ -2412,40 +2419,40 @@
#
# Example:
#
-# -> { "execute": "snapshot-save",
-# "arguments": {
-# "job-id": "snapsave0",
-# "tag": "my-snap",
-# "vmstate": "disk0",
-# "devices": ["disk0", "disk1"]
-# }
-# }
-# <- { "return": { } }
-# <- {"event": "JOB_STATUS_CHANGE",
-# "timestamp": {"seconds": 1432121972, "microseconds": 744001},
-# "data": {"status": "created", "id": "snapsave0"}}
-# <- {"event": "JOB_STATUS_CHANGE",
-# "timestamp": {"seconds": 1432122172, "microseconds": 744001},
-# "data": {"status": "running", "id": "snapsave0"}}
-# <- {"event": "STOP",
-# "timestamp": {"seconds": 1432122372, "microseconds": 744001} }
-# <- {"event": "RESUME",
-# "timestamp": {"seconds": 1432122572, "microseconds": 744001} }
-# <- {"event": "JOB_STATUS_CHANGE",
-# "timestamp": {"seconds": 1432122772, "microseconds": 744001},
-# "data": {"status": "waiting", "id": "snapsave0"}}
-# <- {"event": "JOB_STATUS_CHANGE",
-# "timestamp": {"seconds": 1432122972, "microseconds": 744001},
-# "data": {"status": "pending", "id": "snapsave0"}}
-# <- {"event": "JOB_STATUS_CHANGE",
-# "timestamp": {"seconds": 1432123172, "microseconds": 744001},
-# "data": {"status": "concluded", "id": "snapsave0"}}
-# -> {"execute": "query-jobs"}
-# <- {"return": [{"current-progress": 1,
-# "status": "concluded",
-# "total-progress": 1,
-# "type": "snapshot-save",
-# "id": "snapsave0"}]}
+# -> { "execute": "snapshot-save",
+# "arguments": {
+# "job-id": "snapsave0",
+# "tag": "my-snap",
+# "vmstate": "disk0",
+# "devices": ["disk0", "disk1"]
+# }
+# }
+# <- { "return": { } }
+# <- {"event": "JOB_STATUS_CHANGE",
+# "timestamp": {"seconds": 1432121972, "microseconds": 744001},
+# "data": {"status": "created", "id": "snapsave0"}}
+# <- {"event": "JOB_STATUS_CHANGE",
+# "timestamp": {"seconds": 1432122172, "microseconds": 744001},
+# "data": {"status": "running", "id": "snapsave0"}}
+# <- {"event": "STOP",
+# "timestamp": {"seconds": 1432122372, "microseconds": 744001} }
+# <- {"event": "RESUME",
+# "timestamp": {"seconds": 1432122572, "microseconds": 744001} }
+# <- {"event": "JOB_STATUS_CHANGE",
+# "timestamp": {"seconds": 1432122772, "microseconds": 744001},
+# "data": {"status": "waiting", "id": "snapsave0"}}
+# <- {"event": "JOB_STATUS_CHANGE",
+# "timestamp": {"seconds": 1432122972, "microseconds": 744001},
+# "data": {"status": "pending", "id": "snapsave0"}}
+# <- {"event": "JOB_STATUS_CHANGE",
+# "timestamp": {"seconds": 1432123172, "microseconds": 744001},
+# "data": {"status": "concluded", "id": "snapsave0"}}
+# -> {"execute": "query-jobs"}
+# <- {"return": [{"current-progress": 1,
+# "status": "concluded",
+# "total-progress": 1,
+# "type": "snapshot-save",
+# "id": "snapsave0"}]}
#
# Since: 6.0
##
@@ -2484,40 +2491,40 @@
#
# Example:
#
-# -> { "execute": "snapshot-load",
-# "arguments": {
-# "job-id": "snapload0",
-# "tag": "my-snap",
-# "vmstate": "disk0",
-# "devices": ["disk0", "disk1"]
-# }
-# }
-# <- { "return": { } }
-# <- {"event": "JOB_STATUS_CHANGE",
-# "timestamp": {"seconds": 1472124172, "microseconds": 744001},
-# "data": {"status": "created", "id": "snapload0"}}
-# <- {"event": "JOB_STATUS_CHANGE",
-# "timestamp": {"seconds": 1472125172, "microseconds": 744001},
-# "data": {"status": "running", "id": "snapload0"}}
-# <- {"event": "STOP",
-# "timestamp": {"seconds": 1472125472, "microseconds": 744001} }
-# <- {"event": "RESUME",
-# "timestamp": {"seconds": 1472125872, "microseconds": 744001} }
-# <- {"event": "JOB_STATUS_CHANGE",
-# "timestamp": {"seconds": 1472126172, "microseconds": 744001},
-# "data": {"status": "waiting", "id": "snapload0"}}
-# <- {"event": "JOB_STATUS_CHANGE",
-# "timestamp": {"seconds": 1472127172, "microseconds": 744001},
-# "data": {"status": "pending", "id": "snapload0"}}
-# <- {"event": "JOB_STATUS_CHANGE",
-# "timestamp": {"seconds": 1472128172, "microseconds": 744001},
-# "data": {"status": "concluded", "id": "snapload0"}}
-# -> {"execute": "query-jobs"}
-# <- {"return": [{"current-progress": 1,
-# "status": "concluded",
-# "total-progress": 1,
-# "type": "snapshot-load",
-# "id": "snapload0"}]}
+# -> { "execute": "snapshot-load",
+# "arguments": {
+# "job-id": "snapload0",
+# "tag": "my-snap",
+# "vmstate": "disk0",
+# "devices": ["disk0", "disk1"]
+# }
+# }
+# <- { "return": { } }
+# <- {"event": "JOB_STATUS_CHANGE",
+# "timestamp": {"seconds": 1472124172, "microseconds": 744001},
+# "data": {"status": "created", "id": "snapload0"}}
+# <- {"event": "JOB_STATUS_CHANGE",
+# "timestamp": {"seconds": 1472125172, "microseconds": 744001},
+# "data": {"status": "running", "id": "snapload0"}}
+# <- {"event": "STOP",
+# "timestamp": {"seconds": 1472125472, "microseconds": 744001} }
+# <- {"event": "RESUME",
+# "timestamp": {"seconds": 1472125872, "microseconds": 744001} }
+# <- {"event": "JOB_STATUS_CHANGE",
+# "timestamp": {"seconds": 1472126172, "microseconds": 744001},
+# "data": {"status": "waiting", "id": "snapload0"}}
+# <- {"event": "JOB_STATUS_CHANGE",
+# "timestamp": {"seconds": 1472127172, "microseconds": 744001},
+# "data": {"status": "pending", "id": "snapload0"}}
+# <- {"event": "JOB_STATUS_CHANGE",
+# "timestamp": {"seconds": 1472128172, "microseconds": 744001},
+# "data": {"status": "concluded", "id": "snapload0"}}
+# -> {"execute": "query-jobs"}
+# <- {"return": [{"current-progress": 1,
+# "status": "concluded",
+# "total-progress": 1,
+# "type": "snapshot-load",
+# "id": "snapload0"}]}
#
# Since: 6.0
##
@@ -2547,35 +2554,35 @@
#
# Example:
#
-# -> { "execute": "snapshot-delete",
-# "arguments": {
-# "job-id": "snapdelete0",
-# "tag": "my-snap",
-# "devices": ["disk0", "disk1"]
-# }
-# }
-# <- { "return": { } }
-# <- {"event": "JOB_STATUS_CHANGE",
-# "timestamp": {"seconds": 1442124172, "microseconds": 744001},
-# "data": {"status": "created", "id": "snapdelete0"}}
-# <- {"event": "JOB_STATUS_CHANGE",
-# "timestamp": {"seconds": 1442125172, "microseconds": 744001},
-# "data": {"status": "running", "id": "snapdelete0"}}
-# <- {"event": "JOB_STATUS_CHANGE",
-# "timestamp": {"seconds": 1442126172, "microseconds": 744001},
-# "data": {"status": "waiting", "id": "snapdelete0"}}
-# <- {"event": "JOB_STATUS_CHANGE",
-# "timestamp": {"seconds": 1442127172, "microseconds": 744001},
-# "data": {"status": "pending", "id": "snapdelete0"}}
-# <- {"event": "JOB_STATUS_CHANGE",
-# "timestamp": {"seconds": 1442128172, "microseconds": 744001},
-# "data": {"status": "concluded", "id": "snapdelete0"}}
-# -> {"execute": "query-jobs"}
-# <- {"return": [{"current-progress": 1,
-# "status": "concluded",
-# "total-progress": 1,
-# "type": "snapshot-delete",
-# "id": "snapdelete0"}]}
+# -> { "execute": "snapshot-delete",
+# "arguments": {
+# "job-id": "snapdelete0",
+# "tag": "my-snap",
+# "devices": ["disk0", "disk1"]
+# }
+# }
+# <- { "return": { } }
+# <- {"event": "JOB_STATUS_CHANGE",
+# "timestamp": {"seconds": 1442124172, "microseconds": 744001},
+# "data": {"status": "created", "id": "snapdelete0"}}
+# <- {"event": "JOB_STATUS_CHANGE",
+# "timestamp": {"seconds": 1442125172, "microseconds": 744001},
+# "data": {"status": "running", "id": "snapdelete0"}}
+# <- {"event": "JOB_STATUS_CHANGE",
+# "timestamp": {"seconds": 1442126172, "microseconds": 744001},
+# "data": {"status": "waiting", "id": "snapdelete0"}}
+# <- {"event": "JOB_STATUS_CHANGE",
+# "timestamp": {"seconds": 1442127172, "microseconds": 744001},
+# "data": {"status": "pending", "id": "snapdelete0"}}
+# <- {"event": "JOB_STATUS_CHANGE",
+# "timestamp": {"seconds": 1442128172, "microseconds": 744001},
+# "data": {"status": "concluded", "id": "snapdelete0"}}
+# -> {"execute": "query-jobs"}
+# <- {"return": [{"current-progress": 1,
+# "status": "concluded",
+# "total-progress": 1,
+# "type": "snapshot-delete",
+# "id": "snapdelete0"}]}
#
# Since: 6.0
##
diff --git a/qapi/misc-target.json b/qapi/misc-target.json
index 88291453ba..542a3e42f2 100644
--- a/qapi/misc-target.json
+++ b/qapi/misc-target.json
@@ -13,8 +13,8 @@
#
# Example:
#
-# -> { "execute": "rtc-reset-reinjection" }
-# <- { "return": {} }
+# -> { "execute": "rtc-reset-reinjection" }
+# <- { "return": {} }
##
{ 'command': 'rtc-reset-reinjection',
'if': 'TARGET_I386' }
@@ -91,10 +91,10 @@
#
# Example:
#
-# -> { "execute": "query-sev" }
-# <- { "return": { "enabled": true, "api-major" : 0, "api-minor" : 0,
-# "build-id" : 0, "policy" : 0, "state" : "running",
-# "handle" : 1 } }
+# -> { "execute": "query-sev" }
+# <- { "return": { "enabled": true, "api-major" : 0, "api-minor" : 0,
+# "build-id" : 0, "policy" : 0, "state" : "running",
+# "handle" : 1 } }
##
{ 'command': 'query-sev', 'returns': 'SevInfo',
'if': 'TARGET_I386' }
@@ -122,8 +122,8 @@
#
# Example:
#
-# -> { "execute": "query-sev-launch-measure" }
-# <- { "return": { "data": "4l8LXeNlSPUDlXPJG5966/8%YZ" } }
+# -> { "execute": "query-sev-launch-measure" }
+# <- { "return": { "data": "4l8LXeNlSPUDlXPJG5966/8%YZ" } }
##
{ 'command': 'query-sev-launch-measure', 'returns': 'SevLaunchMeasureInfo',
'if': 'TARGET_I386' }
@@ -167,10 +167,10 @@
#
# Example:
#
-# -> { "execute": "query-sev-capabilities" }
-# <- { "return": { "pdh": "8CCDD8DDD", "cert-chain": "888CCCDDDEE",
-# "cpu0-id": "2lvmGwo+...61iEinw==",
-# "cbitpos": 47, "reduced-phys-bits": 1}}
+# -> { "execute": "query-sev-capabilities" }
+# <- { "return": { "pdh": "8CCDD8DDD", "cert-chain": "888CCCDDDEE",
+# "cpu0-id": "2lvmGwo+...61iEinw==",
+# "cbitpos": 47, "reduced-phys-bits": 1}}
##
{ 'command': 'query-sev-capabilities', 'returns': 'SevCapability',
'if': 'TARGET_I386' }
@@ -221,9 +221,9 @@
#
# Example:
#
-# -> { "execute" : "query-sev-attestation-report",
-# "arguments": { "mnonce": "aaaaaaa" } }
-# <- { "return" : { "data": "aaaaaaaabbbddddd"} }
+# -> { "execute" : "query-sev-attestation-report",
+# "arguments": { "mnonce": "aaaaaaa" } }
+# <- { "return" : { "data": "aaaaaaaabbbddddd"} }
##
{ 'command': 'query-sev-attestation-report',
'data': { 'mnonce': 'str' },
@@ -237,15 +237,13 @@
#
# @filename: the path to the file to dump to
#
-# This command is only supported on s390 architecture.
-#
# Since: 2.5
#
# Example:
#
-# -> { "execute": "dump-skeys",
-# "arguments": { "filename": "/tmp/skeys" } }
-# <- { "return": {} }
+# -> { "execute": "dump-skeys",
+# "arguments": { "filename": "/tmp/skeys" } }
+# <- { "return": {} }
##
{ 'command': 'dump-skeys',
'data': { 'filename': 'str' },
@@ -288,9 +286,9 @@
#
# Example:
#
-# -> { "execute": "query-gic-capabilities" }
-# <- { "return": [{ "version": 2, "emulated": true, "kernel": false },
-# { "version": 3, "emulated": false, "kernel": true } ] }
+# -> { "execute": "query-gic-capabilities" }
+# <- { "return": [{ "version": 2, "emulated": true, "kernel": false },
+# { "version": 3, "emulated": false, "kernel": true } ] }
##
{ 'command': 'query-gic-capabilities', 'returns': ['GICCapability'],
'if': 'TARGET_ARM' }
@@ -346,11 +344,11 @@
#
# Example:
#
-# -> { "execute": "query-sgx" }
-# <- { "return": { "sgx": true, "sgx1" : true, "sgx2" : true,
-# "flc": true,
-# "sections": [{"node": 0, "size": 67108864},
-# {"node": 1, "size": 29360128}]} }
+# -> { "execute": "query-sgx" }
+# <- { "return": { "sgx": true, "sgx1" : true, "sgx2" : true,
+# "flc": true,
+# "sections": [{"node": 0, "size": 67108864},
+# {"node": 1, "size": 29360128}]} }
##
{ 'command': 'query-sgx', 'returns': 'SGXInfo', 'if': 'TARGET_I386' }
@@ -365,11 +363,11 @@
#
# Example:
#
-# -> { "execute": "query-sgx-capabilities" }
-# <- { "return": { "sgx": true, "sgx1" : true, "sgx2" : true,
-# "flc": true,
-# "section" : [{"node": 0, "size": 67108864},
-# {"node": 1, "size": 29360128}]} }
+# -> { "execute": "query-sgx-capabilities" }
+# <- { "return": { "sgx": true, "sgx1" : true, "sgx2" : true,
+# "flc": true,
+# "section" : [{"node": 0, "size": 67108864},
+# {"node": 1, "size": 29360128}]} }
##
{ 'command': 'query-sgx-capabilities', 'returns': 'SGXInfo', 'if': 'TARGET_I386' }
@@ -440,28 +438,28 @@
#
# Example:
#
-# -> { "execute": "xen-event-list" }
-# <- { "return": [
-# {
-# "pending": false,
-# "port": 1,
-# "vcpu": 1,
-# "remote-domain": "qemu",
-# "masked": false,
-# "type": "interdomain",
-# "target": 1
-# },
-# {
-# "pending": false,
-# "port": 2,
-# "vcpu": 0,
-# "remote-domain": "",
-# "masked": false,
-# "type": "virq",
-# "target": 0
-# }
-# ]
-# }
+# -> { "execute": "xen-event-list" }
+# <- { "return": [
+# {
+# "pending": false,
+# "port": 1,
+# "vcpu": 1,
+# "remote-domain": "qemu",
+# "masked": false,
+# "type": "interdomain",
+# "target": 1
+# },
+# {
+# "pending": false,
+# "port": 2,
+# "vcpu": 0,
+# "remote-domain": "",
+# "masked": false,
+# "type": "virq",
+# "target": 0
+# }
+# ]
+# }
##
{ 'command': 'xen-event-list',
'returns': ['EvtchnInfo'],
@@ -475,14 +473,14 @@
# @port: The port number
#
# Returns:
-# - Nothing on success.
+# - Nothing on success.
#
# Since: 8.0
#
# Example:
#
-# -> { "execute": "xen-event-inject", "arguments": { "port": 1 } }
-# <- { "return": { } }
+# -> { "execute": "xen-event-inject", "arguments": { "port": 1 } }
+# <- { "return": { } }
##
{ 'command': 'xen-event-inject',
'data': { 'port': 'uint32' },
diff --git a/qapi/misc.json b/qapi/misc.json
index 3622d98d01..11c55c2b6c 100644
--- a/qapi/misc.json
+++ b/qapi/misc.json
@@ -34,9 +34,9 @@
#
# Example:
#
-# -> { "execute": "add_client", "arguments": { "protocol": "vnc",
-# "fdname": "myclient" } }
-# <- { "return": {} }
+# -> { "execute": "add_client", "arguments": { "protocol": "vnc",
+# "fdname": "myclient" } }
+# <- { "return": {} }
##
{ 'command': 'add_client',
'data': { 'protocol': 'str', 'fdname': 'str', '*skipauth': 'bool',
@@ -64,8 +64,8 @@
#
# Example:
#
-# -> { "execute": "query-name" }
-# <- { "return": { "name": "qemu-name" } }
+# -> { "execute": "query-name" }
+# <- { "return": { "name": "qemu-name" } }
##
{ 'command': 'query-name', 'returns': 'NameInfo', 'allow-preconfig': true }
@@ -115,18 +115,18 @@
#
# Example:
#
-# -> { "execute": "query-iothreads" }
-# <- { "return": [
-# {
-# "id":"iothread0",
-# "thread-id":3134
-# },
-# {
-# "id":"iothread1",
-# "thread-id":3135
-# }
-# ]
-# }
+# -> { "execute": "query-iothreads" }
+# <- { "return": [
+# {
+# "id":"iothread0",
+# "thread-id":3134
+# },
+# {
+# "id":"iothread1",
+# "thread-id":3135
+# }
+# ]
+# }
##
{ 'command': 'query-iothreads', 'returns': ['IOThreadInfo'],
'allow-preconfig': true }
@@ -148,8 +148,8 @@
#
# Example:
#
-# -> { "execute": "stop" }
-# <- { "return": {} }
+# -> { "execute": "stop" }
+# <- { "return": {} }
##
{ 'command': 'stop' }
@@ -174,8 +174,8 @@
#
# Example:
#
-# -> { "execute": "cont" }
-# <- { "return": {} }
+# -> { "execute": "cont" }
+# <- { "return": {} }
##
{ 'command': 'cont' }
@@ -200,8 +200,8 @@
#
# Example:
#
-# -> { "execute": "x-exit-preconfig" }
-# <- { "return": {} }
+# -> { "execute": "x-exit-preconfig" }
+# <- { "return": {} }
##
{ 'command': 'x-exit-preconfig', 'allow-preconfig': true,
'features': [ 'unstable' ] }
@@ -240,9 +240,9 @@
#
# Example:
#
-# -> { "execute": "human-monitor-command",
-# "arguments": { "command-line": "info kvm" } }
-# <- { "return": "kvm support: enabled\r\n" }
+# -> { "execute": "human-monitor-command",
+# "arguments": { "command-line": "info kvm" } }
+# <- { "return": "kvm support: enabled\r\n" }
##
{ 'command': 'human-monitor-command',
'data': {'command-line': 'str', '*cpu-index': 'int'},
@@ -268,8 +268,8 @@
#
# Example:
#
-# -> { "execute": "getfd", "arguments": { "fdname": "fd1" } }
-# <- { "return": {} }
+# -> { "execute": "getfd", "arguments": { "fdname": "fd1" } }
+# <- { "return": {} }
##
{ 'command': 'getfd', 'data': {'fdname': 'str'}, 'if': 'CONFIG_POSIX' }
@@ -297,8 +297,8 @@
#
# Example:
#
-# -> { "execute": "get-win32-socket", "arguments": { "info": "abcd123..", fdname": "skclient" } }
-# <- { "return": {} }
+# -> { "execute": "get-win32-socket", "arguments": { "info": "abcd123..", fdname": "skclient" } }
+# <- { "return": {} }
##
{ 'command': 'get-win32-socket', 'data': {'info': 'str', 'fdname': 'str'}, 'if': 'CONFIG_WIN32' }
@@ -315,8 +315,8 @@
#
# Example:
#
-# -> { "execute": "closefd", "arguments": { "fdname": "fd1" } }
-# <- { "return": {} }
+# -> { "execute": "closefd", "arguments": { "fdname": "fd1" } }
+# <- { "return": {} }
##
{ 'command': 'closefd', 'data': {'fdname': 'str'} }
@@ -344,20 +344,21 @@
# @opaque: A free-form string that can be used to describe the fd.
#
# Returns:
-# - @AddfdInfo on success
-# - If file descriptor was not received, GenericError
-# - If @fdset-id is a negative value, GenericError
+# - @AddfdInfo on success
+# - If file descriptor was not received, GenericError
+# - If @fdset-id is a negative value, GenericError
#
-# Notes: The list of fd sets is shared by all monitor connections.
+# Notes:
+# The list of fd sets is shared by all monitor connections.
#
-# If @fdset-id is not specified, a new fd set will be created.
+# If @fdset-id is not specified, a new fd set will be created.
#
# Since: 1.2
#
# Example:
#
-# -> { "execute": "add-fd", "arguments": { "fdset-id": 1 } }
-# <- { "return": { "fdset-id": 1, "fd": 3 } }
+# -> { "execute": "add-fd", "arguments": { "fdset-id": 1 } }
+# <- { "return": { "fdset-id": 1, "fd": 3 } }
##
{ 'command': 'add-fd',
'data': { '*fdset-id': 'int',
@@ -374,20 +375,21 @@
# @fd: The file descriptor that is to be removed.
#
# Returns:
-# - Nothing on success
-# - If @fdset-id or @fd is not found, GenericError
+# - Nothing on success
+# - If @fdset-id or @fd is not found, GenericError
#
# Since: 1.2
#
-# Notes: The list of fd sets is shared by all monitor connections.
+# Notes:
+# The list of fd sets is shared by all monitor connections.
#
-# If @fd is not specified, all file descriptors in @fdset-id will be
-# removed.
+# If @fd is not specified, all file descriptors in @fdset-id will
+# be removed.
#
# Example:
#
-# -> { "execute": "remove-fd", "arguments": { "fdset-id": 1, "fd": 3 } }
-# <- { "return": {} }
+# -> { "execute": "remove-fd", "arguments": { "fdset-id": 1, "fd": 3 } }
+# <- { "return": {} }
##
{ 'command': 'remove-fd', 'data': {'fdset-id': 'int', '*fd': 'int'} }
@@ -432,34 +434,34 @@
#
# Example:
#
-# -> { "execute": "query-fdsets" }
-# <- { "return": [
-# {
-# "fds": [
-# {
-# "fd": 30,
-# "opaque": "rdonly:/path/to/file"
-# },
+# -> { "execute": "query-fdsets" }
+# <- { "return": [
# {
-# "fd": 24,
-# "opaque": "rdwr:/path/to/file"
-# }
-# ],
-# "fdset-id": 1
-# },
-# {
-# "fds": [
-# {
-# "fd": 28
+# "fds": [
+# {
+# "fd": 30,
+# "opaque": "rdonly:/path/to/file"
+# },
+# {
+# "fd": 24,
+# "opaque": "rdwr:/path/to/file"
+# }
+# ],
+# "fdset-id": 1
# },
# {
-# "fd": 29
+# "fds": [
+# {
+# "fd": 28
+# },
+# {
+# "fd": 29
+# }
+# ],
+# "fdset-id": 0
# }
-# ],
-# "fdset-id": 0
+# ]
# }
-# ]
-# }
##
{ 'command': 'query-fdsets', 'returns': ['FdsetInfo'] }
@@ -533,24 +535,24 @@
#
# Example:
#
-# -> { "execute": "query-command-line-options",
-# "arguments": { "option": "option-rom" } }
-# <- { "return": [
-# {
-# "parameters": [
-# {
-# "name": "romfile",
-# "type": "string"
-# },
-# {
-# "name": "bootindex",
-# "type": "number"
-# }
-# ],
-# "option": "option-rom"
-# }
-# ]
-# }
+# -> { "execute": "query-command-line-options",
+# "arguments": { "option": "option-rom" } }
+# <- { "return": [
+# {
+# "parameters": [
+# {
+# "name": "romfile",
+# "type": "string"
+# },
+# {
+# "name": "bootindex",
+# "type": "number"
+# }
+# ],
+# "option": "option-rom"
+# }
+# ]
+# }
##
{'command': 'query-command-line-options',
'data': {'*option': 'str'},
@@ -575,9 +577,9 @@
#
# Example:
#
-# <- { "event": "RTC_CHANGE",
-# "data": { "offset": 78 },
-# "timestamp": { "seconds": 1267020223, "microseconds": 435656 } }
+# <- { "event": "RTC_CHANGE",
+# "data": { "offset": 78 },
+# "timestamp": { "seconds": 1267020223, "microseconds": 435656 } }
##
{ 'event': 'RTC_CHANGE',
'data': { 'offset': 'int', 'qom-path': 'str' } }
@@ -602,12 +604,12 @@
#
# Example:
#
-# <- { "event": "VFU_CLIENT_HANGUP",
-# "data": { "vfu-id": "vfu1",
-# "vfu-qom-path": "/objects/vfu1",
-# "dev-id": "sas1",
-# "dev-qom-path": "/machine/peripheral/sas1" },
-# "timestamp": { "seconds": 1265044230, "microseconds": 450486 } }
+# <- { "event": "VFU_CLIENT_HANGUP",
+# "data": { "vfu-id": "vfu1",
+# "vfu-qom-path": "/objects/vfu1",
+# "dev-id": "sas1",
+# "dev-qom-path": "/machine/peripheral/sas1" },
+# "timestamp": { "seconds": 1265044230, "microseconds": 450486 } }
##
{ 'event': 'VFU_CLIENT_HANGUP',
'data': { 'vfu-id': 'str', 'vfu-qom-path': 'str',
diff --git a/qapi/net.json b/qapi/net.json
index 8095b68fa8..1374caac64 100644
--- a/qapi/net.json
+++ b/qapi/net.json
@@ -6,7 +6,6 @@
# = Net devices
##
-{ 'include': 'common.json' }
{ 'include': 'sockets.json' }
##
@@ -18,8 +17,9 @@
#
# @up: true to set the link status to be up
#
-# Returns: Nothing on success If @name is not a valid network device,
-# DeviceNotFound
+# Returns:
+# - Nothing on success
+# - If @name is not a valid network device, DeviceNotFound
#
# Since: 0.14
#
@@ -29,9 +29,9 @@
#
# Example:
#
-# -> { "execute": "set_link",
-# "arguments": { "name": "e1000.0", "up": false } }
-# <- { "return": {} }
+# -> { "execute": "set_link",
+# "arguments": { "name": "e1000.0", "up": false } }
+# <- { "return": {} }
##
{ 'command': 'set_link', 'data': {'name': 'str', 'up': 'bool'} }
@@ -44,15 +44,16 @@
#
# Since: 0.14
#
-# Returns: Nothing on success If @type is not a valid network backend,
-# DeviceNotFound
+# Returns:
+# - Nothing on success
+# - If @type is not a valid network backend, DeviceNotFound
#
# Example:
#
-# -> { "execute": "netdev_add",
-# "arguments": { "type": "user", "id": "netdev1",
-# "dnssearch": [ { "str": "example.org" } ] } }
-# <- { "return": {} }
+# -> { "execute": "netdev_add",
+# "arguments": { "type": "user", "id": "netdev1",
+# "dnssearch": [ { "str": "example.org" } ] } }
+# <- { "return": {} }
##
{ 'command': 'netdev_add', 'data': 'Netdev', 'boxed': true,
'allow-preconfig': true }
@@ -64,15 +65,16 @@
#
# @id: the name of the network backend to remove
#
-# Returns: Nothing on success If @id is not a valid network backend,
-# DeviceNotFound
+# Returns:
+# - Nothing on success
+# - If @id is not a valid network backend, DeviceNotFound
#
# Since: 0.14
#
# Example:
#
-# -> { "execute": "netdev_del", "arguments": { "id": "netdev1" } }
-# <- { "return": {} }
+# -> { "execute": "netdev_del", "arguments": { "id": "netdev1" } }
+# <- { "return": {} }
##
{ 'command': 'netdev_del', 'data': {'id': 'str'},
'allow-preconfig': true }
@@ -103,6 +105,17 @@
'*vectors': 'uint32' } }
##
+# @String:
+#
+# A fat type wrapping 'str', to be embedded in lists.
+#
+# Since: 1.2
+##
+{ 'struct': 'String',
+ 'data': {
+ 'str': 'str' } }
+
+##
# @NetdevUserOptions:
#
# Use the user mode network stack which requires no administrator
@@ -823,32 +836,32 @@
#
# Example:
#
-# -> { "execute": "query-rx-filter", "arguments": { "name": "vnet0" } }
-# <- { "return": [
-# {
-# "promiscuous": true,
-# "name": "vnet0",
-# "main-mac": "52:54:00:12:34:56",
-# "unicast": "normal",
-# "vlan": "normal",
-# "vlan-table": [
-# 4,
-# 0
-# ],
-# "unicast-table": [
-# ],
-# "multicast": "normal",
-# "multicast-overflow": false,
-# "unicast-overflow": false,
-# "multicast-table": [
-# "01:00:5e:00:00:01",
-# "33:33:00:00:00:01",
-# "33:33:ff:12:34:56"
-# ],
-# "broadcast-allowed": false
-# }
-# ]
-# }
+# -> { "execute": "query-rx-filter", "arguments": { "name": "vnet0" } }
+# <- { "return": [
+# {
+# "promiscuous": true,
+# "name": "vnet0",
+# "main-mac": "52:54:00:12:34:56",
+# "unicast": "normal",
+# "vlan": "normal",
+# "vlan-table": [
+# 4,
+# 0
+# ],
+# "unicast-table": [
+# ],
+# "multicast": "normal",
+# "multicast-overflow": false,
+# "unicast-overflow": false,
+# "multicast-table": [
+# "01:00:5e:00:00:01",
+# "33:33:00:00:00:01",
+# "33:33:ff:12:34:56"
+# ],
+# "broadcast-allowed": false
+# }
+# ]
+# }
##
{ 'command': 'query-rx-filter',
'data': { '*name': 'str' },
@@ -868,10 +881,10 @@
#
# Example:
#
-# <- { "event": "NIC_RX_FILTER_CHANGED",
-# "data": { "name": "vnet0",
-# "path": "/machine/peripheral/vnet0/virtio-backend" },
-# "timestamp": { "seconds": 1368697518, "microseconds": 326866 } }
+# <- { "event": "NIC_RX_FILTER_CHANGED",
+# "data": { "name": "vnet0",
+# "path": "/machine/peripheral/vnet0/virtio-backend" },
+# "timestamp": { "seconds": 1368697518, "microseconds": 326866 } }
##
{ 'event': 'NIC_RX_FILTER_CHANGED',
'data': { '*name': 'str', 'path': 'str' } }
@@ -917,11 +930,11 @@
#
# Example:
#
-# -> { "execute": "announce-self",
-# "arguments": {
-# "initial": 50, "max": 550, "rounds": 10, "step": 50,
-# "interfaces": ["vn2", "vn3"], "id": "bob" } }
-# <- { "return": {} }
+# -> { "execute": "announce-self",
+# "arguments": {
+# "initial": 50, "max": 550, "rounds": 10, "step": 50,
+# "interfaces": ["vn2", "vn3"], "id": "bob" } }
+# <- { "return": {} }
#
# Since: 4.0
##
@@ -942,9 +955,9 @@
#
# Example:
#
-# <- { "event": "FAILOVER_NEGOTIATED",
-# "data": { "device-id": "net1" },
-# "timestamp": { "seconds": 1368697518, "microseconds": 326866 } }
+# <- { "event": "FAILOVER_NEGOTIATED",
+# "data": { "device-id": "net1" },
+# "timestamp": { "seconds": 1368697518, "microseconds": 326866 } }
##
{ 'event': 'FAILOVER_NEGOTIATED',
'data': {'device-id': 'str'} }
@@ -962,16 +975,16 @@
#
# Examples:
#
-# <- { "event": "NETDEV_STREAM_CONNECTED",
-# "data": { "netdev-id": "netdev0",
-# "addr": { "port": "47666", "ipv6": true,
-# "host": "::1", "type": "inet" } },
-# "timestamp": { "seconds": 1666269863, "microseconds": 311222 } }
+# <- { "event": "NETDEV_STREAM_CONNECTED",
+# "data": { "netdev-id": "netdev0",
+# "addr": { "port": "47666", "ipv6": true,
+# "host": "::1", "type": "inet" } },
+# "timestamp": { "seconds": 1666269863, "microseconds": 311222 } }
#
-# <- { "event": "NETDEV_STREAM_CONNECTED",
-# "data": { "netdev-id": "netdev0",
-# "addr": { "path": "/tmp/qemu0", "type": "unix" } },
-# "timestamp": { "seconds": 1666269706, "microseconds": 413651 } }
+# <- { "event": "NETDEV_STREAM_CONNECTED",
+# "data": { "netdev-id": "netdev0",
+# "addr": { "path": "/tmp/qemu0", "type": "unix" } },
+# "timestamp": { "seconds": 1666269706, "microseconds": 413651 } }
##
{ 'event': 'NETDEV_STREAM_CONNECTED',
'data': { 'netdev-id': 'str',
@@ -988,9 +1001,9 @@
#
# Example:
#
-# <- { 'event': 'NETDEV_STREAM_DISCONNECTED',
-# 'data': {'netdev-id': 'netdev0'},
-# 'timestamp': {'seconds': 1663330937, 'microseconds': 526695} }
+# <- { 'event': 'NETDEV_STREAM_DISCONNECTED',
+# 'data': {'netdev-id': 'netdev0'},
+# 'timestamp': {'seconds': 1663330937, 'microseconds': 526695} }
##
{ 'event': 'NETDEV_STREAM_DISCONNECTED',
'data': { 'netdev-id': 'str' } }
diff --git a/qapi/pci.json b/qapi/pci.json
index 086c773052..08bf695863 100644
--- a/qapi/pci.json
+++ b/qapi/pci.json
@@ -184,132 +184,132 @@
#
# Example:
#
-# -> { "execute": "query-pci" }
-# <- { "return": [
-# {
-# "bus": 0,
-# "devices": [
-# {
-# "bus": 0,
-# "qdev_id": "",
-# "slot": 0,
-# "class_info": {
-# "class": 1536,
-# "desc": "Host bridge"
-# },
-# "id": {
-# "device": 32902,
-# "vendor": 4663
-# },
-# "function": 0,
-# "regions": [
-# ]
-# },
-# {
-# "bus": 0,
-# "qdev_id": "",
-# "slot": 1,
-# "class_info": {
-# "class": 1537,
-# "desc": "ISA bridge"
-# },
-# "id": {
-# "device": 32902,
-# "vendor": 28672
-# },
-# "function": 0,
-# "regions": [
-# ]
-# },
-# {
-# "bus": 0,
-# "qdev_id": "",
-# "slot": 1,
-# "class_info": {
-# "class": 257,
-# "desc": "IDE controller"
-# },
-# "id": {
-# "device": 32902,
-# "vendor": 28688
-# },
-# "function": 1,
-# "regions": [
-# {
-# "bar": 4,
-# "size": 16,
-# "address": 49152,
-# "type": "io"
-# }
-# ]
-# },
-# {
-# "bus": 0,
-# "qdev_id": "",
-# "slot": 2,
-# "class_info": {
-# "class": 768,
-# "desc": "VGA controller"
-# },
-# "id": {
-# "device": 4115,
-# "vendor": 184
-# },
-# "function": 0,
-# "regions": [
-# {
-# "prefetch": true,
-# "mem_type_64": false,
-# "bar": 0,
-# "size": 33554432,
-# "address": 4026531840,
-# "type": "memory"
-# },
-# {
-# "prefetch": false,
-# "mem_type_64": false,
-# "bar": 1,
-# "size": 4096,
-# "address": 4060086272,
-# "type": "memory"
-# },
-# {
-# "prefetch": false,
-# "mem_type_64": false,
-# "bar": 6,
-# "size": 65536,
-# "address": -1,
-# "type": "memory"
-# }
-# ]
-# },
-# {
-# "bus": 0,
-# "qdev_id": "",
-# "irq": 11,
-# "slot": 4,
-# "class_info": {
-# "class": 1280,
-# "desc": "RAM controller"
-# },
-# "id": {
-# "device": 6900,
-# "vendor": 4098
-# },
-# "function": 0,
-# "regions": [
-# {
-# "bar": 0,
-# "size": 32,
-# "address": 49280,
-# "type": "io"
-# }
-# ]
-# }
-# ]
-# }
-# ]
-# }
+# -> { "execute": "query-pci" }
+# <- { "return": [
+# {
+# "bus": 0,
+# "devices": [
+# {
+# "bus": 0,
+# "qdev_id": "",
+# "slot": 0,
+# "class_info": {
+# "class": 1536,
+# "desc": "Host bridge"
+# },
+# "id": {
+# "device": 32902,
+# "vendor": 4663
+# },
+# "function": 0,
+# "regions": [
+# ]
+# },
+# {
+# "bus": 0,
+# "qdev_id": "",
+# "slot": 1,
+# "class_info": {
+# "class": 1537,
+# "desc": "ISA bridge"
+# },
+# "id": {
+# "device": 32902,
+# "vendor": 28672
+# },
+# "function": 0,
+# "regions": [
+# ]
+# },
+# {
+# "bus": 0,
+# "qdev_id": "",
+# "slot": 1,
+# "class_info": {
+# "class": 257,
+# "desc": "IDE controller"
+# },
+# "id": {
+# "device": 32902,
+# "vendor": 28688
+# },
+# "function": 1,
+# "regions": [
+# {
+# "bar": 4,
+# "size": 16,
+# "address": 49152,
+# "type": "io"
+# }
+# ]
+# },
+# {
+# "bus": 0,
+# "qdev_id": "",
+# "slot": 2,
+# "class_info": {
+# "class": 768,
+# "desc": "VGA controller"
+# },
+# "id": {
+# "device": 4115,
+# "vendor": 184
+# },
+# "function": 0,
+# "regions": [
+# {
+# "prefetch": true,
+# "mem_type_64": false,
+# "bar": 0,
+# "size": 33554432,
+# "address": 4026531840,
+# "type": "memory"
+# },
+# {
+# "prefetch": false,
+# "mem_type_64": false,
+# "bar": 1,
+# "size": 4096,
+# "address": 4060086272,
+# "type": "memory"
+# },
+# {
+# "prefetch": false,
+# "mem_type_64": false,
+# "bar": 6,
+# "size": 65536,
+# "address": -1,
+# "type": "memory"
+# }
+# ]
+# },
+# {
+# "bus": 0,
+# "qdev_id": "",
+# "irq": 11,
+# "slot": 4,
+# "class_info": {
+# "class": 1280,
+# "desc": "RAM controller"
+# },
+# "id": {
+# "device": 6900,
+# "vendor": 4098
+# },
+# "function": 0,
+# "regions": [
+# {
+# "bar": 0,
+# "size": 32,
+# "address": 49280,
+# "type": "io"
+# }
+# ]
+# }
+# ]
+# }
+# ]
+# }
#
# Note: This example has been shortened as the real response is too
# long.
diff --git a/qapi/pragma.json b/qapi/pragma.json
index 0aa4eeddd3..6929ab776e 100644
--- a/qapi/pragma.json
+++ b/qapi/pragma.json
@@ -31,6 +31,72 @@
'query-tpm-models',
'query-tpm-types',
'ringbuf-read' ],
+ # Types, commands, and events with undocumented members / arguments:
+ 'documentation-exceptions': [
+ 'AbortWrapper',
+ 'AudiodevDriver',
+ 'BlkdebugEvent',
+ 'BlockDirtyBitmapAddWrapper',
+ 'BlockDirtyBitmapMergeWrapper',
+ 'BlockDirtyBitmapWrapper',
+ 'BlockdevBackupWrapper',
+ 'BlockdevDriver',
+ 'BlockdevQcow2EncryptionFormat',
+ 'BlockdevSnapshotInternalWrapper',
+ 'BlockdevSnapshotSyncWrapper',
+ 'BlockdevSnapshotWrapper',
+ 'BlockdevVmdkAdapterType',
+ 'ChardevBackendKind',
+ 'CpuS390Entitlement',
+ 'CpuS390Polarization',
+ 'CpuS390State',
+ 'CxlCorErrorType',
+ 'DisplayProtocol',
+ 'DriveBackupWrapper',
+ 'DummyBlockCoreForceArrays',
+ 'DummyForceArrays',
+ 'DummyVirtioForceArrays',
+ 'GrabToggleKeys',
+ 'GuestPanicInformationHyperV',
+ 'HotKeyMod',
+ 'ImageInfoSpecificKind',
+ 'InputAxis',
+ 'InputButton',
+ 'InputMultiTouchEvent',
+ 'InputMultiTouchType',
+ 'IscsiHeaderDigest',
+ 'IscsiTransport',
+ 'JSONType',
+ 'KeyValueKind',
+ 'MemoryDeviceInfoKind',
+ 'NetClientDriver',
+ 'ObjectType',
+ 'PciMemoryRegion',
+ 'QCryptoAkCipherKeyType',
+ 'QCryptodevBackendServiceType',
+ 'QKeyCode',
+ 'Qcow2OverlapCheckFlags',
+ 'RbdAuthMode',
+ 'RbdImageEncryptionFormat',
+ 'StatsFilter',
+ 'StatsValue',
+ 'String',
+ 'StringWrapper',
+ 'SysEmuTarget',
+ 'ThrottleGroupProperties',
+ 'VncPrimaryAuth',
+ 'VncVencryptSubAuth',
+ 'X86CPURegister32',
+ 'XDbgBlockGraph',
+ 'YankInstanceType',
+ 'blockdev-reopen',
+ 'query-cpu-model-baseline',
+ 'query-cpu-model-comparison',
+ 'query-cpu-model-expansion',
+ 'query-rocker',
+ 'query-rocker-ports',
+ 'query-stats-schemas',
+ 'watchdog-set-action' ],
# Externally visible types whose member names may use uppercase
'member-name-exceptions': [ # visible in:
'ACPISlotType', # query-acpi-ospm-status
diff --git a/qapi/qapi-util.c b/qapi/qapi-util.c
index 63596e11c5..65a7d18437 100644
--- a/qapi/qapi-util.c
+++ b/qapi/qapi-util.c
@@ -112,7 +112,7 @@ bool qapi_bool_parse(const char *name, const char *value, bool *obj, Error **err
* It may be prefixed by __RFQDN_ (downstream extension), where RFQDN
* may contain only letters, digits, hyphen and period.
* The special exception for enumeration names is not implemented.
- * See docs/devel/qapi-code-gen.txt for more on QAPI naming rules.
+ * See docs/devel/qapi-code-gen.rst for more on QAPI naming rules.
* Keep this consistent with scripts/qapi-gen.py!
* If @complete, the parse fails unless it consumes @str completely.
* Return its length on success, -1 on failure.
diff --git a/qapi/qdev.json b/qapi/qdev.json
index 6bc5a733b8..32ffaee644 100644
--- a/qapi/qdev.json
+++ b/qapi/qdev.json
@@ -53,22 +53,22 @@
#
# Notes:
#
-# 1. Additional arguments depend on the type.
+# 1. Additional arguments depend on the type.
#
-# 2. For detailed information about this command, please refer to the
-# 'docs/qdev-device-use.txt' file.
+# 2. For detailed information about this command, please refer to
+# the 'docs/qdev-device-use.txt' file.
#
-# 3. It's possible to list device properties by running QEMU with the
-# "-device DEVICE,help" command-line argument, where DEVICE is the
-# device's name
+# 3. It's possible to list device properties by running QEMU with
+# the "-device DEVICE,help" command-line argument, where DEVICE
+# is the device's name
#
# Example:
#
-# -> { "execute": "device_add",
-# "arguments": { "driver": "e1000", "id": "net1",
-# "bus": "pci.0",
-# "mac": "52:54:00:12:34:56" } }
-# <- { "return": {} }
+# -> { "execute": "device_add",
+# "arguments": { "driver": "e1000", "id": "net1",
+# "bus": "pci.0",
+# "mac": "52:54:00:12:34:56" } }
+# <- { "return": {} }
#
# TODO: This command effectively bypasses QAPI completely due to its
# "additional arguments" business. It shouldn't have been added
@@ -89,8 +89,9 @@
#
# @id: the device's ID or QOM path
#
-# Returns: Nothing on success If @id is not a valid device,
-# DeviceNotFound
+# Returns:
+# - Nothing on success
+# - If @id is not a valid device, DeviceNotFound
#
# Notes: When this command completes, the device may not be removed
# from the guest. Hot removal is an operation that requires guest
@@ -106,13 +107,13 @@
#
# Examples:
#
-# -> { "execute": "device_del",
-# "arguments": { "id": "net1" } }
-# <- { "return": {} }
+# -> { "execute": "device_del",
+# "arguments": { "id": "net1" } }
+# <- { "return": {} }
#
-# -> { "execute": "device_del",
-# "arguments": { "id": "/machine/peripheral-anon/device[0]" } }
-# <- { "return": {} }
+# -> { "execute": "device_del",
+# "arguments": { "id": "/machine/peripheral-anon/device[0]" } }
+# <- { "return": {} }
##
{ 'command': 'device_del', 'data': {'id': 'str'} }
@@ -132,10 +133,10 @@
#
# Example:
#
-# <- { "event": "DEVICE_DELETED",
-# "data": { "device": "virtio-net-pci-0",
-# "path": "/machine/peripheral/virtio-net-pci-0" },
-# "timestamp": { "seconds": 1265044230, "microseconds": 450486 } }
+# <- { "event": "DEVICE_DELETED",
+# "data": { "device": "virtio-net-pci-0",
+# "path": "/machine/peripheral/virtio-net-pci-0" },
+# "timestamp": { "seconds": 1265044230, "microseconds": 450486 } }
##
{ 'event': 'DEVICE_DELETED',
'data': { '*device': 'str', 'path': 'str' } }
@@ -154,10 +155,10 @@
#
# Example:
#
-# <- { "event": "DEVICE_UNPLUG_GUEST_ERROR",
-# "data": { "device": "core1",
-# "path": "/machine/peripheral/core1" },
-# "timestamp": { "seconds": 1615570772, "microseconds": 202844 } }
+# <- { "event": "DEVICE_UNPLUG_GUEST_ERROR",
+# "data": { "device": "core1",
+# "path": "/machine/peripheral/core1" },
+# "timestamp": { "seconds": 1615570772, "microseconds": 202844 } }
##
{ 'event': 'DEVICE_UNPLUG_GUEST_ERROR',
'data': { '*device': 'str', 'path': 'str' } }
diff --git a/qapi/qmp-dispatch.c b/qapi/qmp-dispatch.c
index 555528b6bb..f3488afeef 100644
--- a/qapi/qmp-dispatch.c
+++ b/qapi/qmp-dispatch.c
@@ -206,9 +206,28 @@ QDict *coroutine_mixed_fn qmp_dispatch(const QmpCommandList *cmds, QObject *requ
assert(!(oob && qemu_in_coroutine()));
assert(monitor_cur() == NULL);
if (!!(cmd->options & QCO_COROUTINE) == qemu_in_coroutine()) {
+ if (qemu_in_coroutine()) {
+ /*
+ * Move the coroutine from iohandler_ctx to qemu_aio_context for
+ * executing the command handler so that it can make progress if it
+ * involves an AIO_WAIT_WHILE().
+ */
+ aio_co_reschedule_self(qemu_get_aio_context());
+ }
+
monitor_set_cur(qemu_coroutine_self(), cur_mon);
cmd->fn(args, &ret, &err);
monitor_set_cur(qemu_coroutine_self(), NULL);
+
+ if (qemu_in_coroutine()) {
+ /*
+ * Yield and reschedule so the main loop stays responsive.
+ *
+ * Move back to iohandler_ctx so that nested event loops for
+ * qemu_aio_context don't start new monitor commands.
+ */
+ aio_co_reschedule_self(iohandler_get_aio_context());
+ }
} else {
/*
* Actual context doesn't match the one the command needs.
@@ -232,7 +251,7 @@ QDict *coroutine_mixed_fn qmp_dispatch(const QmpCommandList *cmds, QObject *requ
.errp = &err,
.co = qemu_coroutine_self(),
};
- aio_bh_schedule_oneshot(qemu_get_aio_context(), do_qmp_dispatch_bh,
+ aio_bh_schedule_oneshot(iohandler_get_aio_context(), do_qmp_dispatch_bh,
&data);
qemu_coroutine_yield();
}
diff --git a/qapi/qom.json b/qapi/qom.json
index 95516ba325..2a6e49365a 100644
--- a/qapi/qom.json
+++ b/qapi/qom.json
@@ -61,12 +61,12 @@
#
# Example:
#
-# -> { "execute": "qom-list",
-# "arguments": { "path": "/chardevs" } }
-# <- { "return": [ { "name": "type", "type": "string" },
-# { "name": "parallel0", "type": "child<chardev-vc>" },
-# { "name": "serial0", "type": "child<chardev-vc>" },
-# { "name": "mon0", "type": "child<chardev-stdio>" } ] }
+# -> { "execute": "qom-list",
+# "arguments": { "path": "/chardevs" } }
+# <- { "return": [ { "name": "type", "type": "string" },
+# { "name": "parallel0", "type": "child<chardev-vc>" },
+# { "name": "serial0", "type": "child<chardev-vc>" },
+# { "name": "mon0", "type": "child<chardev-stdio>" } ] }
##
{ 'command': 'qom-list',
'data': { 'path': 'str' },
@@ -106,19 +106,19 @@
#
# Examples:
#
-# 1. Use absolute path
+# 1. Use absolute path
#
-# -> { "execute": "qom-get",
-# "arguments": { "path": "/machine/unattached/device[0]",
-# "property": "hotplugged" } }
-# <- { "return": false }
+# -> { "execute": "qom-get",
+# "arguments": { "path": "/machine/unattached/device[0]",
+# "property": "hotplugged" } }
+# <- { "return": false }
#
-# 2. Use partial path
+# 2. Use partial path
#
-# -> { "execute": "qom-get",
-# "arguments": { "path": "unattached/sysbus",
-# "property": "type" } }
-# <- { "return": "System" }
+# -> { "execute": "qom-get",
+# "arguments": { "path": "unattached/sysbus",
+# "property": "type" } }
+# <- { "return": "System" }
##
{ 'command': 'qom-get',
'data': { 'path': 'str', 'property': 'str' },
@@ -141,11 +141,11 @@
#
# Example:
#
-# -> { "execute": "qom-set",
-# "arguments": { "path": "/machine",
-# "property": "graphics",
-# "value": false } }
-# <- { "return": {} }
+# -> { "execute": "qom-set",
+# "arguments": { "path": "/machine",
+# "property": "graphics",
+# "value": false } }
+# <- { "return": {} }
##
{ 'command': 'qom-set',
'data': { 'path': 'str', 'property': 'str', 'value': 'any' },
@@ -1056,17 +1056,18 @@
#
# Create a QOM object.
#
-# Returns: Nothing on success Error if @qom-type is not a valid class
-# name
+# Returns:
+# - Nothing on success
+# - Error if @qom-type is not a valid class name
#
# Since: 2.0
#
# Example:
#
-# -> { "execute": "object-add",
-# "arguments": { "qom-type": "rng-random", "id": "rng1",
-# "filename": "/dev/hwrng" } }
-# <- { "return": {} }
+# -> { "execute": "object-add",
+# "arguments": { "qom-type": "rng-random", "id": "rng1",
+# "filename": "/dev/hwrng" } }
+# <- { "return": {} }
##
{ 'command': 'object-add', 'data': 'ObjectOptions', 'boxed': true,
'allow-preconfig': true }
@@ -1078,15 +1079,16 @@
#
# @id: the name of the QOM object to remove
#
-# Returns: Nothing on success Error if @id is not a valid id for a QOM
-# object
+# Returns:
+# - Nothing on success
+# - Error if @id is not a valid id for a QOM object
#
# Since: 2.0
#
# Example:
#
-# -> { "execute": "object-del", "arguments": { "id": "rng1" } }
-# <- { "return": {} }
+# -> { "execute": "object-del", "arguments": { "id": "rng1" } }
+# <- { "return": {} }
##
{ 'command': 'object-del', 'data': {'id': 'str'},
'allow-preconfig': true }
diff --git a/qapi/rdma.json b/qapi/rdma.json
index 23ebcf7885..195c001850 100644
--- a/qapi/rdma.json
+++ b/qapi/rdma.json
@@ -23,13 +23,13 @@
#
# Example:
#
-# <- {"timestamp": {"seconds": 1541579657, "microseconds": 986760},
-# "event": "RDMA_GID_STATUS_CHANGED",
-# "data":
-# {"netdev": "bridge0",
-# "interface-id": 15880512517475447892,
-# "gid-status": true,
-# "subnet-prefix": 33022}}
+# <- {"timestamp": {"seconds": 1541579657, "microseconds": 986760},
+# "event": "RDMA_GID_STATUS_CHANGED",
+# "data":
+# {"netdev": "bridge0",
+# "interface-id": 15880512517475447892,
+# "gid-status": true,
+# "subnet-prefix": 33022}}
##
{ 'event': 'RDMA_GID_STATUS_CHANGED',
'data': { 'netdev' : 'str',
diff --git a/qapi/replay.json b/qapi/replay.json
index 289b2d3658..8626fb58f4 100644
--- a/qapi/replay.json
+++ b/qapi/replay.json
@@ -56,8 +56,8 @@
#
# Example:
#
-# -> { "execute": "query-replay" }
-# <- { "return": { "mode": "play", "filename": "log.rr", "icount": 220414 } }
+# -> { "execute": "query-replay" }
+# <- { "return": { "mode": "play", "filename": "log.rr", "icount": 220414 } }
##
{ 'command': 'query-replay',
'returns': 'ReplayInfo' }
@@ -78,8 +78,8 @@
#
# Example:
#
-# -> { "execute": "replay-break", "arguments": { "icount": 220414 } }
-# <- { "return": {} }
+# -> { "execute": "replay-break", "arguments": { "icount": 220414 } }
+# <- { "return": {} }
##
{ 'command': 'replay-break', 'data': { 'icount': 'int' } }
@@ -93,8 +93,8 @@
#
# Example:
#
-# -> { "execute": "replay-delete-break" }
-# <- { "return": {} }
+# -> { "execute": "replay-delete-break" }
+# <- { "return": {} }
##
{ 'command': 'replay-delete-break' }
@@ -114,7 +114,7 @@
#
# Example:
#
-# -> { "execute": "replay-seek", "arguments": { "icount": 220414 } }
-# <- { "return": {} }
+# -> { "execute": "replay-seek", "arguments": { "icount": 220414 } }
+# <- { "return": {} }
##
{ 'command': 'replay-seek', 'data': { 'icount': 'int' } }
diff --git a/qapi/rocker.json b/qapi/rocker.json
index 31ce0b36f6..5635cf174f 100644
--- a/qapi/rocker.json
+++ b/qapi/rocker.json
@@ -32,8 +32,8 @@
#
# Example:
#
-# -> { "execute": "query-rocker", "arguments": { "name": "sw1" } }
-# <- { "return": {"name": "sw1", "ports": 2, "id": 1327446905938}}
+# -> { "execute": "query-rocker", "arguments": { "name": "sw1" } }
+# <- { "return": {"name": "sw1", "ports": 2, "id": 1327446905938}}
##
{ 'command': 'query-rocker',
'data': { 'name': 'str' },
@@ -100,12 +100,12 @@
#
# Example:
#
-# -> { "execute": "query-rocker-ports", "arguments": { "name": "sw1" } }
-# <- { "return": [ {"duplex": "full", "enabled": true, "name": "sw1.1",
-# "autoneg": "off", "link-up": true, "speed": 10000},
-# {"duplex": "full", "enabled": true, "name": "sw1.2",
-# "autoneg": "off", "link-up": true, "speed": 10000}
-# ]}
+# -> { "execute": "query-rocker-ports", "arguments": { "name": "sw1" } }
+# <- { "return": [ {"duplex": "full", "enabled": true, "name": "sw1.1",
+# "autoneg": "off", "link-up": true, "speed": 10000},
+# {"duplex": "full", "enabled": true, "name": "sw1.2",
+# "autoneg": "off", "link-up": true, "speed": 10000}
+# ]}
##
{ 'command': 'query-rocker-ports',
'data': { 'name': 'str' },
@@ -242,16 +242,16 @@
#
# Example:
#
-# -> { "execute": "query-rocker-of-dpa-flows",
-# "arguments": { "name": "sw1" } }
-# <- { "return": [ {"key": {"in-pport": 0, "priority": 1, "tbl-id": 0},
-# "hits": 138,
-# "cookie": 0,
-# "action": {"goto-tbl": 10},
-# "mask": {"in-pport": 4294901760}
-# },
-# {...more...},
-# ]}
+# -> { "execute": "query-rocker-of-dpa-flows",
+# "arguments": { "name": "sw1" } }
+# <- { "return": [ {"key": {"in-pport": 0, "priority": 1, "tbl-id": 0},
+# "hits": 138,
+# "cookie": 0,
+# "action": {"goto-tbl": 10},
+# "mask": {"in-pport": 4294901760}
+# },
+# {...more...},
+# ]}
##
{ 'command': 'query-rocker-of-dpa-flows',
'data': { 'name': 'str', '*tbl-id': 'uint32' },
@@ -317,21 +317,21 @@
#
# Example:
#
-# -> { "execute": "query-rocker-of-dpa-groups",
-# "arguments": { "name": "sw1" } }
-# <- { "return": [ {"type": 0, "out-pport": 2,
-# "pport": 2, "vlan-id": 3841,
-# "pop-vlan": 1, "id": 251723778},
-# {"type": 0, "out-pport": 0,
-# "pport": 0, "vlan-id": 3841,
-# "pop-vlan": 1, "id": 251723776},
-# {"type": 0, "out-pport": 1,
-# "pport": 1, "vlan-id": 3840,
-# "pop-vlan": 1, "id": 251658241},
-# {"type": 0, "out-pport": 0,
-# "pport": 0, "vlan-id": 3840,
-# "pop-vlan": 1, "id": 251658240}
-# ]}
+# -> { "execute": "query-rocker-of-dpa-groups",
+# "arguments": { "name": "sw1" } }
+# <- { "return": [ {"type": 0, "out-pport": 2,
+# "pport": 2, "vlan-id": 3841,
+# "pop-vlan": 1, "id": 251723778},
+# {"type": 0, "out-pport": 0,
+# "pport": 0, "vlan-id": 3841,
+# "pop-vlan": 1, "id": 251723776},
+# {"type": 0, "out-pport": 1,
+# "pport": 1, "vlan-id": 3840,
+# "pop-vlan": 1, "id": 251658241},
+# {"type": 0, "out-pport": 0,
+# "pport": 0, "vlan-id": 3840,
+# "pop-vlan": 1, "id": 251658240}
+# ]}
##
{ 'command': 'query-rocker-of-dpa-groups',
'data': { 'name': 'str', '*type': 'uint8' },
diff --git a/qapi/run-state.json b/qapi/run-state.json
index 08bc99cb85..dd0770b379 100644
--- a/qapi/run-state.json
+++ b/qapi/run-state.json
@@ -108,8 +108,6 @@
#
# @status: the virtual machine @RunState
#
-# Features:
-#
# Since: 0.14
#
##
@@ -128,9 +126,9 @@
#
# Example:
#
-# -> { "execute": "query-status" }
-# <- { "return": { "running": true,
-# "status": "running" } }
+# -> { "execute": "query-status" }
+# <- { "return": { "running": true,
+# "status": "running" } }
##
{ 'command': 'query-status', 'returns': 'StatusInfo',
'allow-preconfig': true }
@@ -157,9 +155,9 @@
#
# Example:
#
-# <- { "event": "SHUTDOWN",
-# "data": { "guest": true, "reason": "guest-shutdown" },
-# "timestamp": { "seconds": 1267040730, "microseconds": 682951 } }
+# <- { "event": "SHUTDOWN",
+# "data": { "guest": true, "reason": "guest-shutdown" },
+# "timestamp": { "seconds": 1267040730, "microseconds": 682951 } }
##
{ 'event': 'SHUTDOWN', 'data': { 'guest': 'bool', 'reason': 'ShutdownCause' } }
@@ -173,8 +171,8 @@
#
# Example:
#
-# <- { "event": "POWERDOWN",
-# "timestamp": { "seconds": 1267040730, "microseconds": 682951 } }
+# <- { "event": "POWERDOWN",
+# "timestamp": { "seconds": 1267040730, "microseconds": 682951 } }
##
{ 'event': 'POWERDOWN' }
@@ -194,9 +192,9 @@
#
# Example:
#
-# <- { "event": "RESET",
-# "data": { "guest": false, "reason": "guest-reset" },
-# "timestamp": { "seconds": 1267041653, "microseconds": 9518 } }
+# <- { "event": "RESET",
+# "data": { "guest": false, "reason": "guest-reset" },
+# "timestamp": { "seconds": 1267041653, "microseconds": 9518 } }
##
{ 'event': 'RESET', 'data': { 'guest': 'bool', 'reason': 'ShutdownCause' } }
@@ -209,8 +207,8 @@
#
# Example:
#
-# <- { "event": "STOP",
-# "timestamp": { "seconds": 1267041730, "microseconds": 281295 } }
+# <- { "event": "STOP",
+# "timestamp": { "seconds": 1267041730, "microseconds": 281295 } }
##
{ 'event': 'STOP' }
@@ -223,8 +221,8 @@
#
# Example:
#
-# <- { "event": "RESUME",
-# "timestamp": { "seconds": 1271770767, "microseconds": 582542 } }
+# <- { "event": "RESUME",
+# "timestamp": { "seconds": 1271770767, "microseconds": 582542 } }
##
{ 'event': 'RESUME' }
@@ -238,8 +236,8 @@
#
# Example:
#
-# <- { "event": "SUSPEND",
-# "timestamp": { "seconds": 1344456160, "microseconds": 309119 } }
+# <- { "event": "SUSPEND",
+# "timestamp": { "seconds": 1344456160, "microseconds": 309119 } }
##
{ 'event': 'SUSPEND' }
@@ -257,8 +255,8 @@
#
# Example:
#
-# <- { "event": "SUSPEND_DISK",
-# "timestamp": { "seconds": 1344456160, "microseconds": 309119 } }
+# <- { "event": "SUSPEND_DISK",
+# "timestamp": { "seconds": 1344456160, "microseconds": 309119 } }
##
{ 'event': 'SUSPEND_DISK' }
@@ -272,8 +270,8 @@
#
# Example:
#
-# <- { "event": "WAKEUP",
-# "timestamp": { "seconds": 1344522075, "microseconds": 745528 } }
+# <- { "event": "WAKEUP",
+# "timestamp": { "seconds": 1344522075, "microseconds": 745528 } }
##
{ 'event': 'WAKEUP' }
@@ -294,9 +292,9 @@
#
# Example:
#
-# <- { "event": "WATCHDOG",
-# "data": { "action": "reset" },
-# "timestamp": { "seconds": 1267061043, "microseconds": 959568 } }
+# <- { "event": "WATCHDOG",
+# "data": { "action": "reset" },
+# "timestamp": { "seconds": 1267061043, "microseconds": 959568 } }
##
{ 'event': 'WATCHDOG',
'data': { 'action': 'WatchdogAction' } }
@@ -406,12 +404,12 @@
#
# Example:
#
-# -> { "execute": "set-action",
-# "arguments": { "reboot": "shutdown",
-# "shutdown" : "pause",
-# "panic": "pause",
-# "watchdog": "inject-nmi" } }
-# <- { "return": {} }
+# -> { "execute": "set-action",
+# "arguments": { "reboot": "shutdown",
+# "shutdown" : "pause",
+# "panic": "pause",
+# "watchdog": "inject-nmi" } }
+# <- { "return": {} }
##
{ 'command': 'set-action',
'data': { '*reboot': 'RebootAction',
@@ -433,9 +431,9 @@
#
# Example:
#
-# <- { "event": "GUEST_PANICKED",
-# "data": { "action": "pause" },
-# "timestamp": { "seconds": 1648245231, "microseconds": 900001 } }
+# <- { "event": "GUEST_PANICKED",
+# "data": { "action": "pause" },
+# "timestamp": { "seconds": 1648245231, "microseconds": 900001 } }
##
{ 'event': 'GUEST_PANICKED',
'data': { 'action': 'GuestPanicAction', '*info': 'GuestPanicInformation' } }
@@ -453,9 +451,9 @@
#
# Example:
#
-# <- { "event": "GUEST_CRASHLOADED",
-# "data": { "action": "run" },
-# "timestamp": { "seconds": 1648245259, "microseconds": 893771 } }
+# <- { "event": "GUEST_CRASHLOADED",
+# "data": { "action": "run" },
+# "timestamp": { "seconds": 1648245259, "microseconds": 893771 } }
##
{ 'event': 'GUEST_CRASHLOADED',
'data': { 'action': 'GuestPanicAction', '*info': 'GuestPanicInformation' } }
@@ -583,12 +581,12 @@
#
# Example:
#
-# <- { "event": "MEMORY_FAILURE",
-# "data": { "recipient": "hypervisor",
-# "action": "fatal",
-# "flags": { "action-required": false,
-# "recursive": false } },
-# "timestamp": { "seconds": 1267061043, "microseconds": 959568 } }
+# <- { "event": "MEMORY_FAILURE",
+# "data": { "recipient": "hypervisor",
+# "action": "fatal",
+# "flags": { "action-required": false,
+# "recursive": false } },
+# "timestamp": { "seconds": 1267061043, "microseconds": 959568 } }
##
{ 'event': 'MEMORY_FAILURE',
'data': { 'recipient': 'MemoryFailureRecipient',
diff --git a/qapi/sockets.json b/qapi/sockets.json
index 6213154525..ef777928e7 100644
--- a/qapi/sockets.json
+++ b/qapi/sockets.json
@@ -5,8 +5,6 @@
# = Socket data types
##
-{ 'include': 'common.json' }
-
##
# @NetworkAddressFamily:
#
@@ -117,8 +115,28 @@
'port': 'str' } }
##
+# @FdSocketAddress:
+#
+# A file descriptor name or number.
+#
+# @str: decimal is for file descriptor number, otherwise it's a file
+# descriptor name. Named file descriptors are permitted in
+# monitor commands, in combination with the 'getfd' command.
+# Decimal file descriptors are permitted at startup or other
+# contexts where no monitor context is active.
+#
+#
+# Since: 1.2
+##
+{ 'struct': 'FdSocketAddress',
+ 'data': {
+ 'str': 'str' } }
+
+##
# @InetSocketAddressWrapper:
#
+# @data: internet domain socket address
+#
# Since: 1.3
##
{ 'struct': 'InetSocketAddressWrapper',
@@ -127,6 +145,8 @@
##
# @UnixSocketAddressWrapper:
#
+# @data: UNIX domain socket address
+#
# Since: 1.3
##
{ 'struct': 'UnixSocketAddressWrapper',
@@ -135,18 +155,22 @@
##
# @VsockSocketAddressWrapper:
#
+# @data: VSOCK domain socket address
+#
# Since: 2.8
##
{ 'struct': 'VsockSocketAddressWrapper',
'data': { 'data': 'VsockSocketAddress' } }
##
-# @StringWrapper:
+# @FdSocketAddressWrapper:
+#
+# @data: file descriptor name or number
#
# Since: 1.3
##
-{ 'struct': 'StringWrapper',
- 'data': { 'data': 'String' } }
+{ 'struct': 'FdSocketAddressWrapper',
+ 'data': { 'data': 'FdSocketAddress' } }
##
# @SocketAddressLegacy:
@@ -154,6 +178,8 @@
# Captures the address of a socket, which could also be a named file
# descriptor
#
+# @type: Transport type
+#
# Note: This type is deprecated in favor of SocketAddress. The
# difference between SocketAddressLegacy and SocketAddress is that
# the latter has fewer {} on the wire.
@@ -167,7 +193,7 @@
'inet': 'InetSocketAddressWrapper',
'unix': 'UnixSocketAddressWrapper',
'vsock': 'VsockSocketAddressWrapper',
- 'fd': 'StringWrapper' } }
+ 'fd': 'FdSocketAddressWrapper' } }
##
# @SocketAddressType:
@@ -180,11 +206,7 @@
#
# @vsock: VMCI address
#
-# @fd: decimal is for file descriptor number, otherwise a file
-# descriptor name. Named file descriptors are permitted in
-# monitor commands, in combination with the 'getfd' command.
-# Decimal file descriptors are permitted at startup or other
-# contexts where no monitor context is active.
+# @fd: Socket file descriptor
#
# Since: 2.9
##
@@ -194,7 +216,7 @@
##
# @SocketAddress:
#
-# Captures the address of a socket, which could also be a named file
+# Captures the address of a socket, which could also be a socket file
# descriptor
#
# @type: Transport type
@@ -207,4 +229,4 @@
'data': { 'inet': 'InetSocketAddress',
'unix': 'UnixSocketAddress',
'vsock': 'VsockSocketAddress',
- 'fd': 'String' } }
+ 'fd': 'FdSocketAddress' } }
diff --git a/qapi/stats.json b/qapi/stats.json
index 01791e86d5..ce9d8161ec 100644
--- a/qapi/stats.json
+++ b/qapi/stats.json
@@ -120,6 +120,8 @@
# - which providers to request statistics from
# - which named values to return within each provider
#
+# @target: the kind of objects to query
+#
# Since: 7.1
##
{ 'union': 'StatsFilter',
diff --git a/qapi/string-output-visitor.c b/qapi/string-output-visitor.c
index f0c1dea89e..5115536b15 100644
--- a/qapi/string-output-visitor.c
+++ b/qapi/string-output-visitor.c
@@ -65,6 +65,7 @@ struct StringOutputVisitor
} range_start, range_end;
GList *ranges;
void *list; /* Only needed for sanity checking the caller */
+ unsigned int struct_nesting;
};
static StringOutputVisitor *to_sov(Visitor *v)
@@ -144,6 +145,10 @@ static bool print_type_int64(Visitor *v, const char *name, int64_t *obj,
StringOutputVisitor *sov = to_sov(v);
GList *l;
+ if (sov->struct_nesting) {
+ return true;
+ }
+
switch (sov->list_mode) {
case LM_NONE:
string_output_append(sov, *obj);
@@ -231,6 +236,10 @@ static bool print_type_size(Visitor *v, const char *name, uint64_t *obj,
uint64_t val;
char *out, *psize;
+ if (sov->struct_nesting) {
+ return true;
+ }
+
if (!sov->human) {
out = g_strdup_printf("%"PRIu64, *obj);
string_output_set(sov, out);
@@ -250,6 +259,11 @@ static bool print_type_bool(Visitor *v, const char *name, bool *obj,
Error **errp)
{
StringOutputVisitor *sov = to_sov(v);
+
+ if (sov->struct_nesting) {
+ return true;
+ }
+
string_output_set(sov, g_strdup(*obj ? "true" : "false"));
return true;
}
@@ -260,6 +274,10 @@ static bool print_type_str(Visitor *v, const char *name, char **obj,
StringOutputVisitor *sov = to_sov(v);
char *out;
+ if (sov->struct_nesting) {
+ return true;
+ }
+
if (sov->human) {
out = *obj ? g_strdup_printf("\"%s\"", *obj) : g_strdup("<null>");
} else {
@@ -273,6 +291,11 @@ static bool print_type_number(Visitor *v, const char *name, double *obj,
Error **errp)
{
StringOutputVisitor *sov = to_sov(v);
+
+ if (sov->struct_nesting) {
+ return true;
+ }
+
string_output_set(sov, g_strdup_printf("%.17g", *obj));
return true;
}
@@ -283,6 +306,10 @@ static bool print_type_null(Visitor *v, const char *name, QNull **obj,
StringOutputVisitor *sov = to_sov(v);
char *out;
+ if (sov->struct_nesting) {
+ return true;
+ }
+
if (sov->human) {
out = g_strdup("<null>");
} else {
@@ -295,6 +322,9 @@ static bool print_type_null(Visitor *v, const char *name, QNull **obj,
static bool start_struct(Visitor *v, const char *name, void **obj,
size_t size, Error **errp)
{
+ StringOutputVisitor *sov = to_sov(v);
+
+ sov->struct_nesting++;
return true;
}
@@ -302,6 +332,10 @@ static void end_struct(Visitor *v, void **obj)
{
StringOutputVisitor *sov = to_sov(v);
+ if (--sov->struct_nesting) {
+ return;
+ }
+
/* TODO actually print struct fields */
string_output_set(sov, g_strdup("<omitted>"));
}
@@ -312,6 +346,10 @@ start_list(Visitor *v, const char *name, GenericList **list, size_t size,
{
StringOutputVisitor *sov = to_sov(v);
+ if (sov->struct_nesting) {
+ return true;
+ }
+
/* we can't traverse a list in a list */
assert(sov->list_mode == LM_NONE);
/* We don't support visits without a list */
@@ -329,6 +367,10 @@ static GenericList *next_list(Visitor *v, GenericList *tail, size_t size)
StringOutputVisitor *sov = to_sov(v);
GenericList *ret = tail->next;
+ if (sov->struct_nesting) {
+ return ret;
+ }
+
if (ret && !ret->next) {
sov->list_mode = LM_END;
}
@@ -339,6 +381,10 @@ static void end_list(Visitor *v, void **obj)
{
StringOutputVisitor *sov = to_sov(v);
+ if (sov->struct_nesting) {
+ return;
+ }
+
assert(sov->list == obj);
assert(sov->list_mode == LM_STARTED ||
sov->list_mode == LM_END ||
diff --git a/qapi/tpm.json b/qapi/tpm.json
index a754455ca5..07a73e5f2b 100644
--- a/qapi/tpm.json
+++ b/qapi/tpm.json
@@ -33,8 +33,8 @@
#
# Example:
#
-# -> { "execute": "query-tpm-models" }
-# <- { "return": [ "tpm-tis", "tpm-crb", "tpm-spapr" ] }
+# -> { "execute": "query-tpm-models" }
+# <- { "return": [ "tpm-tis", "tpm-crb", "tpm-spapr" ] }
##
{ 'command': 'query-tpm-models', 'returns': ['TpmModel'],
'if': 'CONFIG_TPM' }
@@ -64,8 +64,8 @@
#
# Example:
#
-# -> { "execute": "query-tpm-types" }
-# <- { "return": [ "passthrough", "emulator" ] }
+# -> { "execute": "query-tpm-types" }
+# <- { "return": [ "passthrough", "emulator" ] }
##
{ 'command': 'query-tpm-types', 'returns': ['TpmType'],
'if': 'CONFIG_TPM' }
@@ -102,6 +102,8 @@
##
# @TPMPassthroughOptionsWrapper:
#
+# @data: Information about the TPM passthrough type
+#
# Since: 1.5
##
{ 'struct': 'TPMPassthroughOptionsWrapper',
@@ -111,6 +113,8 @@
##
# @TPMEmulatorOptionsWrapper:
#
+# @data: Information about the TPM emulator type
+#
# Since: 2.11
##
{ 'struct': 'TPMEmulatorOptionsWrapper',
@@ -168,21 +172,21 @@
#
# Example:
#
-# -> { "execute": "query-tpm" }
-# <- { "return":
-# [
-# { "model": "tpm-tis",
-# "options":
-# { "type": "passthrough",
-# "data":
-# { "cancel-path": "/sys/class/misc/tpm0/device/cancel",
-# "path": "/dev/tpm0"
-# }
-# },
-# "id": "tpm0"
+# -> { "execute": "query-tpm" }
+# <- { "return":
+# [
+# { "model": "tpm-tis",
+# "options":
+# { "type": "passthrough",
+# "data":
+# { "cancel-path": "/sys/class/misc/tpm0/device/cancel",
+# "path": "/dev/tpm0"
+# }
+# },
+# "id": "tpm0"
+# }
+# ]
# }
-# ]
-# }
##
{ 'command': 'query-tpm', 'returns': ['TPMInfo'],
'if': 'CONFIG_TPM' }
diff --git a/qapi/trace.json b/qapi/trace.json
index 2077d7e117..043d12f83e 100644
--- a/qapi/trace.json
+++ b/qapi/trace.json
@@ -66,9 +66,9 @@
#
# Example:
#
-# -> { "execute": "trace-event-get-state",
-# "arguments": { "name": "qemu_memalign" } }
-# <- { "return": [ { "name": "qemu_memalign", "state": "disabled", "vcpu": false } ] }
+# -> { "execute": "trace-event-get-state",
+# "arguments": { "name": "qemu_memalign" } }
+# <- { "return": [ { "name": "qemu_memalign", "state": "disabled", "vcpu": false } ] }
##
{ 'command': 'trace-event-get-state',
'data': {'name': 'str',
@@ -96,9 +96,9 @@
#
# Example:
#
-# -> { "execute": "trace-event-set-state",
-# "arguments": { "name": "qemu_memalign", "enable": true } }
-# <- { "return": {} }
+# -> { "execute": "trace-event-set-state",
+# "arguments": { "name": "qemu_memalign", "enable": true } }
+# <- { "return": {} }
##
{ 'command': 'trace-event-set-state',
'data': {'name': 'str', 'enable': 'bool', '*ignore-unavailable': 'bool',
diff --git a/qapi/transaction.json b/qapi/transaction.json
index cffee2de28..45233ddd2a 100644
--- a/qapi/transaction.json
+++ b/qapi/transaction.json
@@ -158,6 +158,8 @@
# A discriminated record of operations that can be performed with
# @transaction.
#
+# @type: the operation to be performed
+#
# Since: 1.1
##
{ 'union': 'TransactionAction',
@@ -245,24 +247,24 @@
#
# Example:
#
-# -> { "execute": "transaction",
-# "arguments": { "actions": [
-# { "type": "blockdev-snapshot-sync", "data" : { "device": "ide-hd0",
-# "snapshot-file": "/some/place/my-image",
-# "format": "qcow2" } },
-# { "type": "blockdev-snapshot-sync", "data" : { "node-name": "myfile",
-# "snapshot-file": "/some/place/my-image2",
-# "snapshot-node-name": "node3432",
-# "mode": "existing",
-# "format": "qcow2" } },
-# { "type": "blockdev-snapshot-sync", "data" : { "device": "ide-hd1",
-# "snapshot-file": "/some/place/my-image2",
-# "mode": "existing",
-# "format": "qcow2" } },
-# { "type": "blockdev-snapshot-internal-sync", "data" : {
-# "device": "ide-hd2",
-# "name": "snapshot0" } } ] } }
-# <- { "return": {} }
+# -> { "execute": "transaction",
+# "arguments": { "actions": [
+# { "type": "blockdev-snapshot-sync", "data" : { "device": "ide-hd0",
+# "snapshot-file": "/some/place/my-image",
+# "format": "qcow2" } },
+# { "type": "blockdev-snapshot-sync", "data" : { "node-name": "myfile",
+# "snapshot-file": "/some/place/my-image2",
+# "snapshot-node-name": "node3432",
+# "mode": "existing",
+# "format": "qcow2" } },
+# { "type": "blockdev-snapshot-sync", "data" : { "device": "ide-hd1",
+# "snapshot-file": "/some/place/my-image2",
+# "mode": "existing",
+# "format": "qcow2" } },
+# { "type": "blockdev-snapshot-internal-sync", "data" : {
+# "device": "ide-hd2",
+# "name": "snapshot0" } } ] } }
+# <- { "return": {} }
##
{ 'command': 'transaction',
'data': { 'actions': [ 'TransactionAction' ],
diff --git a/qapi/ui.json b/qapi/ui.json
index a0158baf23..e3999b7c07 100644
--- a/qapi/ui.json
+++ b/qapi/ui.json
@@ -63,7 +63,7 @@
##
# @SetPasswordOptionsVnc:
#
-# Options for set_password specific to the VNC procotol.
+# Options for set_password specific to the VNC protocol.
#
# @display: The id of the display where the password should be
# changed. Defaults to the first.
@@ -86,9 +86,9 @@
#
# Example:
#
-# -> { "execute": "set_password", "arguments": { "protocol": "vnc",
-# "password": "secret" } }
-# <- { "return": {} }
+# -> { "execute": "set_password", "arguments": { "protocol": "vnc",
+# "password": "secret" } }
+# <- { "return": {} }
##
{ 'command': 'set_password', 'boxed': true, 'data': 'SetPasswordOptions' }
@@ -125,7 +125,7 @@
##
# @ExpirePasswordOptionsVnc:
#
-# Options for expire_password specific to the VNC procotol.
+# Options for expire_password specific to the VNC protocol.
#
# @display: The id of the display where the expiration should be
# changed. Defaults to the first.
@@ -149,9 +149,9 @@
#
# Example:
#
-# -> { "execute": "expire_password", "arguments": { "protocol": "vnc",
-# "time": "+60" } }
-# <- { "return": {} }
+# -> { "execute": "expire_password", "arguments": { "protocol": "vnc",
+# "time": "+60" } }
+# <- { "return": {} }
##
{ 'command': 'expire_password', 'boxed': true, 'data': 'ExpirePasswordOptions' }
@@ -193,9 +193,9 @@
#
# Example:
#
-# -> { "execute": "screendump",
-# "arguments": { "filename": "/tmp/image" } }
-# <- { "return": {} }
+# -> { "execute": "screendump",
+# "arguments": { "filename": "/tmp/image" } }
+# <- { "return": {} }
##
{ 'command': 'screendump',
'data': {'filename': 'str', '*device': 'str', '*head': 'int',
@@ -337,38 +337,38 @@
#
# Example:
#
-# -> { "execute": "query-spice" }
-# <- { "return": {
-# "enabled": true,
-# "auth": "spice",
-# "port": 5920,
-# "migrated":false,
-# "tls-port": 5921,
-# "host": "0.0.0.0",
-# "mouse-mode":"client",
-# "channels": [
-# {
-# "port": "54924",
-# "family": "ipv4",
-# "channel-type": 1,
-# "connection-id": 1804289383,
-# "host": "127.0.0.1",
-# "channel-id": 0,
-# "tls": true
-# },
-# {
-# "port": "36710",
-# "family": "ipv4",
-# "channel-type": 4,
-# "connection-id": 1804289383,
-# "host": "127.0.0.1",
-# "channel-id": 0,
-# "tls": false
-# },
-# [ ... more channels follow ... ]
-# ]
-# }
-# }
+# -> { "execute": "query-spice" }
+# <- { "return": {
+# "enabled": true,
+# "auth": "spice",
+# "port": 5920,
+# "migrated":false,
+# "tls-port": 5921,
+# "host": "0.0.0.0",
+# "mouse-mode":"client",
+# "channels": [
+# {
+# "port": "54924",
+# "family": "ipv4",
+# "channel-type": 1,
+# "connection-id": 1804289383,
+# "host": "127.0.0.1",
+# "channel-id": 0,
+# "tls": true
+# },
+# {
+# "port": "36710",
+# "family": "ipv4",
+# "channel-type": 4,
+# "connection-id": 1804289383,
+# "host": "127.0.0.1",
+# "channel-id": 0,
+# "tls": false
+# },
+# [ ... more channels follow ... ]
+# ]
+# }
+# }
##
{ 'command': 'query-spice', 'returns': 'SpiceInfo',
'if': 'CONFIG_SPICE' }
@@ -386,12 +386,12 @@
#
# Example:
#
-# <- { "timestamp": {"seconds": 1290688046, "microseconds": 388707},
-# "event": "SPICE_CONNECTED",
-# "data": {
-# "server": { "port": "5920", "family": "ipv4", "host": "127.0.0.1"},
-# "client": {"port": "52873", "family": "ipv4", "host": "127.0.0.1"}
-# }}
+# <- { "timestamp": {"seconds": 1290688046, "microseconds": 388707},
+# "event": "SPICE_CONNECTED",
+# "data": {
+# "server": { "port": "5920", "family": "ipv4", "host": "127.0.0.1"},
+# "client": {"port": "52873", "family": "ipv4", "host": "127.0.0.1"}
+# }}
##
{ 'event': 'SPICE_CONNECTED',
'data': { 'server': 'SpiceBasicInfo',
@@ -412,14 +412,14 @@
#
# Example:
#
-# <- { "timestamp": {"seconds": 1290688046, "microseconds": 417172},
-# "event": "SPICE_INITIALIZED",
-# "data": {"server": {"auth": "spice", "port": "5921",
-# "family": "ipv4", "host": "127.0.0.1"},
-# "client": {"port": "49004", "family": "ipv4", "channel-type": 3,
-# "connection-id": 1804289383, "host": "127.0.0.1",
-# "channel-id": 0, "tls": true}
-# }}
+# <- { "timestamp": {"seconds": 1290688046, "microseconds": 417172},
+# "event": "SPICE_INITIALIZED",
+# "data": {"server": {"auth": "spice", "port": "5921",
+# "family": "ipv4", "host": "127.0.0.1"},
+# "client": {"port": "49004", "family": "ipv4", "channel-type": 3,
+# "connection-id": 1804289383, "host": "127.0.0.1",
+# "channel-id": 0, "tls": true}
+# }}
##
{ 'event': 'SPICE_INITIALIZED',
'data': { 'server': 'SpiceServerInfo',
@@ -439,12 +439,12 @@
#
# Example:
#
-# <- { "timestamp": {"seconds": 1290688046, "microseconds": 388707},
-# "event": "SPICE_DISCONNECTED",
-# "data": {
-# "server": { "port": "5920", "family": "ipv4", "host": "127.0.0.1"},
-# "client": {"port": "52873", "family": "ipv4", "host": "127.0.0.1"}
-# }}
+# <- { "timestamp": {"seconds": 1290688046, "microseconds": 388707},
+# "event": "SPICE_DISCONNECTED",
+# "data": {
+# "server": { "port": "5920", "family": "ipv4", "host": "127.0.0.1"},
+# "client": {"port": "52873", "family": "ipv4", "host": "127.0.0.1"}
+# }}
##
{ 'event': 'SPICE_DISCONNECTED',
'data': { 'server': 'SpiceBasicInfo',
@@ -460,8 +460,8 @@
#
# Example:
#
-# <- { "timestamp": {"seconds": 1290688046, "microseconds": 417172},
-# "event": "SPICE_MIGRATE_COMPLETED" }
+# <- { "timestamp": {"seconds": 1290688046, "microseconds": 417172},
+# "event": "SPICE_MIGRATE_COMPLETED" }
##
{ 'event': 'SPICE_MIGRATE_COMPLETED',
'if': 'CONFIG_SPICE' }
@@ -668,23 +668,23 @@
#
# Example:
#
-# -> { "execute": "query-vnc" }
-# <- { "return": {
-# "enabled":true,
-# "host":"0.0.0.0",
-# "service":"50402",
-# "auth":"vnc",
-# "family":"ipv4",
-# "clients":[
-# {
-# "host":"127.0.0.1",
-# "service":"50401",
-# "family":"ipv4",
-# "websocket":false
-# }
-# ]
-# }
-# }
+# -> { "execute": "query-vnc" }
+# <- { "return": {
+# "enabled":true,
+# "host":"0.0.0.0",
+# "service":"50402",
+# "auth":"vnc",
+# "family":"ipv4",
+# "clients":[
+# {
+# "host":"127.0.0.1",
+# "service":"50401",
+# "family":"ipv4",
+# "websocket":false
+# }
+# ]
+# }
+# }
##
{ 'command': 'query-vnc', 'returns': 'VncInfo',
'if': 'CONFIG_VNC' }
@@ -733,13 +733,13 @@
#
# Example:
#
-# <- { "event": "VNC_CONNECTED",
-# "data": {
-# "server": { "auth": "sasl", "family": "ipv4", "websocket": false,
-# "service": "5901", "host": "0.0.0.0" },
-# "client": { "family": "ipv4", "service": "58425",
-# "host": "127.0.0.1", "websocket": false } },
-# "timestamp": { "seconds": 1262976601, "microseconds": 975795 } }
+# <- { "event": "VNC_CONNECTED",
+# "data": {
+# "server": { "auth": "sasl", "family": "ipv4", "websocket": false,
+# "service": "5901", "host": "0.0.0.0" },
+# "client": { "family": "ipv4", "service": "58425",
+# "host": "127.0.0.1", "websocket": false } },
+# "timestamp": { "seconds": 1262976601, "microseconds": 975795 } }
##
{ 'event': 'VNC_CONNECTED',
'data': { 'server': 'VncServerInfo',
@@ -760,13 +760,13 @@
#
# Example:
#
-# <- { "event": "VNC_INITIALIZED",
-# "data": {
-# "server": { "auth": "sasl", "family": "ipv4", "websocket": false,
-# "service": "5901", "host": "0.0.0.0"},
-# "client": { "family": "ipv4", "service": "46089", "websocket": false,
-# "host": "127.0.0.1", "sasl_username": "luiz" } },
-# "timestamp": { "seconds": 1263475302, "microseconds": 150772 } }
+# <- { "event": "VNC_INITIALIZED",
+# "data": {
+# "server": { "auth": "sasl", "family": "ipv4", "websocket": false,
+# "service": "5901", "host": "0.0.0.0"},
+# "client": { "family": "ipv4", "service": "46089", "websocket": false,
+# "host": "127.0.0.1", "sasl_username": "luiz" } },
+# "timestamp": { "seconds": 1263475302, "microseconds": 150772 } }
##
{ 'event': 'VNC_INITIALIZED',
'data': { 'server': 'VncServerInfo',
@@ -786,13 +786,13 @@
#
# Example:
#
-# <- { "event": "VNC_DISCONNECTED",
-# "data": {
-# "server": { "auth": "sasl", "family": "ipv4", "websocket": false,
-# "service": "5901", "host": "0.0.0.0" },
-# "client": { "family": "ipv4", "service": "58425", "websocket": false,
-# "host": "127.0.0.1", "sasl_username": "luiz" } },
-# "timestamp": { "seconds": 1262976601, "microseconds": 975795 } }
+# <- { "event": "VNC_DISCONNECTED",
+# "data": {
+# "server": { "auth": "sasl", "family": "ipv4", "websocket": false,
+# "service": "5901", "host": "0.0.0.0" },
+# "client": { "family": "ipv4", "service": "58425", "websocket": false,
+# "host": "127.0.0.1", "sasl_username": "luiz" } },
+# "timestamp": { "seconds": 1262976601, "microseconds": 975795 } }
##
{ 'event': 'VNC_DISCONNECTED',
'data': { 'server': 'VncServerInfo',
@@ -834,22 +834,22 @@
#
# Example:
#
-# -> { "execute": "query-mice" }
-# <- { "return": [
-# {
-# "name":"QEMU Microsoft Mouse",
-# "index":0,
-# "current":false,
-# "absolute":false
-# },
-# {
-# "name":"QEMU PS/2 Mouse",
-# "index":1,
-# "current":true,
-# "absolute":true
-# }
-# ]
-# }
+# -> { "execute": "query-mice" }
+# <- { "return": [
+# {
+# "name":"QEMU Microsoft Mouse",
+# "index":0,
+# "current":false,
+# "absolute":false
+# },
+# {
+# "name":"QEMU PS/2 Mouse",
+# "index":1,
+# "current":true,
+# "absolute":true
+# }
+# ]
+# }
##
{ 'command': 'query-mice', 'returns': ['MouseInfo'] }
@@ -990,6 +990,8 @@
##
# @IntWrapper:
#
+# @data: a numeric key code
+#
# Since: 1.3
##
{ 'struct': 'IntWrapper',
@@ -998,6 +1000,8 @@
##
# @QKeyCodeWrapper:
#
+# @data: An enumeration of key name
+#
# Since: 1.3
##
{ 'struct': 'QKeyCodeWrapper',
@@ -1008,6 +1012,8 @@
#
# Represents a keyboard key.
#
+# @type: key encoding
+#
# Since: 1.3
##
{ 'union': 'KeyValue',
@@ -1038,11 +1044,11 @@
#
# Example:
#
-# -> { "execute": "send-key",
-# "arguments": { "keys": [ { "type": "qcode", "data": "ctrl" },
-# { "type": "qcode", "data": "alt" },
-# { "type": "qcode", "data": "delete" } ] } }
-# <- { "return": {} }
+# -> { "execute": "send-key",
+# "arguments": { "keys": [ { "type": "qcode", "data": "ctrl" },
+# { "type": "qcode", "data": "alt" },
+# { "type": "qcode", "data": "delete" } ] } }
+# <- { "return": {} }
##
{ 'command': 'send-key',
'data': { 'keys': ['KeyValue'], '*hold-time': 'int' } }
@@ -1175,6 +1181,8 @@
##
# @InputKeyEventWrapper:
#
+# @data: Keyboard input event
+#
# Since: 2.0
##
{ 'struct': 'InputKeyEventWrapper',
@@ -1183,6 +1191,8 @@
##
# @InputBtnEventWrapper:
#
+# @data: Pointer button input event
+#
# Since: 2.0
##
{ 'struct': 'InputBtnEventWrapper',
@@ -1191,6 +1201,8 @@
##
# @InputMoveEventWrapper:
#
+# @data: Pointer motion input event
+#
# Since: 2.0
##
{ 'struct': 'InputMoveEventWrapper',
@@ -1199,6 +1211,8 @@
##
# @InputMultiTouchEventWrapper:
#
+# @data: MultiTouch input event
+#
# Since: 8.1
##
{ 'struct': 'InputMultiTouchEventWrapper',
@@ -1256,39 +1270,39 @@
#
# Examples:
#
-# 1. Press left mouse button.
+# 1. Press left mouse button.
#
-# -> { "execute": "input-send-event",
-# "arguments": { "device": "video0",
-# "events": [ { "type": "btn",
-# "data" : { "down": true, "button": "left" } } ] } }
-# <- { "return": {} }
+# -> { "execute": "input-send-event",
+# "arguments": { "device": "video0",
+# "events": [ { "type": "btn",
+# "data" : { "down": true, "button": "left" } } ] } }
+# <- { "return": {} }
#
-# -> { "execute": "input-send-event",
-# "arguments": { "device": "video0",
-# "events": [ { "type": "btn",
-# "data" : { "down": false, "button": "left" } } ] } }
-# <- { "return": {} }
+# -> { "execute": "input-send-event",
+# "arguments": { "device": "video0",
+# "events": [ { "type": "btn",
+# "data" : { "down": false, "button": "left" } } ] } }
+# <- { "return": {} }
#
-# 2. Press ctrl-alt-del.
+# 2. Press ctrl-alt-del.
#
-# -> { "execute": "input-send-event",
-# "arguments": { "events": [
-# { "type": "key", "data" : { "down": true,
-# "key": {"type": "qcode", "data": "ctrl" } } },
-# { "type": "key", "data" : { "down": true,
-# "key": {"type": "qcode", "data": "alt" } } },
-# { "type": "key", "data" : { "down": true,
-# "key": {"type": "qcode", "data": "delete" } } } ] } }
-# <- { "return": {} }
+# -> { "execute": "input-send-event",
+# "arguments": { "events": [
+# { "type": "key", "data" : { "down": true,
+# "key": {"type": "qcode", "data": "ctrl" } } },
+# { "type": "key", "data" : { "down": true,
+# "key": {"type": "qcode", "data": "alt" } } },
+# { "type": "key", "data" : { "down": true,
+# "key": {"type": "qcode", "data": "delete" } } } ] } }
+# <- { "return": {} }
#
-# 3. Move mouse pointer to absolute coordinates (20000, 400).
+# 3. Move mouse pointer to absolute coordinates (20000, 400).
#
-# -> { "execute": "input-send-event" ,
-# "arguments": { "events": [
-# { "type": "abs", "data" : { "axis": "x", "value" : 20000 } },
-# { "type": "abs", "data" : { "axis": "y", "value" : 400 } } ] } }
-# <- { "return": {} }
+# -> { "execute": "input-send-event" ,
+# "arguments": { "events": [
+# { "type": "abs", "data" : { "axis": "x", "value" : 20000 } },
+# { "type": "abs", "data" : { "axis": "y", "value" : 400 } } ] } }
+# <- { "return": {} }
##
{ 'command': 'input-send-event',
'data': { '*device': 'str',
@@ -1597,9 +1611,9 @@
#
# Example:
#
-# -> { "execute": "display-reload",
-# "arguments": { "type": "vnc", "tls-certs": true } }
-# <- { "return": {} }
+# -> { "execute": "display-reload",
+# "arguments": { "type": "vnc", "tls-certs": true } }
+# <- { "return": {} }
##
{ 'command': 'display-reload',
'data': 'DisplayReloadOptions',
@@ -1656,11 +1670,11 @@
#
# Example:
#
-# -> { "execute": "display-update",
-# "arguments": { "type": "vnc", "addresses":
-# [ { "type": "inet", "host": "0.0.0.0",
-# "port": "5901" } ] } }
-# <- { "return": {} }
+# -> { "execute": "display-update",
+# "arguments": { "type": "vnc", "addresses":
+# [ { "type": "inet", "host": "0.0.0.0",
+# "port": "5901" } ] } }
+# <- { "return": {} }
##
{ 'command': 'display-update',
'data': 'DisplayUpdateOptions',
@@ -1687,11 +1701,11 @@
#
# Example:
#
-# -> { "execute": "client_migrate_info",
-# "arguments": { "protocol": "spice",
-# "hostname": "virt42.lab.kraxel.org",
-# "port": 1234 } }
-# <- { "return": {} }
+# -> { "execute": "client_migrate_info",
+# "arguments": { "protocol": "spice",
+# "hostname": "virt42.lab.kraxel.org",
+# "port": 1234 } }
+# <- { "return": {} }
##
{ 'command': 'client_migrate_info',
'data': { 'protocol': 'str', 'hostname': 'str', '*port': 'int',
diff --git a/qapi/virtio.json b/qapi/virtio.json
index 19c7c36e36..a79013fe89 100644
--- a/qapi/virtio.json
+++ b/qapi/virtio.json
@@ -36,30 +36,30 @@
#
# Example:
#
-# -> { "execute": "x-query-virtio" }
-# <- { "return": [
-# {
-# "name": "virtio-input",
-# "path": "/machine/peripheral-anon/device[4]/virtio-backend"
-# },
-# {
-# "name": "virtio-crypto",
-# "path": "/machine/peripheral/crypto0/virtio-backend"
-# },
-# {
-# "name": "virtio-scsi",
-# "path": "/machine/peripheral-anon/device[2]/virtio-backend"
-# },
-# {
-# "name": "virtio-net",
-# "path": "/machine/peripheral-anon/device[1]/virtio-backend"
-# },
-# {
-# "name": "virtio-serial",
-# "path": "/machine/peripheral-anon/device[0]/virtio-backend"
-# }
-# ]
-# }
+# -> { "execute": "x-query-virtio" }
+# <- { "return": [
+# {
+# "name": "virtio-input",
+# "path": "/machine/peripheral-anon/device[4]/virtio-backend"
+# },
+# {
+# "name": "virtio-crypto",
+# "path": "/machine/peripheral/crypto0/virtio-backend"
+# },
+# {
+# "name": "virtio-scsi",
+# "path": "/machine/peripheral-anon/device[2]/virtio-backend"
+# },
+# {
+# "name": "virtio-net",
+# "path": "/machine/peripheral-anon/device[1]/virtio-backend"
+# },
+# {
+# "name": "virtio-serial",
+# "path": "/machine/peripheral-anon/device[0]/virtio-backend"
+# }
+# ]
+# }
##
{ 'command': 'x-query-virtio',
'returns': [ 'VirtioInfo' ],
@@ -205,229 +205,229 @@
#
# Examples:
#
-# 1. Poll for the status of virtio-crypto (no vhost-crypto active)
-#
-# -> { "execute": "x-query-virtio-status",
-# "arguments": { "path": "/machine/peripheral/crypto0/virtio-backend" }
-# }
-# <- { "return": {
-# "device-endian": "little",
-# "bus-name": "",
-# "disable-legacy-check": false,
-# "name": "virtio-crypto",
-# "started": true,
-# "device-id": 20,
-# "backend-features": {
-# "transports": [],
-# "dev-features": []
-# },
-# "start-on-kick": false,
-# "isr": 1,
-# "broken": false,
-# "status": {
-# "statuses": [
-# "VIRTIO_CONFIG_S_ACKNOWLEDGE: Valid virtio device found",
-# "VIRTIO_CONFIG_S_DRIVER: Guest OS compatible with device",
-# "VIRTIO_CONFIG_S_FEATURES_OK: Feature negotiation complete",
-# "VIRTIO_CONFIG_S_DRIVER_OK: Driver setup and ready"
-# ]
-# },
-# "num-vqs": 2,
-# "guest-features": {
-# "dev-features": [],
-# "transports": [
-# "VIRTIO_RING_F_EVENT_IDX: Used & avail. event fields enabled",
-# "VIRTIO_RING_F_INDIRECT_DESC: Indirect descriptors supported",
-# "VIRTIO_F_VERSION_1: Device compliant for v1 spec (legacy)"
-# ]
-# },
-# "host-features": {
-# "unknown-dev-features": 1073741824,
-# "dev-features": [],
-# "transports": [
-# "VIRTIO_RING_F_EVENT_IDX: Used & avail. event fields enabled",
-# "VIRTIO_RING_F_INDIRECT_DESC: Indirect descriptors supported",
-# "VIRTIO_F_VERSION_1: Device compliant for v1 spec (legacy)",
-# "VIRTIO_F_ANY_LAYOUT: Device accepts arbitrary desc. layouts",
-# "VIRTIO_F_NOTIFY_ON_EMPTY: Notify when device runs out of avail. descs. on VQ"
-# ]
-# },
-# "use-guest-notifier-mask": true,
-# "vm-running": true,
-# "queue-sel": 1,
-# "disabled": false,
-# "vhost-started": false,
-# "use-started": true
-# }
-# }
-#
-# 2. Poll for the status of virtio-net (vhost-net is active)
-#
-# -> { "execute": "x-query-virtio-status",
-# "arguments": { "path": "/machine/peripheral-anon/device[1]/virtio-backend" }
-# }
-# <- { "return": {
-# "device-endian": "little",
-# "bus-name": "",
-# "disabled-legacy-check": false,
-# "name": "virtio-net",
-# "started": true,
-# "device-id": 1,
-# "vhost-dev": {
-# "n-tmp-sections": 4,
-# "n-mem-sections": 4,
-# "max-queues": 1,
-# "backend-cap": 2,
-# "log-size": 0,
+# 1. Poll for the status of virtio-crypto (no vhost-crypto active)
+#
+# -> { "execute": "x-query-virtio-status",
+# "arguments": { "path": "/machine/peripheral/crypto0/virtio-backend" }
+# }
+# <- { "return": {
+# "device-endian": "little",
+# "bus-name": "",
+# "disable-legacy-check": false,
+# "name": "virtio-crypto",
+# "started": true,
+# "device-id": 20,
# "backend-features": {
+# "transports": [],
+# "dev-features": []
+# },
+# "start-on-kick": false,
+# "isr": 1,
+# "broken": false,
+# "status": {
+# "statuses": [
+# "VIRTIO_CONFIG_S_ACKNOWLEDGE: Valid virtio device found",
+# "VIRTIO_CONFIG_S_DRIVER: Guest OS compatible with device",
+# "VIRTIO_CONFIG_S_FEATURES_OK: Feature negotiation complete",
+# "VIRTIO_CONFIG_S_DRIVER_OK: Driver setup and ready"
+# ]
+# },
+# "num-vqs": 2,
+# "guest-features": {
# "dev-features": [],
-# "transports": []
+# "transports": [
+# "VIRTIO_RING_F_EVENT_IDX: Used & avail. event fields enabled",
+# "VIRTIO_RING_F_INDIRECT_DESC: Indirect descriptors supported",
+# "VIRTIO_F_VERSION_1: Device compliant for v1 spec (legacy)"
+# ]
# },
-# "nvqs": 2,
-# "protocol-features": {
-# "protocols": []
+# "host-features": {
+# "unknown-dev-features": 1073741824,
+# "dev-features": [],
+# "transports": [
+# "VIRTIO_RING_F_EVENT_IDX: Used & avail. event fields enabled",
+# "VIRTIO_RING_F_INDIRECT_DESC: Indirect descriptors supported",
+# "VIRTIO_F_VERSION_1: Device compliant for v1 spec (legacy)",
+# "VIRTIO_F_ANY_LAYOUT: Device accepts arbitrary desc. layouts",
+# "VIRTIO_F_NOTIFY_ON_EMPTY: Notify when device runs out of avail. descs. on VQ"
+# ]
# },
-# "vq-index": 0,
-# "log-enabled": false,
-# "acked-features": {
+# "use-guest-notifier-mask": true,
+# "vm-running": true,
+# "queue-sel": 1,
+# "disabled": false,
+# "vhost-started": false,
+# "use-started": true
+# }
+# }
+#
+# 2. Poll for the status of virtio-net (vhost-net is active)
+#
+# -> { "execute": "x-query-virtio-status",
+# "arguments": { "path": "/machine/peripheral-anon/device[1]/virtio-backend" }
+# }
+# <- { "return": {
+# "device-endian": "little",
+# "bus-name": "",
+# "disabled-legacy-check": false,
+# "name": "virtio-net",
+# "started": true,
+# "device-id": 1,
+# "vhost-dev": {
+# "n-tmp-sections": 4,
+# "n-mem-sections": 4,
+# "max-queues": 1,
+# "backend-cap": 2,
+# "log-size": 0,
+# "backend-features": {
+# "dev-features": [],
+# "transports": []
+# },
+# "nvqs": 2,
+# "protocol-features": {
+# "protocols": []
+# },
+# "vq-index": 0,
+# "log-enabled": false,
+# "acked-features": {
+# "dev-features": [
+# "VIRTIO_NET_F_MRG_RXBUF: Driver can merge receive buffers"
+# ],
+# "transports": [
+# "VIRTIO_RING_F_EVENT_IDX: Used & avail. event fields enabled",
+# "VIRTIO_RING_F_INDIRECT_DESC: Indirect descriptors supported",
+# "VIRTIO_F_VERSION_1: Device compliant for v1 spec (legacy)"
+# ]
+# },
+# "features": {
+# "dev-features": [
+# "VHOST_F_LOG_ALL: Logging write descriptors supported",
+# "VIRTIO_NET_F_MRG_RXBUF: Driver can merge receive buffers"
+# ],
+# "transports": [
+# "VIRTIO_RING_F_EVENT_IDX: Used & avail. event fields enabled",
+# "VIRTIO_RING_F_INDIRECT_DESC: Indirect descriptors supported",
+# "VIRTIO_F_IOMMU_PLATFORM: Device can be used on IOMMU platform",
+# "VIRTIO_F_VERSION_1: Device compliant for v1 spec (legacy)",
+# "VIRTIO_F_ANY_LAYOUT: Device accepts arbitrary desc. layouts",
+# "VIRTIO_F_NOTIFY_ON_EMPTY: Notify when device runs out of avail. descs. on VQ"
+# ]
+# }
+# },
+# "backend-features": {
# "dev-features": [
-# "VIRTIO_NET_F_MRG_RXBUF: Driver can merge receive buffers"
+# "VHOST_USER_F_PROTOCOL_FEATURES: Vhost-user protocol features negotiation supported",
+# "VIRTIO_NET_F_GSO: Handling GSO-type packets supported",
+# "VIRTIO_NET_F_CTRL_MAC_ADDR: MAC address set through control channel",
+# "VIRTIO_NET_F_GUEST_ANNOUNCE: Driver sending gratuitous packets supported",
+# "VIRTIO_NET_F_CTRL_RX_EXTRA: Extra RX mode control supported",
+# "VIRTIO_NET_F_CTRL_VLAN: Control channel VLAN filtering supported",
+# "VIRTIO_NET_F_CTRL_RX: Control channel RX mode supported",
+# "VIRTIO_NET_F_CTRL_VQ: Control channel available",
+# "VIRTIO_NET_F_STATUS: Configuration status field available",
+# "VIRTIO_NET_F_MRG_RXBUF: Driver can merge receive buffers",
+# "VIRTIO_NET_F_HOST_UFO: Device can receive UFO",
+# "VIRTIO_NET_F_HOST_ECN: Device can receive TSO with ECN",
+# "VIRTIO_NET_F_HOST_TSO6: Device can receive TSOv6",
+# "VIRTIO_NET_F_HOST_TSO4: Device can receive TSOv4",
+# "VIRTIO_NET_F_GUEST_UFO: Driver can receive UFO",
+# "VIRTIO_NET_F_GUEST_ECN: Driver can receive TSO with ECN",
+# "VIRTIO_NET_F_GUEST_TSO6: Driver can receive TSOv6",
+# "VIRTIO_NET_F_GUEST_TSO4: Driver can receive TSOv4",
+# "VIRTIO_NET_F_MAC: Device has given MAC address",
+# "VIRTIO_NET_F_CTRL_GUEST_OFFLOADS: Control channel offloading reconfig. supported",
+# "VIRTIO_NET_F_GUEST_CSUM: Driver handling packets with partial checksum supported",
+# "VIRTIO_NET_F_CSUM: Device handling packets with partial checksum supported"
# ],
# "transports": [
# "VIRTIO_RING_F_EVENT_IDX: Used & avail. event fields enabled",
# "VIRTIO_RING_F_INDIRECT_DESC: Indirect descriptors supported",
-# "VIRTIO_F_VERSION_1: Device compliant for v1 spec (legacy)"
+# "VIRTIO_F_VERSION_1: Device compliant for v1 spec (legacy)",
+# "VIRTIO_F_ANY_LAYOUT: Device accepts arbitrary desc. layouts",
+# "VIRTIO_F_NOTIFY_ON_EMPTY: Notify when device runs out of avail. descs. on VQ"
# ]
# },
-# "features": {
+# "start-on-kick": false,
+# "isr": 1,
+# "broken": false,
+# "status": {
+# "statuses": [
+# "VIRTIO_CONFIG_S_ACKNOWLEDGE: Valid virtio device found",
+# "VIRTIO_CONFIG_S_DRIVER: Guest OS compatible with device",
+# "VIRTIO_CONFIG_S_FEATURES_OK: Feature negotiation complete",
+# "VIRTIO_CONFIG_S_DRIVER_OK: Driver setup and ready"
+# ]
+# },
+# "num-vqs": 3,
+# "guest-features": {
# "dev-features": [
-# "VHOST_F_LOG_ALL: Logging write descriptors supported",
-# "VIRTIO_NET_F_MRG_RXBUF: Driver can merge receive buffers"
+# "VIRTIO_NET_F_CTRL_MAC_ADDR: MAC address set through control channel",
+# "VIRTIO_NET_F_GUEST_ANNOUNCE: Driver sending gratuitous packets supported",
+# "VIRTIO_NET_F_CTRL_VLAN: Control channel VLAN filtering supported",
+# "VIRTIO_NET_F_CTRL_RX: Control channel RX mode supported",
+# "VIRTIO_NET_F_CTRL_VQ: Control channel available",
+# "VIRTIO_NET_F_STATUS: Configuration status field available",
+# "VIRTIO_NET_F_MRG_RXBUF: Driver can merge receive buffers",
+# "VIRTIO_NET_F_HOST_UFO: Device can receive UFO",
+# "VIRTIO_NET_F_HOST_ECN: Device can receive TSO with ECN",
+# "VIRTIO_NET_F_HOST_TSO6: Device can receive TSOv6",
+# "VIRTIO_NET_F_HOST_TSO4: Device can receive TSOv4",
+# "VIRTIO_NET_F_GUEST_UFO: Driver can receive UFO",
+# "VIRTIO_NET_F_GUEST_ECN: Driver can receive TSO with ECN",
+# "VIRTIO_NET_F_GUEST_TSO6: Driver can receive TSOv6",
+# "VIRTIO_NET_F_GUEST_TSO4: Driver can receive TSOv4",
+# "VIRTIO_NET_F_MAC: Device has given MAC address",
+# "VIRTIO_NET_F_CTRL_GUEST_OFFLOADS: Control channel offloading reconfig. supported",
+# "VIRTIO_NET_F_GUEST_CSUM: Driver handling packets with partial checksum supported",
+# "VIRTIO_NET_F_CSUM: Device handling packets with partial checksum supported"
+# ],
+# "transports": [
+# "VIRTIO_RING_F_EVENT_IDX: Used & avail. event fields enabled",
+# "VIRTIO_RING_F_INDIRECT_DESC: Indirect descriptors supported",
+# "VIRTIO_F_VERSION_1: Device compliant for v1 spec (legacy)"
+# ]
+# },
+# "host-features": {
+# "dev-features": [
+# "VHOST_USER_F_PROTOCOL_FEATURES: Vhost-user protocol features negotiation supported",
+# "VIRTIO_NET_F_GSO: Handling GSO-type packets supported",
+# "VIRTIO_NET_F_CTRL_MAC_ADDR: MAC address set through control channel",
+# "VIRTIO_NET_F_GUEST_ANNOUNCE: Driver sending gratuitous packets supported",
+# "VIRTIO_NET_F_CTRL_RX_EXTRA: Extra RX mode control supported",
+# "VIRTIO_NET_F_CTRL_VLAN: Control channel VLAN filtering supported",
+# "VIRTIO_NET_F_CTRL_RX: Control channel RX mode supported",
+# "VIRTIO_NET_F_CTRL_VQ: Control channel available",
+# "VIRTIO_NET_F_STATUS: Configuration status field available",
+# "VIRTIO_NET_F_MRG_RXBUF: Driver can merge receive buffers",
+# "VIRTIO_NET_F_HOST_UFO: Device can receive UFO",
+# "VIRTIO_NET_F_HOST_ECN: Device can receive TSO with ECN",
+# "VIRTIO_NET_F_HOST_TSO6: Device can receive TSOv6",
+# "VIRTIO_NET_F_HOST_TSO4: Device can receive TSOv4",
+# "VIRTIO_NET_F_GUEST_UFO: Driver can receive UFO",
+# "VIRTIO_NET_F_GUEST_ECN: Driver can receive TSO with ECN",
+# "VIRTIO_NET_F_GUEST_TSO6: Driver can receive TSOv6",
+# "VIRTIO_NET_F_GUEST_TSO4: Driver can receive TSOv4",
+# "VIRTIO_NET_F_MAC: Device has given MAC address",
+# "VIRTIO_NET_F_CTRL_GUEST_OFFLOADS: Control channel offloading reconfig. supported",
+# "VIRTIO_NET_F_GUEST_CSUM: Driver handling packets with partial checksum supported",
+# "VIRTIO_NET_F_CSUM: Device handling packets with partial checksum supported"
# ],
# "transports": [
# "VIRTIO_RING_F_EVENT_IDX: Used & avail. event fields enabled",
# "VIRTIO_RING_F_INDIRECT_DESC: Indirect descriptors supported",
-# "VIRTIO_F_IOMMU_PLATFORM: Device can be used on IOMMU platform",
# "VIRTIO_F_VERSION_1: Device compliant for v1 spec (legacy)",
# "VIRTIO_F_ANY_LAYOUT: Device accepts arbitrary desc. layouts",
# "VIRTIO_F_NOTIFY_ON_EMPTY: Notify when device runs out of avail. descs. on VQ"
-# ]
-# }
-# },
-# "backend-features": {
-# "dev-features": [
-# "VHOST_USER_F_PROTOCOL_FEATURES: Vhost-user protocol features negotiation supported",
-# "VIRTIO_NET_F_GSO: Handling GSO-type packets supported",
-# "VIRTIO_NET_F_CTRL_MAC_ADDR: MAC address set through control channel",
-# "VIRTIO_NET_F_GUEST_ANNOUNCE: Driver sending gratuitous packets supported",
-# "VIRTIO_NET_F_CTRL_RX_EXTRA: Extra RX mode control supported",
-# "VIRTIO_NET_F_CTRL_VLAN: Control channel VLAN filtering supported",
-# "VIRTIO_NET_F_CTRL_RX: Control channel RX mode supported",
-# "VIRTIO_NET_F_CTRL_VQ: Control channel available",
-# "VIRTIO_NET_F_STATUS: Configuration status field available",
-# "VIRTIO_NET_F_MRG_RXBUF: Driver can merge receive buffers",
-# "VIRTIO_NET_F_HOST_UFO: Device can receive UFO",
-# "VIRTIO_NET_F_HOST_ECN: Device can receive TSO with ECN",
-# "VIRTIO_NET_F_HOST_TSO6: Device can receive TSOv6",
-# "VIRTIO_NET_F_HOST_TSO4: Device can receive TSOv4",
-# "VIRTIO_NET_F_GUEST_UFO: Driver can receive UFO",
-# "VIRTIO_NET_F_GUEST_ECN: Driver can receive TSO with ECN",
-# "VIRTIO_NET_F_GUEST_TSO6: Driver can receive TSOv6",
-# "VIRTIO_NET_F_GUEST_TSO4: Driver can receive TSOv4",
-# "VIRTIO_NET_F_MAC: Device has given MAC address",
-# "VIRTIO_NET_F_CTRL_GUEST_OFFLOADS: Control channel offloading reconfig. supported",
-# "VIRTIO_NET_F_GUEST_CSUM: Driver handling packets with partial checksum supported",
-# "VIRTIO_NET_F_CSUM: Device handling packets with partial checksum supported"
-# ],
-# "transports": [
-# "VIRTIO_RING_F_EVENT_IDX: Used & avail. event fields enabled",
-# "VIRTIO_RING_F_INDIRECT_DESC: Indirect descriptors supported",
-# "VIRTIO_F_VERSION_1: Device compliant for v1 spec (legacy)",
-# "VIRTIO_F_ANY_LAYOUT: Device accepts arbitrary desc. layouts",
-# "VIRTIO_F_NOTIFY_ON_EMPTY: Notify when device runs out of avail. descs. on VQ"
-# ]
-# },
-# "start-on-kick": false,
-# "isr": 1,
-# "broken": false,
-# "status": {
-# "statuses": [
-# "VIRTIO_CONFIG_S_ACKNOWLEDGE: Valid virtio device found",
-# "VIRTIO_CONFIG_S_DRIVER: Guest OS compatible with device",
-# "VIRTIO_CONFIG_S_FEATURES_OK: Feature negotiation complete",
-# "VIRTIO_CONFIG_S_DRIVER_OK: Driver setup and ready"
-# ]
-# },
-# "num-vqs": 3,
-# "guest-features": {
-# "dev-features": [
-# "VIRTIO_NET_F_CTRL_MAC_ADDR: MAC address set through control channel",
-# "VIRTIO_NET_F_GUEST_ANNOUNCE: Driver sending gratuitous packets supported",
-# "VIRTIO_NET_F_CTRL_VLAN: Control channel VLAN filtering supported",
-# "VIRTIO_NET_F_CTRL_RX: Control channel RX mode supported",
-# "VIRTIO_NET_F_CTRL_VQ: Control channel available",
-# "VIRTIO_NET_F_STATUS: Configuration status field available",
-# "VIRTIO_NET_F_MRG_RXBUF: Driver can merge receive buffers",
-# "VIRTIO_NET_F_HOST_UFO: Device can receive UFO",
-# "VIRTIO_NET_F_HOST_ECN: Device can receive TSO with ECN",
-# "VIRTIO_NET_F_HOST_TSO6: Device can receive TSOv6",
-# "VIRTIO_NET_F_HOST_TSO4: Device can receive TSOv4",
-# "VIRTIO_NET_F_GUEST_UFO: Driver can receive UFO",
-# "VIRTIO_NET_F_GUEST_ECN: Driver can receive TSO with ECN",
-# "VIRTIO_NET_F_GUEST_TSO6: Driver can receive TSOv6",
-# "VIRTIO_NET_F_GUEST_TSO4: Driver can receive TSOv4",
-# "VIRTIO_NET_F_MAC: Device has given MAC address",
-# "VIRTIO_NET_F_CTRL_GUEST_OFFLOADS: Control channel offloading reconfig. supported",
-# "VIRTIO_NET_F_GUEST_CSUM: Driver handling packets with partial checksum supported",
-# "VIRTIO_NET_F_CSUM: Device handling packets with partial checksum supported"
-# ],
-# "transports": [
-# "VIRTIO_RING_F_EVENT_IDX: Used & avail. event fields enabled",
-# "VIRTIO_RING_F_INDIRECT_DESC: Indirect descriptors supported",
-# "VIRTIO_F_VERSION_1: Device compliant for v1 spec (legacy)"
-# ]
-# },
-# "host-features": {
-# "dev-features": [
-# "VHOST_USER_F_PROTOCOL_FEATURES: Vhost-user protocol features negotiation supported",
-# "VIRTIO_NET_F_GSO: Handling GSO-type packets supported",
-# "VIRTIO_NET_F_CTRL_MAC_ADDR: MAC address set through control channel",
-# "VIRTIO_NET_F_GUEST_ANNOUNCE: Driver sending gratuitous packets supported",
-# "VIRTIO_NET_F_CTRL_RX_EXTRA: Extra RX mode control supported",
-# "VIRTIO_NET_F_CTRL_VLAN: Control channel VLAN filtering supported",
-# "VIRTIO_NET_F_CTRL_RX: Control channel RX mode supported",
-# "VIRTIO_NET_F_CTRL_VQ: Control channel available",
-# "VIRTIO_NET_F_STATUS: Configuration status field available",
-# "VIRTIO_NET_F_MRG_RXBUF: Driver can merge receive buffers",
-# "VIRTIO_NET_F_HOST_UFO: Device can receive UFO",
-# "VIRTIO_NET_F_HOST_ECN: Device can receive TSO with ECN",
-# "VIRTIO_NET_F_HOST_TSO6: Device can receive TSOv6",
-# "VIRTIO_NET_F_HOST_TSO4: Device can receive TSOv4",
-# "VIRTIO_NET_F_GUEST_UFO: Driver can receive UFO",
-# "VIRTIO_NET_F_GUEST_ECN: Driver can receive TSO with ECN",
-# "VIRTIO_NET_F_GUEST_TSO6: Driver can receive TSOv6",
-# "VIRTIO_NET_F_GUEST_TSO4: Driver can receive TSOv4",
-# "VIRTIO_NET_F_MAC: Device has given MAC address",
-# "VIRTIO_NET_F_CTRL_GUEST_OFFLOADS: Control channel offloading reconfig. supported",
-# "VIRTIO_NET_F_GUEST_CSUM: Driver handling packets with partial checksum supported",
-# "VIRTIO_NET_F_CSUM: Device handling packets with partial checksum supported"
-# ],
-# "transports": [
-# "VIRTIO_RING_F_EVENT_IDX: Used & avail. event fields enabled",
-# "VIRTIO_RING_F_INDIRECT_DESC: Indirect descriptors supported",
-# "VIRTIO_F_VERSION_1: Device compliant for v1 spec (legacy)",
-# "VIRTIO_F_ANY_LAYOUT: Device accepts arbitrary desc. layouts",
-# "VIRTIO_F_NOTIFY_ON_EMPTY: Notify when device runs out of avail. descs. on VQ"
-# ]
-# },
-# "use-guest-notifier-mask": true,
-# "vm-running": true,
-# "queue-sel": 2,
-# "disabled": false,
-# "vhost-started": true,
-# "use-started": true
-# }
-# }
+# ]
+# },
+# "use-guest-notifier-mask": true,
+# "vm-running": true,
+# "queue-sel": 2,
+# "disabled": false,
+# "vhost-started": true,
+# "use-started": true
+# }
+# }
##
{ 'command': 'x-query-virtio-status',
'data': { 'path': 'str' },
@@ -570,52 +570,52 @@
#
# Examples:
#
-# 1. Get VirtQueueStatus for virtio-vsock (vhost-vsock running)
-#
-# -> { "execute": "x-query-virtio-queue-status",
-# "arguments": { "path": "/machine/peripheral/vsock0/virtio-backend",
-# "queue": 1 }
-# }
-# <- { "return": {
-# "signalled-used": 0,
-# "inuse": 0,
-# "name": "vhost-vsock",
-# "vring-align": 4096,
-# "vring-desc": 5217370112,
-# "signalled-used-valid": false,
-# "vring-num-default": 128,
-# "vring-avail": 5217372160,
-# "queue-index": 1,
-# "last-avail-idx": 0,
-# "vring-used": 5217372480,
-# "used-idx": 0,
-# "vring-num": 128
-# }
-# }
-#
-# 2. Get VirtQueueStatus for virtio-serial (no vhost)
-#
-# -> { "execute": "x-query-virtio-queue-status",
-# "arguments": { "path": "/machine/peripheral-anon/device[0]/virtio-backend",
-# "queue": 20 }
-# }
-# <- { "return": {
-# "signalled-used": 0,
-# "inuse": 0,
-# "name": "virtio-serial",
-# "vring-align": 4096,
-# "vring-desc": 5182074880,
-# "signalled-used-valid": false,
-# "vring-num-default": 128,
-# "vring-avail": 5182076928,
-# "queue-index": 20,
-# "last-avail-idx": 0,
-# "vring-used": 5182077248,
-# "used-idx": 0,
-# "shadow-avail-idx": 0,
-# "vring-num": 128
-# }
-# }
+# 1. Get VirtQueueStatus for virtio-vsock (vhost-vsock running)
+#
+# -> { "execute": "x-query-virtio-queue-status",
+# "arguments": { "path": "/machine/peripheral/vsock0/virtio-backend",
+# "queue": 1 }
+# }
+# <- { "return": {
+# "signalled-used": 0,
+# "inuse": 0,
+# "name": "vhost-vsock",
+# "vring-align": 4096,
+# "vring-desc": 5217370112,
+# "signalled-used-valid": false,
+# "vring-num-default": 128,
+# "vring-avail": 5217372160,
+# "queue-index": 1,
+# "last-avail-idx": 0,
+# "vring-used": 5217372480,
+# "used-idx": 0,
+# "vring-num": 128
+# }
+# }
+#
+# 2. Get VirtQueueStatus for virtio-serial (no vhost)
+#
+# -> { "execute": "x-query-virtio-queue-status",
+# "arguments": { "path": "/machine/peripheral-anon/device[0]/virtio-backend",
+# "queue": 20 }
+# }
+# <- { "return": {
+# "signalled-used": 0,
+# "inuse": 0,
+# "name": "virtio-serial",
+# "vring-align": 4096,
+# "vring-desc": 5182074880,
+# "signalled-used-valid": false,
+# "vring-num-default": 128,
+# "vring-avail": 5182076928,
+# "queue-index": 20,
+# "last-avail-idx": 0,
+# "vring-used": 5182077248,
+# "used-idx": 0,
+# "shadow-avail-idx": 0,
+# "vring-num": 128
+# }
+# }
##
{ 'command': 'x-query-virtio-queue-status',
'data': { 'path': 'str', 'queue': 'uint16' },
@@ -690,51 +690,51 @@
#
# Examples:
#
-# 1. Get vhost_virtqueue status for vhost-crypto
-#
-# -> { "execute": "x-query-virtio-vhost-queue-status",
-# "arguments": { "path": "/machine/peripheral/crypto0/virtio-backend",
-# "queue": 0 }
-# }
-# <- { "return": {
-# "avail-phys": 5216124928,
-# "name": "virtio-crypto",
-# "used-phys": 5216127040,
-# "avail-size": 2054,
-# "desc-size": 16384,
-# "used-size": 8198,
-# "desc": 140141447430144,
-# "num": 1024,
-# "call": 0,
-# "avail": 140141447446528,
-# "desc-phys": 5216108544,
-# "used": 140141447448640,
-# "kick": 0
-# }
-# }
-#
-# 2. Get vhost_virtqueue status for vhost-vsock
-#
-# -> { "execute": "x-query-virtio-vhost-queue-status",
-# "arguments": { "path": "/machine/peripheral/vsock0/virtio-backend",
-# "queue": 0 }
-# }
-# <- { "return": {
-# "avail-phys": 5182261248,
-# "name": "vhost-vsock",
-# "used-phys": 5182261568,
-# "avail-size": 262,
-# "desc-size": 2048,
-# "used-size": 1030,
-# "desc": 140141413580800,
-# "num": 128,
-# "call": 0,
-# "avail": 140141413582848,
-# "desc-phys": 5182259200,
-# "used": 140141413583168,
-# "kick": 0
-# }
-# }
+# 1. Get vhost_virtqueue status for vhost-crypto
+#
+# -> { "execute": "x-query-virtio-vhost-queue-status",
+# "arguments": { "path": "/machine/peripheral/crypto0/virtio-backend",
+# "queue": 0 }
+# }
+# <- { "return": {
+# "avail-phys": 5216124928,
+# "name": "virtio-crypto",
+# "used-phys": 5216127040,
+# "avail-size": 2054,
+# "desc-size": 16384,
+# "used-size": 8198,
+# "desc": 140141447430144,
+# "num": 1024,
+# "call": 0,
+# "avail": 140141447446528,
+# "desc-phys": 5216108544,
+# "used": 140141447448640,
+# "kick": 0
+# }
+# }
+#
+# 2. Get vhost_virtqueue status for vhost-vsock
+#
+# -> { "execute": "x-query-virtio-vhost-queue-status",
+# "arguments": { "path": "/machine/peripheral/vsock0/virtio-backend",
+# "queue": 0 }
+# }
+# <- { "return": {
+# "avail-phys": 5182261248,
+# "name": "vhost-vsock",
+# "used-phys": 5182261568,
+# "avail-size": 262,
+# "desc-size": 2048,
+# "used-size": 1030,
+# "desc": 140141413580800,
+# "num": 128,
+# "call": 0,
+# "avail": 140141413582848,
+# "desc-phys": 5182259200,
+# "used": 140141413583168,
+# "kick": 0
+# }
+# }
##
{ 'command': 'x-query-virtio-vhost-queue-status',
'data': { 'path': 'str', 'queue': 'uint16' },
@@ -839,90 +839,90 @@
#
# Examples:
#
-# 1. Introspect on virtio-net's VirtQueue 0 at index 5
-#
-# -> { "execute": "x-query-virtio-queue-element",
-# "arguments": { "path": "/machine/peripheral-anon/device[1]/virtio-backend",
-# "queue": 0,
-# "index": 5 }
-# }
-# <- { "return": {
-# "index": 5,
-# "name": "virtio-net",
-# "descs": [
-# {
-# "flags": ["write"],
-# "len": 1536,
-# "addr": 5257305600
+# 1. Introspect on virtio-net's VirtQueue 0 at index 5
+#
+# -> { "execute": "x-query-virtio-queue-element",
+# "arguments": { "path": "/machine/peripheral-anon/device[1]/virtio-backend",
+# "queue": 0,
+# "index": 5 }
+# }
+# <- { "return": {
+# "index": 5,
+# "name": "virtio-net",
+# "descs": [
+# {
+# "flags": ["write"],
+# "len": 1536,
+# "addr": 5257305600
+# }
+# ],
+# "avail": {
+# "idx": 256,
+# "flags": 0,
+# "ring": 5
+# },
+# "used": {
+# "idx": 13,
+# "flags": 0
# }
-# ],
-# "avail": {
-# "idx": 256,
-# "flags": 0,
-# "ring": 5
-# },
-# "used": {
-# "idx": 13,
-# "flags": 0
# }
-# }
-# }
-#
-# 2. Introspect on virtio-crypto's VirtQueue 1 at head
-#
-# -> { "execute": "x-query-virtio-queue-element",
-# "arguments": { "path": "/machine/peripheral/crypto0/virtio-backend",
-# "queue": 1 }
-# }
-# <- { "return": {
-# "index": 0,
-# "name": "virtio-crypto",
-# "descs": [
-# {
-# "flags": [],
-# "len": 0,
-# "addr": 8080268923184214134
+# }
+#
+# 2. Introspect on virtio-crypto's VirtQueue 1 at head
+#
+# -> { "execute": "x-query-virtio-queue-element",
+# "arguments": { "path": "/machine/peripheral/crypto0/virtio-backend",
+# "queue": 1 }
+# }
+# <- { "return": {
+# "index": 0,
+# "name": "virtio-crypto",
+# "descs": [
+# {
+# "flags": [],
+# "len": 0,
+# "addr": 8080268923184214134
+# }
+# ],
+# "avail": {
+# "idx": 280,
+# "flags": 0,
+# "ring": 0
+# },
+# "used": {
+# "idx": 280,
+# "flags": 0
# }
-# ],
-# "avail": {
-# "idx": 280,
-# "flags": 0,
-# "ring": 0
-# },
-# "used": {
-# "idx": 280,
-# "flags": 0
# }
-# }
-# }
-#
-# 3. Introspect on virtio-scsi's VirtQueue 2 at head
-#
-# -> { "execute": "x-query-virtio-queue-element",
-# "arguments": { "path": "/machine/peripheral-anon/device[2]/virtio-backend",
-# "queue": 2 }
-# }
-# <- { "return": {
-# "index": 19,
-# "name": "virtio-scsi",
-# "descs": [
-# {
-# "flags": ["used", "indirect", "write"],
-# "len": 4099327944,
-# "addr": 12055409292258155293
+# }
+#
+# 3. Introspect on virtio-scsi's VirtQueue 2 at head
+#
+# -> { "execute": "x-query-virtio-queue-element",
+# "arguments": { "path": "/machine/peripheral-anon/device[2]/virtio-backend",
+# "queue": 2 }
+# }
+# <- { "return": {
+# "index": 19,
+# "name": "virtio-scsi",
+# "descs": [
+# {
+# "flags": ["used", "indirect", "write"],
+# "len": 4099327944,
+# "addr": 12055409292258155293
+# }
+# ],
+# "avail": {
+# "idx": 1147,
+# "flags": 0,
+# "ring": 19
+# },
+# "used": {
+# "idx": 280,
+# "flags": 0
# }
-# ],
-# "avail": {
-# "idx": 1147,
-# "flags": 0,
-# "ring": 19
-# },
-# "used": {
-# "idx": 280,
-# "flags": 0
# }
-# }
-# }
+# }
##
{ 'command': 'x-query-virtio-queue-element',
'data': { 'path': 'str', 'queue': 'uint16', '*index': 'uint16' },
diff --git a/qapi/yank.json b/qapi/yank.json
index 87ec7cab96..b7aeb9ceef 100644
--- a/qapi/yank.json
+++ b/qapi/yank.json
@@ -49,6 +49,8 @@
# A yank instance can be yanked with the @yank qmp command to recover
# from a hanging QEMU.
#
+# @type: yank instance type
+#
# Currently implemented yank instances:
#
# - nbd block device: Yanking it will shut down the connection to the
@@ -74,21 +76,21 @@
# Try to recover from hanging QEMU by yanking the specified instances.
# See @YankInstance for more information.
#
-# Takes a list of @YankInstance as argument.
+# @instances: the instances to be yanked
#
# Returns:
-# - Nothing on success
-# - @DeviceNotFound error, if any of the YankInstances doesn't exist
+# - Nothing on success
+# - @DeviceNotFound error, if any of the YankInstances doesn't exist
#
# Example:
#
-# -> { "execute": "yank",
-# "arguments": {
-# "instances": [
-# { "type": "block-node",
-# "node-name": "nbd0" }
-# ] } }
-# <- { "return": {} }
+# -> { "execute": "yank",
+# "arguments": {
+# "instances": [
+# { "type": "block-node",
+# "node-name": "nbd0" }
+# ] } }
+# <- { "return": {} }
#
# Since: 6.0
##
@@ -105,11 +107,11 @@
#
# Example:
#
-# -> { "execute": "query-yank" }
-# <- { "return": [
-# { "type": "block-node",
-# "node-name": "nbd0" }
-# ] }
+# -> { "execute": "query-yank" }
+# <- { "return": [
+# { "type": "block-node",
+# "node-name": "nbd0" }
+# ] }
#
# Since: 6.0
##