xref: /openbmc/qemu/qapi/misc.json (revision 2c888feb)
1# -*- Mode: Python -*-
2# vim: filetype=python
3#
4
5##
6# = Miscellanea
7##
8
9{ 'include': 'common.json' }
10
11##
12# @add_client:
13#
14# Allow client connections for VNC, Spice and socket based character
15# devices to be passed in to QEMU via SCM_RIGHTS.
16#
17# If the FD associated with @fdname is not a socket, the command will
18# fail and the FD will be closed.
19#
20# @protocol: protocol name.  Valid names are "vnc", "spice",
21#     "@dbus-display" or the name of a character device (e.g. from
22#     -chardev id=XXXX)
23#
24# @fdname: file descriptor name previously passed via 'getfd' command
25#
26# @skipauth: whether to skip authentication.  Only applies to "vnc"
27#     and "spice" protocols
28#
29# @tls: whether to perform TLS. Only applies to the "spice" protocol
30#
31# Since: 0.14
32#
33# Example:
34#
35#     -> { "execute": "add_client", "arguments": { "protocol": "vnc",
36#                                                  "fdname": "myclient" } }
37#     <- { "return": {} }
38##
39{ 'command': 'add_client',
40  'data': { 'protocol': 'str', 'fdname': 'str', '*skipauth': 'bool',
41            '*tls': 'bool' } }
42
43##
44# @NameInfo:
45#
46# Guest name information.
47#
48# @name: The name of the guest
49#
50# Since: 0.14
51##
52{ 'struct': 'NameInfo', 'data': {'*name': 'str'} }
53
54##
55# @query-name:
56#
57# Return the name information of a guest.
58#
59# Returns: @NameInfo of the guest
60#
61# Since: 0.14
62#
63# Example:
64#
65#     -> { "execute": "query-name" }
66#     <- { "return": { "name": "qemu-name" } }
67##
68{ 'command': 'query-name', 'returns': 'NameInfo', 'allow-preconfig': true }
69
70##
71# @IOThreadInfo:
72#
73# Information about an iothread
74#
75# @id: the identifier of the iothread
76#
77# @thread-id: ID of the underlying host thread
78#
79# @poll-max-ns: maximum polling time in ns, 0 means polling is
80#     disabled (since 2.9)
81#
82# @poll-grow: how many ns will be added to polling time, 0 means that
83#     it's not configured (since 2.9)
84#
85# @poll-shrink: how many ns will be removed from polling time, 0 means
86#     that it's not configured (since 2.9)
87#
88# @aio-max-batch: maximum number of requests in a batch for the AIO
89#     engine, 0 means that the engine will use its default (since 6.1)
90#
91# Since: 2.0
92##
93{ 'struct': 'IOThreadInfo',
94  'data': {'id': 'str',
95           'thread-id': 'int',
96           'poll-max-ns': 'int',
97           'poll-grow': 'int',
98           'poll-shrink': 'int',
99           'aio-max-batch': 'int' } }
100
101##
102# @query-iothreads:
103#
104# Returns a list of information about each iothread.
105#
106# Note: this list excludes the QEMU main loop thread, which is not
107#     declared using the -object iothread command-line option.  It is
108#     always the main thread of the process.
109#
110# Returns: a list of @IOThreadInfo for each iothread
111#
112# Since: 2.0
113#
114# Example:
115#
116#     -> { "execute": "query-iothreads" }
117#     <- { "return": [
118#              {
119#                 "id":"iothread0",
120#                 "thread-id":3134
121#              },
122#              {
123#                 "id":"iothread1",
124#                 "thread-id":3135
125#              }
126#           ]
127#        }
128##
129{ 'command': 'query-iothreads', 'returns': ['IOThreadInfo'],
130  'allow-preconfig': true }
131
132##
133# @stop:
134#
135# Stop guest VM execution.
136#
137# Since: 0.14
138#
139# Notes: This function will succeed even if the guest is already in
140#     the stopped state.  In "inmigrate" state, it will ensure that
141#     the guest remains paused once migration finishes, as if the -S
142#     option was passed on the command line.
143#
144#     In the "suspended" state, it will completely stop the VM and
145#     cause a transition to the "paused" state.  (Since 9.0)
146#
147# Example:
148#
149#     -> { "execute": "stop" }
150#     <- { "return": {} }
151##
152{ 'command': 'stop' }
153
154##
155# @cont:
156#
157# Resume guest VM execution.
158#
159# Since: 0.14
160#
161# Notes: This command will succeed if the guest is currently running.
162#     It will also succeed if the guest is in the "inmigrate" state;
163#     in this case, the effect of the command is to make sure the
164#     guest starts once migration finishes, removing the effect of the
165#     -S command line option if it was passed.
166#
167#     If the VM was previously suspended, and not been reset or woken,
168#     this command will transition back to the "suspended" state.
169#     (Since 9.0)
170#
171# Example:
172#
173#     -> { "execute": "cont" }
174#     <- { "return": {} }
175##
176{ 'command': 'cont' }
177
178##
179# @x-exit-preconfig:
180#
181# Exit from "preconfig" state
182#
183# This command makes QEMU exit the preconfig state and proceed with VM
184# initialization using configuration data provided on the command line
185# and via the QMP monitor during the preconfig state.  The command is
186# only available during the preconfig state (i.e. when the --preconfig
187# command line option was in use).
188#
189# Features:
190#
191# @unstable: This command is experimental.
192#
193# Since: 3.0
194#
195# Example:
196#
197#     -> { "execute": "x-exit-preconfig" }
198#     <- { "return": {} }
199##
200{ 'command': 'x-exit-preconfig', 'allow-preconfig': true,
201  'features': [ 'unstable' ] }
202
203##
204# @human-monitor-command:
205#
206# Execute a command on the human monitor and return the output.
207#
208# @command-line: the command to execute in the human monitor
209#
210# @cpu-index: The CPU to use for commands that require an implicit CPU
211#
212# Features:
213#
214# @savevm-monitor-nodes: If present, HMP command savevm only snapshots
215#     monitor-owned nodes if they have no parents.  This allows the
216#     use of 'savevm' with -blockdev.  (since 4.2)
217#
218# Returns: the output of the command as a string
219#
220# Since: 0.14
221#
222# Notes: This command only exists as a stop-gap.  Its use is highly
223#     discouraged.  The semantics of this command are not guaranteed:
224#     this means that command names, arguments and responses can
225#     change or be removed at ANY time.  Applications that rely on
226#     long term stability guarantees should NOT use this command.
227#
228#     Known limitations:
229#
230#     * This command is stateless, this means that commands that
231#       depend on state information (such as getfd) might not work
232#
233#     * Commands that prompt the user for data don't currently work
234#
235# Example:
236#
237#     -> { "execute": "human-monitor-command",
238#          "arguments": { "command-line": "info kvm" } }
239#     <- { "return": "kvm support: enabled\r\n" }
240##
241{ 'command': 'human-monitor-command',
242  'data': {'command-line': 'str', '*cpu-index': 'int'},
243  'returns': 'str',
244  'features': [ 'savevm-monitor-nodes' ] }
245
246##
247# @getfd:
248#
249# Receive a file descriptor via SCM rights and assign it a name
250#
251# @fdname: file descriptor name
252#
253# Since: 0.14
254#
255# Notes: If @fdname already exists, the file descriptor assigned to it
256#     will be closed and replaced by the received file descriptor.
257#
258#     The 'closefd' command can be used to explicitly close the file
259#     descriptor when it is no longer needed.
260#
261# Example:
262#
263#     -> { "execute": "getfd", "arguments": { "fdname": "fd1" } }
264#     <- { "return": {} }
265##
266{ 'command': 'getfd', 'data': {'fdname': 'str'}, 'if': 'CONFIG_POSIX' }
267
268##
269# @get-win32-socket:
270#
271# Add a socket that was duplicated to QEMU process with
272# WSADuplicateSocketW() via WSASocket() & WSAPROTOCOL_INFOW structure
273# and assign it a name (the SOCKET is associated with a CRT file
274# descriptor)
275#
276# @info: the WSAPROTOCOL_INFOW structure (encoded in base64)
277#
278# @fdname: file descriptor name
279#
280# Since: 8.0
281#
282# Notes: If @fdname already exists, the file descriptor assigned to it
283#     will be closed and replaced by the received file descriptor.
284#
285#     The 'closefd' command can be used to explicitly close the file
286#     descriptor when it is no longer needed.
287#
288# Example:
289#
290#     -> { "execute": "get-win32-socket", "arguments": { "info": "abcd123..", fdname": "skclient" } }
291#     <- { "return": {} }
292##
293{ 'command': 'get-win32-socket', 'data': {'info': 'str', 'fdname': 'str'}, 'if': 'CONFIG_WIN32' }
294
295##
296# @closefd:
297#
298# Close a file descriptor previously passed via SCM rights
299#
300# @fdname: file descriptor name
301#
302# Since: 0.14
303#
304# Example:
305#
306#     -> { "execute": "closefd", "arguments": { "fdname": "fd1" } }
307#     <- { "return": {} }
308##
309{ 'command': 'closefd', 'data': {'fdname': 'str'} }
310
311##
312# @AddfdInfo:
313#
314# Information about a file descriptor that was added to an fd set.
315#
316# @fdset-id: The ID of the fd set that @fd was added to.
317#
318# @fd: The file descriptor that was received via SCM rights and added
319#     to the fd set.
320#
321# Since: 1.2
322##
323{ 'struct': 'AddfdInfo', 'data': {'fdset-id': 'int', 'fd': 'int'} }
324
325##
326# @add-fd:
327#
328# Add a file descriptor, that was passed via SCM rights, to an fd set.
329#
330# @fdset-id: The ID of the fd set to add the file descriptor to.
331#
332# @opaque: A free-form string that can be used to describe the fd.
333#
334# Returns:
335#     @AddfdInfo
336#
337# Errors:
338#     - If file descriptor was not received, GenericError
339#     - If @fdset-id is a negative value, GenericError
340#
341# Notes:
342#     The list of fd sets is shared by all monitor connections.
343#
344#     If @fdset-id is not specified, a new fd set will be created.
345#
346# Since: 1.2
347#
348# Example:
349#
350#     -> { "execute": "add-fd", "arguments": { "fdset-id": 1 } }
351#     <- { "return": { "fdset-id": 1, "fd": 3 } }
352##
353{ 'command': 'add-fd',
354  'data': { '*fdset-id': 'int',
355            '*opaque': 'str' },
356  'returns': 'AddfdInfo' }
357
358##
359# @remove-fd:
360#
361# Remove a file descriptor from an fd set.
362#
363# @fdset-id: The ID of the fd set that the file descriptor belongs to.
364#
365# @fd: The file descriptor that is to be removed.
366#
367# Errors:
368#     - If @fdset-id or @fd is not found, GenericError
369#
370# Since: 1.2
371#
372# Notes:
373#     The list of fd sets is shared by all monitor connections.
374#
375#     If @fd is not specified, all file descriptors in @fdset-id will
376#     be removed.
377#
378# Example:
379#
380#     -> { "execute": "remove-fd", "arguments": { "fdset-id": 1, "fd": 3 } }
381#     <- { "return": {} }
382##
383{ 'command': 'remove-fd', 'data': {'fdset-id': 'int', '*fd': 'int'} }
384
385##
386# @FdsetFdInfo:
387#
388# Information about a file descriptor that belongs to an fd set.
389#
390# @fd: The file descriptor value.
391#
392# @opaque: A free-form string that can be used to describe the fd.
393#
394# Since: 1.2
395##
396{ 'struct': 'FdsetFdInfo',
397  'data': {'fd': 'int', '*opaque': 'str'} }
398
399##
400# @FdsetInfo:
401#
402# Information about an fd set.
403#
404# @fdset-id: The ID of the fd set.
405#
406# @fds: A list of file descriptors that belong to this fd set.
407#
408# Since: 1.2
409##
410{ 'struct': 'FdsetInfo',
411  'data': {'fdset-id': 'int', 'fds': ['FdsetFdInfo']} }
412
413##
414# @query-fdsets:
415#
416# Return information describing all fd sets.
417#
418# Returns: A list of @FdsetInfo
419#
420# Since: 1.2
421#
422# Note: The list of fd sets is shared by all monitor connections.
423#
424# Example:
425#
426#     -> { "execute": "query-fdsets" }
427#     <- { "return": [
428#            {
429#              "fds": [
430#                {
431#                  "fd": 30,
432#                  "opaque": "rdonly:/path/to/file"
433#                },
434#                {
435#                  "fd": 24,
436#                  "opaque": "rdwr:/path/to/file"
437#                }
438#              ],
439#              "fdset-id": 1
440#            },
441#            {
442#              "fds": [
443#                {
444#                  "fd": 28
445#                },
446#                {
447#                  "fd": 29
448#                }
449#              ],
450#              "fdset-id": 0
451#            }
452#          ]
453#        }
454##
455{ 'command': 'query-fdsets', 'returns': ['FdsetInfo'] }
456
457##
458# @CommandLineParameterType:
459#
460# Possible types for an option parameter.
461#
462# @string: accepts a character string
463#
464# @boolean: accepts "on" or "off"
465#
466# @number: accepts a number
467#
468# @size: accepts a number followed by an optional suffix (K)ilo,
469#     (M)ega, (G)iga, (T)era
470#
471# Since: 1.5
472##
473{ 'enum': 'CommandLineParameterType',
474  'data': ['string', 'boolean', 'number', 'size'] }
475
476##
477# @CommandLineParameterInfo:
478#
479# Details about a single parameter of a command line option.
480#
481# @name: parameter name
482#
483# @type: parameter @CommandLineParameterType
484#
485# @help: human readable text string, not suitable for parsing.
486#
487# @default: default value string (since 2.1)
488#
489# Since: 1.5
490##
491{ 'struct': 'CommandLineParameterInfo',
492  'data': { 'name': 'str',
493            'type': 'CommandLineParameterType',
494            '*help': 'str',
495            '*default': 'str' } }
496
497##
498# @CommandLineOptionInfo:
499#
500# Details about a command line option, including its list of parameter
501# details
502#
503# @option: option name
504#
505# @parameters: an array of @CommandLineParameterInfo
506#
507# Since: 1.5
508##
509{ 'struct': 'CommandLineOptionInfo',
510  'data': { 'option': 'str', 'parameters': ['CommandLineParameterInfo'] } }
511
512##
513# @query-command-line-options:
514#
515# Query command line option schema.
516#
517# @option: option name
518#
519# Returns: list of @CommandLineOptionInfo for all options (or for the
520#     given @option).
521#
522# Errors:
523#     - if the given @option doesn't exist
524#
525# Since: 1.5
526#
527# Example:
528#
529#     -> { "execute": "query-command-line-options",
530#          "arguments": { "option": "option-rom" } }
531#     <- { "return": [
532#             {
533#                 "parameters": [
534#                     {
535#                         "name": "romfile",
536#                         "type": "string"
537#                     },
538#                     {
539#                         "name": "bootindex",
540#                         "type": "number"
541#                     }
542#                 ],
543#                 "option": "option-rom"
544#             }
545#          ]
546#        }
547##
548{'command': 'query-command-line-options',
549 'data': {'*option': 'str'},
550 'returns': ['CommandLineOptionInfo'],
551 'allow-preconfig': true}
552
553##
554# @RTC_CHANGE:
555#
556# Emitted when the guest changes the RTC time.
557#
558# @offset: offset in seconds between base RTC clock (as specified by
559#     -rtc base), and new RTC clock value
560#
561# @qom-path: path to the RTC object in the QOM tree
562#
563# Note: This event is rate-limited.  It is not guaranteed that the RTC
564#     in the system implements this event, or even that the system has
565#     an RTC at all.
566#
567# Since: 0.13
568#
569# Example:
570#
571#     <- { "event": "RTC_CHANGE",
572#          "data": { "offset": 78 },
573#          "timestamp": { "seconds": 1267020223, "microseconds": 435656 } }
574##
575{ 'event': 'RTC_CHANGE',
576  'data': { 'offset': 'int', 'qom-path': 'str' } }
577
578##
579# @VFU_CLIENT_HANGUP:
580#
581# Emitted when the client of a TYPE_VFIO_USER_SERVER closes the
582# communication channel
583#
584# @vfu-id: ID of the TYPE_VFIO_USER_SERVER object.  It is the last
585#     component of @vfu-qom-path referenced below
586#
587# @vfu-qom-path: path to the TYPE_VFIO_USER_SERVER object in the QOM
588#     tree
589#
590# @dev-id: ID of attached PCI device
591#
592# @dev-qom-path: path to attached PCI device in the QOM tree
593#
594# Since: 7.1
595#
596# Example:
597#
598#     <- { "event": "VFU_CLIENT_HANGUP",
599#          "data": { "vfu-id": "vfu1",
600#                    "vfu-qom-path": "/objects/vfu1",
601#                    "dev-id": "sas1",
602#                    "dev-qom-path": "/machine/peripheral/sas1" },
603#          "timestamp": { "seconds": 1265044230, "microseconds": 450486 } }
604##
605{ 'event': 'VFU_CLIENT_HANGUP',
606  'data': { 'vfu-id': 'str', 'vfu-qom-path': 'str',
607            'dev-id': 'str', 'dev-qom-path': 'str' } }
608