]>
Commit | Line | Data |
---|---|---|
5db15096 | 1 | # -*- Mode: Python -*- |
d3a48372 MAL |
2 | |
3 | ## | |
f5cf31c5 | 4 | # = Block devices |
d3a48372 | 5 | ## |
5db15096 | 6 | |
5db15096 BC |
7 | { 'include': 'block-core.json' } |
8 | ||
d3a48372 | 9 | ## |
f5cf31c5 | 10 | # == Additional block stuff (VM related) |
d3a48372 MAL |
11 | ## |
12 | ||
2e95fa17 | 13 | ## |
f169f8fb | 14 | # @BiosAtaTranslation: |
2e95fa17 BC |
15 | # |
16 | # Policy that BIOS should use to interpret cylinder/head/sector | |
17 | # addresses. Note that Bochs BIOS and SeaBIOS will not actually | |
18 | # translate logical CHS to physical; instead, they will use logical | |
19 | # block addressing. | |
20 | # | |
21 | # @auto: If cylinder/heads/sizes are passed, choose between none and LBA | |
22 | # depending on the size of the disk. If they are not passed, | |
23 | # choose none if QEMU can guess that the disk had 16 or fewer | |
24 | # heads, large if QEMU can guess that the disk had 131072 or | |
25 | # fewer tracks across all heads (i.e. cylinders*heads<131072), | |
26 | # otherwise LBA. | |
27 | # | |
28 | # @none: The physical disk geometry is equal to the logical geometry. | |
29 | # | |
30 | # @lba: Assume 63 sectors per track and one of 16, 32, 64, 128 or 255 | |
31 | # heads (if fewer than 255 are enough to cover the whole disk | |
32 | # with 1024 cylinders/head). The number of cylinders/head is | |
33 | # then computed based on the number of sectors and heads. | |
34 | # | |
35 | # @large: The number of cylinders per head is scaled down to 1024 | |
36 | # by correspondingly scaling up the number of heads. | |
37 | # | |
38 | # @rechs: Same as @large, but first convert a 16-head geometry to | |
39 | # 15-head, by proportionally scaling up the number of | |
40 | # cylinders/head. | |
41 | # | |
42 | # Since: 2.0 | |
43 | ## | |
44 | { 'enum': 'BiosAtaTranslation', | |
45 | 'data': ['auto', 'none', 'lba', 'large', 'rechs']} | |
46 | ||
2da44dd0 | 47 | ## |
5072f7b3 | 48 | # @FloppyDriveType: |
2da44dd0 JS |
49 | # |
50 | # Type of Floppy drive to be emulated by the Floppy Disk Controller. | |
51 | # | |
52 | # @144: 1.44MB 3.5" drive | |
53 | # @288: 2.88MB 3.5" drive | |
54 | # @120: 1.2MB 5.25" drive | |
55 | # @none: No drive connected | |
56 | # @auto: Automatically determined by inserted media at boot | |
57 | # | |
58 | # Since: 2.6 | |
59 | ## | |
60 | { 'enum': 'FloppyDriveType', | |
61 | 'data': ['144', '288', '120', 'none', 'auto']} | |
62 | ||
2e95fa17 | 63 | ## |
5072f7b3 | 64 | # @BlockdevSnapshotInternal: |
2e95fa17 | 65 | # |
75dfd402 KW |
66 | # @device: the device name or node-name of a root node to generate the snapshot |
67 | # from | |
2e95fa17 BC |
68 | # |
69 | # @name: the name of the internal snapshot to be created | |
70 | # | |
71 | # Notes: In transaction, if @name is empty, or any snapshot matching @name | |
72 | # exists, the operation will fail. Only some image formats support it, | |
73 | # for example, qcow2, rbd, and sheepdog. | |
74 | # | |
75 | # Since: 1.7 | |
76 | ## | |
895a2a80 | 77 | { 'struct': 'BlockdevSnapshotInternal', |
2e95fa17 BC |
78 | 'data': { 'device': 'str', 'name': 'str' } } |
79 | ||
5f640894 PB |
80 | ## |
81 | # @PRManagerInfo: | |
82 | # | |
83 | # Information about a persistent reservation manager | |
84 | # | |
85 | # @id: the identifier of the persistent reservation manager | |
86 | # | |
87 | # @connected: true if the persistent reservation manager is connected to | |
88 | # the underlying storage or helper | |
89 | # | |
90 | # Since: 3.0 | |
91 | ## | |
92 | { 'struct': 'PRManagerInfo', | |
93 | 'data': {'id': 'str', 'connected': 'bool'} } | |
94 | ||
95 | ## | |
96 | # @query-pr-managers: | |
97 | # | |
98 | # Returns a list of information about each persistent reservation manager. | |
99 | # | |
100 | # Returns: a list of @PRManagerInfo for each persistent reservation manager | |
101 | # | |
102 | # Since: 3.0 | |
103 | ## | |
104 | { 'command': 'query-pr-managers', 'returns': ['PRManagerInfo'], | |
105 | 'allow-preconfig': true } | |
106 | ||
107 | ||
2e95fa17 | 108 | ## |
5072f7b3 | 109 | # @blockdev-snapshot-internal-sync: |
2e95fa17 | 110 | # |
bfeafc9c MAL |
111 | # Synchronously take an internal snapshot of a block device, when the |
112 | # format of the image used supports it. If the name is an empty | |
113 | # string, or a snapshot with name already exists, the operation will | |
114 | # fail. | |
2e95fa17 BC |
115 | # |
116 | # For the arguments, see the documentation of BlockdevSnapshotInternal. | |
117 | # | |
118 | # Returns: nothing on success | |
bfeafc9c | 119 | # |
75dfd402 | 120 | # If @device is not a valid block device, GenericError |
bfeafc9c | 121 | # |
2e95fa17 BC |
122 | # If any snapshot matching @name exists, or @name is empty, |
123 | # GenericError | |
bfeafc9c | 124 | # |
2e95fa17 BC |
125 | # If the format of the image used does not support it, |
126 | # BlockFormatFeatureNotSupported | |
127 | # | |
5072f7b3 | 128 | # Since: 1.7 |
bfeafc9c MAL |
129 | # |
130 | # Example: | |
131 | # | |
132 | # -> { "execute": "blockdev-snapshot-internal-sync", | |
133 | # "arguments": { "device": "ide-hd0", | |
134 | # "name": "snapshot0" } | |
135 | # } | |
136 | # <- { "return": {} } | |
137 | # | |
2e95fa17 BC |
138 | ## |
139 | { 'command': 'blockdev-snapshot-internal-sync', | |
140 | 'data': 'BlockdevSnapshotInternal' } | |
141 | ||
142 | ## | |
5072f7b3 | 143 | # @blockdev-snapshot-delete-internal-sync: |
2e95fa17 BC |
144 | # |
145 | # Synchronously delete an internal snapshot of a block device, when the format | |
146 | # of the image used support it. The snapshot is identified by name or id or | |
147 | # both. One of the name or id is required. Return SnapshotInfo for the | |
148 | # successfully deleted snapshot. | |
149 | # | |
2dfb4c03 KW |
150 | # @device: the device name or node-name of a root node to delete the snapshot |
151 | # from | |
2e95fa17 BC |
152 | # |
153 | # @id: optional the snapshot's ID to be deleted | |
154 | # | |
155 | # @name: optional the snapshot's name to be deleted | |
156 | # | |
157 | # Returns: SnapshotInfo on success | |
2dfb4c03 | 158 | # If @device is not a valid block device, GenericError |
2e95fa17 BC |
159 | # If snapshot not found, GenericError |
160 | # If the format of the image used does not support it, | |
161 | # BlockFormatFeatureNotSupported | |
162 | # If @id and @name are both not specified, GenericError | |
163 | # | |
5072f7b3 | 164 | # Since: 1.7 |
b31177b0 MAL |
165 | # |
166 | # Example: | |
167 | # | |
168 | # -> { "execute": "blockdev-snapshot-delete-internal-sync", | |
169 | # "arguments": { "device": "ide-hd0", | |
170 | # "name": "snapshot0" } | |
171 | # } | |
172 | # <- { "return": { | |
173 | # "id": "1", | |
174 | # "name": "snapshot0", | |
175 | # "vm-state-size": 0, | |
176 | # "date-sec": 1000012, | |
177 | # "date-nsec": 10, | |
178 | # "vm-clock-sec": 100, | |
179 | # "vm-clock-nsec": 20 | |
180 | # } | |
181 | # } | |
182 | # | |
2e95fa17 BC |
183 | ## |
184 | { 'command': 'blockdev-snapshot-delete-internal-sync', | |
185 | 'data': { 'device': 'str', '*id': 'str', '*name': 'str'}, | |
186 | 'returns': 'SnapshotInfo' } | |
187 | ||
188 | ## | |
189 | # @eject: | |
190 | # | |
191 | # Ejects a device from a removable drive. | |
192 | # | |
1d8bda12 | 193 | # @device: Block device name (deprecated, use @id instead) |
fbe2d816 | 194 | # |
1d8bda12 | 195 | # @id: The name or QOM path of the guest device (since: 2.8) |
2e95fa17 | 196 | # |
1d8bda12 | 197 | # @force: If true, eject regardless of whether the drive is locked. |
2e95fa17 BC |
198 | # If not specified, the default value is false. |
199 | # | |
200 | # Returns: Nothing on success | |
5fba0a72 | 201 | # |
2e95fa17 BC |
202 | # If @device is not a valid block device, DeviceNotFound |
203 | # | |
5fba0a72 | 204 | # Notes: Ejecting a device with no media results in success |
2e95fa17 BC |
205 | # |
206 | # Since: 0.14.0 | |
5fba0a72 MAL |
207 | # |
208 | # Example: | |
209 | # | |
244d04db | 210 | # -> { "execute": "eject", "arguments": { "id": "ide1-0-1" } } |
5fba0a72 | 211 | # <- { "return": {} } |
2e95fa17 | 212 | ## |
fbe2d816 KW |
213 | { 'command': 'eject', |
214 | 'data': { '*device': 'str', | |
215 | '*id': 'str', | |
216 | '*force': 'bool' } } | |
2e95fa17 BC |
217 | |
218 | ## | |
219 | # @nbd-server-start: | |
220 | # | |
221 | # Start an NBD server listening on the given host and port. Block | |
222 | # devices can then be exported using @nbd-server-add. The NBD | |
223 | # server will present them as named exports; for example, another | |
224 | # QEMU instance could refer to them as "nbd:HOST:PORT:exportname=NAME". | |
225 | # | |
226 | # @addr: Address on which to listen. | |
ddffee39 | 227 | # @tls-creds: (optional) ID of the TLS credentials object. Since 2.6 |
2e95fa17 BC |
228 | # |
229 | # Returns: error if the server is already running. | |
230 | # | |
231 | # Since: 1.3.0 | |
232 | ## | |
233 | { 'command': 'nbd-server-start', | |
dfd100f2 | 234 | 'data': { 'addr': 'SocketAddressLegacy', |
ddffee39 | 235 | '*tls-creds': 'str'} } |
2e95fa17 BC |
236 | |
237 | ## | |
238 | # @nbd-server-add: | |
239 | # | |
094138d0 | 240 | # Export a block node to QEMU's embedded NBD server. |
2e95fa17 | 241 | # |
094138d0 | 242 | # @device: The device name or node name of the node to be exported |
2e95fa17 | 243 | # |
902a1f94 VSO |
244 | # @name: Export name. If unspecified, the @device parameter is used as the |
245 | # export name. (Since 2.12) | |
246 | # | |
2e95fa17 | 247 | # @writable: Whether clients should be able to write to the device via the |
1d8bda12 | 248 | # NBD connection (default false). |
2e95fa17 | 249 | # |
902a1f94 VSO |
250 | # Returns: error if the server is not running, or export with the same name |
251 | # already exists. | |
2e95fa17 BC |
252 | # |
253 | # Since: 1.3.0 | |
254 | ## | |
902a1f94 VSO |
255 | { 'command': 'nbd-server-add', |
256 | 'data': {'device': 'str', '*name': 'str', '*writable': 'bool'} } | |
2e95fa17 | 257 | |
a3b0dc75 VSO |
258 | ## |
259 | # @NbdServerRemoveMode: | |
260 | # | |
261 | # Mode for removing an NBD export. | |
262 | # | |
263 | # @safe: Remove export if there are no existing connections, fail otherwise. | |
264 | # | |
265 | # @hard: Drop all connections immediately and remove export. | |
266 | # | |
267 | # Potential additional modes to be added in the future: | |
268 | # | |
269 | # hide: Just hide export from new clients, leave existing connections as is. | |
270 | # Remove export after all clients are disconnected. | |
271 | # | |
272 | # soft: Hide export from new clients, answer with ESHUTDOWN for all further | |
273 | # requests from existing clients. | |
274 | # | |
275 | # Since: 2.12 | |
276 | ## | |
277 | {'enum': 'NbdServerRemoveMode', 'data': ['safe', 'hard']} | |
278 | ||
279 | ## | |
280 | # @nbd-server-remove: | |
281 | # | |
282 | # Remove NBD export by name. | |
283 | # | |
284 | # @name: Export name. | |
285 | # | |
286 | # @mode: Mode of command operation. See @NbdServerRemoveMode description. | |
287 | # Default is 'safe'. | |
288 | # | |
289 | # Returns: error if | |
290 | # - the server is not running | |
291 | # - export is not found | |
292 | # - mode is 'safe' and there are existing connections | |
293 | # | |
294 | # Since: 2.12 | |
295 | ## | |
296 | { 'command': 'nbd-server-remove', | |
297 | 'data': {'name': 'str', '*mode': 'NbdServerRemoveMode'} } | |
298 | ||
767f0c7d VSO |
299 | ## |
300 | # @x-nbd-server-add-bitmap: | |
301 | # | |
302 | # Expose a dirty bitmap associated with the selected export. The bitmap search | |
303 | # starts at the device attached to the export, and includes all backing files. | |
304 | # The exported bitmap is then locked until the NBD export is removed. | |
305 | # | |
306 | # @name: Export name. | |
307 | # | |
308 | # @bitmap: Bitmap name to search for. | |
309 | # | |
310 | # @bitmap-export-name: How the bitmap will be seen by nbd clients | |
311 | # (default @bitmap) | |
312 | # | |
313 | # Note: the client must use NBD_OPT_SET_META_CONTEXT with a query of | |
314 | # "qemu:dirty-bitmap:NAME" (where NAME matches @bitmap-export-name) to access | |
315 | # the exposed bitmap. | |
316 | # | |
317 | # Since: 3.0 | |
318 | ## | |
319 | { 'command': 'x-nbd-server-add-bitmap', | |
320 | 'data': {'name': 'str', 'bitmap': 'str', '*bitmap-export-name': 'str'} } | |
321 | ||
2e95fa17 BC |
322 | ## |
323 | # @nbd-server-stop: | |
324 | # | |
325 | # Stop QEMU's embedded NBD server, and unregister all devices previously | |
326 | # added via @nbd-server-add. | |
327 | # | |
328 | # Since: 1.3.0 | |
329 | ## | |
330 | { 'command': 'nbd-server-stop' } | |
331 | ||
a5ee7bd4 | 332 | ## |
5072f7b3 | 333 | # @DEVICE_TRAY_MOVED: |
a5ee7bd4 WX |
334 | # |
335 | # Emitted whenever the tray of a removable device is moved by the guest or by | |
336 | # HMP/QMP commands | |
337 | # | |
2d76e724 KW |
338 | # @device: Block device name. This is always present for compatibility |
339 | # reasons, but it can be empty ("") if the image does not | |
340 | # have a device name associated. | |
341 | # | |
d750c3a9 | 342 | # @id: The name or QOM path of the guest device (since 2.8) |
a5ee7bd4 WX |
343 | # |
344 | # @tray-open: true if the tray has been opened or false if it has been closed | |
345 | # | |
346 | # Since: 1.1 | |
01b7d4be MAL |
347 | # |
348 | # Example: | |
349 | # | |
350 | # <- { "event": "DEVICE_TRAY_MOVED", | |
351 | # "data": { "device": "ide1-cd0", | |
352 | # "id": "/machine/unattached/device[22]", | |
353 | # "tray-open": true | |
354 | # }, | |
355 | # "timestamp": { "seconds": 1265044230, "microseconds": 450486 } } | |
356 | # | |
a5ee7bd4 WX |
357 | ## |
358 | { 'event': 'DEVICE_TRAY_MOVED', | |
2d76e724 | 359 | 'data': { 'device': 'str', 'id': 'str', 'tray-open': 'bool' } } |
0ae053b7 | 360 | |
e2c81a45 PB |
361 | ## |
362 | # @PR_MANAGER_STATUS_CHANGED: | |
363 | # | |
364 | # Emitted whenever the connected status of a persistent reservation | |
365 | # manager changes. | |
366 | # | |
367 | # @id: The id of the PR manager object | |
368 | # | |
369 | # @connected: true if the PR manager is connected to a backend | |
370 | # | |
371 | # Since: 3.0 | |
372 | # | |
373 | # Example: | |
374 | # | |
375 | # <- { "event": "PR_MANAGER_STATUS_CHANGED", | |
376 | # "data": { "id": "pr-helper0", | |
377 | # "connected": true | |
378 | # }, | |
379 | # "timestamp": { "seconds": 1519840375, "microseconds": 450486 } } | |
380 | # | |
381 | ## | |
382 | { 'event': 'PR_MANAGER_STATUS_CHANGED', | |
383 | 'data': { 'id': 'str', 'connected': 'bool' } } | |
384 | ||
0ae053b7 | 385 | ## |
5072f7b3 | 386 | # @QuorumOpType: |
0ae053b7 CX |
387 | # |
388 | # An enumeration of the quorum operation types | |
389 | # | |
390 | # @read: read operation | |
391 | # | |
392 | # @write: write operation | |
393 | # | |
394 | # @flush: flush operation | |
395 | # | |
396 | # Since: 2.6 | |
397 | ## | |
398 | { 'enum': 'QuorumOpType', | |
399 | 'data': [ 'read', 'write', 'flush' ] } | |
fd87a6bd MA |
400 | |
401 | ## | |
402 | # @QUORUM_FAILURE: | |
403 | # | |
404 | # Emitted by the Quorum block driver if it fails to establish a quorum | |
405 | # | |
406 | # @reference: device name if defined else node name | |
407 | # | |
408 | # @sector-num: number of the first sector of the failed read operation | |
409 | # | |
410 | # @sectors-count: failed read operation sector count | |
411 | # | |
412 | # Note: This event is rate-limited. | |
413 | # | |
414 | # Since: 2.0 | |
415 | # | |
416 | # Example: | |
417 | # | |
418 | # <- { "event": "QUORUM_FAILURE", | |
419 | # "data": { "reference": "usr1", "sector-num": 345435, "sectors-count": 5 }, | |
420 | # "timestamp": { "seconds": 1344522075, "microseconds": 745528 } } | |
421 | # | |
422 | ## | |
423 | { 'event': 'QUORUM_FAILURE', | |
424 | 'data': { 'reference': 'str', 'sector-num': 'int', 'sectors-count': 'int' } } | |
425 | ||
426 | ## | |
427 | # @QUORUM_REPORT_BAD: | |
428 | # | |
429 | # Emitted to report a corruption of a Quorum file | |
430 | # | |
431 | # @type: quorum operation type (Since 2.6) | |
432 | # | |
433 | # @error: error message. Only present on failure. This field | |
434 | # contains a human-readable error message. There are no semantics other | |
435 | # than that the block layer reported an error and clients should not | |
436 | # try to interpret the error string. | |
437 | # | |
438 | # @node-name: the graph node name of the block driver state | |
439 | # | |
440 | # @sector-num: number of the first sector of the failed read operation | |
441 | # | |
442 | # @sectors-count: failed read operation sector count | |
443 | # | |
444 | # Note: This event is rate-limited. | |
445 | # | |
446 | # Since: 2.0 | |
447 | # | |
448 | # Example: | |
449 | # | |
450 | # 1. Read operation | |
451 | # | |
452 | # { "event": "QUORUM_REPORT_BAD", | |
453 | # "data": { "node-name": "node0", "sector-num": 345435, "sectors-count": 5, | |
454 | # "type": "read" }, | |
455 | # "timestamp": { "seconds": 1344522075, "microseconds": 745528 } } | |
456 | # | |
457 | # 2. Flush operation | |
458 | # | |
459 | # { "event": "QUORUM_REPORT_BAD", | |
460 | # "data": { "node-name": "node0", "sector-num": 0, "sectors-count": 2097120, | |
461 | # "type": "flush", "error": "Broken pipe" }, | |
462 | # "timestamp": { "seconds": 1456406829, "microseconds": 291763 } } | |
463 | # | |
464 | ## | |
465 | { 'event': 'QUORUM_REPORT_BAD', | |
466 | 'data': { 'type': 'QuorumOpType', '*error': 'str', 'node-name': 'str', | |
467 | 'sector-num': 'int', 'sectors-count': 'int' } } |