xref: /openbmc/qemu/qapi/misc.json (revision 30b6852c)
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
15# character devices to be passed in to QEMU via SCM_RIGHTS.
16#
17# @protocol: protocol name. Valid names are "vnc", "spice" or the
18#            name of a character device (eg. from -chardev id=XXXX)
19#
20# @fdname: file descriptor name previously passed via 'getfd' command
21#
22# @skipauth: whether to skip authentication. Only applies
23#            to "vnc" and "spice" protocols
24#
25# @tls: whether to perform TLS. Only applies to the "spice"
26#       protocol
27#
28# Returns: nothing on success.
29#
30# Since: 0.14
31#
32# Example:
33#
34# -> { "execute": "add_client", "arguments": { "protocol": "vnc",
35#                                              "fdname": "myclient" } }
36# <- { "return": {} }
37#
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##
69{ 'command': 'query-name', 'returns': 'NameInfo', 'allow-preconfig': true }
70
71##
72# @IOThreadInfo:
73#
74# Information about an iothread
75#
76# @id: the identifier of the iothread
77#
78# @thread-id: ID of the underlying host thread
79#
80# @poll-max-ns: maximum polling time in ns, 0 means polling is disabled
81#               (since 2.9)
82#
83# @poll-grow: how many ns will be added to polling time, 0 means that it's not
84#             configured (since 2.9)
85#
86# @poll-shrink: how many ns will be removed from polling time, 0 means that
87#               it's not configured (since 2.9)
88#
89# @aio-max-batch: maximum number of requests in a batch for the AIO engine,
90#                 0 means that the engine will use its default (since 6.1)
91#
92# Since: 2.0
93##
94{ 'struct': 'IOThreadInfo',
95  'data': {'id': 'str',
96           'thread-id': 'int',
97           'poll-max-ns': 'int',
98           'poll-grow': 'int',
99           'poll-shrink': 'int',
100           'aio-max-batch': 'int' } }
101
102##
103# @query-iothreads:
104#
105# Returns a list of information about each iothread.
106#
107# Note: this list excludes the QEMU main loop thread, which is not declared
108#       using the -object iothread command-line option.  It is always the main thread
109#       of the process.
110#
111# Returns: a list of @IOThreadInfo for each iothread
112#
113# Since: 2.0
114#
115# Example:
116#
117# -> { "execute": "query-iothreads" }
118# <- { "return": [
119#          {
120#             "id":"iothread0",
121#             "thread-id":3134
122#          },
123#          {
124#             "id":"iothread1",
125#             "thread-id":3135
126#          }
127#       ]
128#    }
129#
130##
131{ 'command': 'query-iothreads', 'returns': ['IOThreadInfo'],
132  'allow-preconfig': true }
133
134##
135# @stop:
136#
137# Stop all guest VCPU execution.
138#
139# Since:  0.14
140#
141# Notes: This function will succeed even if the guest is already in the stopped
142#        state.  In "inmigrate" state, it will ensure that the guest
143#        remains paused once migration finishes, as if the -S option was
144#        passed on the command line.
145#
146# Example:
147#
148# -> { "execute": "stop" }
149# <- { "return": {} }
150#
151##
152{ 'command': 'stop' }
153
154##
155# @cont:
156#
157# Resume guest VCPU execution.
158#
159# Since:  0.14
160#
161# Returns:  If successful, nothing
162#
163# Notes: This command will succeed if the guest is currently running.  It
164#        will also succeed if the guest is in the "inmigrate" state; in
165#        this case, the effect of the command is to make sure the guest
166#        starts once migration finishes, removing the effect of the -S
167#        command line option if it was passed.
168#
169# Example:
170#
171# -> { "execute": "cont" }
172# <- { "return": {} }
173#
174##
175{ 'command': 'cont' }
176
177##
178# @x-exit-preconfig:
179#
180# Exit from "preconfig" state
181#
182# This command makes QEMU exit the preconfig state and proceed with
183# VM initialization using configuration data provided on the command line
184# and via the QMP monitor during the preconfig state. The command is only
185# available during the preconfig state (i.e. when the --preconfig command
186# line option was in use).
187#
188# Since 3.0
189#
190# Returns: nothing
191#
192# Example:
193#
194# -> { "execute": "x-exit-preconfig" }
195# <- { "return": {} }
196#
197##
198{ 'command': 'x-exit-preconfig', 'allow-preconfig': true }
199
200##
201# @human-monitor-command:
202#
203# Execute a command on the human monitor and return the output.
204#
205# @command-line: the command to execute in the human monitor
206#
207# @cpu-index: The CPU to use for commands that require an implicit CPU
208#
209# Features:
210# @savevm-monitor-nodes: If present, HMP command savevm only snapshots
211#                        monitor-owned nodes if they have no parents.
212#                        This allows the use of 'savevm' with
213#                        -blockdev. (since 4.2)
214#
215# Returns: the output of the command as a string
216#
217# Since: 0.14
218#
219# Notes: This command only exists as a stop-gap.  Its use is highly
220#        discouraged.  The semantics of this command are not
221#        guaranteed: this means that command names, arguments and
222#        responses can change or be removed at ANY time.  Applications
223#        that rely on long term stability guarantees should NOT
224#        use this command.
225#
226#        Known limitations:
227#
228#        * This command is stateless, this means that commands that depend
229#          on state information (such as getfd) might not work
230#
231#        * Commands that prompt the user for data don't currently work
232#
233# Example:
234#
235# -> { "execute": "human-monitor-command",
236#      "arguments": { "command-line": "info kvm" } }
237# <- { "return": "kvm support: enabled\r\n" }
238#
239##
240{ 'command': 'human-monitor-command',
241  'data': {'command-line': 'str', '*cpu-index': 'int'},
242  'returns': 'str',
243  'features': [ 'savevm-monitor-nodes' ] }
244
245##
246# @getfd:
247#
248# Receive a file descriptor via SCM rights and assign it a name
249#
250# @fdname: file descriptor name
251#
252# Returns: Nothing on success
253#
254# Since: 0.14
255#
256# Notes: If @fdname already exists, the file descriptor assigned to
257#        it will be closed and replaced by the received file
258#        descriptor.
259#
260#        The 'closefd' command can be used to explicitly close the
261#        file descriptor when it is no longer needed.
262#
263# Example:
264#
265# -> { "execute": "getfd", "arguments": { "fdname": "fd1" } }
266# <- { "return": {} }
267#
268##
269{ 'command': 'getfd', 'data': {'fdname': 'str'} }
270
271##
272# @closefd:
273#
274# Close a file descriptor previously passed via SCM rights
275#
276# @fdname: file descriptor name
277#
278# Returns: Nothing on success
279#
280# Since: 0.14
281#
282# Example:
283#
284# -> { "execute": "closefd", "arguments": { "fdname": "fd1" } }
285# <- { "return": {} }
286#
287##
288{ 'command': 'closefd', 'data': {'fdname': 'str'} }
289
290##
291# @AddfdInfo:
292#
293# Information about a file descriptor that was added to an fd set.
294#
295# @fdset-id: The ID of the fd set that @fd was added to.
296#
297# @fd: The file descriptor that was received via SCM rights and
298#      added to the fd set.
299#
300# Since: 1.2
301##
302{ 'struct': 'AddfdInfo', 'data': {'fdset-id': 'int', 'fd': 'int'} }
303
304##
305# @add-fd:
306#
307# Add a file descriptor, that was passed via SCM rights, to an fd set.
308#
309# @fdset-id: The ID of the fd set to add the file descriptor to.
310#
311# @opaque: A free-form string that can be used to describe the fd.
312#
313# Returns: - @AddfdInfo on success
314#          - If file descriptor was not received, FdNotSupplied
315#          - If @fdset-id is a negative value, InvalidParameterValue
316#
317# Notes: The list of fd sets is shared by all monitor connections.
318#
319#        If @fdset-id is not specified, a new fd set will be created.
320#
321# Since: 1.2
322#
323# Example:
324#
325# -> { "execute": "add-fd", "arguments": { "fdset-id": 1 } }
326# <- { "return": { "fdset-id": 1, "fd": 3 } }
327#
328##
329{ 'command': 'add-fd',
330  'data': { '*fdset-id': 'int',
331            '*opaque': 'str' },
332  'returns': 'AddfdInfo' }
333
334##
335# @remove-fd:
336#
337# Remove a file descriptor from an fd set.
338#
339# @fdset-id: The ID of the fd set that the file descriptor belongs to.
340#
341# @fd: The file descriptor that is to be removed.
342#
343# Returns: - Nothing on success
344#          - If @fdset-id or @fd is not found, FdNotFound
345#
346# Since: 1.2
347#
348# Notes: The list of fd sets is shared by all monitor connections.
349#
350#        If @fd is not specified, all file descriptors in @fdset-id
351#        will be removed.
352#
353# Example:
354#
355# -> { "execute": "remove-fd", "arguments": { "fdset-id": 1, "fd": 3 } }
356# <- { "return": {} }
357#
358##
359{ 'command': 'remove-fd', 'data': {'fdset-id': 'int', '*fd': 'int'} }
360
361##
362# @FdsetFdInfo:
363#
364# Information about a file descriptor that belongs to an fd set.
365#
366# @fd: The file descriptor value.
367#
368# @opaque: A free-form string that can be used to describe the fd.
369#
370# Since: 1.2
371##
372{ 'struct': 'FdsetFdInfo',
373  'data': {'fd': 'int', '*opaque': 'str'} }
374
375##
376# @FdsetInfo:
377#
378# Information about an fd set.
379#
380# @fdset-id: The ID of the fd set.
381#
382# @fds: A list of file descriptors that belong to this fd set.
383#
384# Since: 1.2
385##
386{ 'struct': 'FdsetInfo',
387  'data': {'fdset-id': 'int', 'fds': ['FdsetFdInfo']} }
388
389##
390# @query-fdsets:
391#
392# Return information describing all fd sets.
393#
394# Returns: A list of @FdsetInfo
395#
396# Since: 1.2
397#
398# Note: The list of fd sets is shared by all monitor connections.
399#
400# Example:
401#
402# -> { "execute": "query-fdsets" }
403# <- { "return": [
404#        {
405#          "fds": [
406#            {
407#              "fd": 30,
408#              "opaque": "rdonly:/path/to/file"
409#            },
410#            {
411#              "fd": 24,
412#              "opaque": "rdwr:/path/to/file"
413#            }
414#          ],
415#          "fdset-id": 1
416#        },
417#        {
418#          "fds": [
419#            {
420#              "fd": 28
421#            },
422#            {
423#              "fd": 29
424#            }
425#          ],
426#          "fdset-id": 0
427#        }
428#      ]
429#    }
430#
431##
432{ 'command': 'query-fdsets', 'returns': ['FdsetInfo'] }
433
434##
435# @CommandLineParameterType:
436#
437# Possible types for an option parameter.
438#
439# @string: accepts a character string
440#
441# @boolean: accepts "on" or "off"
442#
443# @number: accepts a number
444#
445# @size: accepts a number followed by an optional suffix (K)ilo,
446#        (M)ega, (G)iga, (T)era
447#
448# Since: 1.5
449##
450{ 'enum': 'CommandLineParameterType',
451  'data': ['string', 'boolean', 'number', 'size'] }
452
453##
454# @CommandLineParameterInfo:
455#
456# Details about a single parameter of a command line option.
457#
458# @name: parameter name
459#
460# @type: parameter @CommandLineParameterType
461#
462# @help: human readable text string, not suitable for parsing.
463#
464# @default: default value string (since 2.1)
465#
466# Since: 1.5
467##
468{ 'struct': 'CommandLineParameterInfo',
469  'data': { 'name': 'str',
470            'type': 'CommandLineParameterType',
471            '*help': 'str',
472            '*default': 'str' } }
473
474##
475# @CommandLineOptionInfo:
476#
477# Details about a command line option, including its list of parameter details
478#
479# @option: option name
480#
481# @parameters: an array of @CommandLineParameterInfo
482#
483# Since: 1.5
484##
485{ 'struct': 'CommandLineOptionInfo',
486  'data': { 'option': 'str', 'parameters': ['CommandLineParameterInfo'] } }
487
488##
489# @query-command-line-options:
490#
491# Query command line option schema.
492#
493# @option: option name
494#
495# Returns: list of @CommandLineOptionInfo for all options (or for the given
496#          @option).  Returns an error if the given @option doesn't exist.
497#
498# Since: 1.5
499#
500# Example:
501#
502# -> { "execute": "query-command-line-options",
503#      "arguments": { "option": "option-rom" } }
504# <- { "return": [
505#         {
506#             "parameters": [
507#                 {
508#                     "name": "romfile",
509#                     "type": "string"
510#                 },
511#                 {
512#                     "name": "bootindex",
513#                     "type": "number"
514#                 }
515#             ],
516#             "option": "option-rom"
517#         }
518#      ]
519#    }
520#
521##
522{'command': 'query-command-line-options',
523 'data': { '*option': 'str' },
524 'returns': ['CommandLineOptionInfo'],
525 'allow-preconfig': true }
526