Statistics
| Branch: | Revision:

root / qapi-schema.json @ 0834c9ea

History | View | Annotate | Download (68.8 kB)

1
# -*- Mode: Python -*-
2
#
3
# QAPI Schema
4

    
5
##
6
# @ErrorClass
7
#
8
# QEMU error classes
9
#
10
# @GenericError: this is used for errors that don't require a specific error
11
#                class. This should be the default case for most errors
12
#
13
# @CommandNotFound: the requested command has not been found
14
#
15
# @DeviceEncrypted: the requested operation can't be fulfilled because the
16
#                   selected device is encrypted
17
#
18
# @DeviceNotActive: a device has failed to be become active
19
#
20
# @DeviceNotFound: the requested device has not been found
21
#
22
# @KVMMissingCap: the requested operation can't be fulfilled because a
23
#                 required KVM capability is missing
24
#
25
# @MigrationExpected: the requested operation can't be fulfilled because a
26
#                     migration process is expected
27
#
28
# Since: 1.2
29
##
30
{ 'enum': 'ErrorClass',
31
  'data': [ 'GenericError', 'CommandNotFound', 'DeviceEncrypted',
32
            'DeviceNotActive', 'DeviceNotFound', 'KVMMissingCap',
33
            'MigrationExpected' ] }
34

    
35
##
36
# @NameInfo:
37
#
38
# Guest name information.
39
#
40
# @name: #optional The name of the guest
41
#
42
# Since 0.14.0
43
##
44
{ 'type': 'NameInfo', 'data': {'*name': 'str'} }
45

    
46
##
47
# @query-name:
48
#
49
# Return the name information of a guest.
50
#
51
# Returns: @NameInfo of the guest
52
#
53
# Since 0.14.0
54
##
55
{ 'command': 'query-name', 'returns': 'NameInfo' }
56

    
57
##
58
# @VersionInfo:
59
#
60
# A description of QEMU's version.
61
#
62
# @qemu.major:  The major version of QEMU
63
#
64
# @qemu.minor:  The minor version of QEMU
65
#
66
# @qemu.micro:  The micro version of QEMU.  By current convention, a micro
67
#               version of 50 signifies a development branch.  A micro version
68
#               greater than or equal to 90 signifies a release candidate for
69
#               the next minor version.  A micro version of less than 50
70
#               signifies a stable release.
71
#
72
# @package:     QEMU will always set this field to an empty string.  Downstream
73
#               versions of QEMU should set this to a non-empty string.  The
74
#               exact format depends on the downstream however it highly
75
#               recommended that a unique name is used.
76
#
77
# Since: 0.14.0
78
##
79
{ 'type': 'VersionInfo',
80
  'data': {'qemu': {'major': 'int', 'minor': 'int', 'micro': 'int'},
81
           'package': 'str'} }
82

    
83
##
84
# @query-version:
85
#
86
# Returns the current version of QEMU.
87
#
88
# Returns:  A @VersionInfo object describing the current version of QEMU.
89
#
90
# Since: 0.14.0
91
##
92
{ 'command': 'query-version', 'returns': 'VersionInfo' }
93

    
94
##
95
# @KvmInfo:
96
#
97
# Information about support for KVM acceleration
98
#
99
# @enabled: true if KVM acceleration is active
100
#
101
# @present: true if KVM acceleration is built into this executable
102
#
103
# Since: 0.14.0
104
##
105
{ 'type': 'KvmInfo', 'data': {'enabled': 'bool', 'present': 'bool'} }
106

    
107
##
108
# @query-kvm:
109
#
110
# Returns information about KVM acceleration
111
#
112
# Returns: @KvmInfo
113
#
114
# Since: 0.14.0
115
##
116
{ 'command': 'query-kvm', 'returns': 'KvmInfo' }
117

    
118
##
119
# @RunState
120
#
121
# An enumeration of VM run states.
122
#
123
# @debug: QEMU is running on a debugger
124
#
125
# @finish-migrate: guest is paused to finish the migration process
126
#
127
# @inmigrate: guest is paused waiting for an incoming migration
128
#
129
# @internal-error: An internal error that prevents further guest execution
130
# has occurred
131
#
132
# @io-error: the last IOP has failed and the device is configured to pause
133
# on I/O errors
134
#
135
# @paused: guest has been paused via the 'stop' command
136
#
137
# @postmigrate: guest is paused following a successful 'migrate'
138
#
139
# @prelaunch: QEMU was started with -S and guest has not started
140
#
141
# @restore-vm: guest is paused to restore VM state
142
#
143
# @running: guest is actively running
144
#
145
# @save-vm: guest is paused to save the VM state
146
#
147
# @shutdown: guest is shut down (and -no-shutdown is in use)
148
#
149
# @suspended: guest is suspended (ACPI S3)
150
#
151
# @watchdog: the watchdog action is configured to pause and has been triggered
152
##
153
{ 'enum': 'RunState',
154
  'data': [ 'debug', 'inmigrate', 'internal-error', 'io-error', 'paused',
155
            'postmigrate', 'prelaunch', 'finish-migrate', 'restore-vm',
156
            'running', 'save-vm', 'shutdown', 'suspended', 'watchdog' ] }
157

    
158
##
159
# @SnapshotInfo
160
#
161
# @id: unique snapshot id
162
#
163
# @name: user chosen name
164
#
165
# @vm-state-size: size of the VM state
166
#
167
# @date-sec: UTC date of the snapshot in seconds
168
#
169
# @date-nsec: fractional part in nano seconds to be used with date-sec
170
#
171
# @vm-clock-sec: VM clock relative to boot in seconds
172
#
173
# @vm-clock-nsec: fractional part in nano seconds to be used with vm-clock-sec
174
#
175
# Since: 1.3
176
#
177
##
178

    
179
{ 'type': 'SnapshotInfo',
180
  'data': { 'id': 'str', 'name': 'str', 'vm-state-size': 'int',
181
            'date-sec': 'int', 'date-nsec': 'int',
182
            'vm-clock-sec': 'int', 'vm-clock-nsec': 'int' } }
183

    
184
##
185
# @ImageInfo:
186
#
187
# Information about a QEMU image file
188
#
189
# @filename: name of the image file
190
#
191
# @format: format of the image file
192
#
193
# @virtual-size: maximum capacity in bytes of the image
194
#
195
# @actual-size: #optional actual size on disk in bytes of the image
196
#
197
# @dirty-flag: #optional true if image is not cleanly closed
198
#
199
# @cluster-size: #optional size of a cluster in bytes
200
#
201
# @encrypted: #optional true if the image is encrypted
202
#
203
# @backing-filename: #optional name of the backing file
204
#
205
# @full-backing-filename: #optional full path of the backing file
206
#
207
# @backing-filename-format: #optional the format of the backing file
208
#
209
# @snapshots: #optional list of VM snapshots
210
#
211
# Since: 1.3
212
#
213
##
214

    
215
{ 'type': 'ImageInfo',
216
  'data': {'filename': 'str', 'format': 'str', '*dirty-flag': 'bool',
217
           '*actual-size': 'int', 'virtual-size': 'int',
218
           '*cluster-size': 'int', '*encrypted': 'bool',
219
           '*backing-filename': 'str', '*full-backing-filename': 'str',
220
           '*backing-filename-format': 'str', '*snapshots': ['SnapshotInfo'] } }
221

    
222
##
223
# @StatusInfo:
224
#
225
# Information about VCPU run state
226
#
227
# @running: true if all VCPUs are runnable, false if not runnable
228
#
229
# @singlestep: true if VCPUs are in single-step mode
230
#
231
# @status: the virtual machine @RunState
232
#
233
# Since:  0.14.0
234
#
235
# Notes: @singlestep is enabled through the GDB stub
236
##
237
{ 'type': 'StatusInfo',
238
  'data': {'running': 'bool', 'singlestep': 'bool', 'status': 'RunState'} }
239

    
240
##
241
# @query-status:
242
#
243
# Query the run status of all VCPUs
244
#
245
# Returns: @StatusInfo reflecting all VCPUs
246
#
247
# Since:  0.14.0
248
##
249
{ 'command': 'query-status', 'returns': 'StatusInfo' }
250

    
251
##
252
# @UuidInfo:
253
#
254
# Guest UUID information.
255
#
256
# @UUID: the UUID of the guest
257
#
258
# Since: 0.14.0
259
#
260
# Notes: If no UUID was specified for the guest, a null UUID is returned.
261
##
262
{ 'type': 'UuidInfo', 'data': {'UUID': 'str'} }
263

    
264
##
265
# @query-uuid:
266
#
267
# Query the guest UUID information.
268
#
269
# Returns: The @UuidInfo for the guest
270
#
271
# Since 0.14.0
272
##
273
{ 'command': 'query-uuid', 'returns': 'UuidInfo' }
274

    
275
##
276
# @ChardevInfo:
277
#
278
# Information about a character device.
279
#
280
# @label: the label of the character device
281
#
282
# @filename: the filename of the character device
283
#
284
# Notes: @filename is encoded using the QEMU command line character device
285
#        encoding.  See the QEMU man page for details.
286
#
287
# Since: 0.14.0
288
##
289
{ 'type': 'ChardevInfo', 'data': {'label': 'str', 'filename': 'str'} }
290

    
291
##
292
# @query-chardev:
293
#
294
# Returns information about current character devices.
295
#
296
# Returns: a list of @ChardevInfo
297
#
298
# Since: 0.14.0
299
##
300
{ 'command': 'query-chardev', 'returns': ['ChardevInfo'] }
301

    
302
##
303
# @CommandInfo:
304
#
305
# Information about a QMP command
306
#
307
# @name: The command name
308
#
309
# Since: 0.14.0
310
##
311
{ 'type': 'CommandInfo', 'data': {'name': 'str'} }
312

    
313
##
314
# @query-commands:
315
#
316
# Return a list of supported QMP commands by this server
317
#
318
# Returns: A list of @CommandInfo for all supported commands
319
#
320
# Since: 0.14.0
321
##
322
{ 'command': 'query-commands', 'returns': ['CommandInfo'] }
323

    
324
##
325
# @EventInfo:
326
#
327
# Information about a QMP event
328
#
329
# @name: The event name
330
#
331
# Since: 1.2.0
332
##
333
{ 'type': 'EventInfo', 'data': {'name': 'str'} }
334

    
335
##
336
# @query-events:
337
#
338
# Return a list of supported QMP events by this server
339
#
340
# Returns: A list of @EventInfo for all supported events
341
#
342
# Since: 1.2.0
343
##
344
{ 'command': 'query-events', 'returns': ['EventInfo'] }
345

    
346
##
347
# @MigrationStats
348
#
349
# Detailed migration status.
350
#
351
# @transferred: amount of bytes already transferred to the target VM
352
#
353
# @remaining: amount of bytes remaining to be transferred to the target VM
354
#
355
# @total: total amount of bytes involved in the migration process
356
#
357
# @duplicate: number of duplicate pages (since 1.2)
358
#
359
# @normal : number of normal pages (since 1.2)
360
#
361
# @normal-bytes : number of normal bytes sent (since 1.2)
362
#
363
# Since: 0.14.0
364
##
365
{ 'type': 'MigrationStats',
366
  'data': {'transferred': 'int', 'remaining': 'int', 'total': 'int' ,
367
           'duplicate': 'int', 'normal': 'int', 'normal-bytes': 'int' } }
368

    
369
##
370
# @XBZRLECacheStats
371
#
372
# Detailed XBZRLE migration cache statistics
373
#
374
# @cache-size: XBZRLE cache size
375
#
376
# @bytes: amount of bytes already transferred to the target VM
377
#
378
# @pages: amount of pages transferred to the target VM
379
#
380
# @cache-miss: number of cache miss
381
#
382
# @overflow: number of overflows
383
#
384
# Since: 1.2
385
##
386
{ 'type': 'XBZRLECacheStats',
387
  'data': {'cache-size': 'int', 'bytes': 'int', 'pages': 'int',
388
           'cache-miss': 'int', 'overflow': 'int' } }
389

    
390
##
391
# @MigrationInfo
392
#
393
# Information about current migration process.
394
#
395
# @status: #optional string describing the current migration status.
396
#          As of 0.14.0 this can be 'active', 'completed', 'failed' or
397
#          'cancelled'. If this field is not returned, no migration process
398
#          has been initiated
399
#
400
# @ram: #optional @MigrationStats containing detailed migration
401
#       status, only returned if status is 'active' or
402
#       'completed'. 'comppleted' (since 1.2)
403
#
404
# @disk: #optional @MigrationStats containing detailed disk migration
405
#        status, only returned if status is 'active' and it is a block
406
#        migration
407
#
408
# @xbzrle-cache: #optional @XBZRLECacheStats containing detailed XBZRLE
409
#                migration statistics, only returned if XBZRLE feature is on and
410
#                status is 'active' or 'completed' (since 1.2)
411
#
412
# @total-time: #optional total amount of milliseconds since migration started.
413
#        If migration has ended, it returns the total migration
414
#        time. (since 1.2)
415
#
416
# Since: 0.14.0
417
##
418
{ 'type': 'MigrationInfo',
419
  'data': {'*status': 'str', '*ram': 'MigrationStats',
420
           '*disk': 'MigrationStats',
421
           '*xbzrle-cache': 'XBZRLECacheStats',
422
           '*total-time': 'int'} }
423

    
424
##
425
# @query-migrate
426
#
427
# Returns information about current migration process.
428
#
429
# Returns: @MigrationInfo
430
#
431
# Since: 0.14.0
432
##
433
{ 'command': 'query-migrate', 'returns': 'MigrationInfo' }
434

    
435
##
436
# @MigrationCapability
437
#
438
# Migration capabilities enumeration
439
#
440
# @xbzrle: Migration supports xbzrle (Xor Based Zero Run Length Encoding).
441
#          This feature allows us to minimize migration traffic for certain work
442
#          loads, by sending compressed difference of the pages
443
#
444
# Since: 1.2
445
##
446
{ 'enum': 'MigrationCapability',
447
  'data': ['xbzrle'] }
448

    
449
##
450
# @MigrationCapabilityStatus
451
#
452
# Migration capability information
453
#
454
# @capability: capability enum
455
#
456
# @state: capability state bool
457
#
458
# Since: 1.2
459
##
460
{ 'type': 'MigrationCapabilityStatus',
461
  'data': { 'capability' : 'MigrationCapability', 'state' : 'bool' } }
462

    
463
##
464
# @migrate-set-capabilities
465
#
466
# Enable/Disable the following migration capabilities (like xbzrle)
467
#
468
# @capabilities: json array of capability modifications to make
469
#
470
# Since: 1.2
471
##
472
{ 'command': 'migrate-set-capabilities',
473
  'data': { 'capabilities': ['MigrationCapabilityStatus'] } }
474

    
475
##
476
# @query-migrate-capabilities
477
#
478
# Returns information about the current migration capabilities status
479
#
480
# Returns: @MigrationCapabilitiesStatus
481
#
482
# Since: 1.2
483
##
484
{ 'command': 'query-migrate-capabilities', 'returns':   ['MigrationCapabilityStatus']}
485

    
486
##
487
# @MouseInfo:
488
#
489
# Information about a mouse device.
490
#
491
# @name: the name of the mouse device
492
#
493
# @index: the index of the mouse device
494
#
495
# @current: true if this device is currently receiving mouse events
496
#
497
# @absolute: true if this device supports absolute coordinates as input
498
#
499
# Since: 0.14.0
500
##
501
{ 'type': 'MouseInfo',
502
  'data': {'name': 'str', 'index': 'int', 'current': 'bool',
503
           'absolute': 'bool'} }
504

    
505
##
506
# @query-mice:
507
#
508
# Returns information about each active mouse device
509
#
510
# Returns: a list of @MouseInfo for each device
511
#
512
# Since: 0.14.0
513
##
514
{ 'command': 'query-mice', 'returns': ['MouseInfo'] }
515

    
516
##
517
# @CpuInfo:
518
#
519
# Information about a virtual CPU
520
#
521
# @CPU: the index of the virtual CPU
522
#
523
# @current: this only exists for backwards compatible and should be ignored
524
#
525
# @halted: true if the virtual CPU is in the halt state.  Halt usually refers
526
#          to a processor specific low power mode.
527
#
528
# @pc: #optional If the target is i386 or x86_64, this is the 64-bit instruction
529
#                pointer.
530
#                If the target is Sparc, this is the PC component of the
531
#                instruction pointer.
532
#
533
# @nip: #optional If the target is PPC, the instruction pointer
534
#
535
# @npc: #optional If the target is Sparc, the NPC component of the instruction
536
#                 pointer
537
#
538
# @PC: #optional If the target is MIPS, the instruction pointer
539
#
540
# @thread_id: ID of the underlying host thread
541
#
542
# Since: 0.14.0
543
#
544
# Notes: @halted is a transient state that changes frequently.  By the time the
545
#        data is sent to the client, the guest may no longer be halted.
546
##
547
{ 'type': 'CpuInfo',
548
  'data': {'CPU': 'int', 'current': 'bool', 'halted': 'bool', '*pc': 'int',
549
           '*nip': 'int', '*npc': 'int', '*PC': 'int', 'thread_id': 'int'} }
550

    
551
##
552
# @query-cpus:
553
#
554
# Returns a list of information about each virtual CPU.
555
#
556
# Returns: a list of @CpuInfo for each virtual CPU
557
#
558
# Since: 0.14.0
559
##
560
{ 'command': 'query-cpus', 'returns': ['CpuInfo'] }
561

    
562
##
563
# @BlockDeviceInfo:
564
#
565
# Information about the backing device for a block device.
566
#
567
# @file: the filename of the backing device
568
#
569
# @ro: true if the backing device was open read-only
570
#
571
# @drv: the name of the block format used to open the backing device. As of
572
#       0.14.0 this can be: 'blkdebug', 'bochs', 'cloop', 'cow', 'dmg',
573
#       'file', 'file', 'ftp', 'ftps', 'host_cdrom', 'host_device',
574
#       'host_floppy', 'http', 'https', 'nbd', 'parallels', 'qcow',
575
#       'qcow2', 'raw', 'tftp', 'vdi', 'vmdk', 'vpc', 'vvfat'
576
#
577
# @backing_file: #optional the name of the backing file (for copy-on-write)
578
#
579
# @backing_file_depth: number of files in the backing file chain (since: 1.2)
580
#
581
# @encrypted: true if the backing device is encrypted
582
#
583
# @encryption_key_missing: true if the backing device is encrypted but an
584
#                          valid encryption key is missing
585
#
586
# @bps: total throughput limit in bytes per second is specified
587
#
588
# @bps_rd: read throughput limit in bytes per second is specified
589
#
590
# @bps_wr: write throughput limit in bytes per second is specified
591
#
592
# @iops: total I/O operations per second is specified
593
#
594
# @iops_rd: read I/O operations per second is specified
595
#
596
# @iops_wr: write I/O operations per second is specified
597
#
598
# Since: 0.14.0
599
#
600
# Notes: This interface is only found in @BlockInfo.
601
##
602
{ 'type': 'BlockDeviceInfo',
603
  'data': { 'file': 'str', 'ro': 'bool', 'drv': 'str',
604
            '*backing_file': 'str', 'backing_file_depth': 'int',
605
            'encrypted': 'bool', 'encryption_key_missing': 'bool',
606
            'bps': 'int', 'bps_rd': 'int', 'bps_wr': 'int',
607
            'iops': 'int', 'iops_rd': 'int', 'iops_wr': 'int'} }
608

    
609
##
610
# @BlockDeviceIoStatus:
611
#
612
# An enumeration of block device I/O status.
613
#
614
# @ok: The last I/O operation has succeeded
615
#
616
# @failed: The last I/O operation has failed
617
#
618
# @nospace: The last I/O operation has failed due to a no-space condition
619
#
620
# Since: 1.0
621
##
622
{ 'enum': 'BlockDeviceIoStatus', 'data': [ 'ok', 'failed', 'nospace' ] }
623

    
624
##
625
# @BlockInfo:
626
#
627
# Block device information.  This structure describes a virtual device and
628
# the backing device associated with it.
629
#
630
# @device: The device name associated with the virtual device.
631
#
632
# @type: This field is returned only for compatibility reasons, it should
633
#        not be used (always returns 'unknown')
634
#
635
# @removable: True if the device supports removable media.
636
#
637
# @locked: True if the guest has locked this device from having its media
638
#          removed
639
#
640
# @tray_open: #optional True if the device has a tray and it is open
641
#             (only present if removable is true)
642
#
643
# @io-status: #optional @BlockDeviceIoStatus. Only present if the device
644
#             supports it and the VM is configured to stop on errors
645
#
646
# @inserted: #optional @BlockDeviceInfo describing the device if media is
647
#            present
648
#
649
# Since:  0.14.0
650
##
651
{ 'type': 'BlockInfo',
652
  'data': {'device': 'str', 'type': 'str', 'removable': 'bool',
653
           'locked': 'bool', '*inserted': 'BlockDeviceInfo',
654
           '*tray_open': 'bool', '*io-status': 'BlockDeviceIoStatus'} }
655

    
656
##
657
# @query-block:
658
#
659
# Get a list of BlockInfo for all virtual block devices.
660
#
661
# Returns: a list of @BlockInfo describing each virtual block device
662
#
663
# Since: 0.14.0
664
##
665
{ 'command': 'query-block', 'returns': ['BlockInfo'] }
666

    
667
##
668
# @BlockDeviceStats:
669
#
670
# Statistics of a virtual block device or a block backing device.
671
#
672
# @rd_bytes:      The number of bytes read by the device.
673
#
674
# @wr_bytes:      The number of bytes written by the device.
675
#
676
# @rd_operations: The number of read operations performed by the device.
677
#
678
# @wr_operations: The number of write operations performed by the device.
679
#
680
# @flush_operations: The number of cache flush operations performed by the
681
#                    device (since 0.15.0)
682
#
683
# @flush_total_time_ns: Total time spend on cache flushes in nano-seconds
684
#                       (since 0.15.0).
685
#
686
# @wr_total_time_ns: Total time spend on writes in nano-seconds (since 0.15.0).
687
#
688
# @rd_total_time_ns: Total_time_spend on reads in nano-seconds (since 0.15.0).
689
#
690
# @wr_highest_offset: The offset after the greatest byte written to the
691
#                     device.  The intended use of this information is for
692
#                     growable sparse files (like qcow2) that are used on top
693
#                     of a physical device.
694
#
695
# Since: 0.14.0
696
##
697
{ 'type': 'BlockDeviceStats',
698
  'data': {'rd_bytes': 'int', 'wr_bytes': 'int', 'rd_operations': 'int',
699
           'wr_operations': 'int', 'flush_operations': 'int',
700
           'flush_total_time_ns': 'int', 'wr_total_time_ns': 'int',
701
           'rd_total_time_ns': 'int', 'wr_highest_offset': 'int' } }
702

    
703
##
704
# @BlockStats:
705
#
706
# Statistics of a virtual block device or a block backing device.
707
#
708
# @device: #optional If the stats are for a virtual block device, the name
709
#          corresponding to the virtual block device.
710
#
711
# @stats:  A @BlockDeviceStats for the device.
712
#
713
# @parent: #optional This may point to the backing block device if this is a
714
#          a virtual block device.  If it's a backing block, this will point
715
#          to the backing file is one is present.
716
#
717
# Since: 0.14.0
718
##
719
{ 'type': 'BlockStats',
720
  'data': {'*device': 'str', 'stats': 'BlockDeviceStats',
721
           '*parent': 'BlockStats'} }
722

    
723
##
724
# @query-blockstats:
725
#
726
# Query the @BlockStats for all virtual block devices.
727
#
728
# Returns: A list of @BlockStats for each virtual block devices.
729
#
730
# Since: 0.14.0
731
##
732
{ 'command': 'query-blockstats', 'returns': ['BlockStats'] }
733

    
734
##
735
# @VncClientInfo:
736
#
737
# Information about a connected VNC client.
738
#
739
# @host: The host name of the client.  QEMU tries to resolve this to a DNS name
740
#        when possible.
741
#
742
# @family: 'ipv6' if the client is connected via IPv6 and TCP
743
#          'ipv4' if the client is connected via IPv4 and TCP
744
#          'unix' if the client is connected via a unix domain socket
745
#          'unknown' otherwise
746
#
747
# @service: The service name of the client's port.  This may depends on the
748
#           host system's service database so symbolic names should not be
749
#           relied on.
750
#
751
# @x509_dname: #optional If x509 authentication is in use, the Distinguished
752
#              Name of the client.
753
#
754
# @sasl_username: #optional If SASL authentication is in use, the SASL username
755
#                 used for authentication.
756
#
757
# Since: 0.14.0
758
##
759
{ 'type': 'VncClientInfo',
760
  'data': {'host': 'str', 'family': 'str', 'service': 'str',
761
           '*x509_dname': 'str', '*sasl_username': 'str'} }
762

    
763
##
764
# @VncInfo:
765
#
766
# Information about the VNC session.
767
#
768
# @enabled: true if the VNC server is enabled, false otherwise
769
#
770
# @host: #optional The hostname the VNC server is bound to.  This depends on
771
#        the name resolution on the host and may be an IP address.
772
#
773
# @family: #optional 'ipv6' if the host is listening for IPv6 connections
774
#                    'ipv4' if the host is listening for IPv4 connections
775
#                    'unix' if the host is listening on a unix domain socket
776
#                    'unknown' otherwise
777
#
778
# @service: #optional The service name of the server's port.  This may depends
779
#           on the host system's service database so symbolic names should not
780
#           be relied on.
781
#
782
# @auth: #optional the current authentication type used by the server
783
#        'none' if no authentication is being used
784
#        'vnc' if VNC authentication is being used
785
#        'vencrypt+plain' if VEncrypt is used with plain text authentication
786
#        'vencrypt+tls+none' if VEncrypt is used with TLS and no authentication
787
#        'vencrypt+tls+vnc' if VEncrypt is used with TLS and VNC authentication
788
#        'vencrypt+tls+plain' if VEncrypt is used with TLS and plain text auth
789
#        'vencrypt+x509+none' if VEncrypt is used with x509 and no auth
790
#        'vencrypt+x509+vnc' if VEncrypt is used with x509 and VNC auth
791
#        'vencrypt+x509+plain' if VEncrypt is used with x509 and plain text auth
792
#        'vencrypt+tls+sasl' if VEncrypt is used with TLS and SASL auth
793
#        'vencrypt+x509+sasl' if VEncrypt is used with x509 and SASL auth
794
#
795
# @clients: a list of @VncClientInfo of all currently connected clients
796
#
797
# Since: 0.14.0
798
##
799
{ 'type': 'VncInfo',
800
  'data': {'enabled': 'bool', '*host': 'str', '*family': 'str',
801
           '*service': 'str', '*auth': 'str', '*clients': ['VncClientInfo']} }
802

    
803
##
804
# @query-vnc:
805
#
806
# Returns information about the current VNC server
807
#
808
# Returns: @VncInfo
809
#
810
# Since: 0.14.0
811
##
812
{ 'command': 'query-vnc', 'returns': 'VncInfo' }
813

    
814
##
815
# @SpiceChannel
816
#
817
# Information about a SPICE client channel.
818
#
819
# @host: The host name of the client.  QEMU tries to resolve this to a DNS name
820
#        when possible.
821
#
822
# @family: 'ipv6' if the client is connected via IPv6 and TCP
823
#          'ipv4' if the client is connected via IPv4 and TCP
824
#          'unix' if the client is connected via a unix domain socket
825
#          'unknown' otherwise
826
#
827
# @port: The client's port number.
828
#
829
# @connection-id: SPICE connection id number.  All channels with the same id
830
#                 belong to the same SPICE session.
831
#
832
# @connection-type: SPICE channel type number.  "1" is the main control
833
#                   channel, filter for this one if you want to track spice
834
#                   sessions only
835
#
836
# @channel-id: SPICE channel ID number.  Usually "0", might be different when
837
#              multiple channels of the same type exist, such as multiple
838
#              display channels in a multihead setup
839
#
840
# @tls: true if the channel is encrypted, false otherwise.
841
#
842
# Since: 0.14.0
843
##
844
{ 'type': 'SpiceChannel',
845
  'data': {'host': 'str', 'family': 'str', 'port': 'str',
846
           'connection-id': 'int', 'channel-type': 'int', 'channel-id': 'int',
847
           'tls': 'bool'} }
848

    
849
##
850
# @SpiceQueryMouseMode
851
#
852
# An enumeration of Spice mouse states.
853
#
854
# @client: Mouse cursor position is determined by the client.
855
#
856
# @server: Mouse cursor position is determined by the server.
857
#
858
# @unknown: No information is available about mouse mode used by
859
#           the spice server.
860
#
861
# Note: spice/enums.h has a SpiceMouseMode already, hence the name.
862
#
863
# Since: 1.1
864
##
865
{ 'enum': 'SpiceQueryMouseMode',
866
  'data': [ 'client', 'server', 'unknown' ] }
867

    
868
##
869
# @SpiceInfo
870
#
871
# Information about the SPICE session.
872
#
873
# @enabled: true if the SPICE server is enabled, false otherwise
874
#
875
# @migrated: true if the last guest migration completed and spice
876
#            migration had completed as well. false otherwise.
877
#
878
# @host: #optional The hostname the SPICE server is bound to.  This depends on
879
#        the name resolution on the host and may be an IP address.
880
#
881
# @port: #optional The SPICE server's port number.
882
#
883
# @compiled-version: #optional SPICE server version.
884
#
885
# @tls-port: #optional The SPICE server's TLS port number.
886
#
887
# @auth: #optional the current authentication type used by the server
888
#        'none'  if no authentication is being used
889
#        'spice' uses SASL or direct TLS authentication, depending on command
890
#                line options
891
#
892
# @mouse-mode: The mode in which the mouse cursor is displayed currently. Can
893
#              be determined by the client or the server, or unknown if spice
894
#              server doesn't provide this information.
895
#
896
#              Since: 1.1
897
#
898
# @channels: a list of @SpiceChannel for each active spice channel
899
#
900
# Since: 0.14.0
901
##
902
{ 'type': 'SpiceInfo',
903
  'data': {'enabled': 'bool', 'migrated': 'bool', '*host': 'str', '*port': 'int',
904
           '*tls-port': 'int', '*auth': 'str', '*compiled-version': 'str',
905
           'mouse-mode': 'SpiceQueryMouseMode', '*channels': ['SpiceChannel']} }
906

    
907
##
908
# @query-spice
909
#
910
# Returns information about the current SPICE server
911
#
912
# Returns: @SpiceInfo
913
#
914
# Since: 0.14.0
915
##
916
{ 'command': 'query-spice', 'returns': 'SpiceInfo' }
917

    
918
##
919
# @BalloonInfo:
920
#
921
# Information about the guest balloon device.
922
#
923
# @actual: the number of bytes the balloon currently contains
924
#
925
# @mem_swapped_in: #optional number of pages swapped in within the guest
926
#
927
# @mem_swapped_out: #optional number of pages swapped out within the guest
928
#
929
# @major_page_faults: #optional number of major page faults within the guest
930
#
931
# @minor_page_faults: #optional number of minor page faults within the guest
932
#
933
# @free_mem: #optional amount of memory (in bytes) free in the guest
934
#
935
# @total_mem: #optional amount of memory (in bytes) visible to the guest
936
#
937
# Since: 0.14.0
938
#
939
# Notes: all current versions of QEMU do not fill out optional information in
940
#        this structure.
941
##
942
{ 'type': 'BalloonInfo',
943
  'data': {'actual': 'int', '*mem_swapped_in': 'int',
944
           '*mem_swapped_out': 'int', '*major_page_faults': 'int',
945
           '*minor_page_faults': 'int', '*free_mem': 'int',
946
           '*total_mem': 'int'} }
947

    
948
##
949
# @query-balloon:
950
#
951
# Return information about the balloon device.
952
#
953
# Returns: @BalloonInfo on success
954
#          If the balloon driver is enabled but not functional because the KVM
955
#          kernel module cannot support it, KvmMissingCap
956
#          If no balloon device is present, DeviceNotActive
957
#
958
# Since: 0.14.0
959
##
960
{ 'command': 'query-balloon', 'returns': 'BalloonInfo' }
961

    
962
##
963
# @PciMemoryRange:
964
#
965
# A PCI device memory region
966
#
967
# @base: the starting address (guest physical)
968
#
969
# @limit: the ending address (guest physical)
970
#
971
# Since: 0.14.0
972
##
973
{ 'type': 'PciMemoryRange', 'data': {'base': 'int', 'limit': 'int'} }
974

    
975
##
976
# @PciMemoryRegion
977
#
978
# Information about a PCI device I/O region.
979
#
980
# @bar: the index of the Base Address Register for this region
981
#
982
# @type: 'io' if the region is a PIO region
983
#        'memory' if the region is a MMIO region
984
#
985
# @prefetch: #optional if @type is 'memory', true if the memory is prefetchable
986
#
987
# @mem_type_64: #optional if @type is 'memory', true if the BAR is 64-bit
988
#
989
# Since: 0.14.0
990
##
991
{ 'type': 'PciMemoryRegion',
992
  'data': {'bar': 'int', 'type': 'str', 'address': 'int', 'size': 'int',
993
           '*prefetch': 'bool', '*mem_type_64': 'bool' } }
994

    
995
##
996
# @PciBridgeInfo:
997
#
998
# Information about a PCI Bridge device
999
#
1000
# @bus.number: primary bus interface number.  This should be the number of the
1001
#              bus the device resides on.
1002
#
1003
# @bus.secondary: secondary bus interface number.  This is the number of the
1004
#                 main bus for the bridge
1005
#
1006
# @bus.subordinate: This is the highest number bus that resides below the
1007
#                   bridge.
1008
#
1009
# @bus.io_range: The PIO range for all devices on this bridge
1010
#
1011
# @bus.memory_range: The MMIO range for all devices on this bridge
1012
#
1013
# @bus.prefetchable_range: The range of prefetchable MMIO for all devices on
1014
#                          this bridge
1015
#
1016
# @devices: a list of @PciDeviceInfo for each device on this bridge
1017
#
1018
# Since: 0.14.0
1019
##
1020
{ 'type': 'PciBridgeInfo',
1021
  'data': {'bus': { 'number': 'int', 'secondary': 'int', 'subordinate': 'int',
1022
                    'io_range': 'PciMemoryRange',
1023
                    'memory_range': 'PciMemoryRange',
1024
                    'prefetchable_range': 'PciMemoryRange' },
1025
           '*devices': ['PciDeviceInfo']} }
1026

    
1027
##
1028
# @PciDeviceInfo:
1029
#
1030
# Information about a PCI device
1031
#
1032
# @bus: the bus number of the device
1033
#
1034
# @slot: the slot the device is located in
1035
#
1036
# @function: the function of the slot used by the device
1037
#
1038
# @class_info.desc: #optional a string description of the device's class
1039
#
1040
# @class_info.class: the class code of the device
1041
#
1042
# @id.device: the PCI device id
1043
#
1044
# @id.vendor: the PCI vendor id
1045
#
1046
# @irq: #optional if an IRQ is assigned to the device, the IRQ number
1047
#
1048
# @qdev_id: the device name of the PCI device
1049
#
1050
# @pci_bridge: if the device is a PCI bridge, the bridge information
1051
#
1052
# @regions: a list of the PCI I/O regions associated with the device
1053
#
1054
# Notes: the contents of @class_info.desc are not stable and should only be
1055
#        treated as informational.
1056
#
1057
# Since: 0.14.0
1058
##
1059
{ 'type': 'PciDeviceInfo',
1060
  'data': {'bus': 'int', 'slot': 'int', 'function': 'int',
1061
           'class_info': {'*desc': 'str', 'class': 'int'},
1062
           'id': {'device': 'int', 'vendor': 'int'},
1063
           '*irq': 'int', 'qdev_id': 'str', '*pci_bridge': 'PciBridgeInfo',
1064
           'regions': ['PciMemoryRegion']} }
1065

    
1066
##
1067
# @PciInfo:
1068
#
1069
# Information about a PCI bus
1070
#
1071
# @bus: the bus index
1072
#
1073
# @devices: a list of devices on this bus
1074
#
1075
# Since: 0.14.0
1076
##
1077
{ 'type': 'PciInfo', 'data': {'bus': 'int', 'devices': ['PciDeviceInfo']} }
1078

    
1079
##
1080
# @query-pci:
1081
#
1082
# Return information about the PCI bus topology of the guest.
1083
#
1084
# Returns: a list of @PciInfo for each PCI bus
1085
#
1086
# Since: 0.14.0
1087
##
1088
{ 'command': 'query-pci', 'returns': ['PciInfo'] }
1089

    
1090
##
1091
# @BlockJobInfo:
1092
#
1093
# Information about a long-running block device operation.
1094
#
1095
# @type: the job type ('stream' for image streaming)
1096
#
1097
# @device: the block device name
1098
#
1099
# @len: the maximum progress value
1100
#
1101
# @offset: the current progress value
1102
#
1103
# @speed: the rate limit, bytes per second
1104
#
1105
# Since: 1.1
1106
##
1107
{ 'type': 'BlockJobInfo',
1108
  'data': {'type': 'str', 'device': 'str', 'len': 'int',
1109
           'offset': 'int', 'speed': 'int'} }
1110

    
1111
##
1112
# @query-block-jobs:
1113
#
1114
# Return information about long-running block device operations.
1115
#
1116
# Returns: a list of @BlockJobInfo for each active block job
1117
#
1118
# Since: 1.1
1119
##
1120
{ 'command': 'query-block-jobs', 'returns': ['BlockJobInfo'] }
1121

    
1122
##
1123
# @quit:
1124
#
1125
# This command will cause the QEMU process to exit gracefully.  While every
1126
# attempt is made to send the QMP response before terminating, this is not
1127
# guaranteed.  When using this interface, a premature EOF would not be
1128
# unexpected.
1129
#
1130
# Since: 0.14.0
1131
##
1132
{ 'command': 'quit' }
1133

    
1134
##
1135
# @stop:
1136
#
1137
# Stop all guest VCPU execution.
1138
#
1139
# Since:  0.14.0
1140
#
1141
# Notes:  This function will succeed even if the guest is already in the stopped
1142
#         state
1143
##
1144
{ 'command': 'stop' }
1145

    
1146
##
1147
# @system_reset:
1148
#
1149
# Performs a hard reset of a guest.
1150
#
1151
# Since: 0.14.0
1152
##
1153
{ 'command': 'system_reset' }
1154

    
1155
##
1156
# @system_powerdown:
1157
#
1158
# Requests that a guest perform a powerdown operation.
1159
#
1160
# Since: 0.14.0
1161
#
1162
# Notes: A guest may or may not respond to this command.  This command
1163
#        returning does not indicate that a guest has accepted the request or
1164
#        that it has shut down.  Many guests will respond to this command by
1165
#        prompting the user in some way.
1166
##
1167
{ 'command': 'system_powerdown' }
1168

    
1169
##
1170
# @cpu:
1171
#
1172
# This command is a nop that is only provided for the purposes of compatibility.
1173
#
1174
# Since: 0.14.0
1175
#
1176
# Notes: Do not use this command.
1177
##
1178
{ 'command': 'cpu', 'data': {'index': 'int'} }
1179

    
1180
##
1181
# @memsave:
1182
#
1183
# Save a portion of guest memory to a file.
1184
#
1185
# @val: the virtual address of the guest to start from
1186
#
1187
# @size: the size of memory region to save
1188
#
1189
# @filename: the file to save the memory to as binary data
1190
#
1191
# @cpu-index: #optional the index of the virtual CPU to use for translating the
1192
#                       virtual address (defaults to CPU 0)
1193
#
1194
# Returns: Nothing on success
1195
#
1196
# Since: 0.14.0
1197
#
1198
# Notes: Errors were not reliably returned until 1.1
1199
##
1200
{ 'command': 'memsave',
1201
  'data': {'val': 'int', 'size': 'int', 'filename': 'str', '*cpu-index': 'int'} }
1202

    
1203
##
1204
# @pmemsave:
1205
#
1206
# Save a portion of guest physical memory to a file.
1207
#
1208
# @val: the physical address of the guest to start from
1209
#
1210
# @size: the size of memory region to save
1211
#
1212
# @filename: the file to save the memory to as binary data
1213
#
1214
# Returns: Nothing on success
1215
#
1216
# Since: 0.14.0
1217
#
1218
# Notes: Errors were not reliably returned until 1.1
1219
##
1220
{ 'command': 'pmemsave',
1221
  'data': {'val': 'int', 'size': 'int', 'filename': 'str'} }
1222

    
1223
##
1224
# @cont:
1225
#
1226
# Resume guest VCPU execution.
1227
#
1228
# Since:  0.14.0
1229
#
1230
# Returns:  If successful, nothing
1231
#           If the QEMU is waiting for an incoming migration, MigrationExpected
1232
#           If QEMU was started with an encrypted block device and a key has
1233
#              not yet been set, DeviceEncrypted.
1234
#
1235
# Notes:  This command will succeed if the guest is currently running.
1236
##
1237
{ 'command': 'cont' }
1238

    
1239
##
1240
# @system_wakeup:
1241
#
1242
# Wakeup guest from suspend.  Does nothing in case the guest isn't suspended.
1243
#
1244
# Since:  1.1
1245
#
1246
# Returns:  nothing.
1247
##
1248
{ 'command': 'system_wakeup' }
1249

    
1250
##
1251
# @inject-nmi:
1252
#
1253
# Injects an Non-Maskable Interrupt into all guest's VCPUs.
1254
#
1255
# Returns:  If successful, nothing
1256
#
1257
# Since:  0.14.0
1258
#
1259
# Notes: Only x86 Virtual Machines support this command.
1260
##
1261
{ 'command': 'inject-nmi' }
1262

    
1263
##
1264
# @set_link:
1265
#
1266
# Sets the link status of a virtual network adapter.
1267
#
1268
# @name: the device name of the virtual network adapter
1269
#
1270
# @up: true to set the link status to be up
1271
#
1272
# Returns: Nothing on success
1273
#          If @name is not a valid network device, DeviceNotFound
1274
#
1275
# Since: 0.14.0
1276
#
1277
# Notes: Not all network adapters support setting link status.  This command
1278
#        will succeed even if the network adapter does not support link status
1279
#        notification.
1280
##
1281
{ 'command': 'set_link', 'data': {'name': 'str', 'up': 'bool'} }
1282

    
1283
##
1284
# @block_passwd:
1285
#
1286
# This command sets the password of a block device that has not been open
1287
# with a password and requires one.
1288
#
1289
# The two cases where this can happen are a block device is created through
1290
# QEMU's initial command line or a block device is changed through the legacy
1291
# @change interface.
1292
#
1293
# In the event that the block device is created through the initial command
1294
# line, the VM will start in the stopped state regardless of whether '-S' is
1295
# used.  The intention is for a management tool to query the block devices to
1296
# determine which ones are encrypted, set the passwords with this command, and
1297
# then start the guest with the @cont command.
1298
#
1299
# @device:   the name of the device to set the password on
1300
#
1301
# @password: the password to use for the device
1302
#
1303
# Returns: nothing on success
1304
#          If @device is not a valid block device, DeviceNotFound
1305
#          If @device is not encrypted, DeviceNotEncrypted
1306
#
1307
# Notes:  Not all block formats support encryption and some that do are not
1308
#         able to validate that a password is correct.  Disk corruption may
1309
#         occur if an invalid password is specified.
1310
#
1311
# Since: 0.14.0
1312
##
1313
{ 'command': 'block_passwd', 'data': {'device': 'str', 'password': 'str'} }
1314

    
1315
##
1316
# @balloon:
1317
#
1318
# Request the balloon driver to change its balloon size.
1319
#
1320
# @value: the target size of the balloon in bytes
1321
#
1322
# Returns: Nothing on success
1323
#          If the balloon driver is enabled but not functional because the KVM
1324
#            kernel module cannot support it, KvmMissingCap
1325
#          If no balloon device is present, DeviceNotActive
1326
#
1327
# Notes: This command just issues a request to the guest.  When it returns,
1328
#        the balloon size may not have changed.  A guest can change the balloon
1329
#        size independent of this command.
1330
#
1331
# Since: 0.14.0
1332
##
1333
{ 'command': 'balloon', 'data': {'value': 'int'} }
1334

    
1335
##
1336
# @block_resize
1337
#
1338
# Resize a block image while a guest is running.
1339
#
1340
# @device:  the name of the device to get the image resized
1341
#
1342
# @size:  new image size in bytes
1343
#
1344
# Returns: nothing on success
1345
#          If @device is not a valid block device, DeviceNotFound
1346
#
1347
# Since: 0.14.0
1348
##
1349
{ 'command': 'block_resize', 'data': { 'device': 'str', 'size': 'int' }}
1350

    
1351
##
1352
# @NewImageMode
1353
#
1354
# An enumeration that tells QEMU how to set the backing file path in
1355
# a new image file.
1356
#
1357
# @existing: QEMU should look for an existing image file.
1358
#
1359
# @absolute-paths: QEMU should create a new image with absolute paths
1360
# for the backing file.
1361
#
1362
# Since: 1.1
1363
##
1364
{ 'enum': 'NewImageMode'
1365
  'data': [ 'existing', 'absolute-paths' ] }
1366

    
1367
##
1368
# @BlockdevSnapshot
1369
#
1370
# @device:  the name of the device to generate the snapshot from.
1371
#
1372
# @snapshot-file: the target of the new image. A new file will be created.
1373
#
1374
# @format: #optional the format of the snapshot image, default is 'qcow2'.
1375
#
1376
# @mode: #optional whether and how QEMU should create a new image, default is
1377
# 'absolute-paths'.
1378
##
1379
{ 'type': 'BlockdevSnapshot',
1380
  'data': { 'device': 'str', 'snapshot-file': 'str', '*format': 'str',
1381
            '*mode': 'NewImageMode' } }
1382

    
1383
##
1384
# @BlockdevAction
1385
#
1386
# A discriminated record of operations that can be performed with
1387
# @transaction.
1388
##
1389
{ 'union': 'BlockdevAction',
1390
  'data': {
1391
       'blockdev-snapshot-sync': 'BlockdevSnapshot',
1392
   } }
1393

    
1394
##
1395
# @transaction
1396
#
1397
# Atomically operate on a group of one or more block devices.  If
1398
# any operation fails, then the entire set of actions will be
1399
# abandoned and the appropriate error returned.  The only operation
1400
# supported is currently blockdev-snapshot-sync.
1401
#
1402
#  List of:
1403
#  @BlockdevAction: information needed for the device snapshot
1404
#
1405
# Returns: nothing on success
1406
#          If @device is not a valid block device, DeviceNotFound
1407
#
1408
# Note: The transaction aborts on the first failure.  Therefore, there will
1409
# be only one device or snapshot file returned in an error condition, and
1410
# subsequent actions will not have been attempted.
1411
#
1412
# Since 1.1
1413
##
1414
{ 'command': 'transaction',
1415
  'data': { 'actions': [ 'BlockdevAction' ] } }
1416

    
1417
##
1418
# @blockdev-snapshot-sync
1419
#
1420
# Generates a synchronous snapshot of a block device.
1421
#
1422
# @device:  the name of the device to generate the snapshot from.
1423
#
1424
# @snapshot-file: the target of the new image. If the file exists, or if it
1425
#                 is a device, the snapshot will be created in the existing
1426
#                 file/device. If does not exist, a new file will be created.
1427
#
1428
# @format: #optional the format of the snapshot image, default is 'qcow2'.
1429
#
1430
# @mode: #optional whether and how QEMU should create a new image, default is
1431
# 'absolute-paths'.
1432
#
1433
# Returns: nothing on success
1434
#          If @device is not a valid block device, DeviceNotFound
1435
#
1436
# Since 0.14.0
1437
##
1438
{ 'command': 'blockdev-snapshot-sync',
1439
  'data': { 'device': 'str', 'snapshot-file': 'str', '*format': 'str',
1440
            '*mode': 'NewImageMode'} }
1441

    
1442
##
1443
# @human-monitor-command:
1444
#
1445
# Execute a command on the human monitor and return the output.
1446
#
1447
# @command-line: the command to execute in the human monitor
1448
#
1449
# @cpu-index: #optional The CPU to use for commands that require an implicit CPU
1450
#
1451
# Returns: the output of the command as a string
1452
#
1453
# Since: 0.14.0
1454
#
1455
# Notes: This command only exists as a stop-gap.  It's use is highly
1456
#        discouraged.  The semantics of this command are not guaranteed.
1457
#
1458
#        Known limitations:
1459
#
1460
#        o This command is stateless, this means that commands that depend
1461
#          on state information (such as getfd) might not work
1462
#
1463
#       o Commands that prompt the user for data (eg. 'cont' when the block
1464
#         device is encrypted) don't currently work
1465
##
1466
{ 'command': 'human-monitor-command',
1467
  'data': {'command-line': 'str', '*cpu-index': 'int'},
1468
  'returns': 'str' }
1469

    
1470
##
1471
# @migrate_cancel
1472
#
1473
# Cancel the current executing migration process.
1474
#
1475
# Returns: nothing on success
1476
#
1477
# Notes: This command succeeds even if there is no migration process running.
1478
#
1479
# Since: 0.14.0
1480
##
1481
{ 'command': 'migrate_cancel' }
1482

    
1483
##
1484
# @migrate_set_downtime
1485
#
1486
# Set maximum tolerated downtime for migration.
1487
#
1488
# @value: maximum downtime in seconds
1489
#
1490
# Returns: nothing on success
1491
#
1492
# Since: 0.14.0
1493
##
1494
{ 'command': 'migrate_set_downtime', 'data': {'value': 'number'} }
1495

    
1496
##
1497
# @migrate_set_speed
1498
#
1499
# Set maximum speed for migration.
1500
#
1501
# @value: maximum speed in bytes.
1502
#
1503
# Returns: nothing on success
1504
#
1505
# Notes: A value lesser than zero will be automatically round up to zero.
1506
#
1507
# Since: 0.14.0
1508
##
1509
{ 'command': 'migrate_set_speed', 'data': {'value': 'int'} }
1510

    
1511
##
1512
# @migrate-set-cache-size
1513
#
1514
# Set XBZRLE cache size
1515
#
1516
# @value: cache size in bytes
1517
#
1518
# The size will be rounded down to the nearest power of 2.
1519
# The cache size can be modified before and during ongoing migration
1520
#
1521
# Returns: nothing on success
1522
#
1523
# Since: 1.2
1524
##
1525
{ 'command': 'migrate-set-cache-size', 'data': {'value': 'int'} }
1526

    
1527
##
1528
# @query-migrate-cache-size
1529
#
1530
# query XBZRLE cache size
1531
#
1532
# Returns: XBZRLE cache size in bytes
1533
#
1534
# Since: 1.2
1535
##
1536
{ 'command': 'query-migrate-cache-size', 'returns': 'int' }
1537

    
1538
##
1539
# @ObjectPropertyInfo:
1540
#
1541
# @name: the name of the property
1542
#
1543
# @type: the type of the property.  This will typically come in one of four
1544
#        forms:
1545
#
1546
#        1) A primitive type such as 'u8', 'u16', 'bool', 'str', or 'double'.
1547
#           These types are mapped to the appropriate JSON type.
1548
#
1549
#        2) A legacy type in the form 'legacy<subtype>' where subtype is the
1550
#           legacy qdev typename.  These types are always treated as strings.
1551
#
1552
#        3) A child type in the form 'child<subtype>' where subtype is a qdev
1553
#           device type name.  Child properties create the composition tree.
1554
#
1555
#        4) A link type in the form 'link<subtype>' where subtype is a qdev
1556
#           device type name.  Link properties form the device model graph.
1557
#
1558
# Since: 1.2
1559
##
1560
{ 'type': 'ObjectPropertyInfo',
1561
  'data': { 'name': 'str', 'type': 'str' } }
1562

    
1563
##
1564
# @qom-list:
1565
#
1566
# This command will list any properties of a object given a path in the object
1567
# model.
1568
#
1569
# @path: the path within the object model.  See @qom-get for a description of
1570
#        this parameter.
1571
#
1572
# Returns: a list of @ObjectPropertyInfo that describe the properties of the
1573
#          object.
1574
#
1575
# Since: 1.2
1576
##
1577
{ 'command': 'qom-list',
1578
  'data': { 'path': 'str' },
1579
  'returns': [ 'ObjectPropertyInfo' ] }
1580

    
1581
##
1582
# @qom-get:
1583
#
1584
# This command will get a property from a object model path and return the
1585
# value.
1586
#
1587
# @path: The path within the object model.  There are two forms of supported
1588
#        paths--absolute and partial paths.
1589
#
1590
#        Absolute paths are derived from the root object and can follow child<>
1591
#        or link<> properties.  Since they can follow link<> properties, they
1592
#        can be arbitrarily long.  Absolute paths look like absolute filenames
1593
#        and are prefixed  with a leading slash.
1594
#
1595
#        Partial paths look like relative filenames.  They do not begin
1596
#        with a prefix.  The matching rules for partial paths are subtle but
1597
#        designed to make specifying objects easy.  At each level of the
1598
#        composition tree, the partial path is matched as an absolute path.
1599
#        The first match is not returned.  At least two matches are searched
1600
#        for.  A successful result is only returned if only one match is
1601
#        found.  If more than one match is found, a flag is return to
1602
#        indicate that the match was ambiguous.
1603
#
1604
# @property: The property name to read
1605
#
1606
# Returns: The property value.  The type depends on the property type.  legacy<>
1607
#          properties are returned as #str.  child<> and link<> properties are
1608
#          returns as #str pathnames.  All integer property types (u8, u16, etc)
1609
#          are returned as #int.
1610
#
1611
# Since: 1.2
1612
##
1613
{ 'command': 'qom-get',
1614
  'data': { 'path': 'str', 'property': 'str' },
1615
  'returns': 'visitor',
1616
  'gen': 'no' }
1617

    
1618
##
1619
# @qom-set:
1620
#
1621
# This command will set a property from a object model path.
1622
#
1623
# @path: see @qom-get for a description of this parameter
1624
#
1625
# @property: the property name to set
1626
#
1627
# @value: a value who's type is appropriate for the property type.  See @qom-get
1628
#         for a description of type mapping.
1629
#
1630
# Since: 1.2
1631
##
1632
{ 'command': 'qom-set',
1633
  'data': { 'path': 'str', 'property': 'str', 'value': 'visitor' },
1634
  'gen': 'no' }
1635

    
1636
##
1637
# @set_password:
1638
#
1639
# Sets the password of a remote display session.
1640
#
1641
# @protocol: `vnc' to modify the VNC server password
1642
#            `spice' to modify the Spice server password
1643
#
1644
# @password: the new password
1645
#
1646
# @connected: #optional how to handle existing clients when changing the
1647
#                       password.  If nothing is specified, defaults to `keep'
1648
#                       `fail' to fail the command if clients are connected
1649
#                       `disconnect' to disconnect existing clients
1650
#                       `keep' to maintain existing clients
1651
#
1652
# Returns: Nothing on success
1653
#          If Spice is not enabled, DeviceNotFound
1654
#
1655
# Since: 0.14.0
1656
##
1657
{ 'command': 'set_password',
1658
  'data': {'protocol': 'str', 'password': 'str', '*connected': 'str'} }
1659

    
1660
##
1661
# @expire_password:
1662
#
1663
# Expire the password of a remote display server.
1664
#
1665
# @protocol: the name of the remote display protocol `vnc' or `spice'
1666
#
1667
# @time: when to expire the password.
1668
#        `now' to expire the password immediately
1669
#        `never' to cancel password expiration
1670
#        `+INT' where INT is the number of seconds from now (integer)
1671
#        `INT' where INT is the absolute time in seconds
1672
#
1673
# Returns: Nothing on success
1674
#          If @protocol is `spice' and Spice is not active, DeviceNotFound
1675
#
1676
# Since: 0.14.0
1677
#
1678
# Notes: Time is relative to the server and currently there is no way to
1679
#        coordinate server time with client time.  It is not recommended to
1680
#        use the absolute time version of the @time parameter unless you're
1681
#        sure you are on the same machine as the QEMU instance.
1682
##
1683
{ 'command': 'expire_password', 'data': {'protocol': 'str', 'time': 'str'} }
1684

    
1685
##
1686
# @eject:
1687
#
1688
# Ejects a device from a removable drive.
1689
#
1690
# @device:  The name of the device
1691
#
1692
# @force:   @optional If true, eject regardless of whether the drive is locked.
1693
#           If not specified, the default value is false.
1694
#
1695
# Returns:  Nothing on success
1696
#           If @device is not a valid block device, DeviceNotFound
1697
#
1698
# Notes:    Ejecting a device will no media results in success
1699
#
1700
# Since: 0.14.0
1701
##
1702
{ 'command': 'eject', 'data': {'device': 'str', '*force': 'bool'} }
1703

    
1704
##
1705
# @change-vnc-password:
1706
#
1707
# Change the VNC server password.
1708
#
1709
# @target:  the new password to use with VNC authentication
1710
#
1711
# Since: 1.1
1712
#
1713
# Notes:  An empty password in this command will set the password to the empty
1714
#         string.  Existing clients are unaffected by executing this command.
1715
##
1716
{ 'command': 'change-vnc-password', 'data': {'password': 'str'} }
1717

    
1718
##
1719
# @change:
1720
#
1721
# This command is multiple commands multiplexed together.
1722
#
1723
# @device: This is normally the name of a block device but it may also be 'vnc'.
1724
#          when it's 'vnc', then sub command depends on @target
1725
#
1726
# @target: If @device is a block device, then this is the new filename.
1727
#          If @device is 'vnc', then if the value 'password' selects the vnc
1728
#          change password command.   Otherwise, this specifies a new server URI
1729
#          address to listen to for VNC connections.
1730
#
1731
# @arg:    If @device is a block device, then this is an optional format to open
1732
#          the device with.
1733
#          If @device is 'vnc' and @target is 'password', this is the new VNC
1734
#          password to set.  If this argument is an empty string, then no future
1735
#          logins will be allowed.
1736
#
1737
# Returns: Nothing on success.
1738
#          If @device is not a valid block device, DeviceNotFound
1739
#          If the new block device is encrypted, DeviceEncrypted.  Note that
1740
#          if this error is returned, the device has been opened successfully
1741
#          and an additional call to @block_passwd is required to set the
1742
#          device's password.  The behavior of reads and writes to the block
1743
#          device between when these calls are executed is undefined.
1744
#
1745
# Notes:  It is strongly recommended that this interface is not used especially
1746
#         for changing block devices.
1747
#
1748
# Since: 0.14.0
1749
##
1750
{ 'command': 'change',
1751
  'data': {'device': 'str', 'target': 'str', '*arg': 'str'} }
1752

    
1753
##
1754
# @block_set_io_throttle:
1755
#
1756
# Change I/O throttle limits for a block drive.
1757
#
1758
# @device: The name of the device
1759
#
1760
# @bps: total throughput limit in bytes per second
1761
#
1762
# @bps_rd: read throughput limit in bytes per second
1763
#
1764
# @bps_wr: write throughput limit in bytes per second
1765
#
1766
# @iops: total I/O operations per second
1767
#
1768
# @ops_rd: read I/O operations per second
1769
#
1770
# @iops_wr: write I/O operations per second
1771
#
1772
# Returns: Nothing on success
1773
#          If @device is not a valid block device, DeviceNotFound
1774
#
1775
# Since: 1.1
1776
##
1777
{ 'command': 'block_set_io_throttle',
1778
  'data': { 'device': 'str', 'bps': 'int', 'bps_rd': 'int', 'bps_wr': 'int',
1779
            'iops': 'int', 'iops_rd': 'int', 'iops_wr': 'int' } }
1780

    
1781
##
1782
# @block-stream:
1783
#
1784
# Copy data from a backing file into a block device.
1785
#
1786
# The block streaming operation is performed in the background until the entire
1787
# backing file has been copied.  This command returns immediately once streaming
1788
# has started.  The status of ongoing block streaming operations can be checked
1789
# with query-block-jobs.  The operation can be stopped before it has completed
1790
# using the block-job-cancel command.
1791
#
1792
# If a base file is specified then sectors are not copied from that base file and
1793
# its backing chain.  When streaming completes the image file will have the base
1794
# file as its backing file.  This can be used to stream a subset of the backing
1795
# file chain instead of flattening the entire image.
1796
#
1797
# On successful completion the image file is updated to drop the backing file
1798
# and the BLOCK_JOB_COMPLETED event is emitted.
1799
#
1800
# @device: the device name
1801
#
1802
# @base:   #optional the common backing file name
1803
#
1804
# @speed:  #optional the maximum speed, in bytes per second
1805
#
1806
# Returns: Nothing on success
1807
#          If @device does not exist, DeviceNotFound
1808
#
1809
# Since: 1.1
1810
##
1811
{ 'command': 'block-stream', 'data': { 'device': 'str', '*base': 'str',
1812
                                       '*speed': 'int' } }
1813

    
1814
##
1815
# @block-job-set-speed:
1816
#
1817
# Set maximum speed for a background block operation.
1818
#
1819
# This command can only be issued when there is an active block job.
1820
#
1821
# Throttling can be disabled by setting the speed to 0.
1822
#
1823
# @device: the device name
1824
#
1825
# @speed:  the maximum speed, in bytes per second, or 0 for unlimited.
1826
#          Defaults to 0.
1827
#
1828
# Returns: Nothing on success
1829
#          If no background operation is active on this device, DeviceNotActive
1830
#
1831
# Since: 1.1
1832
##
1833
{ 'command': 'block-job-set-speed',
1834
  'data': { 'device': 'str', 'speed': 'int' } }
1835

    
1836
##
1837
# @block-job-cancel:
1838
#
1839
# Stop an active background block operation.
1840
#
1841
# This command returns immediately after marking the active background block
1842
# operation for cancellation.  It is an error to call this command if no
1843
# operation is in progress.
1844
#
1845
# The operation will cancel as soon as possible and then emit the
1846
# BLOCK_JOB_CANCELLED event.  Before that happens the job is still visible when
1847
# enumerated using query-block-jobs.
1848
#
1849
# For streaming, the image file retains its backing file unless the streaming
1850
# operation happens to complete just as it is being cancelled.  A new streaming
1851
# operation can be started at a later time to finish copying all data from the
1852
# backing file.
1853
#
1854
# @device: the device name
1855
#
1856
# Returns: Nothing on success
1857
#          If no background operation is active on this device, DeviceNotActive
1858
#
1859
# Since: 1.1
1860
##
1861
{ 'command': 'block-job-cancel', 'data': { 'device': 'str' } }
1862

    
1863
##
1864
# @ObjectTypeInfo:
1865
#
1866
# This structure describes a search result from @qom-list-types
1867
#
1868
# @name: the type name found in the search
1869
#
1870
# Since: 1.1
1871
#
1872
# Notes: This command is experimental and may change syntax in future releases.
1873
##
1874
{ 'type': 'ObjectTypeInfo',
1875
  'data': { 'name': 'str' } }
1876

    
1877
##
1878
# @qom-list-types:
1879
#
1880
# This command will return a list of types given search parameters
1881
#
1882
# @implements: if specified, only return types that implement this type name
1883
#
1884
# @abstract: if true, include abstract types in the results
1885
#
1886
# Returns: a list of @ObjectTypeInfo or an empty list if no results are found
1887
#
1888
# Since: 1.1
1889
##
1890
{ 'command': 'qom-list-types',
1891
  'data': { '*implements': 'str', '*abstract': 'bool' },
1892
  'returns': [ 'ObjectTypeInfo' ] }
1893

    
1894
##
1895
# @DevicePropertyInfo:
1896
#
1897
# Information about device properties.
1898
#
1899
# @name: the name of the property
1900
# @type: the typename of the property
1901
#
1902
# Since: 1.2
1903
##
1904
{ 'type': 'DevicePropertyInfo',
1905
  'data': { 'name': 'str', 'type': 'str' } }
1906

    
1907
##
1908
# @device-list-properties:
1909
#
1910
# List properties associated with a device.
1911
#
1912
# @typename: the type name of a device
1913
#
1914
# Returns: a list of DevicePropertyInfo describing a devices properties
1915
#
1916
# Since: 1.2
1917
##
1918
{ 'command': 'device-list-properties',
1919
  'data': { 'typename': 'str'},
1920
  'returns': [ 'DevicePropertyInfo' ] }
1921

    
1922
##
1923
# @migrate
1924
#
1925
# Migrates the current running guest to another Virtual Machine.
1926
#
1927
# @uri: the Uniform Resource Identifier of the destination VM
1928
#
1929
# @blk: #optional do block migration (full disk copy)
1930
#
1931
# @inc: #optional incremental disk copy migration
1932
#
1933
# @detach: this argument exists only for compatibility reasons and
1934
#          is ignored by QEMU
1935
#
1936
# Returns: nothing on success
1937
#
1938
# Since: 0.14.0
1939
##
1940
{ 'command': 'migrate',
1941
  'data': {'uri': 'str', '*blk': 'bool', '*inc': 'bool', '*detach': 'bool' } }
1942

    
1943
# @xen-save-devices-state:
1944
#
1945
# Save the state of all devices to file. The RAM and the block devices
1946
# of the VM are not saved by this command.
1947
#
1948
# @filename: the file to save the state of the devices to as binary
1949
# data. See xen-save-devices-state.txt for a description of the binary
1950
# format.
1951
#
1952
# Returns: Nothing on success
1953
#
1954
# Since: 1.1
1955
##
1956
{ 'command': 'xen-save-devices-state', 'data': {'filename': 'str'} }
1957

    
1958
##
1959
# @device_del:
1960
#
1961
# Remove a device from a guest
1962
#
1963
# @id: the name of the device
1964
#
1965
# Returns: Nothing on success
1966
#          If @id is not a valid device, DeviceNotFound
1967
#
1968
# Notes: When this command completes, the device may not be removed from the
1969
#        guest.  Hot removal is an operation that requires guest cooperation.
1970
#        This command merely requests that the guest begin the hot removal
1971
#        process.
1972
#
1973
# Since: 0.14.0
1974
##
1975
{ 'command': 'device_del', 'data': {'id': 'str'} }
1976

    
1977
##
1978
# @dump-guest-memory
1979
#
1980
# Dump guest's memory to vmcore. It is a synchronous operation that can take
1981
# very long depending on the amount of guest memory. This command is only
1982
# supported on i386 and x86_64.
1983
#
1984
# @paging: if true, do paging to get guest's memory mapping. This allows
1985
# using gdb to process the core file. However, setting @paging to false
1986
# may be desirable because of two reasons:
1987
#
1988
#   1. The guest may be in a catastrophic state or can have corrupted
1989
#      memory, which cannot be trusted
1990
#   2. The guest can be in real-mode even if paging is enabled. For example,
1991
#      the guest uses ACPI to sleep, and ACPI sleep state goes in real-mode
1992
#
1993
# @protocol: the filename or file descriptor of the vmcore. The supported
1994
# protocols are:
1995
#
1996
#   1. file: the protocol starts with "file:", and the following string is
1997
#      the file's path.
1998
#   2. fd: the protocol starts with "fd:", and the following string is the
1999
#      fd's name.
2000
#
2001
# @begin: #optional if specified, the starting physical address.
2002
#
2003
# @length: #optional if specified, the memory size, in bytes. If you don't
2004
# want to dump all guest's memory, please specify the start @begin and @length
2005
#
2006
# Returns: nothing on success
2007
#
2008
# Since: 1.2
2009
##
2010
{ 'command': 'dump-guest-memory',
2011
  'data': { 'paging': 'bool', 'protocol': 'str', '*begin': 'int',
2012
            '*length': 'int' } }
2013
##
2014
# @netdev_add:
2015
#
2016
# Add a network backend.
2017
#
2018
# @type: the type of network backend.  Current valid values are 'user', 'tap',
2019
#        'vde', 'socket', 'dump' and 'bridge'
2020
#
2021
# @id: the name of the new network backend
2022
#
2023
# @props: #optional a list of properties to be passed to the backend in
2024
#         the format 'name=value', like 'ifname=tap0,script=no'
2025
#
2026
# Notes: The semantics of @props is not well defined.  Future commands will be
2027
#        introduced that provide stronger typing for backend creation.
2028
#
2029
# Since: 0.14.0
2030
#
2031
# Returns: Nothing on success
2032
#          If @type is not a valid network backend, DeviceNotFound
2033
##
2034
{ 'command': 'netdev_add',
2035
  'data': {'type': 'str', 'id': 'str', '*props': '**'},
2036
  'gen': 'no' }
2037

    
2038
##
2039
# @netdev_del:
2040
#
2041
# Remove a network backend.
2042
#
2043
# @id: the name of the network backend to remove
2044
#
2045
# Returns: Nothing on success
2046
#          If @id is not a valid network backend, DeviceNotFound
2047
#
2048
# Since: 0.14.0
2049
##
2050
{ 'command': 'netdev_del', 'data': {'id': 'str'} }
2051

    
2052
##
2053
# @NetdevNoneOptions
2054
#
2055
# Use it alone to have zero network devices.
2056
#
2057
# Since 1.2
2058
##
2059
{ 'type': 'NetdevNoneOptions',
2060
  'data': { } }
2061

    
2062
##
2063
# @NetLegacyNicOptions
2064
#
2065
# Create a new Network Interface Card.
2066
#
2067
# @netdev: #optional id of -netdev to connect to
2068
#
2069
# @macaddr: #optional MAC address
2070
#
2071
# @model: #optional device model (e1000, rtl8139, virtio etc.)
2072
#
2073
# @addr: #optional PCI device address
2074
#
2075
# @vectors: #optional number of MSI-x vectors, 0 to disable MSI-X
2076
#
2077
# Since 1.2
2078
##
2079
{ 'type': 'NetLegacyNicOptions',
2080
  'data': {
2081
    '*netdev':  'str',
2082
    '*macaddr': 'str',
2083
    '*model':   'str',
2084
    '*addr':    'str',
2085
    '*vectors': 'uint32' } }
2086

    
2087
##
2088
# @String
2089
#
2090
# A fat type wrapping 'str', to be embedded in lists.
2091
#
2092
# Since 1.2
2093
##
2094
{ 'type': 'String',
2095
  'data': {
2096
    'str': 'str' } }
2097

    
2098
##
2099
# @NetdevUserOptions
2100
#
2101
# Use the user mode network stack which requires no administrator privilege to
2102
# run.
2103
#
2104
# @hostname: #optional client hostname reported by the builtin DHCP server
2105
#
2106
# @restrict: #optional isolate the guest from the host
2107
#
2108
# @ip: #optional legacy parameter, use net= instead
2109
#
2110
# @net: #optional IP address and optional netmask
2111
#
2112
# @host: #optional guest-visible address of the host
2113
#
2114
# @tftp: #optional root directory of the built-in TFTP server
2115
#
2116
# @bootfile: #optional BOOTP filename, for use with tftp=
2117
#
2118
# @dhcpstart: #optional the first of the 16 IPs the built-in DHCP server can
2119
#             assign
2120
#
2121
# @dns: #optional guest-visible address of the virtual nameserver
2122
#
2123
# @smb: #optional root directory of the built-in SMB server
2124
#
2125
# @smbserver: #optional IP address of the built-in SMB server
2126
#
2127
# @hostfwd: #optional redirect incoming TCP or UDP host connections to guest
2128
#           endpoints
2129
#
2130
# @guestfwd: #optional forward guest TCP connections
2131
#
2132
# Since 1.2
2133
##
2134
{ 'type': 'NetdevUserOptions',
2135
  'data': {
2136
    '*hostname':  'str',
2137
    '*restrict':  'bool',
2138
    '*ip':        'str',
2139
    '*net':       'str',
2140
    '*host':      'str',
2141
    '*tftp':      'str',
2142
    '*bootfile':  'str',
2143
    '*dhcpstart': 'str',
2144
    '*dns':       'str',
2145
    '*smb':       'str',
2146
    '*smbserver': 'str',
2147
    '*hostfwd':   ['String'],
2148
    '*guestfwd':  ['String'] } }
2149

    
2150
##
2151
# @NetdevTapOptions
2152
#
2153
# Connect the host TAP network interface name to the VLAN.
2154
#
2155
# @ifname: #optional interface name
2156
#
2157
# @fd: #optional file descriptor of an already opened tap
2158
#
2159
# @script: #optional script to initialize the interface
2160
#
2161
# @downscript: #optional script to shut down the interface
2162
#
2163
# @helper: #optional command to execute to configure bridge
2164
#
2165
# @sndbuf: #optional send buffer limit. Understands [TGMKkb] suffixes.
2166
#
2167
# @vnet_hdr: #optional enable the IFF_VNET_HDR flag on the tap interface
2168
#
2169
# @vhost: #optional enable vhost-net network accelerator
2170
#
2171
# @vhostfd: #optional file descriptor of an already opened vhost net device
2172
#
2173
# @vhostforce: #optional vhost on for non-MSIX virtio guests
2174
#
2175
# Since 1.2
2176
##
2177
{ 'type': 'NetdevTapOptions',
2178
  'data': {
2179
    '*ifname':     'str',
2180
    '*fd':         'str',
2181
    '*script':     'str',
2182
    '*downscript': 'str',
2183
    '*helper':     'str',
2184
    '*sndbuf':     'size',
2185
    '*vnet_hdr':   'bool',
2186
    '*vhost':      'bool',
2187
    '*vhostfd':    'str',
2188
    '*vhostforce': 'bool' } }
2189

    
2190
##
2191
# @NetdevSocketOptions
2192
#
2193
# Connect the VLAN to a remote VLAN in another QEMU virtual machine using a TCP
2194
# socket connection.
2195
#
2196
# @fd: #optional file descriptor of an already opened socket
2197
#
2198
# @listen: #optional port number, and optional hostname, to listen on
2199
#
2200
# @connect: #optional port number, and optional hostname, to connect to
2201
#
2202
# @mcast: #optional UDP multicast address and port number
2203
#
2204
# @localaddr: #optional source address and port for multicast and udp packets
2205
#
2206
# @udp: #optional UDP unicast address and port number
2207
#
2208
# Since 1.2
2209
##
2210
{ 'type': 'NetdevSocketOptions',
2211
  'data': {
2212
    '*fd':        'str',
2213
    '*listen':    'str',
2214
    '*connect':   'str',
2215
    '*mcast':     'str',
2216
    '*localaddr': 'str',
2217
    '*udp':       'str' } }
2218

    
2219
##
2220
# @NetdevVdeOptions
2221
#
2222
# Connect the VLAN to a vde switch running on the host.
2223
#
2224
# @sock: #optional socket path
2225
#
2226
# @port: #optional port number
2227
#
2228
# @group: #optional group owner of socket
2229
#
2230
# @mode: #optional permissions for socket
2231
#
2232
# Since 1.2
2233
##
2234
{ 'type': 'NetdevVdeOptions',
2235
  'data': {
2236
    '*sock':  'str',
2237
    '*port':  'uint16',
2238
    '*group': 'str',
2239
    '*mode':  'uint16' } }
2240

    
2241
##
2242
# @NetdevDumpOptions
2243
#
2244
# Dump VLAN network traffic to a file.
2245
#
2246
# @len: #optional per-packet size limit (64k default). Understands [TGMKkb]
2247
# suffixes.
2248
#
2249
# @file: #optional dump file path (default is qemu-vlan0.pcap)
2250
#
2251
# Since 1.2
2252
##
2253
{ 'type': 'NetdevDumpOptions',
2254
  'data': {
2255
    '*len':  'size',
2256
    '*file': 'str' } }
2257

    
2258
##
2259
# @NetdevBridgeOptions
2260
#
2261
# Connect a host TAP network interface to a host bridge device.
2262
#
2263
# @br: #optional bridge name
2264
#
2265
# @helper: #optional command to execute to configure bridge
2266
#
2267
# Since 1.2
2268
##
2269
{ 'type': 'NetdevBridgeOptions',
2270
  'data': {
2271
    '*br':     'str',
2272
    '*helper': 'str' } }
2273

    
2274
##
2275
# @NetdevHubPortOptions
2276
#
2277
# Connect two or more net clients through a software hub.
2278
#
2279
# @hubid: hub identifier number
2280
#
2281
# Since 1.2
2282
##
2283
{ 'type': 'NetdevHubPortOptions',
2284
  'data': {
2285
    'hubid':     'int32' } }
2286

    
2287
##
2288
# @NetClientOptions
2289
#
2290
# A discriminated record of network device traits.
2291
#
2292
# Since 1.2
2293
##
2294
{ 'union': 'NetClientOptions',
2295
  'data': {
2296
    'none':     'NetdevNoneOptions',
2297
    'nic':      'NetLegacyNicOptions',
2298
    'user':     'NetdevUserOptions',
2299
    'tap':      'NetdevTapOptions',
2300
    'socket':   'NetdevSocketOptions',
2301
    'vde':      'NetdevVdeOptions',
2302
    'dump':     'NetdevDumpOptions',
2303
    'bridge':   'NetdevBridgeOptions',
2304
    'hubport':  'NetdevHubPortOptions' } }
2305

    
2306
##
2307
# @NetLegacy
2308
#
2309
# Captures the configuration of a network device; legacy.
2310
#
2311
# @vlan: #optional vlan number
2312
#
2313
# @id: #optional identifier for monitor commands
2314
#
2315
# @name: #optional identifier for monitor commands, ignored if @id is present
2316
#
2317
# @opts: device type specific properties (legacy)
2318
#
2319
# Since 1.2
2320
##
2321
{ 'type': 'NetLegacy',
2322
  'data': {
2323
    '*vlan': 'int32',
2324
    '*id':   'str',
2325
    '*name': 'str',
2326
    'opts':  'NetClientOptions' } }
2327

    
2328
##
2329
# @Netdev
2330
#
2331
# Captures the configuration of a network device.
2332
#
2333
# @id: identifier for monitor commands.
2334
#
2335
# @opts: device type specific properties
2336
#
2337
# Since 1.2
2338
##
2339
{ 'type': 'Netdev',
2340
  'data': {
2341
    'id':   'str',
2342
    'opts': 'NetClientOptions' } }
2343

    
2344
##
2345
# @getfd:
2346
#
2347
# Receive a file descriptor via SCM rights and assign it a name
2348
#
2349
# @fdname: file descriptor name
2350
#
2351
# Returns: Nothing on success
2352
#
2353
# Since: 0.14.0
2354
#
2355
# Notes: If @fdname already exists, the file descriptor assigned to
2356
#        it will be closed and replaced by the received file
2357
#        descriptor.
2358
#        The 'closefd' command can be used to explicitly close the
2359
#        file descriptor when it is no longer needed.
2360
##
2361
{ 'command': 'getfd', 'data': {'fdname': 'str'} }
2362

    
2363
##
2364
# @closefd:
2365
#
2366
# Close a file descriptor previously passed via SCM rights
2367
#
2368
# @fdname: file descriptor name
2369
#
2370
# Returns: Nothing on success
2371
#
2372
# Since: 0.14.0
2373
##
2374
{ 'command': 'closefd', 'data': {'fdname': 'str'} }
2375

    
2376
##
2377
# @MachineInfo:
2378
#
2379
# Information describing a machine.
2380
#
2381
# @name: the name of the machine
2382
#
2383
# @alias: #optional an alias for the machine name
2384
#
2385
# @default: #optional whether the machine is default
2386
#
2387
# Since: 1.2.0
2388
##
2389
{ 'type': 'MachineInfo',
2390
  'data': { 'name': 'str', '*alias': 'str',
2391
            '*is-default': 'bool' } }
2392

    
2393
##
2394
# @query-machines:
2395
#
2396
# Return a list of supported machines
2397
#
2398
# Returns: a list of MachineInfo
2399
#
2400
# Since: 1.2.0
2401
##
2402
{ 'command': 'query-machines', 'returns': ['MachineInfo'] }
2403

    
2404
##
2405
# @CpuDefinitionInfo:
2406
#
2407
# Virtual CPU definition.
2408
#
2409
# @name: the name of the CPU definition
2410
#
2411
# Since: 1.2.0
2412
##
2413
{ 'type': 'CpuDefinitionInfo',
2414
  'data': { 'name': 'str' } }
2415

    
2416
##
2417
# @query-cpu-definitions:
2418
#
2419
# Return a list of supported virtual CPU definitions
2420
#
2421
# Returns: a list of CpuDefInfo
2422
#
2423
# Since: 1.2.0
2424
##
2425
{ 'command': 'query-cpu-definitions', 'returns': ['CpuDefinitionInfo'] }
2426

    
2427
# @AddfdInfo:
2428
#
2429
# Information about a file descriptor that was added to an fd set.
2430
#
2431
# @fdset-id: The ID of the fd set that @fd was added to.
2432
#
2433
# @fd: The file descriptor that was received via SCM rights and
2434
#      added to the fd set.
2435
#
2436
# Since: 1.2.0
2437
##
2438
{ 'type': 'AddfdInfo', 'data': {'fdset-id': 'int', 'fd': 'int'} }
2439

    
2440
##
2441
# @add-fd:
2442
#
2443
# Add a file descriptor, that was passed via SCM rights, to an fd set.
2444
#
2445
# @fdset-id: #optional The ID of the fd set to add the file descriptor to.
2446
#
2447
# @opaque: #optional A free-form string that can be used to describe the fd.
2448
#
2449
# Returns: @AddfdInfo on success
2450
#          If file descriptor was not received, FdNotSupplied
2451
#          If @fdset-id does not exist, InvalidParameterValue
2452
#
2453
# Notes: The list of fd sets is shared by all monitor connections.
2454
#
2455
#        If @fdset-id is not specified, a new fd set will be created.
2456
#
2457
# Since: 1.2.0
2458
##
2459
{ 'command': 'add-fd', 'data': {'*fdset-id': 'int', '*opaque': 'str'},
2460
  'returns': 'AddfdInfo' }
2461

    
2462
##
2463
# @remove-fd:
2464
#
2465
# Remove a file descriptor from an fd set.
2466
#
2467
# @fdset-id: The ID of the fd set that the file descriptor belongs to.
2468
#
2469
# @fd: #optional The file descriptor that is to be removed.
2470
#
2471
# Returns: Nothing on success
2472
#          If @fdset-id or @fd is not found, FdNotFound
2473
#
2474
# Since: 1.2.0
2475
#
2476
# Notes: The list of fd sets is shared by all monitor connections.
2477
#
2478
#        If @fd is not specified, all file descriptors in @fdset-id
2479
#        will be removed.
2480
##
2481
{ 'command': 'remove-fd', 'data': {'fdset-id': 'int', '*fd': 'int'} }
2482

    
2483
##
2484
# @FdsetFdInfo:
2485
#
2486
# Information about a file descriptor that belongs to an fd set.
2487
#
2488
# @fd: The file descriptor value.
2489
#
2490
# @opaque: #optional A free-form string that can be used to describe the fd.
2491
#
2492
# Since: 1.2.0
2493
##
2494
{ 'type': 'FdsetFdInfo',
2495
  'data': {'fd': 'int', '*opaque': 'str'} }
2496

    
2497
##
2498
# @FdsetInfo:
2499
#
2500
# Information about an fd set.
2501
#
2502
# @fdset-id: The ID of the fd set.
2503
#
2504
# @fds: A list of file descriptors that belong to this fd set.
2505
#
2506
# Since: 1.2.0
2507
##
2508
{ 'type': 'FdsetInfo',
2509
  'data': {'fdset-id': 'int', 'fds': ['FdsetFdInfo']} }
2510

    
2511
##
2512
# @query-fdsets:
2513
#
2514
# Return information describing all fd sets.
2515
#
2516
# Returns: A list of @FdsetInfo
2517
#
2518
# Since: 1.2.0
2519
#
2520
# Note: The list of fd sets is shared by all monitor connections.
2521
#
2522
##
2523
{ 'command': 'query-fdsets', 'returns': ['FdsetInfo'] }
2524

    
2525
##
2526
# @TargetType
2527
#
2528
# Target CPU emulation type
2529
#
2530
# These parameters correspond to the softmmu binary CPU name that is currently
2531
# running.
2532
#
2533
# Since: 1.2.0
2534
##
2535
{ 'enum': 'TargetType',
2536
  'data': [ 'alpha', 'arm', 'cris', 'i386', 'lm32', 'm68k', 'microblazeel',
2537
            'microblaze', 'mips64el', 'mips64', 'mipsel', 'mips', 'or32',
2538
            'ppc64', 'ppcemb', 'ppc', 's390x', 'sh4eb', 'sh4', 'sparc64',
2539
            'sparc', 'unicore32', 'x86_64', 'xtensaeb', 'xtensa' ] }
2540

    
2541
##
2542
# @TargetInfo:
2543
#
2544
# Information describing the QEMU target.
2545
#
2546
# @arch: the target architecture (eg "x86_64", "i386", etc)
2547
#
2548
# Since: 1.2.0
2549
##
2550
{ 'type': 'TargetInfo',
2551
  'data': { 'arch': 'TargetType' } }
2552

    
2553
##
2554
# @query-target:
2555
#
2556
# Return information about the target for this QEMU
2557
#
2558
# Returns: TargetInfo
2559
#
2560
# Since: 1.2.0
2561
##
2562
{ 'command': 'query-target', 'returns': 'TargetInfo' }
2563

    
2564
##
2565
# @QKeyCode:
2566
#
2567
# An enumeration of key name.
2568
#
2569
# This is used by the send-key command.
2570
#
2571
# Since: 1.3.0
2572
##
2573
{ 'enum': 'QKeyCode',
2574
  'data': [ 'shift', 'shift_r', 'alt', 'alt_r', 'altgr', 'altgr_r', 'ctrl',
2575
            'ctrl_r', 'menu', 'esc', '1', '2', '3', '4', '5', '6', '7', '8',
2576
            '9', '0', 'minus', 'equal', 'backspace', 'tab', 'q', 'w', 'e',
2577
            'r', 't', 'y', 'u', 'i', 'o', 'p', 'bracket_left', 'bracket_right',
2578
            'ret', 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'semicolon',
2579
            'apostrophe', 'grave_accent', 'backslash', 'z', 'x', 'c', 'v', 'b',
2580
            'n', 'm', 'comma', 'dot', 'slash', 'asterisk', 'spc', 'caps_lock',
2581
            'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'f10',
2582
            'num_lock', 'scroll_lock', 'kp_divide', 'kp_multiply',
2583
            'kp_subtract', 'kp_add', 'kp_enter', 'kp_decimal', 'sysrq', 'kp_0',
2584
            'kp_1', 'kp_2', 'kp_3', 'kp_4', 'kp_5', 'kp_6', 'kp_7', 'kp_8',
2585
            'kp_9', 'less', 'f11', 'f12', 'print', 'home', 'pgup', 'pgdn', 'end',
2586
            'left', 'up', 'down', 'right', 'insert', 'delete', 'stop', 'again',
2587
            'props', 'undo', 'front', 'copy', 'open', 'paste', 'find', 'cut',
2588
             'lf', 'help', 'meta_l', 'meta_r', 'compose' ] }
2589

    
2590
##
2591
# @send-key:
2592
#
2593
# Send keys to guest.
2594
#
2595
# @keys: key sequence. 'keys' is the name of the key. Use a JSON array to
2596
#        press several keys simultaneously.
2597
#
2598
# @hold-time: #optional time to delay key up events, milliseconds. Defaults
2599
#             to 100
2600
#
2601
# Returns: Nothing on success
2602
#          If key is unknown or redundant, InvalidParameter
2603
#
2604
# Since: 1.3.0
2605
#
2606
##
2607
{ 'command': 'send-key',
2608
  'data': { 'keys': ['QKeyCode'], '*hold-time': 'int' } }
2609

    
2610
##
2611
# @screendump:
2612
#
2613
# Write a PPM of the VGA screen to a file.
2614
#
2615
# @filename: the path of a new PPM file to store the image
2616
#
2617
# Returns: Nothing on success
2618
#
2619
# Since: 0.14.0
2620
##
2621
{ 'command': 'screendump', 'data': {'filename': 'str'} }