]> git.proxmox.com Git - mirror_qemu.git/blame - qapi-schema.json
migration_completion: Take current state
[mirror_qemu.git] / qapi-schema.json
CommitLineData
e3193601
AL
1# -*- Mode: Python -*-
2#
3# QAPI Schema
48a32bed 4
d34bda71
BC
5# QAPI common definitions
6{ 'include': 'qapi/common.json' }
104059da 7
a090187d
DB
8# QAPI crypto definitions
9{ 'include': 'qapi/crypto.json' }
10
5db15096
BC
11# QAPI block definitions
12{ 'include': 'qapi/block.json' }
13
82d72d9d
WX
14# QAPI event definitions
15{ 'include': 'qapi/event.json' }
16
1dde0f48
LV
17# Tracing commands
18{ 'include': 'qapi/trace.json' }
19
39a18158
MA
20# QAPI introspection
21{ 'include': 'qapi/introspect.json' }
22
104059da 23##
801db5ec 24# @LostTickPolicy:
104059da
PB
25#
26# Policy for handling lost ticks in timer devices.
27#
28# @discard: throw away the missed tick(s) and continue with future injection
29# normally. Guest time may be delayed, unless the OS has explicit
30# handling of lost ticks
31#
32# @delay: continue to deliver ticks at the normal rate. Guest time will be
33# delayed due to the late tick
34#
35# @merge: merge the missed tick(s) into one tick and inject. Guest time
36# may be delayed, depending on how the OS reacts to the merging
37# of ticks
38#
39# @slew: deliver ticks at a higher rate to catch up with the missed tick. The
40# guest time should not be delayed once catchup is complete.
41#
42# Since: 2.0
43##
44{ 'enum': 'LostTickPolicy',
45 'data': ['discard', 'delay', 'merge', 'slew' ] }
46
b224e5e2
LC
47# @add_client
48#
49# Allow client connections for VNC, Spice and socket based
50# character devices to be passed in to QEMU via SCM_RIGHTS.
51#
52# @protocol: protocol name. Valid names are "vnc", "spice" or the
53# name of a character device (eg. from -chardev id=XXXX)
54#
55# @fdname: file descriptor name previously passed via 'getfd' command
56#
57# @skipauth: #optional whether to skip authentication. Only applies
58# to "vnc" and "spice" protocols
59#
60# @tls: #optional whether to perform TLS. Only applies to the "spice"
61# protocol
62#
63# Returns: nothing on success.
64#
65# Since: 0.14.0
66##
67{ 'command': 'add_client',
68 'data': { 'protocol': 'str', 'fdname': 'str', '*skipauth': 'bool',
69 '*tls': 'bool' } }
70
48a32bed
AL
71##
72# @NameInfo:
73#
74# Guest name information.
75#
76# @name: #optional The name of the guest
77#
78# Since 0.14.0
79##
895a2a80 80{ 'struct': 'NameInfo', 'data': {'*name': 'str'} }
48a32bed
AL
81
82##
83# @query-name:
84#
85# Return the name information of a guest.
86#
87# Returns: @NameInfo of the guest
88#
89# Since 0.14.0
90##
91{ 'command': 'query-name', 'returns': 'NameInfo' }
b9c15f16 92
292a2602
LC
93##
94# @KvmInfo:
95#
96# Information about support for KVM acceleration
97#
98# @enabled: true if KVM acceleration is active
99#
100# @present: true if KVM acceleration is built into this executable
101#
102# Since: 0.14.0
103##
895a2a80 104{ 'struct': 'KvmInfo', 'data': {'enabled': 'bool', 'present': 'bool'} }
292a2602
LC
105
106##
107# @query-kvm:
108#
109# Returns information about KVM acceleration
110#
111# Returns: @KvmInfo
112#
113# Since: 0.14.0
114##
115{ 'command': 'query-kvm', 'returns': 'KvmInfo' }
116
1fa9a5e4
LC
117##
118# @RunState
119#
6932a69b 120# An enumeration of VM run states.
1fa9a5e4
LC
121#
122# @debug: QEMU is running on a debugger
123#
0a24c7b1
LC
124# @finish-migrate: guest is paused to finish the migration process
125#
1e998146
PB
126# @inmigrate: guest is paused waiting for an incoming migration. Note
127# that this state does not tell whether the machine will start at the
128# end of the migration. This depends on the command-line -S option and
129# any invocation of 'stop' or 'cont' that has happened since QEMU was
130# started.
1fa9a5e4
LC
131#
132# @internal-error: An internal error that prevents further guest execution
133# has occurred
134#
135# @io-error: the last IOP has failed and the device is configured to pause
136# on I/O errors
137#
138# @paused: guest has been paused via the 'stop' command
139#
140# @postmigrate: guest is paused following a successful 'migrate'
141#
142# @prelaunch: QEMU was started with -S and guest has not started
143#
1fa9a5e4
LC
144# @restore-vm: guest is paused to restore VM state
145#
146# @running: guest is actively running
147#
148# @save-vm: guest is paused to save the VM state
149#
150# @shutdown: guest is shut down (and -no-shutdown is in use)
151#
ad02b96a
LC
152# @suspended: guest is suspended (ACPI S3)
153#
1fa9a5e4 154# @watchdog: the watchdog action is configured to pause and has been triggered
ede085b3
HT
155#
156# @guest-panicked: guest has been panicked as a result of guest OS panic
1fa9a5e4
LC
157##
158{ 'enum': 'RunState',
159 'data': [ 'debug', 'inmigrate', 'internal-error', 'io-error', 'paused',
160 'postmigrate', 'prelaunch', 'finish-migrate', 'restore-vm',
ede085b3
HT
161 'running', 'save-vm', 'shutdown', 'suspended', 'watchdog',
162 'guest-panicked' ] }
1fa9a5e4
LC
163
164##
165# @StatusInfo:
166#
167# Information about VCPU run state
168#
169# @running: true if all VCPUs are runnable, false if not runnable
170#
171# @singlestep: true if VCPUs are in single-step mode
172#
173# @status: the virtual machine @RunState
174#
175# Since: 0.14.0
176#
177# Notes: @singlestep is enabled through the GDB stub
178##
895a2a80 179{ 'struct': 'StatusInfo',
1fa9a5e4
LC
180 'data': {'running': 'bool', 'singlestep': 'bool', 'status': 'RunState'} }
181
182##
183# @query-status:
184#
185# Query the run status of all VCPUs
186#
187# Returns: @StatusInfo reflecting all VCPUs
188#
189# Since: 0.14.0
190##
191{ 'command': 'query-status', 'returns': 'StatusInfo' }
192
efab767e
LC
193##
194# @UuidInfo:
195#
196# Guest UUID information.
197#
198# @UUID: the UUID of the guest
199#
200# Since: 0.14.0
201#
202# Notes: If no UUID was specified for the guest, a null UUID is returned.
203##
895a2a80 204{ 'struct': 'UuidInfo', 'data': {'UUID': 'str'} }
efab767e
LC
205
206##
207# @query-uuid:
208#
209# Query the guest UUID information.
210#
211# Returns: The @UuidInfo for the guest
212#
213# Since 0.14.0
214##
215{ 'command': 'query-uuid', 'returns': 'UuidInfo' }
216
c5a415a0
LC
217##
218# @ChardevInfo:
219#
220# Information about a character device.
221#
222# @label: the label of the character device
223#
224# @filename: the filename of the character device
225#
32a97ea1
LE
226# @frontend-open: shows whether the frontend device attached to this backend
227# (eg. with the chardev=... option) is in open or closed state
228# (since 2.1)
229#
c5a415a0
LC
230# Notes: @filename is encoded using the QEMU command line character device
231# encoding. See the QEMU man page for details.
232#
233# Since: 0.14.0
234##
895a2a80 235{ 'struct': 'ChardevInfo', 'data': {'label': 'str',
32a97ea1
LE
236 'filename': 'str',
237 'frontend-open': 'bool'} }
c5a415a0
LC
238
239##
240# @query-chardev:
241#
242# Returns information about current character devices.
243#
244# Returns: a list of @ChardevInfo
245#
246# Since: 0.14.0
247##
248{ 'command': 'query-chardev', 'returns': ['ChardevInfo'] }
aa9b79bc 249
77d1c3c6
MK
250##
251# @ChardevBackendInfo:
252#
253# Information about a character device backend
254#
255# @name: The backend name
256#
257# Since: 2.0
258##
895a2a80 259{ 'struct': 'ChardevBackendInfo', 'data': {'name': 'str'} }
77d1c3c6
MK
260
261##
262# @query-chardev-backends:
263#
264# Returns information about character device backends.
265#
266# Returns: a list of @ChardevBackendInfo
267#
268# Since: 2.0
269##
270{ 'command': 'query-chardev-backends', 'returns': ['ChardevBackendInfo'] }
271
1f590cf9
LL
272##
273# @DataFormat:
274#
275# An enumeration of data format.
276#
3949e594 277# @utf8: Data is a UTF-8 string (RFC 3629)
1f590cf9 278#
3949e594 279# @base64: Data is Base64 encoded binary (RFC 3548)
1f590cf9
LL
280#
281# Since: 1.4
282##
ad0f171e 283{ 'enum': 'DataFormat',
1f590cf9
LL
284 'data': [ 'utf8', 'base64' ] }
285
286##
3949e594 287# @ringbuf-write:
1f590cf9 288#
3949e594 289# Write to a ring buffer character device.
1f590cf9 290#
3949e594 291# @device: the ring buffer character device name
1f590cf9 292#
3949e594 293# @data: data to write
1f590cf9 294#
3949e594
MA
295# @format: #optional data encoding (default 'utf8').
296# - base64: data must be base64 encoded text. Its binary
297# decoding gets written.
298# Bug: invalid base64 is currently not rejected.
299# Whitespace *is* invalid.
300# - utf8: data's UTF-8 encoding is written
301# - data itself is always Unicode regardless of format, like
302# any other string.
1f590cf9
LL
303#
304# Returns: Nothing on success
1f590cf9
LL
305#
306# Since: 1.4
307##
3949e594 308{ 'command': 'ringbuf-write',
82e59a67 309 'data': {'device': 'str', 'data': 'str',
1f590cf9
LL
310 '*format': 'DataFormat'} }
311
49b6d722 312##
3949e594 313# @ringbuf-read:
49b6d722 314#
3949e594 315# Read from a ring buffer character device.
49b6d722 316#
3949e594 317# @device: the ring buffer character device name
49b6d722 318#
3949e594 319# @size: how many bytes to read at most
49b6d722 320#
3949e594
MA
321# @format: #optional data encoding (default 'utf8').
322# - base64: the data read is returned in base64 encoding.
323# - utf8: the data read is interpreted as UTF-8.
324# Bug: can screw up when the buffer contains invalid UTF-8
325# sequences, NUL characters, after the ring buffer lost
326# data, and when reading stops because the size limit is
327# reached.
328# - The return value is always Unicode regardless of format,
329# like any other string.
49b6d722 330#
3ab651fc 331# Returns: data read from the device
49b6d722
LL
332#
333# Since: 1.4
334##
3949e594 335{ 'command': 'ringbuf-read',
49b6d722 336 'data': {'device': 'str', 'size': 'int', '*format': 'DataFormat'},
3ab651fc 337 'returns': 'str' }
49b6d722 338
4860853d
DB
339##
340# @EventInfo:
341#
342# Information about a QMP event
343#
344# @name: The event name
345#
346# Since: 1.2.0
347##
895a2a80 348{ 'struct': 'EventInfo', 'data': {'name': 'str'} }
4860853d
DB
349
350##
351# @query-events:
352#
353# Return a list of supported QMP events by this server
354#
355# Returns: A list of @EventInfo for all supported events
356#
357# Since: 1.2.0
358##
359{ 'command': 'query-events', 'returns': ['EventInfo'] }
360
791e7c82
LC
361##
362# @MigrationStats
363#
364# Detailed migration status.
365#
366# @transferred: amount of bytes already transferred to the target VM
367#
368# @remaining: amount of bytes remaining to be transferred to the target VM
369#
370# @total: total amount of bytes involved in the migration process
371#
f1c72795
PL
372# @duplicate: number of duplicate (zero) pages (since 1.2)
373#
374# @skipped: number of skipped zero pages (since 1.5)
004d4c10
OW
375#
376# @normal : number of normal pages (since 1.2)
377#
8d017193
JQ
378# @normal-bytes: number of normal bytes sent (since 1.2)
379#
380# @dirty-pages-rate: number of pages dirtied by second by the
381# guest (since 1.3)
004d4c10 382#
7e114f8c
MH
383# @mbps: throughput in megabits/sec. (since 1.6)
384#
58570ed8
C
385# @dirty-sync-count: number of times that dirty ram was synchronized (since 2.1)
386#
004d4c10 387# Since: 0.14.0
791e7c82 388##
895a2a80 389{ 'struct': 'MigrationStats',
d5f8a570 390 'data': {'transferred': 'int', 'remaining': 'int', 'total': 'int' ,
f1c72795 391 'duplicate': 'int', 'skipped': 'int', 'normal': 'int',
7e114f8c 392 'normal-bytes': 'int', 'dirty-pages-rate' : 'int',
58570ed8 393 'mbps' : 'number', 'dirty-sync-count' : 'int' } }
791e7c82 394
f36d55af
OW
395##
396# @XBZRLECacheStats
397#
398# Detailed XBZRLE migration cache statistics
399#
400# @cache-size: XBZRLE cache size
401#
402# @bytes: amount of bytes already transferred to the target VM
403#
404# @pages: amount of pages transferred to the target VM
405#
406# @cache-miss: number of cache miss
407#
8bc39233
C
408# @cache-miss-rate: rate of cache miss (since 2.1)
409#
f36d55af
OW
410# @overflow: number of overflows
411#
412# Since: 1.2
413##
895a2a80 414{ 'struct': 'XBZRLECacheStats',
f36d55af 415 'data': {'cache-size': 'int', 'bytes': 'int', 'pages': 'int',
8bc39233
C
416 'cache-miss': 'int', 'cache-miss-rate': 'number',
417 'overflow': 'int' } }
f36d55af 418
24b8c39b
HZ
419# @MigrationStatus:
420#
421# An enumeration of migration status.
422#
423# @none: no migration has ever happened.
424#
425# @setup: migration process has been initiated.
426#
427# @cancelling: in the process of cancelling migration.
428#
429# @cancelled: cancelling migration is finished.
430#
431# @active: in the process of doing migration.
432#
433# @completed: migration is finished.
434#
435# @failed: some error occurred during migration process.
436#
437# Since: 2.3
438#
439##
440{ 'enum': 'MigrationStatus',
441 'data': [ 'none', 'setup', 'cancelling', 'cancelled',
442 'active', 'completed', 'failed' ] }
443
791e7c82
LC
444##
445# @MigrationInfo
446#
447# Information about current migration process.
448#
24b8c39b
HZ
449# @status: #optional @MigrationStatus describing the current migration status.
450# If this field is not returned, no migration process
791e7c82
LC
451# has been initiated
452#
d5f8a570
JQ
453# @ram: #optional @MigrationStats containing detailed migration
454# status, only returned if status is 'active' or
24b8c39b 455# 'completed'(since 1.2)
791e7c82
LC
456#
457# @disk: #optional @MigrationStats containing detailed disk migration
458# status, only returned if status is 'active' and it is a block
459# migration
460#
f36d55af
OW
461# @xbzrle-cache: #optional @XBZRLECacheStats containing detailed XBZRLE
462# migration statistics, only returned if XBZRLE feature is on and
463# status is 'active' or 'completed' (since 1.2)
464#
7aa939af
JQ
465# @total-time: #optional total amount of milliseconds since migration started.
466# If migration has ended, it returns the total migration
467# time. (since 1.2)
468#
9c5a9fcf
JQ
469# @downtime: #optional only present when migration finishes correctly
470# total downtime in milliseconds for the guest.
471# (since 1.3)
472#
2c52ddf1
JQ
473# @expected-downtime: #optional only present while migration is active
474# expected downtime in milliseconds for the guest in last walk
475# of the dirty bitmap. (since 1.3)
476#
ed4fbd10
MH
477# @setup-time: #optional amount of setup time in milliseconds _before_ the
478# iterations begin but _after_ the QMP command is issued. This is designed
479# to provide an accounting of any activities (such as RDMA pinning) which
480# may be expensive, but do not actually occur during the iterative
481# migration rounds themselves. (since 1.6)
482#
4782893e
JH
483# @x-cpu-throttle-percentage: #optional percentage of time guest cpus are being
484# throttled during auto-converge. This is only present when auto-converge
485# has started throttling guest cpus. (Since 2.5)
486#
791e7c82
LC
487# Since: 0.14.0
488##
895a2a80 489{ 'struct': 'MigrationInfo',
24b8c39b 490 'data': {'*status': 'MigrationStatus', '*ram': 'MigrationStats',
f36d55af 491 '*disk': 'MigrationStats',
7aa939af 492 '*xbzrle-cache': 'XBZRLECacheStats',
9c5a9fcf 493 '*total-time': 'int',
2c52ddf1 494 '*expected-downtime': 'int',
ed4fbd10 495 '*downtime': 'int',
4782893e
JH
496 '*setup-time': 'int',
497 '*x-cpu-throttle-percentage': 'int'} }
791e7c82
LC
498
499##
500# @query-migrate
501#
502# Returns information about current migration process.
503#
504# Returns: @MigrationInfo
505#
506# Since: 0.14.0
507##
508{ 'command': 'query-migrate', 'returns': 'MigrationInfo' }
509
bbf6da32
OW
510##
511# @MigrationCapability
512#
513# Migration capabilities enumeration
514#
515# @xbzrle: Migration supports xbzrle (Xor Based Zero Run Length Encoding).
516# This feature allows us to minimize migration traffic for certain work
517# loads, by sending compressed difference of the pages
518#
41310c68 519# @rdma-pin-all: Controls whether or not the entire VM memory footprint is
60d9222c 520# mlock()'d on demand or all at once. Refer to docs/rdma.txt for usage.
41310c68 521# Disabled by default. (since 2.0)
60d9222c 522#
323004a3
PL
523# @zero-blocks: During storage migration encode blocks of zeroes efficiently. This
524# essentially saves 1MB of zeroes per block on the wire. Enabling requires
525# source and target VM to support this feature. To enable it is sufficient
526# to enable the capability on the source VM. The feature is disabled by
527# default. (since 1.6)
528#
dde4e694
LL
529# @compress: Use multiple compression threads to accelerate live migration.
530# This feature can help to reduce the migration traffic, by sending
531# compressed pages. Please note that if compress and xbzrle are both
532# on, compress only takes effect in the ram bulk stage, after that,
533# it will be disabled and only xbzrle takes effect, this can help to
534# minimize migration traffic. The feature is disabled by default.
535# (since 2.4 )
536#
b05dc723
JQ
537# @events: generate events for each migration state change
538# (since 2.4 )
539#
9781c371
JQ
540# @auto-converge: If enabled, QEMU will automatically throttle down the guest
541# to speed up convergence of RAM migration. (since 1.6)
542#
53dd370c
DDAG
543# @x-postcopy-ram: Start executing on the migration target before all of RAM has
544# been migrated, pulling the remaining pages along as needed. NOTE: If
545# the migration fails during postcopy the VM will fail. (since 2.5)
546#
bbf6da32
OW
547# Since: 1.2
548##
549{ 'enum': 'MigrationCapability',
dde4e694 550 'data': ['xbzrle', 'rdma-pin-all', 'auto-converge', 'zero-blocks',
53dd370c 551 'compress', 'events', 'x-postcopy-ram'] }
bbf6da32
OW
552
553##
554# @MigrationCapabilityStatus
555#
556# Migration capability information
557#
558# @capability: capability enum
559#
560# @state: capability state bool
561#
562# Since: 1.2
563##
895a2a80 564{ 'struct': 'MigrationCapabilityStatus',
bbf6da32
OW
565 'data': { 'capability' : 'MigrationCapability', 'state' : 'bool' } }
566
567##
00458433
OW
568# @migrate-set-capabilities
569#
570# Enable/Disable the following migration capabilities (like xbzrle)
571#
572# @capabilities: json array of capability modifications to make
573#
574# Since: 1.2
575##
576{ 'command': 'migrate-set-capabilities',
577 'data': { 'capabilities': ['MigrationCapabilityStatus'] } }
578
579##
bbf6da32
OW
580# @query-migrate-capabilities
581#
582# Returns information about the current migration capabilities status
583#
584# Returns: @MigrationCapabilitiesStatus
585#
586# Since: 1.2
587##
588{ 'command': 'query-migrate-capabilities', 'returns': ['MigrationCapabilityStatus']}
589
43c60a81
LL
590# @MigrationParameter
591#
592# Migration parameters enumeration
593#
594# @compress-level: Set the compression level to be used in live migration,
595# the compression level is an integer between 0 and 9, where 0 means
596# no compression, 1 means the best compression speed, and 9 means best
597# compression ratio which will consume more CPU.
598#
599# @compress-threads: Set compression thread count to be used in live migration,
600# the compression thread count is an integer between 1 and 255.
601#
602# @decompress-threads: Set decompression thread count to be used in live
603# migration, the decompression thread count is an integer between 1
604# and 255. Usually, decompression is at least 4 times as fast as
605# compression, so set the decompress-threads to the number about 1/4
606# of compress-threads is adequate.
607#
1626fee3
JH
608# @x-cpu-throttle-initial: Initial percentage of time guest cpus are throttled
609# when migration auto-converge is activated. The
610# default value is 20. (Since 2.5)
611#
612# @x-cpu-throttle-increment: throttle percentage increase each time
613# auto-converge detects that migration is not making
614# progress. The default value is 10. (Since 2.5)
43c60a81
LL
615# Since: 2.4
616##
617{ 'enum': 'MigrationParameter',
1626fee3
JH
618 'data': ['compress-level', 'compress-threads', 'decompress-threads',
619 'x-cpu-throttle-initial', 'x-cpu-throttle-increment'] }
43c60a81 620
85de8323
LL
621#
622# @migrate-set-parameters
623#
624# Set the following migration parameters
625#
626# @compress-level: compression level
627#
628# @compress-threads: compression thread count
629#
630# @decompress-threads: decompression thread count
631#
1626fee3
JH
632# @x-cpu-throttle-initial: Initial percentage of time guest cpus are throttled
633# when migration auto-converge is activated. The
634# default value is 20. (Since 2.5)
635#
636# @x-cpu-throttle-increment: throttle percentage increase each time
637# auto-converge detects that migration is not making
638# progress. The default value is 10. (Since 2.5)
85de8323
LL
639# Since: 2.4
640##
641{ 'command': 'migrate-set-parameters',
642 'data': { '*compress-level': 'int',
643 '*compress-threads': 'int',
1626fee3
JH
644 '*decompress-threads': 'int',
645 '*x-cpu-throttle-initial': 'int',
646 '*x-cpu-throttle-increment': 'int'} }
85de8323
LL
647
648#
649# @MigrationParameters
650#
651# @compress-level: compression level
652#
653# @compress-threads: compression thread count
654#
655# @decompress-threads: decompression thread count
656#
1626fee3
JH
657# @x-cpu-throttle-initial: Initial percentage of time guest cpus are throttled
658# when migration auto-converge is activated. The
659# default value is 20. (Since 2.5)
660#
661# @x-cpu-throttle-increment: throttle percentage increase each time
662# auto-converge detects that migration is not making
663# progress. The default value is 10. (Since 2.5)
664#
85de8323
LL
665# Since: 2.4
666##
667{ 'struct': 'MigrationParameters',
668 'data': { 'compress-level': 'int',
669 'compress-threads': 'int',
1626fee3
JH
670 'decompress-threads': 'int',
671 'x-cpu-throttle-initial': 'int',
672 'x-cpu-throttle-increment': 'int'} }
85de8323
LL
673##
674# @query-migrate-parameters
675#
676# Returns information about the current migration parameters
677#
678# Returns: @MigrationParameters
679#
680# Since: 2.4
681##
682{ 'command': 'query-migrate-parameters',
683 'returns': 'MigrationParameters' }
684
b8a185bc
MA
685##
686# @client_migrate_info
687#
688# Set migration information for remote display. This makes the server
689# ask the client to automatically reconnect using the new parameters
690# once migration finished successfully. Only implemented for SPICE.
691#
692# @protocol: must be "spice"
693# @hostname: migration target hostname
694# @port: #optional spice tcp port for plaintext channels
695# @tls-port: #optional spice tcp port for tls-secured channels
696# @cert-subject: #optional server certificate subject
697#
698# Since: 0.14.0
699##
700{ 'command': 'client_migrate_info',
701 'data': { 'protocol': 'str', 'hostname': 'str', '*port': 'int',
702 '*tls-port': 'int', '*cert-subject': 'str' } }
703
4886a1bc
DDAG
704##
705# @migrate-start-postcopy
706#
707# Switch migration to postcopy mode
708#
709# Since: 2.5
710{ 'command': 'migrate-start-postcopy' }
711
e235cec3
LC
712##
713# @MouseInfo:
714#
715# Information about a mouse device.
716#
717# @name: the name of the mouse device
718#
719# @index: the index of the mouse device
720#
721# @current: true if this device is currently receiving mouse events
722#
723# @absolute: true if this device supports absolute coordinates as input
724#
725# Since: 0.14.0
726##
895a2a80 727{ 'struct': 'MouseInfo',
e235cec3
LC
728 'data': {'name': 'str', 'index': 'int', 'current': 'bool',
729 'absolute': 'bool'} }
730
731##
732# @query-mice:
733#
734# Returns information about each active mouse device
735#
736# Returns: a list of @MouseInfo for each device
737#
738# Since: 0.14.0
739##
740{ 'command': 'query-mice', 'returns': ['MouseInfo'] }
741
de0b36b6
LC
742##
743# @CpuInfo:
744#
745# Information about a virtual CPU
746#
747# @CPU: the index of the virtual CPU
748#
749# @current: this only exists for backwards compatible and should be ignored
b80e560b 750#
de0b36b6
LC
751# @halted: true if the virtual CPU is in the halt state. Halt usually refers
752# to a processor specific low power mode.
753#
58f88d4b
EH
754# @qom_path: path to the CPU object in the QOM tree (since 2.4)
755#
de0b36b6
LC
756# @pc: #optional If the target is i386 or x86_64, this is the 64-bit instruction
757# pointer.
758# If the target is Sparc, this is the PC component of the
759# instruction pointer.
760#
761# @nip: #optional If the target is PPC, the instruction pointer
762#
763# @npc: #optional If the target is Sparc, the NPC component of the instruction
764# pointer
765#
766# @PC: #optional If the target is MIPS, the instruction pointer
767#
768# @thread_id: ID of the underlying host thread
769#
770# Since: 0.14.0
771#
772# Notes: @halted is a transient state that changes frequently. By the time the
773# data is sent to the client, the guest may no longer be halted.
774##
895a2a80 775{ 'struct': 'CpuInfo',
58f88d4b
EH
776 'data': {'CPU': 'int', 'current': 'bool', 'halted': 'bool',
777 'qom_path': 'str',
778 '*pc': 'int', '*nip': 'int', '*npc': 'int', '*PC': 'int',
779 'thread_id': 'int'} }
de0b36b6
LC
780
781##
782# @query-cpus:
783#
784# Returns a list of information about each virtual CPU.
785#
786# Returns: a list of @CpuInfo for each virtual CPU
787#
788# Since: 0.14.0
789##
790{ 'command': 'query-cpus', 'returns': ['CpuInfo'] }
791
dc3dd0d2
SH
792##
793# @IOThreadInfo:
794#
795# Information about an iothread
796#
797# @id: the identifier of the iothread
798#
799# @thread-id: ID of the underlying host thread
800#
801# Since: 2.0
802##
895a2a80 803{ 'struct': 'IOThreadInfo',
dc3dd0d2
SH
804 'data': {'id': 'str', 'thread-id': 'int'} }
805
806##
807# @query-iothreads:
808#
809# Returns a list of information about each iothread.
810#
811# Note this list excludes the QEMU main loop thread, which is not declared
812# using the -object iothread command-line option. It is always the main thread
813# of the process.
814#
815# Returns: a list of @IOThreadInfo for each iothread
816#
817# Since: 2.0
818##
819{ 'command': 'query-iothreads', 'returns': ['IOThreadInfo'] }
820
2b54aa87 821##
a589569f 822# @NetworkAddressFamily
2b54aa87 823#
a589569f
WX
824# The network address family
825#
826# @ipv4: IPV4 family
827#
828# @ipv6: IPV6 family
829#
830# @unix: unix socket
831#
832# @unknown: otherwise
833#
834# Since: 2.1
835##
836{ 'enum': 'NetworkAddressFamily',
837 'data': [ 'ipv4', 'ipv6', 'unix', 'unknown' ] }
838
839##
840# @VncBasicInfo
2b54aa87 841#
a589569f 842# The basic information for vnc network connection
2b54aa87 843#
a589569f 844# @host: IP address
2b54aa87 845#
2f44a08b
WX
846# @service: The service name of the vnc port. This may depend on the host
847# system's service database so symbolic names should not be relied
848# on.
a589569f
WX
849#
850# @family: address family
851#
4478aa76
GH
852# @websocket: true in case the socket is a websocket (since 2.3).
853#
a589569f
WX
854# Since: 2.1
855##
895a2a80 856{ 'struct': 'VncBasicInfo',
a589569f
WX
857 'data': { 'host': 'str',
858 'service': 'str',
4478aa76
GH
859 'family': 'NetworkAddressFamily',
860 'websocket': 'bool' } }
a589569f
WX
861
862##
863# @VncServerInfo
2b54aa87 864#
a589569f 865# The network connection information for server
2b54aa87 866#
a589569f 867# @auth: #optional, authentication method
2b54aa87 868#
a589569f
WX
869# Since: 2.1
870##
895a2a80 871{ 'struct': 'VncServerInfo',
a589569f
WX
872 'base': 'VncBasicInfo',
873 'data': { '*auth': 'str' } }
874
875##
876# @VncClientInfo:
877#
878# Information about a connected VNC client.
2b54aa87
LC
879#
880# @x509_dname: #optional If x509 authentication is in use, the Distinguished
881# Name of the client.
882#
883# @sasl_username: #optional If SASL authentication is in use, the SASL username
884# used for authentication.
885#
886# Since: 0.14.0
887##
895a2a80 888{ 'struct': 'VncClientInfo',
a589569f 889 'base': 'VncBasicInfo',
2f44a08b 890 'data': { '*x509_dname': 'str', '*sasl_username': 'str' } }
2b54aa87
LC
891
892##
893# @VncInfo:
894#
895# Information about the VNC session.
896#
897# @enabled: true if the VNC server is enabled, false otherwise
898#
899# @host: #optional The hostname the VNC server is bound to. This depends on
900# the name resolution on the host and may be an IP address.
901#
902# @family: #optional 'ipv6' if the host is listening for IPv6 connections
903# 'ipv4' if the host is listening for IPv4 connections
904# 'unix' if the host is listening on a unix domain socket
905# 'unknown' otherwise
906#
907# @service: #optional The service name of the server's port. This may depends
908# on the host system's service database so symbolic names should not
909# be relied on.
910#
911# @auth: #optional the current authentication type used by the server
912# 'none' if no authentication is being used
913# 'vnc' if VNC authentication is being used
914# 'vencrypt+plain' if VEncrypt is used with plain text authentication
915# 'vencrypt+tls+none' if VEncrypt is used with TLS and no authentication
916# 'vencrypt+tls+vnc' if VEncrypt is used with TLS and VNC authentication
917# 'vencrypt+tls+plain' if VEncrypt is used with TLS and plain text auth
918# 'vencrypt+x509+none' if VEncrypt is used with x509 and no auth
919# 'vencrypt+x509+vnc' if VEncrypt is used with x509 and VNC auth
920# 'vencrypt+x509+plain' if VEncrypt is used with x509 and plain text auth
921# 'vencrypt+tls+sasl' if VEncrypt is used with TLS and SASL auth
922# 'vencrypt+x509+sasl' if VEncrypt is used with x509 and SASL auth
923#
924# @clients: a list of @VncClientInfo of all currently connected clients
925#
926# Since: 0.14.0
927##
895a2a80 928{ 'struct': 'VncInfo',
a589569f
WX
929 'data': {'enabled': 'bool', '*host': 'str',
930 '*family': 'NetworkAddressFamily',
2b54aa87
LC
931 '*service': 'str', '*auth': 'str', '*clients': ['VncClientInfo']} }
932
df887684
GH
933##
934# @VncPriAuth:
935#
936# vnc primary authentication method.
937#
938# Since: 2.3
939##
940{ 'enum': 'VncPrimaryAuth',
941 'data': [ 'none', 'vnc', 'ra2', 'ra2ne', 'tight', 'ultra',
942 'tls', 'vencrypt', 'sasl' ] }
943
944##
945# @VncVencryptSubAuth:
946#
947# vnc sub authentication method with vencrypt.
948#
949# Since: 2.3
950##
951{ 'enum': 'VncVencryptSubAuth',
952 'data': [ 'plain',
953 'tls-none', 'x509-none',
954 'tls-vnc', 'x509-vnc',
955 'tls-plain', 'x509-plain',
956 'tls-sasl', 'x509-sasl' ] }
957
958##
959# @VncInfo2:
960#
961# Information about a vnc server
962#
963# @id: vnc server name.
964#
965# @server: A list of @VncBasincInfo describing all listening sockets.
966# The list can be empty (in case the vnc server is disabled).
967# It also may have multiple entries: normal + websocket,
968# possibly also ipv4 + ipv6 in the future.
969#
970# @clients: A list of @VncClientInfo of all currently connected clients.
971# The list can be empty, for obvious reasons.
972#
973# @auth: The current authentication type used by the server
974#
975# @vencrypt: #optional The vencrypt sub authentication type used by the server,
976# only specified in case auth == vencrypt.
977#
978# @display: #optional The display device the vnc server is linked to.
979#
980# Since: 2.3
981##
895a2a80 982{ 'struct': 'VncInfo2',
df887684
GH
983 'data': { 'id' : 'str',
984 'server' : ['VncBasicInfo'],
985 'clients' : ['VncClientInfo'],
986 'auth' : 'VncPrimaryAuth',
987 '*vencrypt' : 'VncVencryptSubAuth',
988 '*display' : 'str' } }
989
2b54aa87
LC
990##
991# @query-vnc:
992#
993# Returns information about the current VNC server
994#
995# Returns: @VncInfo
2b54aa87
LC
996#
997# Since: 0.14.0
998##
999{ 'command': 'query-vnc', 'returns': 'VncInfo' }
1000
df887684
GH
1001##
1002# @query-vnc-servers:
1003#
1004# Returns a list of vnc servers. The list can be empty.
1005#
1006# Returns: a list of @VncInfo2
1007#
1008# Since: 2.3
1009##
1010{ 'command': 'query-vnc-servers', 'returns': ['VncInfo2'] }
1011
d1f29646 1012##
a589569f 1013# @SpiceBasicInfo
d1f29646 1014#
a589569f
WX
1015# The basic information for SPICE network connection
1016#
1017# @host: IP address
d1f29646 1018#
a589569f 1019# @port: port number
d1f29646 1020#
a589569f 1021# @family: address family
d1f29646 1022#
a589569f
WX
1023# Since: 2.1
1024##
895a2a80 1025{ 'struct': 'SpiceBasicInfo',
a589569f
WX
1026 'data': { 'host': 'str',
1027 'port': 'str',
1028 'family': 'NetworkAddressFamily' } }
1029
1030##
1031# @SpiceServerInfo
d1f29646 1032#
a589569f 1033# Information about a SPICE server
d1f29646 1034#
a589569f 1035# @auth: #optional, authentication method
d1f29646 1036#
a589569f
WX
1037# Since: 2.1
1038##
895a2a80 1039{ 'struct': 'SpiceServerInfo',
a589569f
WX
1040 'base': 'SpiceBasicInfo',
1041 'data': { '*auth': 'str' } }
1042
1043##
1044# @SpiceChannel
1045#
1046# Information about a SPICE client channel.
d1f29646
LC
1047#
1048# @connection-id: SPICE connection id number. All channels with the same id
1049# belong to the same SPICE session.
1050#
7e781c79
CR
1051# @channel-type: SPICE channel type number. "1" is the main control
1052# channel, filter for this one if you want to track spice
1053# sessions only
d1f29646 1054#
419e1bdf
AL
1055# @channel-id: SPICE channel ID number. Usually "0", might be different when
1056# multiple channels of the same type exist, such as multiple
d1f29646
LC
1057# display channels in a multihead setup
1058#
1059# @tls: true if the channel is encrypted, false otherwise.
1060#
1061# Since: 0.14.0
1062##
895a2a80 1063{ 'struct': 'SpiceChannel',
a589569f
WX
1064 'base': 'SpiceBasicInfo',
1065 'data': {'connection-id': 'int', 'channel-type': 'int', 'channel-id': 'int',
d1f29646
LC
1066 'tls': 'bool'} }
1067
4efee029
AL
1068##
1069# @SpiceQueryMouseMode
1070#
6932a69b 1071# An enumeration of Spice mouse states.
4efee029
AL
1072#
1073# @client: Mouse cursor position is determined by the client.
1074#
1075# @server: Mouse cursor position is determined by the server.
1076#
1077# @unknown: No information is available about mouse mode used by
1078# the spice server.
1079#
1080# Note: spice/enums.h has a SpiceMouseMode already, hence the name.
1081#
1082# Since: 1.1
1083##
1084{ 'enum': 'SpiceQueryMouseMode',
1085 'data': [ 'client', 'server', 'unknown' ] }
1086
d1f29646
LC
1087##
1088# @SpiceInfo
1089#
1090# Information about the SPICE session.
b80e560b 1091#
d1f29646
LC
1092# @enabled: true if the SPICE server is enabled, false otherwise
1093#
61c4efe2
YH
1094# @migrated: true if the last guest migration completed and spice
1095# migration had completed as well. false otherwise.
1096#
d1f29646
LC
1097# @host: #optional The hostname the SPICE server is bound to. This depends on
1098# the name resolution on the host and may be an IP address.
1099#
1100# @port: #optional The SPICE server's port number.
1101#
1102# @compiled-version: #optional SPICE server version.
1103#
1104# @tls-port: #optional The SPICE server's TLS port number.
1105#
1106# @auth: #optional the current authentication type used by the server
419e1bdf
AL
1107# 'none' if no authentication is being used
1108# 'spice' uses SASL or direct TLS authentication, depending on command
1109# line options
d1f29646 1110#
4efee029
AL
1111# @mouse-mode: The mode in which the mouse cursor is displayed currently. Can
1112# be determined by the client or the server, or unknown if spice
1113# server doesn't provide this information.
1114#
1115# Since: 1.1
1116#
d1f29646
LC
1117# @channels: a list of @SpiceChannel for each active spice channel
1118#
1119# Since: 0.14.0
1120##
895a2a80 1121{ 'struct': 'SpiceInfo',
61c4efe2 1122 'data': {'enabled': 'bool', 'migrated': 'bool', '*host': 'str', '*port': 'int',
d1f29646 1123 '*tls-port': 'int', '*auth': 'str', '*compiled-version': 'str',
4efee029 1124 'mouse-mode': 'SpiceQueryMouseMode', '*channels': ['SpiceChannel']} }
d1f29646
LC
1125
1126##
1127# @query-spice
1128#
1129# Returns information about the current SPICE server
1130#
1131# Returns: @SpiceInfo
1132#
1133# Since: 0.14.0
1134##
1135{ 'command': 'query-spice', 'returns': 'SpiceInfo' }
1136
96637bcd
LC
1137##
1138# @BalloonInfo:
1139#
1140# Information about the guest balloon device.
1141#
1142# @actual: the number of bytes the balloon currently contains
1143#
96637bcd
LC
1144# Since: 0.14.0
1145#
96637bcd 1146##
895a2a80 1147{ 'struct': 'BalloonInfo', 'data': {'actual': 'int' } }
96637bcd
LC
1148
1149##
1150# @query-balloon:
1151#
1152# Return information about the balloon device.
1153#
1154# Returns: @BalloonInfo on success
1155# If the balloon driver is enabled but not functional because the KVM
1156# kernel module cannot support it, KvmMissingCap
1157# If no balloon device is present, DeviceNotActive
1158#
1159# Since: 0.14.0
1160##
1161{ 'command': 'query-balloon', 'returns': 'BalloonInfo' }
1162
79627472
LC
1163##
1164# @PciMemoryRange:
1165#
1166# A PCI device memory region
1167#
1168# @base: the starting address (guest physical)
1169#
1170# @limit: the ending address (guest physical)
1171#
1172# Since: 0.14.0
1173##
895a2a80 1174{ 'struct': 'PciMemoryRange', 'data': {'base': 'int', 'limit': 'int'} }
79627472
LC
1175
1176##
1177# @PciMemoryRegion
1178#
1179# Information about a PCI device I/O region.
1180#
1181# @bar: the index of the Base Address Register for this region
1182#
1183# @type: 'io' if the region is a PIO region
1184# 'memory' if the region is a MMIO region
1185#
1186# @prefetch: #optional if @type is 'memory', true if the memory is prefetchable
1187#
1188# @mem_type_64: #optional if @type is 'memory', true if the BAR is 64-bit
1189#
1190# Since: 0.14.0
1191##
895a2a80 1192{ 'struct': 'PciMemoryRegion',
79627472
LC
1193 'data': {'bar': 'int', 'type': 'str', 'address': 'int', 'size': 'int',
1194 '*prefetch': 'bool', '*mem_type_64': 'bool' } }
1195
1196##
9fa02cd1 1197# @PciBusInfo:
79627472 1198#
9fa02cd1 1199# Information about a bus of a PCI Bridge device
79627472 1200#
9fa02cd1
EB
1201# @number: primary bus interface number. This should be the number of the
1202# bus the device resides on.
79627472 1203#
9fa02cd1
EB
1204# @secondary: secondary bus interface number. This is the number of the
1205# main bus for the bridge
79627472 1206#
9fa02cd1
EB
1207# @subordinate: This is the highest number bus that resides below the
1208# bridge.
79627472 1209#
9fa02cd1 1210# @io_range: The PIO range for all devices on this bridge
79627472 1211#
9fa02cd1 1212# @memory_range: The MMIO range for all devices on this bridge
79627472 1213#
9fa02cd1
EB
1214# @prefetchable_range: The range of prefetchable MMIO for all devices on
1215# this bridge
1216#
1217# Since: 2.4
1218##
1219{ 'struct': 'PciBusInfo',
1220 'data': {'number': 'int', 'secondary': 'int', 'subordinate': 'int',
1221 'io_range': 'PciMemoryRange',
1222 'memory_range': 'PciMemoryRange',
1223 'prefetchable_range': 'PciMemoryRange' } }
1224
1225##
1226# @PciBridgeInfo:
1227#
1228# Information about a PCI Bridge device
1229#
1230# @bus: information about the bus the device resides on
79627472
LC
1231#
1232# @devices: a list of @PciDeviceInfo for each device on this bridge
1233#
1234# Since: 0.14.0
1235##
895a2a80 1236{ 'struct': 'PciBridgeInfo',
9fa02cd1
EB
1237 'data': {'bus': 'PciBusInfo', '*devices': ['PciDeviceInfo']} }
1238
1239##
1240# @PciDeviceClass:
1241#
1242# Information about the Class of a PCI device
1243#
1244# @desc: #optional a string description of the device's class
1245#
1246# @class: the class code of the device
1247#
1248# Since: 2.4
1249##
1250{ 'struct': 'PciDeviceClass',
1251 'data': {'*desc': 'str', 'class': 'int'} }
1252
1253##
1254# @PciDeviceId:
1255#
1256# Information about the Id of a PCI device
1257#
1258# @device: the PCI device id
1259#
1260# @vendor: the PCI vendor id
1261#
1262# Since: 2.4
1263##
1264{ 'struct': 'PciDeviceId',
1265 'data': {'device': 'int', 'vendor': 'int'} }
79627472
LC
1266
1267##
1268# @PciDeviceInfo:
1269#
1270# Information about a PCI device
1271#
1272# @bus: the bus number of the device
1273#
1274# @slot: the slot the device is located in
1275#
1276# @function: the function of the slot used by the device
1277#
9fa02cd1 1278# @class_info: the class of the device
79627472 1279#
9fa02cd1 1280# @id: the PCI device id
79627472
LC
1281#
1282# @irq: #optional if an IRQ is assigned to the device, the IRQ number
1283#
1284# @qdev_id: the device name of the PCI device
1285#
1286# @pci_bridge: if the device is a PCI bridge, the bridge information
1287#
1288# @regions: a list of the PCI I/O regions associated with the device
1289#
1290# Notes: the contents of @class_info.desc are not stable and should only be
1291# treated as informational.
1292#
1293# Since: 0.14.0
1294##
895a2a80 1295{ 'struct': 'PciDeviceInfo',
79627472 1296 'data': {'bus': 'int', 'slot': 'int', 'function': 'int',
9fa02cd1 1297 'class_info': 'PciDeviceClass', 'id': 'PciDeviceId',
79627472
LC
1298 '*irq': 'int', 'qdev_id': 'str', '*pci_bridge': 'PciBridgeInfo',
1299 'regions': ['PciMemoryRegion']} }
1300
1301##
1302# @PciInfo:
1303#
1304# Information about a PCI bus
1305#
1306# @bus: the bus index
1307#
1308# @devices: a list of devices on this bus
1309#
1310# Since: 0.14.0
1311##
895a2a80 1312{ 'struct': 'PciInfo', 'data': {'bus': 'int', 'devices': ['PciDeviceInfo']} }
79627472
LC
1313
1314##
1315# @query-pci:
1316#
1317# Return information about the PCI bus topology of the guest.
1318#
1319# Returns: a list of @PciInfo for each PCI bus
1320#
1321# Since: 0.14.0
1322##
1323{ 'command': 'query-pci', 'returns': ['PciInfo'] }
1324
7a7f325e
LC
1325##
1326# @quit:
1327#
1328# This command will cause the QEMU process to exit gracefully. While every
1329# attempt is made to send the QMP response before terminating, this is not
1330# guaranteed. When using this interface, a premature EOF would not be
1331# unexpected.
1332#
1333# Since: 0.14.0
1334##
1335{ 'command': 'quit' }
5f158f21
LC
1336
1337##
1338# @stop:
1339#
1340# Stop all guest VCPU execution.
1341#
1342# Since: 0.14.0
1343#
1344# Notes: This function will succeed even if the guest is already in the stopped
1e998146
PB
1345# state. In "inmigrate" state, it will ensure that the guest
1346# remains paused once migration finishes, as if the -S option was
1347# passed on the command line.
5f158f21
LC
1348##
1349{ 'command': 'stop' }
38d22653
LC
1350
1351##
1352# @system_reset:
1353#
1354# Performs a hard reset of a guest.
1355#
1356# Since: 0.14.0
1357##
1358{ 'command': 'system_reset' }
5bc465e4
LC
1359
1360##
1361# @system_powerdown:
1362#
1363# Requests that a guest perform a powerdown operation.
1364#
1365# Since: 0.14.0
1366#
1367# Notes: A guest may or may not respond to this command. This command
1368# returning does not indicate that a guest has accepted the request or
1369# that it has shut down. Many guests will respond to this command by
1370# prompting the user in some way.
1371##
1372{ 'command': 'system_powerdown' }
755f1968
LC
1373
1374##
1375# @cpu:
1376#
1377# This command is a nop that is only provided for the purposes of compatibility.
1378#
1379# Since: 0.14.0
1380#
1381# Notes: Do not use this command.
1382##
1383{ 'command': 'cpu', 'data': {'index': 'int'} }
0cfd6a9a 1384
69ca3ea5
IM
1385##
1386# @cpu-add
1387#
1388# Adds CPU with specified ID
1389#
1390# @id: ID of CPU to be created, valid values [0..max_cpus)
1391#
1392# Returns: Nothing on success
1393#
1394# Since 1.5
1395##
1396{ 'command': 'cpu-add', 'data': {'id': 'int'} }
1397
0cfd6a9a
LC
1398##
1399# @memsave:
1400#
1401# Save a portion of guest memory to a file.
1402#
1403# @val: the virtual address of the guest to start from
1404#
1405# @size: the size of memory region to save
1406#
1407# @filename: the file to save the memory to as binary data
1408#
1409# @cpu-index: #optional the index of the virtual CPU to use for translating the
1410# virtual address (defaults to CPU 0)
1411#
1412# Returns: Nothing on success
0cfd6a9a
LC
1413#
1414# Since: 0.14.0
1415#
1416# Notes: Errors were not reliably returned until 1.1
1417##
1418{ 'command': 'memsave',
1419 'data': {'val': 'int', 'size': 'int', 'filename': 'str', '*cpu-index': 'int'} }
6d3962bf
LC
1420
1421##
1422# @pmemsave:
1423#
1424# Save a portion of guest physical memory to a file.
1425#
1426# @val: the physical address of the guest to start from
1427#
1428# @size: the size of memory region to save
1429#
1430# @filename: the file to save the memory to as binary data
1431#
1432# Returns: Nothing on success
6d3962bf
LC
1433#
1434# Since: 0.14.0
1435#
1436# Notes: Errors were not reliably returned until 1.1
1437##
1438{ 'command': 'pmemsave',
1439 'data': {'val': 'int', 'size': 'int', 'filename': 'str'} }
e42e818b
LC
1440
1441##
1442# @cont:
1443#
1444# Resume guest VCPU execution.
1445#
1446# Since: 0.14.0
1447#
1448# Returns: If successful, nothing
e42e818b
LC
1449# If QEMU was started with an encrypted block device and a key has
1450# not yet been set, DeviceEncrypted.
1451#
1e998146
PB
1452# Notes: This command will succeed if the guest is currently running. It
1453# will also succeed if the guest is in the "inmigrate" state; in
1454# this case, the effect of the command is to make sure the guest
1455# starts once migration finishes, removing the effect of the -S
1456# command line option if it was passed.
e42e818b
LC
1457##
1458{ 'command': 'cont' }
1459
9b9df25a
GH
1460##
1461# @system_wakeup:
1462#
1463# Wakeup guest from suspend. Does nothing in case the guest isn't suspended.
1464#
1465# Since: 1.1
1466#
1467# Returns: nothing.
1468##
1469{ 'command': 'system_wakeup' }
1470
ab49ab5c
LC
1471##
1472# @inject-nmi:
1473#
9cb805fd 1474# Injects a Non-Maskable Interrupt into the default CPU (x86/s390) or all CPUs (ppc64).
ab49ab5c
LC
1475#
1476# Returns: If successful, nothing
ab49ab5c
LC
1477#
1478# Since: 0.14.0
1479#
9cb805fd 1480# Note: prior to 2.1, this command was only supported for x86 and s390 VMs
ab49ab5c
LC
1481##
1482{ 'command': 'inject-nmi' }
4b37156c
LC
1483
1484##
1485# @set_link:
1486#
1487# Sets the link status of a virtual network adapter.
1488#
1489# @name: the device name of the virtual network adapter
1490#
1491# @up: true to set the link status to be up
1492#
1493# Returns: Nothing on success
1494# If @name is not a valid network device, DeviceNotFound
1495#
1496# Since: 0.14.0
1497#
1498# Notes: Not all network adapters support setting link status. This command
1499# will succeed even if the network adapter does not support link status
1500# notification.
1501##
1502{ 'command': 'set_link', 'data': {'name': 'str', 'up': 'bool'} }
a4dea8a9 1503
d72f3264
LC
1504##
1505# @balloon:
1506#
1507# Request the balloon driver to change its balloon size.
1508#
1509# @value: the target size of the balloon in bytes
1510#
1511# Returns: Nothing on success
1512# If the balloon driver is enabled but not functional because the KVM
1513# kernel module cannot support it, KvmMissingCap
1514# If no balloon device is present, DeviceNotActive
1515#
1516# Notes: This command just issues a request to the guest. When it returns,
1517# the balloon size may not have changed. A guest can change the balloon
1518# size independent of this command.
1519#
1520# Since: 0.14.0
1521##
1522{ 'command': 'balloon', 'data': {'value': 'int'} }
5e7caacb 1523
78b18b78
SH
1524##
1525# @Abort
1526#
1527# This action can be used to test transaction failure.
1528#
1529# Since: 1.6
1530###
895a2a80 1531{ 'struct': 'Abort',
78b18b78
SH
1532 'data': { } }
1533
8802d1fd 1534##
c8a83e85 1535# @TransactionAction
8802d1fd 1536#
52e7c241
PB
1537# A discriminated record of operations that can be performed with
1538# @transaction.
b7b9d39a
FZ
1539#
1540# Since 1.1
1541#
1542# drive-backup since 1.6
1543# abort since 1.6
1544# blockdev-snapshot-internal-sync since 1.7
bd8baecd 1545# blockdev-backup since 2.3
8802d1fd 1546##
c8a83e85 1547{ 'union': 'TransactionAction',
52e7c241 1548 'data': {
3037f364 1549 'blockdev-snapshot-sync': 'BlockdevSnapshot',
78b18b78 1550 'drive-backup': 'DriveBackup',
bd8baecd 1551 'blockdev-backup': 'BlockdevBackup',
bbe86010
WX
1552 'abort': 'Abort',
1553 'blockdev-snapshot-internal-sync': 'BlockdevSnapshotInternal'
52e7c241 1554 } }
8802d1fd
JC
1555
1556##
52e7c241 1557# @transaction
8802d1fd 1558#
c8a83e85
KW
1559# Executes a number of transactionable QMP commands atomically. If any
1560# operation fails, then the entire set of actions will be abandoned and the
1561# appropriate error returned.
8802d1fd
JC
1562#
1563# List of:
c8a83e85 1564# @TransactionAction: information needed for the respective operation
8802d1fd
JC
1565#
1566# Returns: nothing on success
c8a83e85 1567# Errors depend on the operations of the transaction
8802d1fd 1568#
c8a83e85
KW
1569# Note: The transaction aborts on the first failure. Therefore, there will be
1570# information on only one failed operation returned in an error condition, and
52e7c241
PB
1571# subsequent actions will not have been attempted.
1572#
1573# Since 1.1
8802d1fd 1574##
52e7c241 1575{ 'command': 'transaction',
c8a83e85 1576 'data': { 'actions': [ 'TransactionAction' ] } }
8802d1fd 1577
d51a67b4
LC
1578##
1579# @human-monitor-command:
1580#
1581# Execute a command on the human monitor and return the output.
1582#
1583# @command-line: the command to execute in the human monitor
1584#
1585# @cpu-index: #optional The CPU to use for commands that require an implicit CPU
1586#
1587# Returns: the output of the command as a string
1588#
1ad166b6 1589# Since: 0.14.0
08e4ed6c 1590#
1ad166b6
BC
1591# Notes: This command only exists as a stop-gap. Its use is highly
1592# discouraged. The semantics of this command are not guaranteed.
b952b558 1593#
1ad166b6 1594# Known limitations:
b952b558 1595#
1ad166b6
BC
1596# o This command is stateless, this means that commands that depend
1597# on state information (such as getfd) might not work
d9b902db 1598#
1ad166b6
BC
1599# o Commands that prompt the user for data (eg. 'cont' when the block
1600# device is encrypted) don't currently work
d9b902db 1601##
1ad166b6
BC
1602{ 'command': 'human-monitor-command',
1603 'data': {'command-line': 'str', '*cpu-index': 'int'},
1604 'returns': 'str' }
d9b902db
PB
1605
1606##
6cdedb07
LC
1607# @migrate_cancel
1608#
1609# Cancel the current executing migration process.
1610#
1611# Returns: nothing on success
1612#
1613# Notes: This command succeeds even if there is no migration process running.
1614#
1615# Since: 0.14.0
1616##
1617{ 'command': 'migrate_cancel' }
4f0a993b
LC
1618
1619##
1620# @migrate_set_downtime
1621#
1622# Set maximum tolerated downtime for migration.
1623#
1624# @value: maximum downtime in seconds
1625#
1626# Returns: nothing on success
1627#
1628# Since: 0.14.0
1629##
1630{ 'command': 'migrate_set_downtime', 'data': {'value': 'number'} }
3dc85383
LC
1631
1632##
1633# @migrate_set_speed
1634#
1635# Set maximum speed for migration.
1636#
1637# @value: maximum speed in bytes.
1638#
1639# Returns: nothing on success
1640#
1641# Notes: A value lesser than zero will be automatically round up to zero.
1642#
1643# Since: 0.14.0
1644##
1645{ 'command': 'migrate_set_speed', 'data': {'value': 'int'} }
b4b12c62 1646
9e1ba4cc
OW
1647##
1648# @migrate-set-cache-size
1649#
1650# Set XBZRLE cache size
1651#
1652# @value: cache size in bytes
1653#
1654# The size will be rounded down to the nearest power of 2.
1655# The cache size can be modified before and during ongoing migration
1656#
1657# Returns: nothing on success
1658#
1659# Since: 1.2
1660##
1661{ 'command': 'migrate-set-cache-size', 'data': {'value': 'int'} }
1662
1663##
1664# @query-migrate-cache-size
1665#
1666# query XBZRLE cache size
1667#
1668# Returns: XBZRLE cache size in bytes
1669#
1670# Since: 1.2
1671##
1672{ 'command': 'query-migrate-cache-size', 'returns': 'int' }
1673
b4b12c62 1674##
d03ee401 1675# @ObjectPropertyInfo:
b4b12c62
AL
1676#
1677# @name: the name of the property
1678#
1679# @type: the type of the property. This will typically come in one of four
1680# forms:
1681#
1682# 1) A primitive type such as 'u8', 'u16', 'bool', 'str', or 'double'.
1683# These types are mapped to the appropriate JSON type.
1684#
33b23b4b 1685# 2) A child type in the form 'child<subtype>' where subtype is a qdev
b4b12c62
AL
1686# device type name. Child properties create the composition tree.
1687#
33b23b4b 1688# 3) A link type in the form 'link<subtype>' where subtype is a qdev
b4b12c62
AL
1689# device type name. Link properties form the device model graph.
1690#
51920820 1691# Since: 1.2
b4b12c62 1692##
895a2a80 1693{ 'struct': 'ObjectPropertyInfo',
b4b12c62
AL
1694 'data': { 'name': 'str', 'type': 'str' } }
1695
1696##
1697# @qom-list:
1698#
57c9fafe 1699# This command will list any properties of a object given a path in the object
b4b12c62
AL
1700# model.
1701#
57c9fafe 1702# @path: the path within the object model. See @qom-get for a description of
b4b12c62
AL
1703# this parameter.
1704#
57c9fafe
AL
1705# Returns: a list of @ObjectPropertyInfo that describe the properties of the
1706# object.
b4b12c62 1707#
51920820 1708# Since: 1.2
b4b12c62
AL
1709##
1710{ 'command': 'qom-list',
1711 'data': { 'path': 'str' },
57c9fafe 1712 'returns': [ 'ObjectPropertyInfo' ] }
eb6e8ea5
AL
1713
1714##
1715# @qom-get:
1716#
57c9fafe 1717# This command will get a property from a object model path and return the
eb6e8ea5
AL
1718# value.
1719#
57c9fafe 1720# @path: The path within the object model. There are two forms of supported
eb6e8ea5
AL
1721# paths--absolute and partial paths.
1722#
57c9fafe 1723# Absolute paths are derived from the root object and can follow child<>
eb6e8ea5
AL
1724# or link<> properties. Since they can follow link<> properties, they
1725# can be arbitrarily long. Absolute paths look like absolute filenames
1726# and are prefixed with a leading slash.
1727#
1728# Partial paths look like relative filenames. They do not begin
1729# with a prefix. The matching rules for partial paths are subtle but
57c9fafe 1730# designed to make specifying objects easy. At each level of the
eb6e8ea5
AL
1731# composition tree, the partial path is matched as an absolute path.
1732# The first match is not returned. At least two matches are searched
1733# for. A successful result is only returned if only one match is
1734# found. If more than one match is found, a flag is return to
1735# indicate that the match was ambiguous.
1736#
1737# @property: The property name to read
1738#
33b23b4b
MAL
1739# Returns: The property value. The type depends on the property
1740# type. child<> and link<> properties are returned as #str
1741# pathnames. All integer property types (u8, u16, etc) are
1742# returned as #int.
eb6e8ea5 1743#
51920820 1744# Since: 1.2
eb6e8ea5
AL
1745##
1746{ 'command': 'qom-get',
1747 'data': { 'path': 'str', 'property': 'str' },
6eb3937e 1748 'returns': 'any' }
eb6e8ea5
AL
1749
1750##
1751# @qom-set:
1752#
57c9fafe 1753# This command will set a property from a object model path.
eb6e8ea5
AL
1754#
1755# @path: see @qom-get for a description of this parameter
1756#
1757# @property: the property name to set
1758#
1759# @value: a value who's type is appropriate for the property type. See @qom-get
1760# for a description of type mapping.
1761#
51920820 1762# Since: 1.2
eb6e8ea5
AL
1763##
1764{ 'command': 'qom-set',
6eb3937e 1765 'data': { 'path': 'str', 'property': 'str', 'value': 'any' } }
fbf796fd
LC
1766
1767##
1768# @set_password:
1769#
1770# Sets the password of a remote display session.
1771#
1772# @protocol: `vnc' to modify the VNC server password
1773# `spice' to modify the Spice server password
1774#
1775# @password: the new password
1776#
1777# @connected: #optional how to handle existing clients when changing the
b80e560b 1778# password. If nothing is specified, defaults to `keep'
fbf796fd
LC
1779# `fail' to fail the command if clients are connected
1780# `disconnect' to disconnect existing clients
1781# `keep' to maintain existing clients
1782#
1783# Returns: Nothing on success
1784# If Spice is not enabled, DeviceNotFound
fbf796fd
LC
1785#
1786# Since: 0.14.0
1787##
1788{ 'command': 'set_password',
1789 'data': {'protocol': 'str', 'password': 'str', '*connected': 'str'} }
9ad5372d
LC
1790
1791##
1792# @expire_password:
1793#
1794# Expire the password of a remote display server.
1795#
1796# @protocol: the name of the remote display protocol `vnc' or `spice'
1797#
1798# @time: when to expire the password.
1799# `now' to expire the password immediately
1800# `never' to cancel password expiration
1801# `+INT' where INT is the number of seconds from now (integer)
1802# `INT' where INT is the absolute time in seconds
1803#
1804# Returns: Nothing on success
1805# If @protocol is `spice' and Spice is not active, DeviceNotFound
9ad5372d
LC
1806#
1807# Since: 0.14.0
1808#
1809# Notes: Time is relative to the server and currently there is no way to
1810# coordinate server time with client time. It is not recommended to
1811# use the absolute time version of the @time parameter unless you're
1812# sure you are on the same machine as the QEMU instance.
1813##
1814{ 'command': 'expire_password', 'data': {'protocol': 'str', 'time': 'str'} }
c245b6a3 1815
270b243f
LC
1816##
1817# @change-vnc-password:
1818#
1819# Change the VNC server password.
1820#
1c854067 1821# @password: the new password to use with VNC authentication
270b243f
LC
1822#
1823# Since: 1.1
1824#
1825# Notes: An empty password in this command will set the password to the empty
1826# string. Existing clients are unaffected by executing this command.
1827##
1828{ 'command': 'change-vnc-password', 'data': {'password': 'str'} }
333a96ec
LC
1829
1830##
1831# @change:
1832#
1833# This command is multiple commands multiplexed together.
1834#
1835# @device: This is normally the name of a block device but it may also be 'vnc'.
1836# when it's 'vnc', then sub command depends on @target
1837#
1838# @target: If @device is a block device, then this is the new filename.
1839# If @device is 'vnc', then if the value 'password' selects the vnc
1840# change password command. Otherwise, this specifies a new server URI
1841# address to listen to for VNC connections.
1842#
1843# @arg: If @device is a block device, then this is an optional format to open
1844# the device with.
1845# If @device is 'vnc' and @target is 'password', this is the new VNC
1846# password to set. If this argument is an empty string, then no future
1847# logins will be allowed.
1848#
1849# Returns: Nothing on success.
1850# If @device is not a valid block device, DeviceNotFound
333a96ec
LC
1851# If the new block device is encrypted, DeviceEncrypted. Note that
1852# if this error is returned, the device has been opened successfully
1853# and an additional call to @block_passwd is required to set the
1854# device's password. The behavior of reads and writes to the block
1855# device between when these calls are executed is undefined.
1856#
1857# Notes: It is strongly recommended that this interface is not used especially
1858# for changing block devices.
1859#
1860# Since: 0.14.0
1861##
1862{ 'command': 'change',
1863 'data': {'device': 'str', 'target': 'str', '*arg': 'str'} }
80047da5 1864
5eeee3fa
AL
1865##
1866# @ObjectTypeInfo:
1867#
1868# This structure describes a search result from @qom-list-types
1869#
1870# @name: the type name found in the search
1871#
1872# Since: 1.1
1873#
1874# Notes: This command is experimental and may change syntax in future releases.
1875##
895a2a80 1876{ 'struct': 'ObjectTypeInfo',
5eeee3fa
AL
1877 'data': { 'name': 'str' } }
1878
1879##
1880# @qom-list-types:
1881#
1882# This command will return a list of types given search parameters
1883#
1884# @implements: if specified, only return types that implement this type name
1885#
1886# @abstract: if true, include abstract types in the results
1887#
1888# Returns: a list of @ObjectTypeInfo or an empty list if no results are found
1889#
1890# Since: 1.1
5eeee3fa
AL
1891##
1892{ 'command': 'qom-list-types',
1893 'data': { '*implements': 'str', '*abstract': 'bool' },
1894 'returns': [ 'ObjectTypeInfo' ] }
e1c37d0e 1895
1daa31b9
AL
1896##
1897# @DevicePropertyInfo:
1898#
1899# Information about device properties.
1900#
1901# @name: the name of the property
1902# @type: the typename of the property
07d09c58
GA
1903# @description: #optional if specified, the description of the property.
1904# (since 2.2)
1daa31b9
AL
1905#
1906# Since: 1.2
1907##
895a2a80 1908{ 'struct': 'DevicePropertyInfo',
07d09c58 1909 'data': { 'name': 'str', 'type': 'str', '*description': 'str' } }
1daa31b9
AL
1910
1911##
1912# @device-list-properties:
1913#
1914# List properties associated with a device.
1915#
1916# @typename: the type name of a device
1917#
1918# Returns: a list of DevicePropertyInfo describing a devices properties
1919#
1920# Since: 1.2
1921##
1922{ 'command': 'device-list-properties',
1923 'data': { 'typename': 'str'},
1924 'returns': [ 'DevicePropertyInfo' ] }
1925
e1c37d0e
LC
1926##
1927# @migrate
1928#
1929# Migrates the current running guest to another Virtual Machine.
1930#
1931# @uri: the Uniform Resource Identifier of the destination VM
1932#
1933# @blk: #optional do block migration (full disk copy)
1934#
1935# @inc: #optional incremental disk copy migration
1936#
1937# @detach: this argument exists only for compatibility reasons and
1938# is ignored by QEMU
1939#
1940# Returns: nothing on success
1941#
1942# Since: 0.14.0
1943##
1944{ 'command': 'migrate',
1945 'data': {'uri': 'str', '*blk': 'bool', '*inc': 'bool', '*detach': 'bool' } }
33cf629a 1946
bf1ae1f4
DDAG
1947##
1948# @migrate-incoming
1949#
1950# Start an incoming migration, the qemu must have been started
1951# with -incoming defer
1952#
1953# @uri: The Uniform Resource Identifier identifying the source or
1954# address to listen on
1955#
1956# Returns: nothing on success
1957#
1958# Since: 2.3
d8760534
DDAG
1959# Note: It's a bad idea to use a string for the uri, but it needs to stay
1960# compatible with -incoming and the format of the uri is already exposed
1961# above libvirt
bf1ae1f4
DDAG
1962##
1963{ 'command': 'migrate-incoming', 'data': {'uri': 'str' } }
1964
a7ae8355
SS
1965# @xen-save-devices-state:
1966#
1967# Save the state of all devices to file. The RAM and the block devices
1968# of the VM are not saved by this command.
1969#
1970# @filename: the file to save the state of the devices to as binary
1971# data. See xen-save-devices-state.txt for a description of the binary
1972# format.
1973#
1974# Returns: Nothing on success
a7ae8355
SS
1975#
1976# Since: 1.1
1977##
1978{ 'command': 'xen-save-devices-state', 'data': {'filename': 'str'} }
a15fef21 1979
39f42439
AP
1980##
1981# @xen-set-global-dirty-log
1982#
1983# Enable or disable the global dirty log mode.
1984#
1985# @enable: true to enable, false to disable.
1986#
1987# Returns: nothing
1988#
1989# Since: 1.3
1990##
1991{ 'command': 'xen-set-global-dirty-log', 'data': { 'enable': 'bool' } }
1992
a15fef21
LC
1993##
1994# @device_del:
1995#
1996# Remove a device from a guest
1997#
6287d827 1998# @id: the name or QOM path of the device
a15fef21
LC
1999#
2000# Returns: Nothing on success
2001# If @id is not a valid device, DeviceNotFound
a15fef21
LC
2002#
2003# Notes: When this command completes, the device may not be removed from the
2004# guest. Hot removal is an operation that requires guest cooperation.
2005# This command merely requests that the guest begin the hot removal
0402a5d6
MT
2006# process. Completion of the device removal process is signaled with a
2007# DEVICE_DELETED event. Guest reset will automatically complete removal
2008# for all devices.
a15fef21
LC
2009#
2010# Since: 0.14.0
2011##
2012{ 'command': 'device_del', 'data': {'id': 'str'} }
783e9b48 2013
b53ccc30
QN
2014##
2015# @DumpGuestMemoryFormat:
2016#
2017# An enumeration of guest-memory-dump's format.
2018#
2019# @elf: elf format
2020#
2021# @kdump-zlib: kdump-compressed format with zlib-compressed
2022#
2023# @kdump-lzo: kdump-compressed format with lzo-compressed
2024#
2025# @kdump-snappy: kdump-compressed format with snappy-compressed
2026#
2027# Since: 2.0
2028##
2029{ 'enum': 'DumpGuestMemoryFormat',
2030 'data': [ 'elf', 'kdump-zlib', 'kdump-lzo', 'kdump-snappy' ] }
2031
783e9b48
WC
2032##
2033# @dump-guest-memory
2034#
2035# Dump guest's memory to vmcore. It is a synchronous operation that can take
2036# very long depending on the amount of guest memory. This command is only
f5b0d93b
LC
2037# supported on i386 and x86_64.
2038#
2039# @paging: if true, do paging to get guest's memory mapping. This allows
d691180e 2040# using gdb to process the core file.
f5b0d93b 2041#
d691180e
LC
2042# IMPORTANT: this option can make QEMU allocate several gigabytes
2043# of RAM. This can happen for a large guest, or a
2044# malicious guest pretending to be large.
2045#
2046# Also, paging=true has the following limitations:
2047#
2048# 1. The guest may be in a catastrophic state or can have corrupted
2049# memory, which cannot be trusted
2050# 2. The guest can be in real-mode even if paging is enabled. For
2051# example, the guest uses ACPI to sleep, and ACPI sleep state
2052# goes in real-mode
f5b0d93b 2053#
783e9b48 2054# @protocol: the filename or file descriptor of the vmcore. The supported
d691180e 2055# protocols are:
f5b0d93b 2056#
d691180e
LC
2057# 1. file: the protocol starts with "file:", and the following
2058# string is the file's path.
2059# 2. fd: the protocol starts with "fd:", and the following string
2060# is the fd's name.
f5b0d93b 2061#
783e9b48 2062# @begin: #optional if specified, the starting physical address.
f5b0d93b 2063#
783e9b48 2064# @length: #optional if specified, the memory size, in bytes. If you don't
d691180e
LC
2065# want to dump all guest's memory, please specify the start @begin
2066# and @length
783e9b48 2067#
b53ccc30
QN
2068# @format: #optional if specified, the format of guest memory dump. But non-elf
2069# format is conflict with paging and filter, ie. @paging, @begin and
2070# @length is not allowed to be specified with non-elf @format at the
2071# same time (since 2.0)
2072#
783e9b48 2073# Returns: nothing on success
783e9b48
WC
2074#
2075# Since: 1.2
2076##
2077{ 'command': 'dump-guest-memory',
2078 'data': { 'paging': 'bool', 'protocol': 'str', '*begin': 'int',
b53ccc30 2079 '*length': 'int', '*format': 'DumpGuestMemoryFormat' } }
d691180e 2080
7d6dc7f3
QN
2081##
2082# @DumpGuestMemoryCapability:
2083#
2084# A list of the available formats for dump-guest-memory
2085#
2086# Since: 2.0
2087##
895a2a80 2088{ 'struct': 'DumpGuestMemoryCapability',
7d6dc7f3
QN
2089 'data': {
2090 'formats': ['DumpGuestMemoryFormat'] } }
2091
2092##
2093# @query-dump-guest-memory-capability:
2094#
2095# Returns the available formats for dump-guest-memory
2096#
2097# Returns: A @DumpGuestMemoryCapability object listing available formats for
2098# dump-guest-memory
2099#
2100# Since: 2.0
2101##
2102{ 'command': 'query-dump-guest-memory-capability',
2103 'returns': 'DumpGuestMemoryCapability' }
d691180e 2104
7ee0c3e3
JH
2105##
2106# @dump-skeys
2107#
2108# Dump guest's storage keys
2109#
2110# @filename: the path to the file to dump to
2111#
2112# This command is only supported on s390 architecture.
2113#
2114# Since: 2.5
2115##
2116{ 'command': 'dump-skeys',
2117 'data': { 'filename': 'str' } }
2118
928059a3
LC
2119##
2120# @netdev_add:
2121#
2122# Add a network backend.
2123#
2124# @type: the type of network backend. Current valid values are 'user', 'tap',
2125# 'vde', 'socket', 'dump' and 'bridge'
2126#
2127# @id: the name of the new network backend
2128#
b8a98326 2129# Additional arguments depend on the type.
928059a3 2130#
b8a98326
MA
2131# TODO This command effectively bypasses QAPI completely due to its
2132# "additional arguments" business. It shouldn't have been added to
2133# the schema in this form. It should be qapified properly, or
2134# replaced by a properly qapified command.
928059a3
LC
2135#
2136# Since: 0.14.0
2137#
2138# Returns: Nothing on success
2139# If @type is not a valid network backend, DeviceNotFound
928059a3
LC
2140##
2141{ 'command': 'netdev_add',
b8a98326
MA
2142 'data': {'type': 'str', 'id': 'str'},
2143 'gen': false } # so we can get the additional arguments
5f964155
LC
2144
2145##
2146# @netdev_del:
2147#
2148# Remove a network backend.
2149#
2150# @id: the name of the network backend to remove
2151#
2152# Returns: Nothing on success
2153# If @id is not a valid network backend, DeviceNotFound
2154#
2155# Since: 0.14.0
2156##
2157{ 'command': 'netdev_del', 'data': {'id': 'str'} }
208c9d1b 2158
cff8b2c6
PB
2159##
2160# @object-add:
2161#
2162# Create a QOM object.
2163#
2164# @qom-type: the class name for the object to be created
2165#
2166# @id: the name of the new object
2167#
2168# @props: #optional a dictionary of properties to be passed to the backend
2169#
2170# Returns: Nothing on success
2171# Error if @qom-type is not a valid class name
2172#
2173# Since: 2.0
2174##
2175{ 'command': 'object-add',
6eb3937e 2176 'data': {'qom-type': 'str', 'id': 'str', '*props': 'any'} }
cff8b2c6 2177
ab2d0531
PB
2178##
2179# @object-del:
2180#
2181# Remove a QOM object.
2182#
2183# @id: the name of the QOM object to remove
2184#
2185# Returns: Nothing on success
2186# Error if @id is not a valid id for a QOM object
2187#
2188# Since: 2.0
2189##
2190{ 'command': 'object-del', 'data': {'id': 'str'} }
2191
14aa0c2d
LE
2192##
2193# @NetdevNoneOptions
2194#
2195# Use it alone to have zero network devices.
2196#
2197# Since 1.2
2198##
895a2a80 2199{ 'struct': 'NetdevNoneOptions',
14aa0c2d
LE
2200 'data': { } }
2201
2202##
2203# @NetLegacyNicOptions
2204#
2205# Create a new Network Interface Card.
2206#
2207# @netdev: #optional id of -netdev to connect to
2208#
2209# @macaddr: #optional MAC address
2210#
2211# @model: #optional device model (e1000, rtl8139, virtio etc.)
2212#
2213# @addr: #optional PCI device address
2214#
2215# @vectors: #optional number of MSI-x vectors, 0 to disable MSI-X
2216#
2217# Since 1.2
2218##
895a2a80 2219{ 'struct': 'NetLegacyNicOptions',
14aa0c2d
LE
2220 'data': {
2221 '*netdev': 'str',
2222 '*macaddr': 'str',
2223 '*model': 'str',
2224 '*addr': 'str',
2225 '*vectors': 'uint32' } }
2226
2227##
2228# @String
2229#
2230# A fat type wrapping 'str', to be embedded in lists.
2231#
2232# Since 1.2
2233##
895a2a80 2234{ 'struct': 'String',
14aa0c2d
LE
2235 'data': {
2236 'str': 'str' } }
2237
2238##
2239# @NetdevUserOptions
2240#
2241# Use the user mode network stack which requires no administrator privilege to
2242# run.
2243#
2244# @hostname: #optional client hostname reported by the builtin DHCP server
2245#
2246# @restrict: #optional isolate the guest from the host
2247#
2248# @ip: #optional legacy parameter, use net= instead
2249#
2250# @net: #optional IP address and optional netmask
2251#
2252# @host: #optional guest-visible address of the host
2253#
2254# @tftp: #optional root directory of the built-in TFTP server
2255#
2256# @bootfile: #optional BOOTP filename, for use with tftp=
2257#
2258# @dhcpstart: #optional the first of the 16 IPs the built-in DHCP server can
2259# assign
2260#
2261# @dns: #optional guest-visible address of the virtual nameserver
2262#
63d2960b
KS
2263# @dnssearch: #optional list of DNS suffixes to search, passed as DHCP option
2264# to the guest
2265#
14aa0c2d
LE
2266# @smb: #optional root directory of the built-in SMB server
2267#
2268# @smbserver: #optional IP address of the built-in SMB server
2269#
2270# @hostfwd: #optional redirect incoming TCP or UDP host connections to guest
2271# endpoints
2272#
2273# @guestfwd: #optional forward guest TCP connections
2274#
2275# Since 1.2
2276##
895a2a80 2277{ 'struct': 'NetdevUserOptions',
14aa0c2d
LE
2278 'data': {
2279 '*hostname': 'str',
2280 '*restrict': 'bool',
2281 '*ip': 'str',
2282 '*net': 'str',
2283 '*host': 'str',
2284 '*tftp': 'str',
2285 '*bootfile': 'str',
2286 '*dhcpstart': 'str',
2287 '*dns': 'str',
63d2960b 2288 '*dnssearch': ['String'],
14aa0c2d
LE
2289 '*smb': 'str',
2290 '*smbserver': 'str',
2291 '*hostfwd': ['String'],
2292 '*guestfwd': ['String'] } }
2293
2294##
2295# @NetdevTapOptions
2296#
2297# Connect the host TAP network interface name to the VLAN.
2298#
2299# @ifname: #optional interface name
2300#
2301# @fd: #optional file descriptor of an already opened tap
2302#
2ca81baa
JW
2303# @fds: #optional multiple file descriptors of already opened multiqueue capable
2304# tap
2305#
14aa0c2d
LE
2306# @script: #optional script to initialize the interface
2307#
2308# @downscript: #optional script to shut down the interface
2309#
2310# @helper: #optional command to execute to configure bridge
2311#
2312# @sndbuf: #optional send buffer limit. Understands [TGMKkb] suffixes.
2313#
2314# @vnet_hdr: #optional enable the IFF_VNET_HDR flag on the tap interface
2315#
2316# @vhost: #optional enable vhost-net network accelerator
2317#
2318# @vhostfd: #optional file descriptor of an already opened vhost net device
2319#
2ca81baa
JW
2320# @vhostfds: #optional file descriptors of multiple already opened vhost net
2321# devices
2322#
14aa0c2d
LE
2323# @vhostforce: #optional vhost on for non-MSIX virtio guests
2324#
ec396014
JW
2325# @queues: #optional number of queues to be created for multiqueue capable tap
2326#
14aa0c2d
LE
2327# Since 1.2
2328##
895a2a80 2329{ 'struct': 'NetdevTapOptions',
14aa0c2d
LE
2330 'data': {
2331 '*ifname': 'str',
2332 '*fd': 'str',
264986e2 2333 '*fds': 'str',
14aa0c2d
LE
2334 '*script': 'str',
2335 '*downscript': 'str',
2336 '*helper': 'str',
2337 '*sndbuf': 'size',
2338 '*vnet_hdr': 'bool',
2339 '*vhost': 'bool',
2340 '*vhostfd': 'str',
264986e2
JW
2341 '*vhostfds': 'str',
2342 '*vhostforce': 'bool',
2343 '*queues': 'uint32'} }
14aa0c2d
LE
2344
2345##
2346# @NetdevSocketOptions
2347#
2348# Connect the VLAN to a remote VLAN in another QEMU virtual machine using a TCP
2349# socket connection.
2350#
2351# @fd: #optional file descriptor of an already opened socket
2352#
2353# @listen: #optional port number, and optional hostname, to listen on
2354#
2355# @connect: #optional port number, and optional hostname, to connect to
2356#
2357# @mcast: #optional UDP multicast address and port number
2358#
2359# @localaddr: #optional source address and port for multicast and udp packets
2360#
2361# @udp: #optional UDP unicast address and port number
2362#
2363# Since 1.2
2364##
895a2a80 2365{ 'struct': 'NetdevSocketOptions',
14aa0c2d
LE
2366 'data': {
2367 '*fd': 'str',
2368 '*listen': 'str',
2369 '*connect': 'str',
2370 '*mcast': 'str',
2371 '*localaddr': 'str',
2372 '*udp': 'str' } }
2373
3fb69aa1
AI
2374##
2375# @NetdevL2TPv3Options
2376#
2377# Connect the VLAN to Ethernet over L2TPv3 Static tunnel
2378#
2379# @src: source address
2380#
2381# @dst: destination address
2382#
2383# @srcport: #optional source port - mandatory for udp, optional for ip
2384#
2385# @dstport: #optional destination port - mandatory for udp, optional for ip
2386#
2387# @ipv6: #optional - force the use of ipv6
2388#
2389# @udp: #optional - use the udp version of l2tpv3 encapsulation
2390#
2391# @cookie64: #optional - use 64 bit coookies
2392#
2393# @counter: #optional have sequence counter
2394#
2395# @pincounter: #optional pin sequence counter to zero -
2396# workaround for buggy implementations or
2397# networks with packet reorder
2398#
2399# @txcookie: #optional 32 or 64 bit transmit cookie
2400#
2401# @rxcookie: #optional 32 or 64 bit receive cookie
2402#
2403# @txsession: 32 bit transmit session
2404#
2405# @rxsession: #optional 32 bit receive session - if not specified
2406# set to the same value as transmit
2407#
2408# @offset: #optional additional offset - allows the insertion of
2409# additional application-specific data before the packet payload
2410#
2411# Since 2.1
2412##
895a2a80 2413{ 'struct': 'NetdevL2TPv3Options',
3fb69aa1
AI
2414 'data': {
2415 'src': 'str',
2416 'dst': 'str',
2417 '*srcport': 'str',
2418 '*dstport': 'str',
2419 '*ipv6': 'bool',
2420 '*udp': 'bool',
2421 '*cookie64': 'bool',
2422 '*counter': 'bool',
2423 '*pincounter': 'bool',
2424 '*txcookie': 'uint64',
2425 '*rxcookie': 'uint64',
2426 'txsession': 'uint32',
2427 '*rxsession': 'uint32',
2428 '*offset': 'uint32' } }
2429
14aa0c2d
LE
2430##
2431# @NetdevVdeOptions
2432#
2433# Connect the VLAN to a vde switch running on the host.
2434#
2435# @sock: #optional socket path
2436#
2437# @port: #optional port number
2438#
2439# @group: #optional group owner of socket
2440#
2441# @mode: #optional permissions for socket
2442#
2443# Since 1.2
2444##
895a2a80 2445{ 'struct': 'NetdevVdeOptions',
14aa0c2d
LE
2446 'data': {
2447 '*sock': 'str',
2448 '*port': 'uint16',
2449 '*group': 'str',
2450 '*mode': 'uint16' } }
2451
2452##
2453# @NetdevDumpOptions
2454#
2455# Dump VLAN network traffic to a file.
2456#
2457# @len: #optional per-packet size limit (64k default). Understands [TGMKkb]
2458# suffixes.
2459#
2460# @file: #optional dump file path (default is qemu-vlan0.pcap)
2461#
2462# Since 1.2
2463##
895a2a80 2464{ 'struct': 'NetdevDumpOptions',
14aa0c2d
LE
2465 'data': {
2466 '*len': 'size',
2467 '*file': 'str' } }
2468
2469##
2470# @NetdevBridgeOptions
2471#
2472# Connect a host TAP network interface to a host bridge device.
2473#
2474# @br: #optional bridge name
2475#
2476# @helper: #optional command to execute to configure bridge
2477#
2478# Since 1.2
2479##
895a2a80 2480{ 'struct': 'NetdevBridgeOptions',
14aa0c2d
LE
2481 'data': {
2482 '*br': 'str',
2483 '*helper': 'str' } }
2484
f6c874e3
SH
2485##
2486# @NetdevHubPortOptions
2487#
2488# Connect two or more net clients through a software hub.
2489#
2490# @hubid: hub identifier number
2491#
2492# Since 1.2
2493##
895a2a80 2494{ 'struct': 'NetdevHubPortOptions',
f6c874e3
SH
2495 'data': {
2496 'hubid': 'int32' } }
2497
58952137
VM
2498##
2499# @NetdevNetmapOptions
2500#
2501# Connect a client to a netmap-enabled NIC or to a VALE switch port
2502#
2503# @ifname: Either the name of an existing network interface supported by
2504# netmap, or the name of a VALE port (created on the fly).
2505# A VALE port name is in the form 'valeXXX:YYY', where XXX and
2506# YYY are non-negative integers. XXX identifies a switch and
2507# YYY identifies a port of the switch. VALE ports having the
2508# same XXX are therefore connected to the same switch.
2509#
2510# @devname: #optional path of the netmap device (default: '/dev/netmap').
2511#
c27de2a3 2512# Since 2.0
58952137 2513##
895a2a80 2514{ 'struct': 'NetdevNetmapOptions',
58952137
VM
2515 'data': {
2516 'ifname': 'str',
2517 '*devname': 'str' } }
2518
03ce5744
NN
2519##
2520# @NetdevVhostUserOptions
2521#
2522# Vhost-user network backend
2523#
2524# @chardev: name of a unix socket chardev
2525#
2526# @vhostforce: #optional vhost on for non-MSIX virtio guests (default: false).
2527#
b931bfbf
CO
2528# @queues: #optional number of queues to be created for multiqueue vhost-user
2529# (default: 1) (Since 2.5)
2530#
03ce5744
NN
2531# Since 2.1
2532##
895a2a80 2533{ 'struct': 'NetdevVhostUserOptions',
03ce5744
NN
2534 'data': {
2535 'chardev': 'str',
b931bfbf
CO
2536 '*vhostforce': 'bool',
2537 '*queues': 'int' } }
03ce5744 2538
14aa0c2d
LE
2539##
2540# @NetClientOptions
2541#
2542# A discriminated record of network device traits.
2543#
2544# Since 1.2
3fb69aa1
AI
2545#
2546# 'l2tpv3' - since 2.1
2547#
14aa0c2d
LE
2548##
2549{ 'union': 'NetClientOptions',
2550 'data': {
f6c874e3
SH
2551 'none': 'NetdevNoneOptions',
2552 'nic': 'NetLegacyNicOptions',
2553 'user': 'NetdevUserOptions',
2554 'tap': 'NetdevTapOptions',
3fb69aa1 2555 'l2tpv3': 'NetdevL2TPv3Options',
f6c874e3
SH
2556 'socket': 'NetdevSocketOptions',
2557 'vde': 'NetdevVdeOptions',
2558 'dump': 'NetdevDumpOptions',
2559 'bridge': 'NetdevBridgeOptions',
58952137 2560 'hubport': 'NetdevHubPortOptions',
03ce5744
NN
2561 'netmap': 'NetdevNetmapOptions',
2562 'vhost-user': 'NetdevVhostUserOptions' } }
14aa0c2d
LE
2563
2564##
2565# @NetLegacy
2566#
2567# Captures the configuration of a network device; legacy.
2568#
2569# @vlan: #optional vlan number
2570#
2571# @id: #optional identifier for monitor commands
2572#
2573# @name: #optional identifier for monitor commands, ignored if @id is present
2574#
2575# @opts: device type specific properties (legacy)
2576#
2577# Since 1.2
2578##
895a2a80 2579{ 'struct': 'NetLegacy',
14aa0c2d
LE
2580 'data': {
2581 '*vlan': 'int32',
2582 '*id': 'str',
2583 '*name': 'str',
2584 'opts': 'NetClientOptions' } }
2585
2586##
2587# @Netdev
2588#
2589# Captures the configuration of a network device.
2590#
2591# @id: identifier for monitor commands.
2592#
2593# @opts: device type specific properties
2594#
2595# Since 1.2
2596##
895a2a80 2597{ 'struct': 'Netdev',
14aa0c2d
LE
2598 'data': {
2599 'id': 'str',
2600 'opts': 'NetClientOptions' } }
2601
fdccce45
YH
2602##
2603# @NetFilterDirection
2604#
2605# Indicates whether a netfilter is attached to a netdev's transmit queue or
2606# receive queue or both.
2607#
2608# @all: the filter is attached both to the receive and the transmit
2609# queue of the netdev (default).
2610#
2611# @rx: the filter is attached to the receive queue of the netdev,
2612# where it will receive packets sent to the netdev.
2613#
2614# @tx: the filter is attached to the transmit queue of the netdev,
2615# where it will receive packets sent by the netdev.
2616#
2617# Since 2.5
2618##
2619{ 'enum': 'NetFilterDirection',
2620 'data': [ 'all', 'rx', 'tx' ] }
2621
5be8c759
PB
2622##
2623# @InetSocketAddress
2624#
2625# Captures a socket address or address range in the Internet namespace.
2626#
2627# @host: host part of the address
2628#
2ea1793b 2629# @port: port part of the address, or lowest port if @to is present
5be8c759
PB
2630#
2631# @to: highest port to try
2632#
2633# @ipv4: whether to accept IPv4 addresses, default try both IPv4 and IPv6
2634# #optional
2635#
2636# @ipv6: whether to accept IPv6 addresses, default try both IPv4 and IPv6
2637# #optional
2638#
2639# Since 1.3
2640##
895a2a80 2641{ 'struct': 'InetSocketAddress',
5be8c759
PB
2642 'data': {
2643 'host': 'str',
2ea1793b 2644 'port': 'str',
5be8c759
PB
2645 '*to': 'uint16',
2646 '*ipv4': 'bool',
2647 '*ipv6': 'bool' } }
2648
2649##
2650# @UnixSocketAddress
2651#
2652# Captures a socket address in the local ("Unix socket") namespace.
2653#
2654# @path: filesystem path to use
2655#
2656# Since 1.3
2657##
895a2a80 2658{ 'struct': 'UnixSocketAddress',
5be8c759
PB
2659 'data': {
2660 'path': 'str' } }
2661
2662##
2663# @SocketAddress
2664#
2665# Captures the address of a socket, which could also be a named file descriptor
2666#
2667# Since 1.3
2668##
2669{ 'union': 'SocketAddress',
2670 'data': {
2671 'inet': 'InetSocketAddress',
2672 'unix': 'UnixSocketAddress',
2673 'fd': 'String' } }
2674
208c9d1b
CB
2675##
2676# @getfd:
2677#
2678# Receive a file descriptor via SCM rights and assign it a name
2679#
2680# @fdname: file descriptor name
2681#
2682# Returns: Nothing on success
208c9d1b
CB
2683#
2684# Since: 0.14.0
2685#
2686# Notes: If @fdname already exists, the file descriptor assigned to
2687# it will be closed and replaced by the received file
2688# descriptor.
2689# The 'closefd' command can be used to explicitly close the
2690# file descriptor when it is no longer needed.
2691##
2692{ 'command': 'getfd', 'data': {'fdname': 'str'} }
2693
2694##
2695# @closefd:
2696#
2697# Close a file descriptor previously passed via SCM rights
2698#
2699# @fdname: file descriptor name
2700#
2701# Returns: Nothing on success
208c9d1b
CB
2702#
2703# Since: 0.14.0
2704##
2705{ 'command': 'closefd', 'data': {'fdname': 'str'} }
01d3c80d
AL
2706
2707##
2708# @MachineInfo:
2709#
2710# Information describing a machine.
2711#
2712# @name: the name of the machine
2713#
2714# @alias: #optional an alias for the machine name
2715#
2716# @default: #optional whether the machine is default
2717#
c72e7688
MN
2718# @cpu-max: maximum number of CPUs supported by the machine type
2719# (since 1.5.0)
2720#
01d3c80d
AL
2721# Since: 1.2.0
2722##
895a2a80 2723{ 'struct': 'MachineInfo',
01d3c80d 2724 'data': { 'name': 'str', '*alias': 'str',
c72e7688 2725 '*is-default': 'bool', 'cpu-max': 'int' } }
01d3c80d
AL
2726
2727##
2728# @query-machines:
2729#
2730# Return a list of supported machines
2731#
2732# Returns: a list of MachineInfo
2733#
2734# Since: 1.2.0
2735##
2736{ 'command': 'query-machines', 'returns': ['MachineInfo'] }
e4e31c63
AL
2737
2738##
2739# @CpuDefinitionInfo:
2740#
2741# Virtual CPU definition.
2742#
2743# @name: the name of the CPU definition
2744#
2745# Since: 1.2.0
2746##
895a2a80 2747{ 'struct': 'CpuDefinitionInfo',
e4e31c63
AL
2748 'data': { 'name': 'str' } }
2749
2750##
2751# @query-cpu-definitions:
2752#
2753# Return a list of supported virtual CPU definitions
2754#
2755# Returns: a list of CpuDefInfo
2756#
2757# Since: 1.2.0
2758##
2759{ 'command': 'query-cpu-definitions', 'returns': ['CpuDefinitionInfo'] }
ba1c048a
CB
2760
2761# @AddfdInfo:
2762#
2763# Information about a file descriptor that was added to an fd set.
2764#
2765# @fdset-id: The ID of the fd set that @fd was added to.
2766#
2767# @fd: The file descriptor that was received via SCM rights and
2768# added to the fd set.
2769#
2770# Since: 1.2.0
2771##
895a2a80 2772{ 'struct': 'AddfdInfo', 'data': {'fdset-id': 'int', 'fd': 'int'} }
ba1c048a
CB
2773
2774##
2775# @add-fd:
2776#
2777# Add a file descriptor, that was passed via SCM rights, to an fd set.
2778#
2779# @fdset-id: #optional The ID of the fd set to add the file descriptor to.
2780#
2781# @opaque: #optional A free-form string that can be used to describe the fd.
2782#
2783# Returns: @AddfdInfo on success
2784# If file descriptor was not received, FdNotSupplied
9ac54af0 2785# If @fdset-id is a negative value, InvalidParameterValue
ba1c048a
CB
2786#
2787# Notes: The list of fd sets is shared by all monitor connections.
2788#
2789# If @fdset-id is not specified, a new fd set will be created.
2790#
2791# Since: 1.2.0
2792##
2793{ 'command': 'add-fd', 'data': {'*fdset-id': 'int', '*opaque': 'str'},
2794 'returns': 'AddfdInfo' }
2795
2796##
2797# @remove-fd:
2798#
2799# Remove a file descriptor from an fd set.
2800#
2801# @fdset-id: The ID of the fd set that the file descriptor belongs to.
2802#
2803# @fd: #optional The file descriptor that is to be removed.
2804#
2805# Returns: Nothing on success
2806# If @fdset-id or @fd is not found, FdNotFound
2807#
2808# Since: 1.2.0
2809#
2810# Notes: The list of fd sets is shared by all monitor connections.
2811#
2812# If @fd is not specified, all file descriptors in @fdset-id
2813# will be removed.
2814##
2815{ 'command': 'remove-fd', 'data': {'fdset-id': 'int', '*fd': 'int'} }
2816
2817##
2818# @FdsetFdInfo:
2819#
2820# Information about a file descriptor that belongs to an fd set.
2821#
2822# @fd: The file descriptor value.
2823#
2824# @opaque: #optional A free-form string that can be used to describe the fd.
2825#
2826# Since: 1.2.0
2827##
895a2a80 2828{ 'struct': 'FdsetFdInfo',
ba1c048a
CB
2829 'data': {'fd': 'int', '*opaque': 'str'} }
2830
2831##
2832# @FdsetInfo:
2833#
2834# Information about an fd set.
2835#
2836# @fdset-id: The ID of the fd set.
2837#
2838# @fds: A list of file descriptors that belong to this fd set.
2839#
2840# Since: 1.2.0
2841##
895a2a80 2842{ 'struct': 'FdsetInfo',
ba1c048a
CB
2843 'data': {'fdset-id': 'int', 'fds': ['FdsetFdInfo']} }
2844
2845##
2846# @query-fdsets:
2847#
2848# Return information describing all fd sets.
2849#
2850# Returns: A list of @FdsetInfo
2851#
2852# Since: 1.2.0
2853#
2854# Note: The list of fd sets is shared by all monitor connections.
2855#
2856##
2857{ 'command': 'query-fdsets', 'returns': ['FdsetInfo'] }
99afc91d 2858
99afc91d
DB
2859##
2860# @TargetInfo:
2861#
2862# Information describing the QEMU target.
2863#
2864# @arch: the target architecture (eg "x86_64", "i386", etc)
2865#
2866# Since: 1.2.0
2867##
895a2a80 2868{ 'struct': 'TargetInfo',
c02a9552 2869 'data': { 'arch': 'str' } }
99afc91d
DB
2870
2871##
2872# @query-target:
2873#
2874# Return information about the target for this QEMU
2875#
2876# Returns: TargetInfo
2877#
2878# Since: 1.2.0
2879##
2880{ 'command': 'query-target', 'returns': 'TargetInfo' }
411656f4
AK
2881
2882##
2883# @QKeyCode:
2884#
2885# An enumeration of key name.
2886#
2887# This is used by the send-key command.
2888#
2889# Since: 1.3.0
bbd1b1cc 2890#
8b6b0c59 2891# 'unmapped' and 'pause' since 2.0
b771f470 2892# 'ro' and 'kp_comma' since 2.4
411656f4
AK
2893##
2894{ 'enum': 'QKeyCode',
bbd1b1cc
GH
2895 'data': [ 'unmapped',
2896 'shift', 'shift_r', 'alt', 'alt_r', 'altgr', 'altgr_r', 'ctrl',
411656f4
AK
2897 'ctrl_r', 'menu', 'esc', '1', '2', '3', '4', '5', '6', '7', '8',
2898 '9', '0', 'minus', 'equal', 'backspace', 'tab', 'q', 'w', 'e',
2899 'r', 't', 'y', 'u', 'i', 'o', 'p', 'bracket_left', 'bracket_right',
2900 'ret', 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'semicolon',
2901 'apostrophe', 'grave_accent', 'backslash', 'z', 'x', 'c', 'v', 'b',
2902 'n', 'm', 'comma', 'dot', 'slash', 'asterisk', 'spc', 'caps_lock',
2903 'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'f10',
2904 'num_lock', 'scroll_lock', 'kp_divide', 'kp_multiply',
2905 'kp_subtract', 'kp_add', 'kp_enter', 'kp_decimal', 'sysrq', 'kp_0',
2906 'kp_1', 'kp_2', 'kp_3', 'kp_4', 'kp_5', 'kp_6', 'kp_7', 'kp_8',
2907 'kp_9', 'less', 'f11', 'f12', 'print', 'home', 'pgup', 'pgdn', 'end',
2908 'left', 'up', 'down', 'right', 'insert', 'delete', 'stop', 'again',
2909 'props', 'undo', 'front', 'copy', 'open', 'paste', 'find', 'cut',
b771f470
GH
2910 'lf', 'help', 'meta_l', 'meta_r', 'compose', 'pause', 'ro',
2911 'kp_comma' ] }
e4c8f004 2912
9f328977
LC
2913##
2914# @KeyValue
2915#
2916# Represents a keyboard key.
2917#
2918# Since: 1.3.0
2919##
2920{ 'union': 'KeyValue',
2921 'data': {
2922 'number': 'int',
2923 'qcode': 'QKeyCode' } }
2924
e4c8f004
AK
2925##
2926# @send-key:
2927#
2928# Send keys to guest.
2929#
9f328977
LC
2930# @keys: An array of @KeyValue elements. All @KeyValues in this array are
2931# simultaneously sent to the guest. A @KeyValue.number value is sent
2932# directly to the guest, while @KeyValue.qcode must be a valid
2933# @QKeyCode value
e4c8f004
AK
2934#
2935# @hold-time: #optional time to delay key up events, milliseconds. Defaults
2936# to 100
2937#
2938# Returns: Nothing on success
2939# If key is unknown or redundant, InvalidParameter
2940#
2941# Since: 1.3.0
2942#
2943##
2944{ 'command': 'send-key',
9f328977 2945 'data': { 'keys': ['KeyValue'], '*hold-time': 'int' } }
ad39cf6d
LC
2946
2947##
2948# @screendump:
2949#
2950# Write a PPM of the VGA screen to a file.
2951#
2952# @filename: the path of a new PPM file to store the image
2953#
2954# Returns: Nothing on success
2955#
2956# Since: 0.14.0
2957##
2958{ 'command': 'screendump', 'data': {'filename': 'str'} }
6dd844db 2959
ffbdbe59
GH
2960##
2961# @ChardevFile:
2962#
2963# Configuration info for file chardevs.
2964#
2965# @in: #optional The name of the input file
2966# @out: The name of the output file
2967#
2968# Since: 1.4
2969##
895a2a80 2970{ 'struct': 'ChardevFile', 'data': { '*in' : 'str',
ffbdbe59
GH
2971 'out' : 'str' } }
2972
d59044ef 2973##
d36b2b90 2974# @ChardevHostdev:
d59044ef 2975#
548cbb36 2976# Configuration info for device and pipe chardevs.
d59044ef
GH
2977#
2978# @device: The name of the special file for the device,
2979# i.e. /dev/ttyS0 on Unix or COM1: on Windows
2980# @type: What kind of device this is.
2981#
2982# Since: 1.4
2983##
895a2a80 2984{ 'struct': 'ChardevHostdev', 'data': { 'device' : 'str' } }
d59044ef 2985
f6bd5d6e
GH
2986##
2987# @ChardevSocket:
2988#
3ecc059d 2989# Configuration info for (stream) socket chardevs.
f6bd5d6e
GH
2990#
2991# @addr: socket address to listen on (server=true)
2992# or connect to (server=false)
2993# @server: #optional create server socket (default: true)
ef993ba7
GH
2994# @wait: #optional wait for incoming connection on server
2995# sockets (default: false).
f6bd5d6e 2996# @nodelay: #optional set TCP_NODELAY socket option (default: false)
ef993ba7
GH
2997# @telnet: #optional enable telnet protocol on server
2998# sockets (default: false)
5dd1f02b
CM
2999# @reconnect: #optional For a client socket, if a socket is disconnected,
3000# then attempt a reconnect after the given number of seconds.
3001# Setting this to zero disables this function. (default: 0)
3002# (Since: 2.2)
f6bd5d6e
GH
3003#
3004# Since: 1.4
3005##
895a2a80 3006{ 'struct': 'ChardevSocket', 'data': { 'addr' : 'SocketAddress',
5dd1f02b
CM
3007 '*server' : 'bool',
3008 '*wait' : 'bool',
3009 '*nodelay' : 'bool',
3010 '*telnet' : 'bool',
3011 '*reconnect' : 'int' } }
f6bd5d6e 3012
3ecc059d 3013##
08d0ab3f 3014# @ChardevUdp:
3ecc059d
GH
3015#
3016# Configuration info for datagram socket chardevs.
3017#
3018# @remote: remote address
3019# @local: #optional local address
3020#
3021# Since: 1.5
3022##
895a2a80 3023{ 'struct': 'ChardevUdp', 'data': { 'remote' : 'SocketAddress',
08d0ab3f 3024 '*local' : 'SocketAddress' } }
3ecc059d 3025
edb2fb3c
GH
3026##
3027# @ChardevMux:
3028#
3029# Configuration info for mux chardevs.
3030#
3031# @chardev: name of the base chardev.
3032#
3033# Since: 1.5
3034##
895a2a80 3035{ 'struct': 'ChardevMux', 'data': { 'chardev' : 'str' } }
edb2fb3c 3036
7c358031
GH
3037##
3038# @ChardevStdio:
3039#
3040# Configuration info for stdio chardevs.
3041#
3042# @signal: #optional Allow signals (such as SIGINT triggered by ^C)
3043# be delivered to qemu. Default: true in -nographic mode,
3044# false otherwise.
3045#
3046# Since: 1.5
3047##
895a2a80 3048{ 'struct': 'ChardevStdio', 'data': { '*signal' : 'bool' } }
7c358031 3049
cd153e2a
GH
3050##
3051# @ChardevSpiceChannel:
3052#
3053# Configuration info for spice vm channel chardevs.
3054#
3055# @type: kind of channel (for example vdagent).
3056#
3057# Since: 1.5
3058##
895a2a80 3059{ 'struct': 'ChardevSpiceChannel', 'data': { 'type' : 'str' } }
cd153e2a
GH
3060
3061##
3062# @ChardevSpicePort:
3063#
3064# Configuration info for spice port chardevs.
3065#
3066# @fqdn: name of the channel (see docs/spice-port-fqdn.txt)
3067#
3068# Since: 1.5
3069##
895a2a80 3070{ 'struct': 'ChardevSpicePort', 'data': { 'fqdn' : 'str' } }
cd153e2a 3071
702ec69c
GH
3072##
3073# @ChardevVC:
3074#
3075# Configuration info for virtual console chardevs.
3076#
3077# @width: console width, in pixels
3078# @height: console height, in pixels
3079# @cols: console width, in chars
3080# @rows: console height, in chars
3081#
3082# Since: 1.5
3083##
895a2a80 3084{ 'struct': 'ChardevVC', 'data': { '*width' : 'int',
702ec69c
GH
3085 '*height' : 'int',
3086 '*cols' : 'int',
3087 '*rows' : 'int' } }
3088
1da48c65 3089##
4f57378f 3090# @ChardevRingbuf:
1da48c65 3091#
3a1da42e 3092# Configuration info for ring buffer chardevs.
1da48c65 3093#
3a1da42e 3094# @size: #optional ring buffer size, must be power of two, default is 65536
1da48c65
GH
3095#
3096# Since: 1.5
3097##
895a2a80 3098{ 'struct': 'ChardevRingbuf', 'data': { '*size' : 'int' } }
1da48c65 3099
f1a1a356
GH
3100##
3101# @ChardevBackend:
3102#
3103# Configuration info for the new chardev backend.
3104#
5692399f 3105# Since: 1.4 (testdev since 2.2)
f1a1a356 3106##
895a2a80 3107{ 'struct': 'ChardevDummy', 'data': { } }
f1a1a356 3108
f6bd5d6e 3109{ 'union': 'ChardevBackend', 'data': { 'file' : 'ChardevFile',
d36b2b90
MA
3110 'serial' : 'ChardevHostdev',
3111 'parallel': 'ChardevHostdev',
548cbb36 3112 'pipe' : 'ChardevHostdev',
f6bd5d6e 3113 'socket' : 'ChardevSocket',
08d0ab3f 3114 'udp' : 'ChardevUdp',
0a1a7fab 3115 'pty' : 'ChardevDummy',
edb2fb3c 3116 'null' : 'ChardevDummy',
f5a51cab 3117 'mux' : 'ChardevMux',
2d57286d 3118 'msmouse': 'ChardevDummy',
7c358031 3119 'braille': 'ChardevDummy',
5692399f 3120 'testdev': 'ChardevDummy',
d9ac374f 3121 'stdio' : 'ChardevStdio',
cd153e2a
GH
3122 'console': 'ChardevDummy',
3123 'spicevmc' : 'ChardevSpiceChannel',
702ec69c 3124 'spiceport' : 'ChardevSpicePort',
1da48c65 3125 'vc' : 'ChardevVC',
3a1da42e
MA
3126 'ringbuf': 'ChardevRingbuf',
3127 # next one is just for compatibility
4f57378f 3128 'memory' : 'ChardevRingbuf' } }
f1a1a356
GH
3129
3130##
3131# @ChardevReturn:
3132#
3133# Return info about the chardev backend just created.
3134#
58fa4325
MA
3135# @pty: #optional name of the slave pseudoterminal device, present if
3136# and only if a chardev of type 'pty' was created
3137#
f1a1a356
GH
3138# Since: 1.4
3139##
895a2a80 3140{ 'struct' : 'ChardevReturn', 'data': { '*pty' : 'str' } }
f1a1a356
GH
3141
3142##
3143# @chardev-add:
3144#
58fa4325 3145# Add a character device backend
f1a1a356
GH
3146#
3147# @id: the chardev's ID, must be unique
3148# @backend: backend type and parameters
3149#
58fa4325 3150# Returns: ChardevReturn.
f1a1a356
GH
3151#
3152# Since: 1.4
3153##
3154{ 'command': 'chardev-add', 'data': {'id' : 'str',
3155 'backend' : 'ChardevBackend' },
3156 'returns': 'ChardevReturn' }
3157
3158##
3159# @chardev-remove:
3160#
58fa4325 3161# Remove a character device backend
f1a1a356
GH
3162#
3163# @id: the chardev's ID, must exist and not be in use
3164#
3165# Returns: Nothing on success
3166#
3167# Since: 1.4
3168##
3169{ 'command': 'chardev-remove', 'data': {'id': 'str'} }
d1a0cf73
SB
3170
3171##
3172# @TpmModel:
3173#
3174# An enumeration of TPM models
3175#
3176# @tpm-tis: TPM TIS model
3177#
3178# Since: 1.5
3179##
3180{ 'enum': 'TpmModel', 'data': [ 'tpm-tis' ] }
3181
3182##
3183# @query-tpm-models:
3184#
3185# Return a list of supported TPM models
3186#
3187# Returns: a list of TpmModel
3188#
3189# Since: 1.5
3190##
3191{ 'command': 'query-tpm-models', 'returns': ['TpmModel'] }
3192
3193##
3194# @TpmType:
3195#
3196# An enumeration of TPM types
3197#
3198# @passthrough: TPM passthrough type
3199#
3200# Since: 1.5
3201##
3202{ 'enum': 'TpmType', 'data': [ 'passthrough' ] }
3203
3204##
3205# @query-tpm-types:
3206#
3207# Return a list of supported TPM types
3208#
3209# Returns: a list of TpmType
3210#
3211# Since: 1.5
3212##
3213{ 'command': 'query-tpm-types', 'returns': ['TpmType'] }
3214
3215##
3216# @TPMPassthroughOptions:
3217#
3218# Information about the TPM passthrough type
3219#
3220# @path: #optional string describing the path used for accessing the TPM device
3221#
3222# @cancel-path: #optional string showing the TPM's sysfs cancel file
3223# for cancellation of TPM commands while they are executing
3224#
3225# Since: 1.5
3226##
895a2a80 3227{ 'struct': 'TPMPassthroughOptions', 'data': { '*path' : 'str',
d1a0cf73
SB
3228 '*cancel-path' : 'str'} }
3229
3230##
3231# @TpmTypeOptions:
3232#
3233# A union referencing different TPM backend types' configuration options
3234#
88ca7bcf 3235# @passthrough: The configuration options for the TPM passthrough type
d1a0cf73
SB
3236#
3237# Since: 1.5
3238##
3239{ 'union': 'TpmTypeOptions',
88ca7bcf 3240 'data': { 'passthrough' : 'TPMPassthroughOptions' } }
d1a0cf73
SB
3241
3242##
3243# @TpmInfo:
3244#
3245# Information about the TPM
3246#
3247# @id: The Id of the TPM
3248#
3249# @model: The TPM frontend model
3250#
88ca7bcf 3251# @options: The TPM (backend) type configuration options
d1a0cf73
SB
3252#
3253# Since: 1.5
3254##
895a2a80 3255{ 'struct': 'TPMInfo',
d1a0cf73
SB
3256 'data': {'id': 'str',
3257 'model': 'TpmModel',
88ca7bcf 3258 'options': 'TpmTypeOptions' } }
d1a0cf73
SB
3259
3260##
3261# @query-tpm:
3262#
3263# Return information about the TPM device
3264#
3265# Returns: @TPMInfo on success
3266#
3267# Since: 1.5
3268##
3269{ 'command': 'query-tpm', 'returns': ['TPMInfo'] }
8ccbad5c
LE
3270
3271##
3272# @AcpiTableOptions
3273#
3274# Specify an ACPI table on the command line to load.
3275#
3276# At most one of @file and @data can be specified. The list of files specified
3277# by any one of them is loaded and concatenated in order. If both are omitted,
3278# @data is implied.
3279#
3280# Other fields / optargs can be used to override fields of the generic ACPI
3281# table header; refer to the ACPI specification 5.0, section 5.2.6 System
3282# Description Table Header. If a header field is not overridden, then the
3283# corresponding value from the concatenated blob is used (in case of @file), or
3284# it is filled in with a hard-coded value (in case of @data).
3285#
3286# String fields are copied into the matching ACPI member from lowest address
3287# upwards, and silently truncated / NUL-padded to length.
3288#
3289# @sig: #optional table signature / identifier (4 bytes)
3290#
3291# @rev: #optional table revision number (dependent on signature, 1 byte)
3292#
3293# @oem_id: #optional OEM identifier (6 bytes)
3294#
3295# @oem_table_id: #optional OEM table identifier (8 bytes)
3296#
3297# @oem_rev: #optional OEM-supplied revision number (4 bytes)
3298#
3299# @asl_compiler_id: #optional identifier of the utility that created the table
3300# (4 bytes)
3301#
3302# @asl_compiler_rev: #optional revision number of the utility that created the
3303# table (4 bytes)
3304#
3305# @file: #optional colon (:) separated list of pathnames to load and
3306# concatenate as table data. The resultant binary blob is expected to
3307# have an ACPI table header. At least one file is required. This field
3308# excludes @data.
3309#
3310# @data: #optional colon (:) separated list of pathnames to load and
3311# concatenate as table data. The resultant binary blob must not have an
3312# ACPI table header. At least one file is required. This field excludes
3313# @file.
3314#
3315# Since 1.5
3316##
895a2a80 3317{ 'struct': 'AcpiTableOptions',
8ccbad5c
LE
3318 'data': {
3319 '*sig': 'str',
3320 '*rev': 'uint8',
3321 '*oem_id': 'str',
3322 '*oem_table_id': 'str',
3323 '*oem_rev': 'uint32',
3324 '*asl_compiler_id': 'str',
3325 '*asl_compiler_rev': 'uint32',
3326 '*file': 'str',
3327 '*data': 'str' }}
1f8f987d
AK
3328
3329##
3330# @CommandLineParameterType:
3331#
3332# Possible types for an option parameter.
3333#
3334# @string: accepts a character string
3335#
3336# @boolean: accepts "on" or "off"
3337#
3338# @number: accepts a number
3339#
3340# @size: accepts a number followed by an optional suffix (K)ilo,
3341# (M)ega, (G)iga, (T)era
3342#
3343# Since 1.5
3344##
3345{ 'enum': 'CommandLineParameterType',
3346 'data': ['string', 'boolean', 'number', 'size'] }
3347
3348##
3349# @CommandLineParameterInfo:
3350#
3351# Details about a single parameter of a command line option.
3352#
3353# @name: parameter name
3354#
3355# @type: parameter @CommandLineParameterType
3356#
3357# @help: #optional human readable text string, not suitable for parsing.
3358#
e36af94f
CL
3359# @default: #optional default value string (since 2.1)
3360#
1f8f987d
AK
3361# Since 1.5
3362##
895a2a80 3363{ 'struct': 'CommandLineParameterInfo',
1f8f987d
AK
3364 'data': { 'name': 'str',
3365 'type': 'CommandLineParameterType',
e36af94f
CL
3366 '*help': 'str',
3367 '*default': 'str' } }
1f8f987d
AK
3368
3369##
3370# @CommandLineOptionInfo:
3371#
3372# Details about a command line option, including its list of parameter details
3373#
3374# @option: option name
3375#
3376# @parameters: an array of @CommandLineParameterInfo
3377#
3378# Since 1.5
3379##
895a2a80 3380{ 'struct': 'CommandLineOptionInfo',
1f8f987d
AK
3381 'data': { 'option': 'str', 'parameters': ['CommandLineParameterInfo'] } }
3382
3383##
3384# @query-command-line-options:
3385#
3386# Query command line option schema.
3387#
3388# @option: #optional option name
3389#
3390# Returns: list of @CommandLineOptionInfo for all options (or for the given
3391# @option). Returns an error if the given @option doesn't exist.
3392#
3393# Since 1.5
3394##
3395{'command': 'query-command-line-options', 'data': { '*option': 'str' },
3396 'returns': ['CommandLineOptionInfo'] }
8e8aba50
EH
3397
3398##
3399# @X86CPURegister32
3400#
3401# A X86 32-bit register
3402#
3403# Since: 1.5
3404##
3405{ 'enum': 'X86CPURegister32',
3406 'data': [ 'EAX', 'EBX', 'ECX', 'EDX', 'ESP', 'EBP', 'ESI', 'EDI' ] }
3407
3408##
3409# @X86CPUFeatureWordInfo
3410#
3411# Information about a X86 CPU feature word
3412#
3413# @cpuid-input-eax: Input EAX value for CPUID instruction for that feature word
3414#
3415# @cpuid-input-ecx: #optional Input ECX value for CPUID instruction for that
3416# feature word
3417#
3418# @cpuid-register: Output register containing the feature bits
3419#
3420# @features: value of output register, containing the feature bits
3421#
3422# Since: 1.5
3423##
895a2a80 3424{ 'struct': 'X86CPUFeatureWordInfo',
8e8aba50
EH
3425 'data': { 'cpuid-input-eax': 'int',
3426 '*cpuid-input-ecx': 'int',
3427 'cpuid-register': 'X86CPURegister32',
3428 'features': 'int' } }
b1be4280 3429
9f08c8ec
EB
3430##
3431# @DummyForceArrays
3432#
3433# Not used by QMP; hack to let us use X86CPUFeatureWordInfoList internally
3434#
3435# Since 2.5
3436##
3437{ 'struct': 'DummyForceArrays',
3438 'data': { 'unused': ['X86CPUFeatureWordInfo'] } }
3439
3440
b1be4280
AK
3441##
3442# @RxState:
3443#
3444# Packets receiving state
3445#
3446# @normal: filter assigned packets according to the mac-table
3447#
3448# @none: don't receive any assigned packet
3449#
3450# @all: receive all assigned packets
3451#
3452# Since: 1.6
3453##
3454{ 'enum': 'RxState', 'data': [ 'normal', 'none', 'all' ] }
3455
3456##
3457# @RxFilterInfo:
3458#
3459# Rx-filter information for a NIC.
3460#
3461# @name: net client name
3462#
3463# @promiscuous: whether promiscuous mode is enabled
3464#
3465# @multicast: multicast receive state
3466#
3467# @unicast: unicast receive state
3468#
f7bc8ef8
AK
3469# @vlan: vlan receive state (Since 2.0)
3470#
b1be4280
AK
3471# @broadcast-allowed: whether to receive broadcast
3472#
3473# @multicast-overflow: multicast table is overflowed or not
3474#
3475# @unicast-overflow: unicast table is overflowed or not
3476#
3477# @main-mac: the main macaddr string
3478#
3479# @vlan-table: a list of active vlan id
3480#
3481# @unicast-table: a list of unicast macaddr string
3482#
3483# @multicast-table: a list of multicast macaddr string
3484#
3485# Since 1.6
3486##
3487
895a2a80 3488{ 'struct': 'RxFilterInfo',
b1be4280
AK
3489 'data': {
3490 'name': 'str',
3491 'promiscuous': 'bool',
3492 'multicast': 'RxState',
3493 'unicast': 'RxState',
f7bc8ef8 3494 'vlan': 'RxState',
b1be4280
AK
3495 'broadcast-allowed': 'bool',
3496 'multicast-overflow': 'bool',
3497 'unicast-overflow': 'bool',
3498 'main-mac': 'str',
3499 'vlan-table': ['int'],
3500 'unicast-table': ['str'],
3501 'multicast-table': ['str'] }}
3502
3503##
3504# @query-rx-filter:
3505#
3506# Return rx-filter information for all NICs (or for the given NIC).
3507#
3508# @name: #optional net client name
3509#
3510# Returns: list of @RxFilterInfo for all NICs (or for the given NIC).
3511# Returns an error if the given @name doesn't exist, or given
3512# NIC doesn't support rx-filter querying, or given net client
3513# isn't a NIC.
3514#
3515# Since: 1.6
3516##
3517{ 'command': 'query-rx-filter', 'data': { '*name': 'str' },
3518 'returns': ['RxFilterInfo'] }
d26c9a15 3519
031fa964
GH
3520##
3521# @InputButton
3522#
3523# Button of a pointer input device (mouse, tablet).
3524#
3525# Since: 2.0
3526##
3527{ 'enum' : 'InputButton',
3528 'data' : [ 'Left', 'Middle', 'Right', 'WheelUp', 'WheelDown' ] }
3529
3530##
3531# @InputButton
3532#
3533# Position axis of a pointer input device (mouse, tablet).
3534#
3535# Since: 2.0
3536##
3537{ 'enum' : 'InputAxis',
3538 'data' : [ 'X', 'Y' ] }
3539
3540##
3541# @InputKeyEvent
3542#
3543# Keyboard input event.
3544#
3545# @key: Which key this event is for.
3546# @down: True for key-down and false for key-up events.
3547#
3548# Since: 2.0
3549##
895a2a80 3550{ 'struct' : 'InputKeyEvent',
031fa964
GH
3551 'data' : { 'key' : 'KeyValue',
3552 'down' : 'bool' } }
3553
3554##
3555# @InputBtnEvent
3556#
3557# Pointer button input event.
3558#
3559# @button: Which button this event is for.
3560# @down: True for key-down and false for key-up events.
3561#
3562# Since: 2.0
3563##
895a2a80 3564{ 'struct' : 'InputBtnEvent',
031fa964
GH
3565 'data' : { 'button' : 'InputButton',
3566 'down' : 'bool' } }
3567
3568##
3569# @InputMoveEvent
3570#
3571# Pointer motion input event.
3572#
3573# @axis: Which axis is referenced by @value.
3574# @value: Pointer position. For absolute coordinates the
3575# valid range is 0 -> 0x7ffff
3576#
3577# Since: 2.0
3578##
895a2a80 3579{ 'struct' : 'InputMoveEvent',
031fa964
GH
3580 'data' : { 'axis' : 'InputAxis',
3581 'value' : 'int' } }
3582
3583##
3584# @InputEvent
3585#
3586# Input event union.
3587#
935fb915
AK
3588# @key: Input event of Keyboard
3589# @btn: Input event of pointer buttons
3590# @rel: Input event of relative pointer motion
3591# @abs: Input event of absolute pointer motion
3592#
031fa964
GH
3593# Since: 2.0
3594##
3595{ 'union' : 'InputEvent',
3596 'data' : { 'key' : 'InputKeyEvent',
3597 'btn' : 'InputBtnEvent',
3598 'rel' : 'InputMoveEvent',
3599 'abs' : 'InputMoveEvent' } }
0042109a 3600
50c6617f 3601##
df5b2adb 3602# @x-input-send-event
50c6617f
MT
3603#
3604# Send input event(s) to guest.
3605#
51fc4476 3606# @console: #optional console to send event(s) to.
4083ae31
GH
3607# This parameter can be used to send the input event to
3608# specific input devices in case (a) multiple input devices
3609# of the same kind are added to the virtual machine and (b)
3610# you have configured input routing (see docs/multiseat.txt)
3611# for those input devices. If input routing is not
3612# configured this parameter has no effect.
3613# If @console is missing, only devices that aren't associated
3614# with a console are admissible.
3615# If @console is specified, it must exist, and both devices
3616# associated with that console and devices not associated with a
3617# console are admissible, but the former take precedence.
3618
50c6617f
MT
3619#
3620# @events: List of InputEvent union.
3621#
3622# Returns: Nothing on success.
3623#
3624# Since: 2.2
3625#
df5b2adb
GH
3626# Note: this command is experimental, and not a stable API.
3627#
50c6617f 3628##
df5b2adb 3629{ 'command': 'x-input-send-event',
51fc4476 3630 'data': { '*console':'int', 'events': [ 'InputEvent' ] } }
50c6617f 3631
0042109a
WG
3632##
3633# @NumaOptions
3634#
3635# A discriminated record of NUMA options. (for OptsVisitor)
3636#
3637# Since 2.1
3638##
3639{ 'union': 'NumaOptions',
3640 'data': {
3641 'node': 'NumaNodeOptions' }}
3642
3643##
3644# @NumaNodeOptions
3645#
3646# Create a guest NUMA node. (for OptsVisitor)
3647#
3648# @nodeid: #optional NUMA node ID (increase by 1 from 0 if omitted)
3649#
3650# @cpus: #optional VCPUs belonging to this node (assign VCPUS round-robin
3651# if omitted)
3652#
7febe36f
PB
3653# @mem: #optional memory size of this node; mutually exclusive with @memdev.
3654# Equally divide total memory among nodes if both @mem and @memdev are
3655# omitted.
3656#
3657# @memdev: #optional memory backend object. If specified for one node,
3658# it must be specified for all nodes.
0042109a
WG
3659#
3660# Since: 2.1
3661##
895a2a80 3662{ 'struct': 'NumaNodeOptions',
0042109a
WG
3663 'data': {
3664 '*nodeid': 'uint16',
3665 '*cpus': ['uint16'],
7febe36f
PB
3666 '*mem': 'size',
3667 '*memdev': 'str' }}
4cf1b76b
HT
3668
3669##
3670# @HostMemPolicy
3671#
3672# Host memory policy types
3673#
3674# @default: restore default policy, remove any nondefault policy
3675#
3676# @preferred: set the preferred host nodes for allocation
3677#
3678# @bind: a strict policy that restricts memory allocation to the
3679# host nodes specified
3680#
3681# @interleave: memory allocations are interleaved across the set
3682# of host nodes specified
3683#
3684# Since 2.1
3685##
3686{ 'enum': 'HostMemPolicy',
3687 'data': [ 'default', 'preferred', 'bind', 'interleave' ] }
76b5d850
HT
3688
3689##
3690# @Memdev:
3691#
8f4e5ac3 3692# Information about memory backend
76b5d850 3693#
8f4e5ac3 3694# @size: memory backend size
76b5d850
HT
3695#
3696# @merge: enables or disables memory merge support
3697#
8f4e5ac3 3698# @dump: includes memory backend's memory in a core dump or not
76b5d850
HT
3699#
3700# @prealloc: enables or disables memory preallocation
3701#
3702# @host-nodes: host nodes for its memory policy
3703#
8f4e5ac3 3704# @policy: memory policy of memory backend
76b5d850
HT
3705#
3706# Since: 2.1
3707##
3708
895a2a80 3709{ 'struct': 'Memdev',
76b5d850
HT
3710 'data': {
3711 'size': 'size',
3712 'merge': 'bool',
3713 'dump': 'bool',
3714 'prealloc': 'bool',
3715 'host-nodes': ['uint16'],
3716 'policy': 'HostMemPolicy' }}
3717
3718##
3719# @query-memdev:
3720#
8f4e5ac3 3721# Returns information for all memory backends.
76b5d850
HT
3722#
3723# Returns: a list of @Memdev.
3724#
3725# Since: 2.1
3726##
3727{ 'command': 'query-memdev', 'returns': ['Memdev'] }
8f4e5ac3
IM
3728
3729##
6f2e2730
IM
3730# @PCDIMMDeviceInfo:
3731#
3732# PCDIMMDevice state information
3733#
3734# @id: #optional device's ID
3735#
3736# @addr: physical address, where device is mapped
3737#
3738# @size: size of memory that the device provides
3739#
3740# @slot: slot number at which device is plugged in
3741#
3742# @node: NUMA node number where device is plugged in
3743#
3744# @memdev: memory backend linked with device
3745#
3746# @hotplugged: true if device was hotplugged
3747#
3748# @hotpluggable: true if device if could be added/removed while machine is running
3749#
3750# Since: 2.1
3751##
895a2a80 3752{ 'struct': 'PCDIMMDeviceInfo',
6f2e2730
IM
3753 'data': { '*id': 'str',
3754 'addr': 'int',
3755 'size': 'int',
3756 'slot': 'int',
3757 'node': 'int',
3758 'memdev': 'str',
3759 'hotplugged': 'bool',
3760 'hotpluggable': 'bool'
3761 }
3762}
3763
3764##
3765# @MemoryDeviceInfo:
3766#
3767# Union containing information about a memory device
3768#
3769# Since: 2.1
3770##
3771{ 'union': 'MemoryDeviceInfo', 'data': {'dimm': 'PCDIMMDeviceInfo'} }
3772
3773##
3774# @query-memory-devices
3775#
3776# Lists available memory devices and their state
3777#
3778# Since: 2.1
3779##
3780{ 'command': 'query-memory-devices', 'returns': ['MemoryDeviceInfo'] }
521b3673
IM
3781
3782## @ACPISlotType
3783#
3784# @DIMM: memory slot
3785#
3786{ 'enum': 'ACPISlotType', 'data': [ 'DIMM' ] }
3787
3788## @ACPIOSTInfo
3789#
3790# OSPM Status Indication for a device
3791# For description of possible values of @source and @status fields
3792# see "_OST (OSPM Status Indication)" chapter of ACPI5.0 spec.
3793#
3794# @device: #optional device ID associated with slot
3795#
3796# @slot: slot ID, unique per slot of a given @slot-type
3797#
3798# @slot-type: type of the slot
3799#
3800# @source: an integer containing the source event
3801#
3802# @status: an integer containing the status code
3803#
3804# Since: 2.1
3805##
895a2a80 3806{ 'struct': 'ACPIOSTInfo',
521b3673
IM
3807 'data' : { '*device': 'str',
3808 'slot': 'str',
3809 'slot-type': 'ACPISlotType',
3810 'source': 'int',
3811 'status': 'int' } }
02419bcb
IM
3812
3813##
3814# @query-acpi-ospm-status
3815#
3816# Lists ACPI OSPM status of ACPI device objects,
3817# which might be reported via _OST method
3818#
3819# Since: 2.1
3820##
3821{ 'command': 'query-acpi-ospm-status', 'returns': ['ACPIOSTInfo'] }
f668470f 3822
99eaf09c
WX
3823##
3824# @WatchdogExpirationAction
3825#
3826# An enumeration of the actions taken when the watchdog device's timer is
3827# expired
3828#
3829# @reset: system resets
3830#
3831# @shutdown: system shutdown, note that it is similar to @powerdown, which
3832# tries to set to system status and notify guest
3833#
3834# @poweroff: system poweroff, the emulator program exits
3835#
3836# @pause: system pauses, similar to @stop
3837#
3838# @debug: system enters debug state
3839#
3840# @none: nothing is done
3841#
795dc6e4
MCL
3842# @inject-nmi: a non-maskable interrupt is injected into the first VCPU (all
3843# VCPUS on x86) (since 2.4)
3844#
99eaf09c
WX
3845# Since: 2.1
3846##
3847{ 'enum': 'WatchdogExpirationAction',
795dc6e4
MCL
3848 'data': [ 'reset', 'shutdown', 'poweroff', 'pause', 'debug', 'none',
3849 'inject-nmi' ] }
99eaf09c 3850
5a2d2cbd
WX
3851##
3852# @IoOperationType
3853#
3854# An enumeration of the I/O operation types
3855#
3856# @read: read operation
3857#
3858# @write: write operation
3859#
3860# Since: 2.1
3861##
3862{ 'enum': 'IoOperationType',
3863 'data': [ 'read', 'write' ] }
3864
3a449690
WX
3865##
3866# @GuestPanicAction
3867#
3868# An enumeration of the actions taken when guest OS panic is detected
3869#
3870# @pause: system pauses
3871#
3872# Since: 2.1
3873##
3874{ 'enum': 'GuestPanicAction',
3875 'data': [ 'pause' ] }
f2ae8abf
MT
3876
3877##
3878# @rtc-reset-reinjection
3879#
3880# This command will reset the RTC interrupt reinjection backlog.
3881# Can be used if another mechanism to synchronize guest time
3882# is in effect, for example QEMU guest agent's guest-set-time
3883# command.
3884#
3885# Since: 2.1
3886##
3887{ 'command': 'rtc-reset-reinjection' }
fafa4d50
SF
3888
3889# Rocker ethernet network switch
3890{ 'include': 'qapi/rocker.json' }
d73abd6d
PD
3891
3892##
3893# ReplayMode:
3894#
3895# Mode of the replay subsystem.
3896#
3897# @none: normal execution mode. Replay or record are not enabled.
3898#
3899# @record: record mode. All non-deterministic data is written into the
3900# replay log.
3901#
3902# @play: replay mode. Non-deterministic data required for system execution
3903# is read from the log.
3904#
3905# Since: 2.5
3906##
3907{ 'enum': 'ReplayMode',
3908 'data': [ 'none', 'record', 'play' ] }