root / qapi-schema-guest.json @ a31f0531
History | View | Annotate | Download (12 kB)
1 |
# *-*- Mode: Python -*-* |
---|---|
2 |
|
3 |
## |
4 |
#
|
5 |
# Echo back a unique integer value, and prepend to response a |
6 |
# leading sentinel byte (0xFF) the client can check scan for. |
7 |
#
|
8 |
# This is used by clients talking to the guest agent over the |
9 |
# wire to ensure the stream is in sync and doesn't contain stale |
10 |
# data from previous client. It must be issued upon initial |
11 |
# connection, and after any client-side timeouts (including |
12 |
# timeouts on receiving a response to this command). |
13 |
#
|
14 |
# After issuing this request, all guest agent responses should be |
15 |
# ignored until the response containing the unique integer value |
16 |
# the client passed in is returned. Receival of the 0xFF sentinel |
17 |
# byte must be handled as an indication that the client's |
18 |
# lexer/tokenizer/parser state should be flushed/reset in |
19 |
# preparation for reliably receiving the subsequent response. As |
20 |
# an optimization, clients may opt to ignore all data until a |
21 |
# sentinel value is receiving to avoid unnecessary processing of |
22 |
# stale data. |
23 |
#
|
24 |
# Similarly, clients should also precede this *request* |
25 |
# with a 0xFF byte to make sure the guest agent flushes any |
26 |
# partially read JSON data from a previous client connection. |
27 |
#
|
28 |
# @id: randomly generated 64-bit integer |
29 |
#
|
30 |
# Returns: The unique integer id passed in by the client |
31 |
#
|
32 |
# Since: 1.1 |
33 |
# ## |
34 |
{ 'command': 'guest-sync-delimited' |
35 |
'data': { 'id': 'int' }, |
36 |
'returns': 'int' } |
37 |
|
38 |
## |
39 |
# @guest-sync: |
40 |
#
|
41 |
# Echo back a unique integer value |
42 |
#
|
43 |
# This is used by clients talking to the guest agent over the |
44 |
# wire to ensure the stream is in sync and doesn't contain stale |
45 |
# data from previous client. All guest agent responses should be |
46 |
# ignored until the provided unique integer value is returned, |
47 |
# and it is up to the client to handle stale whole or |
48 |
# partially-delivered JSON text in such a way that this response |
49 |
# can be obtained. |
50 |
#
|
51 |
# In cases where a partial stale response was previously |
52 |
# received by the client, this cannot always be done reliably. |
53 |
# One particular scenario being if qemu-ga responses are fed |
54 |
# character-by-character into a JSON parser. In these situations, |
55 |
# using guest-sync-delimited may be optimal. |
56 |
#
|
57 |
# For clients that fetch responses line by line and convert them |
58 |
# to JSON objects, guest-sync should be sufficient, but note that |
59 |
# in cases where the channel is dirty some attempts at parsing the |
60 |
# response may result in a parser error. |
61 |
#
|
62 |
# Such clients should also precede this command |
63 |
# with a 0xFF byte to make sure the guest agent flushes any |
64 |
# partially read JSON data from a previous session. |
65 |
#
|
66 |
# @id: randomly generated 64-bit integer |
67 |
#
|
68 |
# Returns: The unique integer id passed in by the client |
69 |
#
|
70 |
# Since: 0.15.0 |
71 |
## |
72 |
{ 'command': 'guest-sync' |
73 |
'data': { 'id': 'int' }, |
74 |
'returns': 'int' } |
75 |
|
76 |
## |
77 |
# @guest-ping: |
78 |
#
|
79 |
# Ping the guest agent, a non-error return implies success |
80 |
#
|
81 |
# Since: 0.15.0 |
82 |
## |
83 |
{ 'command': 'guest-ping' } |
84 |
|
85 |
## |
86 |
# @GuestAgentCommandInfo: |
87 |
#
|
88 |
# Information about guest agent commands. |
89 |
#
|
90 |
# @name: name of the command |
91 |
#
|
92 |
# @enabled: whether command is currently enabled by guest admin |
93 |
#
|
94 |
# Since 1.1.0 |
95 |
## |
96 |
{ 'type': 'GuestAgentCommandInfo', |
97 |
'data': { 'name': 'str', 'enabled': 'bool' } } |
98 |
|
99 |
## |
100 |
# @GuestAgentInfo |
101 |
#
|
102 |
# Information about guest agent. |
103 |
#
|
104 |
# @version: guest agent version |
105 |
#
|
106 |
# @supported_commands: Information about guest agent commands |
107 |
#
|
108 |
# Since 0.15.0 |
109 |
## |
110 |
{ 'type': 'GuestAgentInfo', |
111 |
'data': { 'version': 'str', |
112 |
'supported_commands': ['GuestAgentCommandInfo'] } } |
113 |
## |
114 |
# @guest-info: |
115 |
#
|
116 |
# Get some information about the guest agent. |
117 |
#
|
118 |
# Returns: @GuestAgentInfo |
119 |
#
|
120 |
# Since: 0.15.0 |
121 |
## |
122 |
{ 'command': 'guest-info', |
123 |
'returns': 'GuestAgentInfo' } |
124 |
|
125 |
## |
126 |
# @guest-shutdown: |
127 |
#
|
128 |
# Initiate guest-activated shutdown. Note: this is an asynchronous |
129 |
# shutdown request, with no guaruntee of successful shutdown. Errors |
130 |
# will be logged to guest's syslog. |
131 |
#
|
132 |
# @mode: #optional "halt", "powerdown" (default), or "reboot" |
133 |
#
|
134 |
# Returns: Nothing on success |
135 |
#
|
136 |
# Since: 0.15.0 |
137 |
## |
138 |
{ 'command': 'guest-shutdown', 'data': { '*mode': 'str' } } |
139 |
|
140 |
## |
141 |
# @guest-file-open: |
142 |
#
|
143 |
# Open a file in the guest and retrieve a file handle for it |
144 |
#
|
145 |
# @filepath: Full path to the file in the guest to open. |
146 |
#
|
147 |
# @mode: #optional open mode, as per fopen(), "r" is the default. |
148 |
#
|
149 |
# Returns: Guest file handle on success. |
150 |
#
|
151 |
# Since: 0.15.0 |
152 |
## |
153 |
{ 'command': 'guest-file-open', |
154 |
'data': { 'path': 'str', '*mode': 'str' }, |
155 |
'returns': 'int' } |
156 |
|
157 |
## |
158 |
# @guest-file-close: |
159 |
#
|
160 |
# Close an open file in the guest |
161 |
#
|
162 |
# @handle: filehandle returned by guest-file-open |
163 |
#
|
164 |
# Returns: Nothing on success. |
165 |
#
|
166 |
# Since: 0.15.0 |
167 |
## |
168 |
{ 'command': 'guest-file-close', |
169 |
'data': { 'handle': 'int' } } |
170 |
|
171 |
## |
172 |
# @GuestFileRead |
173 |
#
|
174 |
# Result of guest agent file-read operation |
175 |
#
|
176 |
# @count: number of bytes read (note: count is *before* |
177 |
# base64-encoding is applied) |
178 |
#
|
179 |
# @buf-b64: base64-encoded bytes read |
180 |
#
|
181 |
# @eof: whether EOF was encountered during read operation. |
182 |
#
|
183 |
# Since: 0.15.0 |
184 |
## |
185 |
{ 'type': 'GuestFileRead', |
186 |
'data': { 'count': 'int', 'buf-b64': 'str', 'eof': 'bool' } } |
187 |
|
188 |
## |
189 |
# @guest-file-read: |
190 |
#
|
191 |
# Read from an open file in the guest. Data will be base64-encoded |
192 |
#
|
193 |
# @handle: filehandle returned by guest-file-open |
194 |
#
|
195 |
# @count: #optional maximum number of bytes to read (default is 4KB) |
196 |
#
|
197 |
# Returns: @GuestFileRead on success. |
198 |
#
|
199 |
# Since: 0.15.0 |
200 |
## |
201 |
{ 'command': 'guest-file-read', |
202 |
'data': { 'handle': 'int', '*count': 'int' }, |
203 |
'returns': 'GuestFileRead' } |
204 |
|
205 |
## |
206 |
# @GuestFileWrite |
207 |
#
|
208 |
# Result of guest agent file-write operation |
209 |
#
|
210 |
# @count: number of bytes written (note: count is actual bytes |
211 |
# written, after base64-decoding of provided buffer) |
212 |
#
|
213 |
# @eof: whether EOF was encountered during write operation. |
214 |
#
|
215 |
# Since: 0.15.0 |
216 |
## |
217 |
{ 'type': 'GuestFileWrite', |
218 |
'data': { 'count': 'int', 'eof': 'bool' } } |
219 |
|
220 |
## |
221 |
# @guest-file-write: |
222 |
#
|
223 |
# Write to an open file in the guest. |
224 |
#
|
225 |
# @handle: filehandle returned by guest-file-open |
226 |
#
|
227 |
# @buf-b64: base64-encoded string representing data to be written |
228 |
#
|
229 |
# @count: #optional bytes to write (actual bytes, after base64-decode), |
230 |
# default is all content in buf-b64 buffer after base64 decoding |
231 |
#
|
232 |
# Returns: @GuestFileWrite on success. |
233 |
#
|
234 |
# Since: 0.15.0 |
235 |
## |
236 |
{ 'command': 'guest-file-write', |
237 |
'data': { 'handle': 'int', 'buf-b64': 'str', '*count': 'int' }, |
238 |
'returns': 'GuestFileWrite' } |
239 |
|
240 |
|
241 |
## |
242 |
# @GuestFileSeek |
243 |
#
|
244 |
# Result of guest agent file-seek operation |
245 |
#
|
246 |
# @position: current file position |
247 |
#
|
248 |
# @eof: whether EOF was encountered during file seek |
249 |
#
|
250 |
# Since: 0.15.0 |
251 |
## |
252 |
{ 'type': 'GuestFileSeek', |
253 |
'data': { 'position': 'int', 'eof': 'bool' } } |
254 |
|
255 |
## |
256 |
# @guest-file-seek: |
257 |
#
|
258 |
# Seek to a position in the file, as with fseek(), and return the |
259 |
# current file position afterward. Also encapsulates ftell()'s |
260 |
# functionality, just Set offset=0, whence=SEEK_CUR. |
261 |
#
|
262 |
# @handle: filehandle returned by guest-file-open |
263 |
#
|
264 |
# @offset: bytes to skip over in the file stream |
265 |
#
|
266 |
# @whence: SEEK_SET, SEEK_CUR, or SEEK_END, as with fseek() |
267 |
#
|
268 |
# Returns: @GuestFileSeek on success. |
269 |
#
|
270 |
# Since: 0.15.0 |
271 |
## |
272 |
{ 'command': 'guest-file-seek', |
273 |
'data': { 'handle': 'int', 'offset': 'int', 'whence': 'int' }, |
274 |
'returns': 'GuestFileSeek' } |
275 |
|
276 |
## |
277 |
# @guest-file-flush: |
278 |
#
|
279 |
# Write file changes bufferred in userspace to disk/kernel buffers |
280 |
#
|
281 |
# @handle: filehandle returned by guest-file-open |
282 |
#
|
283 |
# Returns: Nothing on success. |
284 |
#
|
285 |
# Since: 0.15.0 |
286 |
## |
287 |
{ 'command': 'guest-file-flush', |
288 |
'data': { 'handle': 'int' } } |
289 |
|
290 |
## |
291 |
# @GuestFsFreezeStatus |
292 |
#
|
293 |
# An enumation of filesystem freeze states |
294 |
#
|
295 |
# @thawed: filesystems thawed/unfrozen |
296 |
#
|
297 |
# @frozen: all non-network guest filesystems frozen |
298 |
#
|
299 |
# Since: 0.15.0 |
300 |
## |
301 |
{ 'enum': 'GuestFsfreezeStatus', |
302 |
'data': [ 'thawed', 'frozen' ] } |
303 |
|
304 |
## |
305 |
# @guest-fsfreeze-status: |
306 |
#
|
307 |
# Get guest fsfreeze state. error state indicates |
308 |
#
|
309 |
# Returns: GuestFsfreezeStatus ("thawed", "frozen", etc., as defined below) |
310 |
#
|
311 |
# Note: This may fail to properly report the current state as a result of |
312 |
# some other guest processes having issued an fs freeze/thaw. |
313 |
#
|
314 |
# Since: 0.15.0 |
315 |
## |
316 |
{ 'command': 'guest-fsfreeze-status', |
317 |
'returns': 'GuestFsfreezeStatus' } |
318 |
|
319 |
## |
320 |
# @guest-fsfreeze-freeze: |
321 |
#
|
322 |
# Sync and freeze all freezable, local guest filesystems |
323 |
#
|
324 |
# Returns: Number of file systems currently frozen. On error, all filesystems |
325 |
# will be thawed. |
326 |
#
|
327 |
# Since: 0.15.0 |
328 |
## |
329 |
{ 'command': 'guest-fsfreeze-freeze', |
330 |
'returns': 'int' } |
331 |
|
332 |
## |
333 |
# @guest-fsfreeze-thaw: |
334 |
#
|
335 |
# Unfreeze all frozen guest filesystems |
336 |
#
|
337 |
# Returns: Number of file systems thawed by this call |
338 |
#
|
339 |
# Note: if return value does not match the previous call to |
340 |
# guest-fsfreeze-freeze, this likely means some freezable |
341 |
# filesystems were unfrozen before this call, and that the |
342 |
# filesystem state may have changed before issuing this |
343 |
# command. |
344 |
#
|
345 |
# Since: 0.15.0 |
346 |
## |
347 |
{ 'command': 'guest-fsfreeze-thaw', |
348 |
'returns': 'int' } |
349 |
|
350 |
## |
351 |
# @guest-suspend-disk |
352 |
#
|
353 |
# Suspend guest to disk. |
354 |
#
|
355 |
# This command tries to execute the scripts provided by the pm-utils package. |
356 |
# If it's not available, the suspend operation will be performed by manually |
357 |
# writing to a sysfs file. |
358 |
#
|
359 |
# For the best results it's strongly recommended to have the pm-utils |
360 |
# package installed in the guest. |
361 |
#
|
362 |
# Returns: nothing on success |
363 |
# If suspend to disk is not supported, Unsupported |
364 |
#
|
365 |
# Notes: o This is an asynchronous request. There's no guarantee a response |
366 |
# will be sent |
367 |
# o It's strongly recommended to issue the guest-sync command before |
368 |
# sending commands when the guest resumes |
369 |
#
|
370 |
# Since: 1.1 |
371 |
## |
372 |
{ 'command': 'guest-suspend-disk' } |
373 |
|
374 |
## |
375 |
# @guest-suspend-ram |
376 |
#
|
377 |
# Suspend guest to ram. |
378 |
#
|
379 |
# This command tries to execute the scripts provided by the pm-utils package. |
380 |
# If it's not available, the suspend operation will be performed by manually |
381 |
# writing to a sysfs file. |
382 |
#
|
383 |
# For the best results it's strongly recommended to have the pm-utils |
384 |
# package installed in the guest. |
385 |
#
|
386 |
# IMPORTANT: guest-suspend-ram requires QEMU to support the 'system_wakeup' |
387 |
# command. Thus, it's *required* to query QEMU for the presence of the |
388 |
# 'system_wakeup' command before issuing guest-suspend-ram. |
389 |
#
|
390 |
# Returns: nothing on success |
391 |
# If suspend to ram is not supported, Unsupported |
392 |
#
|
393 |
# Notes: o This is an asynchronous request. There's no guarantee a response |
394 |
# will be sent |
395 |
# o It's strongly recommended to issue the guest-sync command before |
396 |
# sending commands when the guest resumes |
397 |
#
|
398 |
# Since: 1.1 |
399 |
## |
400 |
{ 'command': 'guest-suspend-ram' } |
401 |
|
402 |
## |
403 |
# @guest-suspend-hybrid |
404 |
#
|
405 |
# Save guest state to disk and suspend to ram. |
406 |
#
|
407 |
# This command requires the pm-utils package to be installed in the guest. |
408 |
#
|
409 |
# IMPORTANT: guest-suspend-hybrid requires QEMU to support the 'system_wakeup' |
410 |
# command. Thus, it's *required* to query QEMU for the presence of the |
411 |
# 'system_wakeup' command before issuing guest-suspend-hybrid. |
412 |
#
|
413 |
# Returns: nothing on success |
414 |
# If hybrid suspend is not supported, Unsupported |
415 |
#
|
416 |
# Notes: o This is an asynchronous request. There's no guarantee a response |
417 |
# will be sent |
418 |
# o It's strongly recommended to issue the guest-sync command before |
419 |
# sending commands when the guest resumes |
420 |
#
|
421 |
# Since: 1.1 |
422 |
## |
423 |
{ 'command': 'guest-suspend-hybrid' } |
424 |
|
425 |
## |
426 |
# @GuestIpAddressType: |
427 |
#
|
428 |
# An enumeration of supported IP address types |
429 |
#
|
430 |
# @ipv4: IP version 4 |
431 |
#
|
432 |
# @ipv6: IP version 6 |
433 |
#
|
434 |
# Since: 1.1 |
435 |
## |
436 |
{ 'enum': 'GuestIpAddressType', |
437 |
'data': [ 'ipv4', 'ipv6' ] } |
438 |
|
439 |
## |
440 |
# @GuestIpAddress: |
441 |
#
|
442 |
# @ip-address: IP address |
443 |
#
|
444 |
# @ip-address-type: Type of @ip-address (e.g. ipv4, ipv6) |
445 |
#
|
446 |
# @prefix: Network prefix length of @ip-address |
447 |
#
|
448 |
# Since: 1.1 |
449 |
## |
450 |
{ 'type': 'GuestIpAddress', |
451 |
'data': {'ip-address': 'str', |
452 |
'ip-address-type': 'GuestIpAddressType', |
453 |
'prefix': 'int'} } |
454 |
|
455 |
## |
456 |
# @GuestNetworkInterface: |
457 |
#
|
458 |
# @name: The name of interface for which info are being delivered |
459 |
#
|
460 |
# @hardware-address: Hardware address of @name |
461 |
#
|
462 |
# @ip-addresses: List of addresses assigned to @name |
463 |
#
|
464 |
# Since: 1.1 |
465 |
## |
466 |
{ 'type': 'GuestNetworkInterface', |
467 |
'data': {'name': 'str', |
468 |
'*hardware-address': 'str', |
469 |
'*ip-addresses': ['GuestIpAddress'] } } |
470 |
|
471 |
## |
472 |
# @guest-network-get-interfaces: |
473 |
#
|
474 |
# Get list of guest IP addresses, MAC addresses |
475 |
# and netmasks. |
476 |
#
|
477 |
# Returns: List of GuestNetworkInfo on success. |
478 |
#
|
479 |
# Since: 1.1 |
480 |
## |
481 |
{ 'command': 'guest-network-get-interfaces', |
482 |
'returns': ['GuestNetworkInterface'] } |