root / qapi-schema-guest.json @ eab5fd59
History | View | Annotate | Download (13.4 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 guarantee of successful shutdown. |
130 |
#
|
131 |
# @mode: #optional "halt", "powerdown" (default), or "reboot" |
132 |
#
|
133 |
# This command does NOT return a response on success. Success condition |
134 |
# is indicated by the VM exiting with a zero exit status or, when |
135 |
# running with --no-shutdown, by issuing the query-status QMP command |
136 |
# to confirm the VM status is "shutdown". |
137 |
#
|
138 |
# Since: 0.15.0 |
139 |
## |
140 |
{ 'command': 'guest-shutdown', 'data': { '*mode': 'str' }, |
141 |
'success-response': 'no' } |
142 |
|
143 |
## |
144 |
# @guest-file-open: |
145 |
#
|
146 |
# Open a file in the guest and retrieve a file handle for it |
147 |
#
|
148 |
# @filepath: Full path to the file in the guest to open. |
149 |
#
|
150 |
# @mode: #optional open mode, as per fopen(), "r" is the default. |
151 |
#
|
152 |
# Returns: Guest file handle on success. |
153 |
#
|
154 |
# Since: 0.15.0 |
155 |
## |
156 |
{ 'command': 'guest-file-open', |
157 |
'data': { 'path': 'str', '*mode': 'str' }, |
158 |
'returns': 'int' } |
159 |
|
160 |
## |
161 |
# @guest-file-close: |
162 |
#
|
163 |
# Close an open file in the guest |
164 |
#
|
165 |
# @handle: filehandle returned by guest-file-open |
166 |
#
|
167 |
# Returns: Nothing on success. |
168 |
#
|
169 |
# Since: 0.15.0 |
170 |
## |
171 |
{ 'command': 'guest-file-close', |
172 |
'data': { 'handle': 'int' } } |
173 |
|
174 |
## |
175 |
# @GuestFileRead |
176 |
#
|
177 |
# Result of guest agent file-read operation |
178 |
#
|
179 |
# @count: number of bytes read (note: count is *before* |
180 |
# base64-encoding is applied) |
181 |
#
|
182 |
# @buf-b64: base64-encoded bytes read |
183 |
#
|
184 |
# @eof: whether EOF was encountered during read operation. |
185 |
#
|
186 |
# Since: 0.15.0 |
187 |
## |
188 |
{ 'type': 'GuestFileRead', |
189 |
'data': { 'count': 'int', 'buf-b64': 'str', 'eof': 'bool' } } |
190 |
|
191 |
## |
192 |
# @guest-file-read: |
193 |
#
|
194 |
# Read from an open file in the guest. Data will be base64-encoded |
195 |
#
|
196 |
# @handle: filehandle returned by guest-file-open |
197 |
#
|
198 |
# @count: #optional maximum number of bytes to read (default is 4KB) |
199 |
#
|
200 |
# Returns: @GuestFileRead on success. |
201 |
#
|
202 |
# Since: 0.15.0 |
203 |
## |
204 |
{ 'command': 'guest-file-read', |
205 |
'data': { 'handle': 'int', '*count': 'int' }, |
206 |
'returns': 'GuestFileRead' } |
207 |
|
208 |
## |
209 |
# @GuestFileWrite |
210 |
#
|
211 |
# Result of guest agent file-write operation |
212 |
#
|
213 |
# @count: number of bytes written (note: count is actual bytes |
214 |
# written, after base64-decoding of provided buffer) |
215 |
#
|
216 |
# @eof: whether EOF was encountered during write operation. |
217 |
#
|
218 |
# Since: 0.15.0 |
219 |
## |
220 |
{ 'type': 'GuestFileWrite', |
221 |
'data': { 'count': 'int', 'eof': 'bool' } } |
222 |
|
223 |
## |
224 |
# @guest-file-write: |
225 |
#
|
226 |
# Write to an open file in the guest. |
227 |
#
|
228 |
# @handle: filehandle returned by guest-file-open |
229 |
#
|
230 |
# @buf-b64: base64-encoded string representing data to be written |
231 |
#
|
232 |
# @count: #optional bytes to write (actual bytes, after base64-decode), |
233 |
# default is all content in buf-b64 buffer after base64 decoding |
234 |
#
|
235 |
# Returns: @GuestFileWrite on success. |
236 |
#
|
237 |
# Since: 0.15.0 |
238 |
## |
239 |
{ 'command': 'guest-file-write', |
240 |
'data': { 'handle': 'int', 'buf-b64': 'str', '*count': 'int' }, |
241 |
'returns': 'GuestFileWrite' } |
242 |
|
243 |
|
244 |
## |
245 |
# @GuestFileSeek |
246 |
#
|
247 |
# Result of guest agent file-seek operation |
248 |
#
|
249 |
# @position: current file position |
250 |
#
|
251 |
# @eof: whether EOF was encountered during file seek |
252 |
#
|
253 |
# Since: 0.15.0 |
254 |
## |
255 |
{ 'type': 'GuestFileSeek', |
256 |
'data': { 'position': 'int', 'eof': 'bool' } } |
257 |
|
258 |
## |
259 |
# @guest-file-seek: |
260 |
#
|
261 |
# Seek to a position in the file, as with fseek(), and return the |
262 |
# current file position afterward. Also encapsulates ftell()'s |
263 |
# functionality, just Set offset=0, whence=SEEK_CUR. |
264 |
#
|
265 |
# @handle: filehandle returned by guest-file-open |
266 |
#
|
267 |
# @offset: bytes to skip over in the file stream |
268 |
#
|
269 |
# @whence: SEEK_SET, SEEK_CUR, or SEEK_END, as with fseek() |
270 |
#
|
271 |
# Returns: @GuestFileSeek on success. |
272 |
#
|
273 |
# Since: 0.15.0 |
274 |
## |
275 |
{ 'command': 'guest-file-seek', |
276 |
'data': { 'handle': 'int', 'offset': 'int', 'whence': 'int' }, |
277 |
'returns': 'GuestFileSeek' } |
278 |
|
279 |
## |
280 |
# @guest-file-flush: |
281 |
#
|
282 |
# Write file changes bufferred in userspace to disk/kernel buffers |
283 |
#
|
284 |
# @handle: filehandle returned by guest-file-open |
285 |
#
|
286 |
# Returns: Nothing on success. |
287 |
#
|
288 |
# Since: 0.15.0 |
289 |
## |
290 |
{ 'command': 'guest-file-flush', |
291 |
'data': { 'handle': 'int' } } |
292 |
|
293 |
## |
294 |
# @GuestFsFreezeStatus |
295 |
#
|
296 |
# An enumation of filesystem freeze states |
297 |
#
|
298 |
# @thawed: filesystems thawed/unfrozen |
299 |
#
|
300 |
# @frozen: all non-network guest filesystems frozen |
301 |
#
|
302 |
# Since: 0.15.0 |
303 |
## |
304 |
{ 'enum': 'GuestFsfreezeStatus', |
305 |
'data': [ 'thawed', 'frozen' ] } |
306 |
|
307 |
## |
308 |
# @guest-fsfreeze-status: |
309 |
#
|
310 |
# Get guest fsfreeze state. error state indicates |
311 |
#
|
312 |
# Returns: GuestFsfreezeStatus ("thawed", "frozen", etc., as defined below) |
313 |
#
|
314 |
# Note: This may fail to properly report the current state as a result of |
315 |
# some other guest processes having issued an fs freeze/thaw. |
316 |
#
|
317 |
# Since: 0.15.0 |
318 |
## |
319 |
{ 'command': 'guest-fsfreeze-status', |
320 |
'returns': 'GuestFsfreezeStatus' } |
321 |
|
322 |
## |
323 |
# @guest-fsfreeze-freeze: |
324 |
#
|
325 |
# Sync and freeze all freezable, local guest filesystems |
326 |
#
|
327 |
# Returns: Number of file systems currently frozen. On error, all filesystems |
328 |
# will be thawed. |
329 |
#
|
330 |
# Since: 0.15.0 |
331 |
## |
332 |
{ 'command': 'guest-fsfreeze-freeze', |
333 |
'returns': 'int' } |
334 |
|
335 |
## |
336 |
# @guest-fsfreeze-thaw: |
337 |
#
|
338 |
# Unfreeze all frozen guest filesystems |
339 |
#
|
340 |
# Returns: Number of file systems thawed by this call |
341 |
#
|
342 |
# Note: if return value does not match the previous call to |
343 |
# guest-fsfreeze-freeze, this likely means some freezable |
344 |
# filesystems were unfrozen before this call, and that the |
345 |
# filesystem state may have changed before issuing this |
346 |
# command. |
347 |
#
|
348 |
# Since: 0.15.0 |
349 |
## |
350 |
{ 'command': 'guest-fsfreeze-thaw', |
351 |
'returns': 'int' } |
352 |
|
353 |
## |
354 |
# @guest-fstrim: |
355 |
#
|
356 |
# Discard (or "trim") blocks which are not in use by the filesystem. |
357 |
#
|
358 |
# @minimum: |
359 |
# Minimum contiguous free range to discard, in bytes. Free ranges |
360 |
# smaller than this may be ignored (this is a hint and the guest |
361 |
# may not respect it). By increasing this value, the fstrim |
362 |
# operation will complete more quickly for filesystems with badly |
363 |
# fragmented free space, although not all blocks will be discarded. |
364 |
# The default value is zero, meaning "discard every free block". |
365 |
#
|
366 |
# Returns: Nothing. |
367 |
#
|
368 |
# Since: 1.2 |
369 |
## |
370 |
{ 'command': 'guest-fstrim', |
371 |
'data': { '*minimum': 'int' } } |
372 |
|
373 |
## |
374 |
# @guest-suspend-disk |
375 |
#
|
376 |
# Suspend guest to disk. |
377 |
#
|
378 |
# This command tries to execute the scripts provided by the pm-utils package. |
379 |
# If it's not available, the suspend operation will be performed by manually |
380 |
# writing to a sysfs file. |
381 |
#
|
382 |
# For the best results it's strongly recommended to have the pm-utils |
383 |
# package installed in the guest. |
384 |
#
|
385 |
# This command does NOT return a response on success. There is a high chance |
386 |
# the command succeeded if the VM exits with a zero exit status or, when |
387 |
# running with --no-shutdown, by issuing the query-status QMP command to |
388 |
# to confirm the VM status is "shutdown". However, the VM could also exit |
389 |
# (or set its status to "shutdown") due to other reasons. |
390 |
#
|
391 |
# The following errors may be returned: |
392 |
# If suspend to disk is not supported, Unsupported |
393 |
#
|
394 |
# Notes: It's strongly recommended to issue the guest-sync command before |
395 |
# sending commands when the guest resumes |
396 |
#
|
397 |
# Since: 1.1 |
398 |
## |
399 |
{ 'command': 'guest-suspend-disk', 'success-response': 'no' } |
400 |
|
401 |
## |
402 |
# @guest-suspend-ram |
403 |
#
|
404 |
# Suspend guest to ram. |
405 |
#
|
406 |
# This command tries to execute the scripts provided by the pm-utils package. |
407 |
# If it's not available, the suspend operation will be performed by manually |
408 |
# writing to a sysfs file. |
409 |
#
|
410 |
# For the best results it's strongly recommended to have the pm-utils |
411 |
# package installed in the guest. |
412 |
#
|
413 |
# IMPORTANT: guest-suspend-ram requires QEMU to support the 'system_wakeup' |
414 |
# command. Thus, it's *required* to query QEMU for the presence of the |
415 |
# 'system_wakeup' command before issuing guest-suspend-ram. |
416 |
#
|
417 |
# This command does NOT return a response on success. There are two options |
418 |
# to check for success: |
419 |
# 1. Wait for the SUSPEND QMP event from QEMU |
420 |
# 2. Issue the query-status QMP command to confirm the VM status is |
421 |
# "suspended" |
422 |
#
|
423 |
# The following errors may be returned: |
424 |
# If suspend to ram is not supported, Unsupported |
425 |
#
|
426 |
# Notes: It's strongly recommended to issue the guest-sync command before |
427 |
# sending commands when the guest resumes |
428 |
#
|
429 |
# Since: 1.1 |
430 |
## |
431 |
{ 'command': 'guest-suspend-ram', 'success-response': 'no' } |
432 |
|
433 |
## |
434 |
# @guest-suspend-hybrid |
435 |
#
|
436 |
# Save guest state to disk and suspend to ram. |
437 |
#
|
438 |
# This command requires the pm-utils package to be installed in the guest. |
439 |
#
|
440 |
# IMPORTANT: guest-suspend-hybrid requires QEMU to support the 'system_wakeup' |
441 |
# command. Thus, it's *required* to query QEMU for the presence of the |
442 |
# 'system_wakeup' command before issuing guest-suspend-hybrid. |
443 |
#
|
444 |
# This command does NOT return a response on success. There are two options |
445 |
# to check for success: |
446 |
# 1. Wait for the SUSPEND QMP event from QEMU |
447 |
# 2. Issue the query-status QMP command to confirm the VM status is |
448 |
# "suspended" |
449 |
#
|
450 |
# The following errors may be returned: |
451 |
# If hybrid suspend is not supported, Unsupported |
452 |
#
|
453 |
# Notes: It's strongly recommended to issue the guest-sync command before |
454 |
# sending commands when the guest resumes |
455 |
#
|
456 |
# Since: 1.1 |
457 |
## |
458 |
{ 'command': 'guest-suspend-hybrid', 'success-response': 'no' } |
459 |
|
460 |
## |
461 |
# @GuestIpAddressType: |
462 |
#
|
463 |
# An enumeration of supported IP address types |
464 |
#
|
465 |
# @ipv4: IP version 4 |
466 |
#
|
467 |
# @ipv6: IP version 6 |
468 |
#
|
469 |
# Since: 1.1 |
470 |
## |
471 |
{ 'enum': 'GuestIpAddressType', |
472 |
'data': [ 'ipv4', 'ipv6' ] } |
473 |
|
474 |
## |
475 |
# @GuestIpAddress: |
476 |
#
|
477 |
# @ip-address: IP address |
478 |
#
|
479 |
# @ip-address-type: Type of @ip-address (e.g. ipv4, ipv6) |
480 |
#
|
481 |
# @prefix: Network prefix length of @ip-address |
482 |
#
|
483 |
# Since: 1.1 |
484 |
## |
485 |
{ 'type': 'GuestIpAddress', |
486 |
'data': {'ip-address': 'str', |
487 |
'ip-address-type': 'GuestIpAddressType', |
488 |
'prefix': 'int'} } |
489 |
|
490 |
## |
491 |
# @GuestNetworkInterface: |
492 |
#
|
493 |
# @name: The name of interface for which info are being delivered |
494 |
#
|
495 |
# @hardware-address: Hardware address of @name |
496 |
#
|
497 |
# @ip-addresses: List of addresses assigned to @name |
498 |
#
|
499 |
# Since: 1.1 |
500 |
## |
501 |
{ 'type': 'GuestNetworkInterface', |
502 |
'data': {'name': 'str', |
503 |
'*hardware-address': 'str', |
504 |
'*ip-addresses': ['GuestIpAddress'] } } |
505 |
|
506 |
## |
507 |
# @guest-network-get-interfaces: |
508 |
#
|
509 |
# Get list of guest IP addresses, MAC addresses |
510 |
# and netmasks. |
511 |
#
|
512 |
# Returns: List of GuestNetworkInfo on success. |
513 |
#
|
514 |
# Since: 1.1 |
515 |
## |
516 |
{ 'command': 'guest-network-get-interfaces', |
517 |
'returns': ['GuestNetworkInterface'] } |