]>
Commit | Line | Data |
---|---|---|
5daa6bfd KW |
1 | # -*- Mode: Python -*- |
2 | # vim: filetype=python | |
3 | ||
4 | ## | |
5 | # == Block device exports | |
6 | ## | |
7 | ||
8 | { 'include': 'sockets.json' } | |
9 | ||
10 | ## | |
11 | # @NbdServerOptions: | |
12 | # | |
13 | # Keep this type consistent with the nbd-server-start arguments. The only | |
14 | # intended difference is using SocketAddress instead of SocketAddressLegacy. | |
15 | # | |
16 | # @addr: Address on which to listen. | |
17 | # @tls-creds: ID of the TLS credentials object (since 2.6). | |
18 | # @tls-authz: ID of the QAuthZ authorization object used to validate | |
19 | # the client's x509 distinguished name. This object is | |
20 | # is only resolved at time of use, so can be deleted and | |
21 | # recreated on the fly while the NBD server is active. | |
22 | # If missing, it will default to denying access (since 4.0). | |
1c8222b0 KW |
23 | # @max-connections: The maximum number of connections to allow at the same |
24 | # time, 0 for unlimited. (since 5.2; default: 0) | |
5daa6bfd KW |
25 | # |
26 | # Since: 4.2 | |
27 | ## | |
28 | { 'struct': 'NbdServerOptions', | |
29 | 'data': { 'addr': 'SocketAddress', | |
30 | '*tls-creds': 'str', | |
1c8222b0 KW |
31 | '*tls-authz': 'str', |
32 | '*max-connections': 'uint32' } } | |
5daa6bfd KW |
33 | |
34 | ## | |
35 | # @nbd-server-start: | |
36 | # | |
37 | # Start an NBD server listening on the given host and port. Block | |
38 | # devices can then be exported using @nbd-server-add. The NBD | |
39 | # server will present them as named exports; for example, another | |
40 | # QEMU instance could refer to them as "nbd:HOST:PORT:exportname=NAME". | |
41 | # | |
42 | # Keep this type consistent with the NbdServerOptions type. The only intended | |
43 | # difference is using SocketAddressLegacy instead of SocketAddress. | |
44 | # | |
45 | # @addr: Address on which to listen. | |
46 | # @tls-creds: ID of the TLS credentials object (since 2.6). | |
47 | # @tls-authz: ID of the QAuthZ authorization object used to validate | |
48 | # the client's x509 distinguished name. This object is | |
49 | # is only resolved at time of use, so can be deleted and | |
50 | # recreated on the fly while the NBD server is active. | |
51 | # If missing, it will default to denying access (since 4.0). | |
1c8222b0 KW |
52 | # @max-connections: The maximum number of connections to allow at the same |
53 | # time, 0 for unlimited. (since 5.2; default: 0) | |
5daa6bfd KW |
54 | # |
55 | # Returns: error if the server is already running. | |
56 | # | |
9bc6e893 | 57 | # Since: 1.3 |
5daa6bfd KW |
58 | ## |
59 | { 'command': 'nbd-server-start', | |
60 | 'data': { 'addr': 'SocketAddressLegacy', | |
61 | '*tls-creds': 'str', | |
1c8222b0 KW |
62 | '*tls-authz': 'str', |
63 | '*max-connections': 'uint32' } } | |
5daa6bfd KW |
64 | |
65 | ## | |
cbad81ce | 66 | # @BlockExportOptionsNbdBase: |
5daa6bfd | 67 | # |
cbad81ce EB |
68 | # An NBD block export (common options shared between nbd-server-add and |
69 | # the NBD branch of block-export-add). | |
5daa6bfd KW |
70 | # |
71 | # @name: Export name. If unspecified, the @device parameter is used as the | |
72 | # export name. (Since 2.12) | |
73 | # | |
74 | # @description: Free-form description of the export, up to 4096 bytes. | |
75 | # (Since 5.0) | |
76 | # | |
5daa6bfd KW |
77 | # Since: 5.0 |
78 | ## | |
cbad81ce EB |
79 | { 'struct': 'BlockExportOptionsNbdBase', |
80 | 'data': { '*name': 'str', '*description': 'str' } } | |
81 | ||
82 | ## | |
83 | # @BlockExportOptionsNbd: | |
84 | # | |
85 | # An NBD block export (distinct options used in the NBD branch of | |
86 | # block-export-add). | |
87 | # | |
88 | # @bitmaps: Also export each of the named dirty bitmaps reachable from | |
89 | # @device, so the NBD client can use NBD_OPT_SET_META_CONTEXT with | |
90 | # the metadata context name "qemu:dirty-bitmap:BITMAP" to inspect | |
91 | # each bitmap. | |
92 | # | |
dbc7b014 EB |
93 | # @allocation-depth: Also export the allocation depth map for @device, so |
94 | # the NBD client can use NBD_OPT_SET_META_CONTEXT with | |
95 | # the metadata context name "qemu:allocation-depth" to | |
96 | # inspect allocation details. (since 5.2) | |
97 | # | |
cbad81ce EB |
98 | # Since: 5.2 |
99 | ## | |
143ea767 | 100 | { 'struct': 'BlockExportOptionsNbd', |
cbad81ce | 101 | 'base': 'BlockExportOptionsNbdBase', |
dbc7b014 | 102 | 'data': { '*bitmaps': ['str'], '*allocation-depth': 'bool' } } |
b6076afc | 103 | |
90fc91d5 SH |
104 | ## |
105 | # @BlockExportOptionsVhostUserBlk: | |
106 | # | |
107 | # A vhost-user-blk block export. | |
108 | # | |
109 | # @addr: The vhost-user socket on which to listen. Both 'unix' and 'fd' | |
110 | # SocketAddress types are supported. Passed fds must be UNIX domain | |
111 | # sockets. | |
112 | # @logical-block-size: Logical block size in bytes. Defaults to 512 bytes. | |
d9b495f9 SH |
113 | # @num-queues: Number of request virtqueues. Must be greater than 0. Defaults |
114 | # to 1. | |
90fc91d5 SH |
115 | # |
116 | # Since: 5.2 | |
117 | ## | |
118 | { 'struct': 'BlockExportOptionsVhostUserBlk', | |
d9b495f9 SH |
119 | 'data': { 'addr': 'SocketAddress', |
120 | '*logical-block-size': 'size', | |
121 | '*num-queues': 'uint16'} } | |
90fc91d5 | 122 | |
0c9b70d5 HR |
123 | ## |
124 | # @BlockExportOptionsFuse: | |
125 | # | |
126 | # Options for exporting a block graph node on some (file) mountpoint | |
127 | # as a raw image. | |
128 | # | |
129 | # @mountpoint: Path on which to export the block device via FUSE. | |
130 | # This must point to an existing regular file. | |
131 | # | |
4fba06d5 HR |
132 | # @growable: Whether writes beyond the EOF should grow the block node |
133 | # accordingly. (default: false) | |
134 | # | |
0c9b70d5 HR |
135 | # Since: 6.0 |
136 | ## | |
137 | { 'struct': 'BlockExportOptionsFuse', | |
4fba06d5 HR |
138 | 'data': { 'mountpoint': 'str', |
139 | '*growable': 'bool' }, | |
0c9b70d5 HR |
140 | 'if': 'defined(CONFIG_FUSE)' } |
141 | ||
b6076afc KW |
142 | ## |
143 | # @NbdServerAddOptions: | |
144 | # | |
cbad81ce | 145 | # An NBD block export, per legacy nbd-server-add command. |
b6076afc KW |
146 | # |
147 | # @device: The device name or node name of the node to be exported | |
148 | # | |
30dbc81d KW |
149 | # @writable: Whether clients should be able to write to the device via the |
150 | # NBD connection (default false). | |
151 | # | |
cbad81ce EB |
152 | # @bitmap: Also export a single dirty bitmap reachable from @device, so the |
153 | # NBD client can use NBD_OPT_SET_META_CONTEXT with the metadata | |
154 | # context name "qemu:dirty-bitmap:BITMAP" to inspect the bitmap | |
155 | # (since 4.0). | |
156 | # | |
b6076afc KW |
157 | # Since: 5.0 |
158 | ## | |
159 | { 'struct': 'NbdServerAddOptions', | |
cbad81ce | 160 | 'base': 'BlockExportOptionsNbdBase', |
30dbc81d | 161 | 'data': { 'device': 'str', |
cbad81ce | 162 | '*writable': 'bool', '*bitmap': 'str' } } |
5daa6bfd KW |
163 | |
164 | ## | |
165 | # @nbd-server-add: | |
166 | # | |
167 | # Export a block node to QEMU's embedded NBD server. | |
168 | # | |
d53be9ce KW |
169 | # The export name will be used as the id for the resulting block export. |
170 | # | |
443127e8 KW |
171 | # Features: |
172 | # @deprecated: This command is deprecated. Use @block-export-add instead. | |
173 | # | |
5daa6bfd KW |
174 | # Returns: error if the server is not running, or export with the same name |
175 | # already exists. | |
176 | # | |
9bc6e893 | 177 | # Since: 1.3 |
5daa6bfd KW |
178 | ## |
179 | { 'command': 'nbd-server-add', | |
443127e8 | 180 | 'data': 'NbdServerAddOptions', 'boxed': true, 'features': ['deprecated'] } |
5daa6bfd KW |
181 | |
182 | ## | |
3c3bc462 | 183 | # @BlockExportRemoveMode: |
5daa6bfd | 184 | # |
3c3bc462 | 185 | # Mode for removing a block export. |
5daa6bfd KW |
186 | # |
187 | # @safe: Remove export if there are no existing connections, fail otherwise. | |
188 | # | |
189 | # @hard: Drop all connections immediately and remove export. | |
190 | # | |
191 | # Potential additional modes to be added in the future: | |
192 | # | |
193 | # hide: Just hide export from new clients, leave existing connections as is. | |
194 | # Remove export after all clients are disconnected. | |
195 | # | |
196 | # soft: Hide export from new clients, answer with ESHUTDOWN for all further | |
197 | # requests from existing clients. | |
198 | # | |
199 | # Since: 2.12 | |
200 | ## | |
3c3bc462 | 201 | {'enum': 'BlockExportRemoveMode', 'data': ['safe', 'hard']} |
5daa6bfd KW |
202 | |
203 | ## | |
204 | # @nbd-server-remove: | |
205 | # | |
206 | # Remove NBD export by name. | |
207 | # | |
3c3bc462 | 208 | # @name: Block export id. |
5daa6bfd | 209 | # |
3c3bc462 | 210 | # @mode: Mode of command operation. See @BlockExportRemoveMode description. |
5daa6bfd KW |
211 | # Default is 'safe'. |
212 | # | |
443127e8 KW |
213 | # Features: |
214 | # @deprecated: This command is deprecated. Use @block-export-del instead. | |
215 | # | |
5daa6bfd KW |
216 | # Returns: error if |
217 | # - the server is not running | |
218 | # - export is not found | |
219 | # - mode is 'safe' and there are existing connections | |
220 | # | |
221 | # Since: 2.12 | |
222 | ## | |
223 | { 'command': 'nbd-server-remove', | |
443127e8 KW |
224 | 'data': {'name': 'str', '*mode': 'BlockExportRemoveMode'}, |
225 | 'features': ['deprecated'] } | |
5daa6bfd KW |
226 | |
227 | ## | |
228 | # @nbd-server-stop: | |
229 | # | |
230 | # Stop QEMU's embedded NBD server, and unregister all devices previously | |
231 | # added via @nbd-server-add. | |
232 | # | |
9bc6e893 | 233 | # Since: 1.3 |
5daa6bfd KW |
234 | ## |
235 | { 'command': 'nbd-server-stop' } | |
236 | ||
237 | ## | |
238 | # @BlockExportType: | |
239 | # | |
240 | # An enumeration of block export types | |
241 | # | |
242 | # @nbd: NBD export | |
90fc91d5 | 243 | # @vhost-user-blk: vhost-user-blk export (since 5.2) |
0c9b70d5 | 244 | # @fuse: FUSE export (since: 6.0) |
5daa6bfd KW |
245 | # |
246 | # Since: 4.2 | |
247 | ## | |
248 | { 'enum': 'BlockExportType', | |
0c9b70d5 HR |
249 | 'data': [ 'nbd', 'vhost-user-blk', |
250 | { 'name': 'fuse', 'if': 'defined(CONFIG_FUSE)' } ] } | |
5daa6bfd KW |
251 | |
252 | ## | |
143ea767 | 253 | # @BlockExportOptions: |
5daa6bfd KW |
254 | # |
255 | # Describes a block export, i.e. how single node should be exported on an | |
256 | # external interface. | |
257 | # | |
d53be9ce KW |
258 | # @id: A unique identifier for the block export (across all export types) |
259 | # | |
b6076afc KW |
260 | # @node-name: The node name of the block node to be exported (since: 5.2) |
261 | # | |
30dbc81d KW |
262 | # @writable: True if clients should be able to write to the export |
263 | # (default false) | |
264 | # | |
fefee85d KW |
265 | # @writethrough: If true, caches are flushed after every write request to the |
266 | # export before completion is signalled. (since: 5.2; | |
267 | # default: false) | |
268 | # | |
f51d23c8 SH |
269 | # @iothread: The name of the iothread object where the export will run. The |
270 | # default is to use the thread currently associated with the | |
271 | # block node. (since: 5.2) | |
272 | # | |
273 | # @fixed-iothread: True prevents the block node from being moved to another | |
274 | # thread while the export is active. If true and @iothread is | |
275 | # given, export creation fails if the block node cannot be | |
276 | # moved to the iothread. The default is false. (since: 5.2) | |
277 | # | |
5daa6bfd KW |
278 | # Since: 4.2 |
279 | ## | |
143ea767 | 280 | { 'union': 'BlockExportOptions', |
fefee85d | 281 | 'base': { 'type': 'BlockExportType', |
d53be9ce | 282 | 'id': 'str', |
d9b495f9 SH |
283 | '*fixed-iothread': 'bool', |
284 | '*iothread': 'str', | |
b6076afc | 285 | 'node-name': 'str', |
30dbc81d | 286 | '*writable': 'bool', |
fefee85d | 287 | '*writethrough': 'bool' }, |
5daa6bfd KW |
288 | 'discriminator': 'type', |
289 | 'data': { | |
90fc91d5 | 290 | 'nbd': 'BlockExportOptionsNbd', |
0c9b70d5 HR |
291 | 'vhost-user-blk': 'BlockExportOptionsVhostUserBlk', |
292 | 'fuse': { 'type': 'BlockExportOptionsFuse', | |
293 | 'if': 'defined(CONFIG_FUSE)' } | |
5daa6bfd | 294 | } } |
56ee8626 KW |
295 | |
296 | ## | |
297 | # @block-export-add: | |
298 | # | |
299 | # Creates a new block export. | |
300 | # | |
301 | # Since: 5.2 | |
302 | ## | |
303 | { 'command': 'block-export-add', | |
304 | 'data': 'BlockExportOptions', 'boxed': true } | |
3c3bc462 KW |
305 | |
306 | ## | |
307 | # @block-export-del: | |
308 | # | |
309 | # Request to remove a block export. This drops the user's reference to the | |
310 | # export, but the export may still stay around after this command returns until | |
311 | # the shutdown of the export has completed. | |
312 | # | |
313 | # @id: Block export id. | |
314 | # | |
315 | # @mode: Mode of command operation. See @BlockExportRemoveMode description. | |
316 | # Default is 'safe'. | |
317 | # | |
318 | # Returns: Error if the export is not found or @mode is 'safe' and the export | |
319 | # is still in use (e.g. by existing client connections) | |
320 | # | |
321 | # Since: 5.2 | |
322 | ## | |
323 | { 'command': 'block-export-del', | |
324 | 'data': { 'id': 'str', '*mode': 'BlockExportRemoveMode' } } | |
1a9f7a80 KW |
325 | |
326 | ## | |
327 | # @BLOCK_EXPORT_DELETED: | |
328 | # | |
329 | # Emitted when a block export is removed and its id can be reused. | |
330 | # | |
331 | # @id: Block export id. | |
332 | # | |
333 | # Since: 5.2 | |
334 | ## | |
335 | { 'event': 'BLOCK_EXPORT_DELETED', | |
336 | 'data': { 'id': 'str' } } | |
8cade320 KW |
337 | |
338 | ## | |
339 | # @BlockExportInfo: | |
340 | # | |
341 | # Information about a single block export. | |
342 | # | |
343 | # @id: The unique identifier for the block export | |
344 | # | |
345 | # @type: The block export type | |
346 | # | |
347 | # @node-name: The node name of the block node that is exported | |
348 | # | |
349 | # @shutting-down: True if the export is shutting down (e.g. after a | |
350 | # block-export-del command, but before the shutdown has | |
351 | # completed) | |
352 | # | |
353 | # Since: 5.2 | |
354 | ## | |
355 | { 'struct': 'BlockExportInfo', | |
356 | 'data': { 'id': 'str', | |
357 | 'type': 'BlockExportType', | |
358 | 'node-name': 'str', | |
359 | 'shutting-down': 'bool' } } | |
360 | ||
361 | ## | |
362 | # @query-block-exports: | |
363 | # | |
364 | # Returns: A list of BlockExportInfo describing all block exports | |
365 | # | |
366 | # Since: 5.2 | |
367 | ## | |
368 | { 'command': 'query-block-exports', 'returns': ['BlockExportInfo'] } |