xref: /openbmc/qemu/qapi/misc.json (revision b88cfee9)
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# .. note:: This function will succeed even if the guest is already in
140#    the stopped state.  In "inmigrate" state, it will ensure that the
141#    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 cause
145#    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# .. note:: This command will succeed if the guest is currently running.
162#    It will also succeed if the guest is in the "inmigrate" state; in
163#    this case, the effect of the command is to make sure the guest
164#    starts once migration finishes, removing the effect of the ``-S``
165#    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.  (Since
169#    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# .. note:: 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 change
225#    or be removed at ANY time.  Applications that rely on long term
226#    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# .. note:: If @fdname already exists, the file descriptor assigned to
256#    it 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# .. note:: If @fdname already exists, the file descriptor assigned to
283#    it 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",
291#          "arguments": { "info": "abcd123..", "fdname": "skclient" } }
292#     <- { "return": {} }
293##
294{ 'command': 'get-win32-socket', 'data': {'info': 'str', 'fdname': 'str'}, 'if': 'CONFIG_WIN32' }
295
296##
297# @closefd:
298#
299# Close a file descriptor previously passed via SCM rights
300#
301# @fdname: file descriptor name
302#
303# Since: 0.14
304#
305# Example:
306#
307#     -> { "execute": "closefd", "arguments": { "fdname": "fd1" } }
308#     <- { "return": {} }
309##
310{ 'command': 'closefd', 'data': {'fdname': 'str'} }
311
312##
313# @AddfdInfo:
314#
315# Information about a file descriptor that was added to an fd set.
316#
317# @fdset-id: The ID of the fd set that @fd was added to.
318#
319# @fd: The file descriptor that was received via SCM rights and added
320#     to the fd set.
321#
322# Since: 1.2
323##
324{ 'struct': 'AddfdInfo', 'data': {'fdset-id': 'int', 'fd': 'int'} }
325
326##
327# @add-fd:
328#
329# Add a file descriptor, that was passed via SCM rights, to an fd set.
330#
331# @fdset-id: The ID of the fd set to add the file descriptor to.
332#
333# @opaque: A free-form string that can be used to describe the fd.
334#
335# Returns:
336#     @AddfdInfo
337#
338# Errors:
339#     - If file descriptor was not received, GenericError
340#     - If @fdset-id is a negative value, GenericError
341#
342# .. note:: The list of fd sets is shared by all monitor connections.
343#
344# .. note:: 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# .. note:: The list of fd sets is shared by all monitor connections.
373#
374# .. note:: If @fd is not specified, all file descriptors in @fdset-id
375#    will be removed.
376#
377# Example:
378#
379#     -> { "execute": "remove-fd", "arguments": { "fdset-id": 1, "fd": 3 } }
380#     <- { "return": {} }
381##
382{ 'command': 'remove-fd', 'data': {'fdset-id': 'int', '*fd': 'int'} }
383
384##
385# @FdsetFdInfo:
386#
387# Information about a file descriptor that belongs to an fd set.
388#
389# @fd: The file descriptor value.
390#
391# @opaque: A free-form string that can be used to describe the fd.
392#
393# Since: 1.2
394##
395{ 'struct': 'FdsetFdInfo',
396  'data': {'fd': 'int', '*opaque': 'str'} }
397
398##
399# @FdsetInfo:
400#
401# Information about an fd set.
402#
403# @fdset-id: The ID of the fd set.
404#
405# @fds: A list of file descriptors that belong to this fd set.
406#
407# Since: 1.2
408##
409{ 'struct': 'FdsetInfo',
410  'data': {'fdset-id': 'int', 'fds': ['FdsetFdInfo']} }
411
412##
413# @query-fdsets:
414#
415# Return information describing all fd sets.
416#
417# Returns: A list of @FdsetInfo
418#
419# Since: 1.2
420#
421# .. note:: The list of fd sets is shared by all monitor connections.
422#
423# Example:
424#
425#     -> { "execute": "query-fdsets" }
426#     <- { "return": [
427#            {
428#              "fds": [
429#                {
430#                  "fd": 30,
431#                  "opaque": "rdonly:/path/to/file"
432#                },
433#                {
434#                  "fd": 24,
435#                  "opaque": "rdwr:/path/to/file"
436#                }
437#              ],
438#              "fdset-id": 1
439#            },
440#            {
441#              "fds": [
442#                {
443#                  "fd": 28
444#                },
445#                {
446#                  "fd": 29
447#                }
448#              ],
449#              "fdset-id": 0
450#            }
451#          ]
452#        }
453##
454{ 'command': 'query-fdsets', 'returns': ['FdsetInfo'] }
455
456##
457# @CommandLineParameterType:
458#
459# Possible types for an option parameter.
460#
461# @string: accepts a character string
462#
463# @boolean: accepts "on" or "off"
464#
465# @number: accepts a number
466#
467# @size: accepts a number followed by an optional suffix (K)ilo,
468#     (M)ega, (G)iga, (T)era
469#
470# Since: 1.5
471##
472{ 'enum': 'CommandLineParameterType',
473  'data': ['string', 'boolean', 'number', 'size'] }
474
475##
476# @CommandLineParameterInfo:
477#
478# Details about a single parameter of a command line option.
479#
480# @name: parameter name
481#
482# @type: parameter @CommandLineParameterType
483#
484# @help: human readable text string, not suitable for parsing.
485#
486# @default: default value string (since 2.1)
487#
488# Since: 1.5
489##
490{ 'struct': 'CommandLineParameterInfo',
491  'data': { 'name': 'str',
492            'type': 'CommandLineParameterType',
493            '*help': 'str',
494            '*default': 'str' } }
495
496##
497# @CommandLineOptionInfo:
498#
499# Details about a command line option, including its list of parameter
500# details
501#
502# @option: option name
503#
504# @parameters: an array of @CommandLineParameterInfo
505#
506# Since: 1.5
507##
508{ 'struct': 'CommandLineOptionInfo',
509  'data': { 'option': 'str', 'parameters': ['CommandLineParameterInfo'] } }
510
511##
512# @query-command-line-options:
513#
514# Query command line option schema.
515#
516# @option: option name
517#
518# Returns: list of @CommandLineOptionInfo for all options (or for the
519#     given @option).
520#
521# Errors:
522#     - if the given @option doesn't exist
523#
524# Since: 1.5
525#
526# Example:
527#
528#     -> { "execute": "query-command-line-options",
529#          "arguments": { "option": "option-rom" } }
530#     <- { "return": [
531#             {
532#                 "parameters": [
533#                     {
534#                         "name": "romfile",
535#                         "type": "string"
536#                     },
537#                     {
538#                         "name": "bootindex",
539#                         "type": "number"
540#                     }
541#                 ],
542#                 "option": "option-rom"
543#             }
544#          ]
545#        }
546##
547{'command': 'query-command-line-options',
548 'data': {'*option': 'str'},
549 'returns': ['CommandLineOptionInfo'],
550 'allow-preconfig': true}
551
552##
553# @RTC_CHANGE:
554#
555# Emitted when the guest changes the RTC time.
556#
557# @offset: offset in seconds between base RTC clock (as specified by
558#     -rtc base), and new RTC clock value
559#
560# @qom-path: path to the RTC object in the QOM tree
561#
562# .. note:: This event is rate-limited.  It is not guaranteed that the
563#    RTC in the system implements this event, or even that the system
564#    has an RTC at all.
565#
566# Since: 0.13
567#
568# Example:
569#
570#     <- { "event": "RTC_CHANGE",
571#          "data": { "offset": 78 },
572#          "timestamp": { "seconds": 1267020223, "microseconds": 435656 } }
573##
574{ 'event': 'RTC_CHANGE',
575  'data': { 'offset': 'int', 'qom-path': 'str' } }
576
577##
578# @VFU_CLIENT_HANGUP:
579#
580# Emitted when the client of a TYPE_VFIO_USER_SERVER closes the
581# communication channel
582#
583# @vfu-id: ID of the TYPE_VFIO_USER_SERVER object.  It is the last
584#     component of @vfu-qom-path referenced below
585#
586# @vfu-qom-path: path to the TYPE_VFIO_USER_SERVER object in the QOM
587#     tree
588#
589# @dev-id: ID of attached PCI device
590#
591# @dev-qom-path: path to attached PCI device in the QOM tree
592#
593# Since: 7.1
594#
595# Example:
596#
597#     <- { "event": "VFU_CLIENT_HANGUP",
598#          "data": { "vfu-id": "vfu1",
599#                    "vfu-qom-path": "/objects/vfu1",
600#                    "dev-id": "sas1",
601#                    "dev-qom-path": "/machine/peripheral/sas1" },
602#          "timestamp": { "seconds": 1265044230, "microseconds": 450486 } }
603##
604{ 'event': 'VFU_CLIENT_HANGUP',
605  'data': { 'vfu-id': 'str', 'vfu-qom-path': 'str',
606            'dev-id': 'str', 'dev-qom-path': 'str' } }
607