Statistics
| Branch: | Revision:

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'] }