Statistics
| Branch: | Revision:

root / qapi-schema.json @ 21b56835

History | View | Annotate | Download (113.9 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
# Since: 1.2
26
##
27
{ 'enum': 'ErrorClass',
28
  'data': [ 'GenericError', 'CommandNotFound', 'DeviceEncrypted',
29
            'DeviceNotActive', 'DeviceNotFound', 'KVMMissingCap' ] }
30

    
31
##
32
# @add_client
33
#
34
# Allow client connections for VNC, Spice and socket based
35
# character devices to be passed in to QEMU via SCM_RIGHTS.
36
#
37
# @protocol: protocol name. Valid names are "vnc", "spice" or the
38
#            name of a character device (eg. from -chardev id=XXXX)
39
#
40
# @fdname: file descriptor name previously passed via 'getfd' command
41
#
42
# @skipauth: #optional whether to skip authentication. Only applies
43
#            to "vnc" and "spice" protocols
44
#
45
# @tls: #optional whether to perform TLS. Only applies to the "spice"
46
#       protocol
47
#
48
# Returns: nothing on success.
49
#
50
# Since: 0.14.0
51
##
52
{ 'command': 'add_client',
53
  'data': { 'protocol': 'str', 'fdname': 'str', '*skipauth': 'bool',
54
            '*tls': 'bool' } }
55

    
56
##
57
# @NameInfo:
58
#
59
# Guest name information.
60
#
61
# @name: #optional The name of the guest
62
#
63
# Since 0.14.0
64
##
65
{ 'type': 'NameInfo', 'data': {'*name': 'str'} }
66

    
67
##
68
# @query-name:
69
#
70
# Return the name information of a guest.
71
#
72
# Returns: @NameInfo of the guest
73
#
74
# Since 0.14.0
75
##
76
{ 'command': 'query-name', 'returns': 'NameInfo' }
77

    
78
##
79
# @VersionInfo:
80
#
81
# A description of QEMU's version.
82
#
83
# @qemu.major:  The major version of QEMU
84
#
85
# @qemu.minor:  The minor version of QEMU
86
#
87
# @qemu.micro:  The micro version of QEMU.  By current convention, a micro
88
#               version of 50 signifies a development branch.  A micro version
89
#               greater than or equal to 90 signifies a release candidate for
90
#               the next minor version.  A micro version of less than 50
91
#               signifies a stable release.
92
#
93
# @package:     QEMU will always set this field to an empty string.  Downstream
94
#               versions of QEMU should set this to a non-empty string.  The
95
#               exact format depends on the downstream however it highly
96
#               recommended that a unique name is used.
97
#
98
# Since: 0.14.0
99
##
100
{ 'type': 'VersionInfo',
101
  'data': {'qemu': {'major': 'int', 'minor': 'int', 'micro': 'int'},
102
           'package': 'str'} }
103

    
104
##
105
# @query-version:
106
#
107
# Returns the current version of QEMU.
108
#
109
# Returns:  A @VersionInfo object describing the current version of QEMU.
110
#
111
# Since: 0.14.0
112
##
113
{ 'command': 'query-version', 'returns': 'VersionInfo' }
114

    
115
##
116
# @KvmInfo:
117
#
118
# Information about support for KVM acceleration
119
#
120
# @enabled: true if KVM acceleration is active
121
#
122
# @present: true if KVM acceleration is built into this executable
123
#
124
# Since: 0.14.0
125
##
126
{ 'type': 'KvmInfo', 'data': {'enabled': 'bool', 'present': 'bool'} }
127

    
128
##
129
# @query-kvm:
130
#
131
# Returns information about KVM acceleration
132
#
133
# Returns: @KvmInfo
134
#
135
# Since: 0.14.0
136
##
137
{ 'command': 'query-kvm', 'returns': 'KvmInfo' }
138

    
139
##
140
# @RunState
141
#
142
# An enumeration of VM run states.
143
#
144
# @debug: QEMU is running on a debugger
145
#
146
# @finish-migrate: guest is paused to finish the migration process
147
#
148
# @inmigrate: guest is paused waiting for an incoming migration.  Note
149
# that this state does not tell whether the machine will start at the
150
# end of the migration.  This depends on the command-line -S option and
151
# any invocation of 'stop' or 'cont' that has happened since QEMU was
152
# started.
153
#
154
# @internal-error: An internal error that prevents further guest execution
155
# has occurred
156
#
157
# @io-error: the last IOP has failed and the device is configured to pause
158
# on I/O errors
159
#
160
# @paused: guest has been paused via the 'stop' command
161
#
162
# @postmigrate: guest is paused following a successful 'migrate'
163
#
164
# @prelaunch: QEMU was started with -S and guest has not started
165
#
166
# @restore-vm: guest is paused to restore VM state
167
#
168
# @running: guest is actively running
169
#
170
# @save-vm: guest is paused to save the VM state
171
#
172
# @shutdown: guest is shut down (and -no-shutdown is in use)
173
#
174
# @suspended: guest is suspended (ACPI S3)
175
#
176
# @watchdog: the watchdog action is configured to pause and has been triggered
177
#
178
# @guest-panicked: guest has been panicked as a result of guest OS panic
179
##
180
{ 'enum': 'RunState',
181
  'data': [ 'debug', 'inmigrate', 'internal-error', 'io-error', 'paused',
182
            'postmigrate', 'prelaunch', 'finish-migrate', 'restore-vm',
183
            'running', 'save-vm', 'shutdown', 'suspended', 'watchdog',
184
            'guest-panicked' ] }
185

    
186
##
187
# @SnapshotInfo
188
#
189
# @id: unique snapshot id
190
#
191
# @name: user chosen name
192
#
193
# @vm-state-size: size of the VM state
194
#
195
# @date-sec: UTC date of the snapshot in seconds
196
#
197
# @date-nsec: fractional part in nano seconds to be used with date-sec
198
#
199
# @vm-clock-sec: VM clock relative to boot in seconds
200
#
201
# @vm-clock-nsec: fractional part in nano seconds to be used with vm-clock-sec
202
#
203
# Since: 1.3
204
#
205
##
206

    
207
{ 'type': 'SnapshotInfo',
208
  'data': { 'id': 'str', 'name': 'str', 'vm-state-size': 'int',
209
            'date-sec': 'int', 'date-nsec': 'int',
210
            'vm-clock-sec': 'int', 'vm-clock-nsec': 'int' } }
211

    
212
##
213
# @ImageInfoSpecificQCow2:
214
#
215
# @compat: compatibility level
216
#
217
# @lazy-refcounts: #optional on or off; only valid for compat >= 1.1
218
#
219
# Since: 1.7
220
##
221
{ 'type': 'ImageInfoSpecificQCow2',
222
  'data': {
223
      'compat': 'str',
224
      '*lazy-refcounts': 'bool'
225
  } }
226

    
227
##
228
# @ImageInfoSpecificVmdk:
229
#
230
# @create-type: The create type of VMDK image
231
#
232
# @cid: Content id of image
233
#
234
# @parent-cid: Parent VMDK image's cid
235
#
236
# @extents: List of extent files
237
#
238
# Since: 1.7
239
##
240
{ 'type': 'ImageInfoSpecificVmdk',
241
  'data': {
242
      'create-type': 'str',
243
      'cid': 'int',
244
      'parent-cid': 'int',
245
      'extents': ['ImageInfo']
246
  } }
247

    
248
##
249
# @ImageInfoSpecific:
250
#
251
# A discriminated record of image format specific information structures.
252
#
253
# Since: 1.7
254
##
255

    
256
{ 'union': 'ImageInfoSpecific',
257
  'data': {
258
      'qcow2': 'ImageInfoSpecificQCow2',
259
      'vmdk': 'ImageInfoSpecificVmdk'
260
  } }
261

    
262
##
263
# @ImageInfo:
264
#
265
# Information about a QEMU image file
266
#
267
# @filename: name of the image file
268
#
269
# @format: format of the image file
270
#
271
# @virtual-size: maximum capacity in bytes of the image
272
#
273
# @actual-size: #optional actual size on disk in bytes of the image
274
#
275
# @dirty-flag: #optional true if image is not cleanly closed
276
#
277
# @cluster-size: #optional size of a cluster in bytes
278
#
279
# @encrypted: #optional true if the image is encrypted
280
#
281
# @compressed: #optional true if the image is compressed (Since 1.7)
282
#
283
# @backing-filename: #optional name of the backing file
284
#
285
# @full-backing-filename: #optional full path of the backing file
286
#
287
# @backing-filename-format: #optional the format of the backing file
288
#
289
# @snapshots: #optional list of VM snapshots
290
#
291
# @backing-image: #optional info of the backing image (since 1.6)
292
#
293
# @format-specific: #optional structure supplying additional format-specific
294
# information (since 1.7)
295
#
296
# Since: 1.3
297
#
298
##
299

    
300
{ 'type': 'ImageInfo',
301
  'data': {'filename': 'str', 'format': 'str', '*dirty-flag': 'bool',
302
           '*actual-size': 'int', 'virtual-size': 'int',
303
           '*cluster-size': 'int', '*encrypted': 'bool', '*compressed': 'bool',
304
           '*backing-filename': 'str', '*full-backing-filename': 'str',
305
           '*backing-filename-format': 'str', '*snapshots': ['SnapshotInfo'],
306
           '*backing-image': 'ImageInfo',
307
           '*format-specific': 'ImageInfoSpecific' } }
308

    
309
##
310
# @ImageCheck:
311
#
312
# Information about a QEMU image file check
313
#
314
# @filename: name of the image file checked
315
#
316
# @format: format of the image file checked
317
#
318
# @check-errors: number of unexpected errors occurred during check
319
#
320
# @image-end-offset: #optional offset (in bytes) where the image ends, this
321
#                    field is present if the driver for the image format
322
#                    supports it
323
#
324
# @corruptions: #optional number of corruptions found during the check if any
325
#
326
# @leaks: #optional number of leaks found during the check if any
327
#
328
# @corruptions-fixed: #optional number of corruptions fixed during the check
329
#                     if any
330
#
331
# @leaks-fixed: #optional number of leaks fixed during the check if any
332
#
333
# @total-clusters: #optional total number of clusters, this field is present
334
#                  if the driver for the image format supports it
335
#
336
# @allocated-clusters: #optional total number of allocated clusters, this
337
#                      field is present if the driver for the image format
338
#                      supports it
339
#
340
# @fragmented-clusters: #optional total number of fragmented clusters, this
341
#                       field is present if the driver for the image format
342
#                       supports it
343
#
344
# @compressed-clusters: #optional total number of compressed clusters, this
345
#                       field is present if the driver for the image format
346
#                       supports it
347
#
348
# Since: 1.4
349
#
350
##
351

    
352
{ 'type': 'ImageCheck',
353
  'data': {'filename': 'str', 'format': 'str', 'check-errors': 'int',
354
           '*image-end-offset': 'int', '*corruptions': 'int', '*leaks': 'int',
355
           '*corruptions-fixed': 'int', '*leaks-fixed': 'int',
356
           '*total-clusters': 'int', '*allocated-clusters': 'int',
357
           '*fragmented-clusters': 'int', '*compressed-clusters': 'int' } }
358

    
359
##
360
# @StatusInfo:
361
#
362
# Information about VCPU run state
363
#
364
# @running: true if all VCPUs are runnable, false if not runnable
365
#
366
# @singlestep: true if VCPUs are in single-step mode
367
#
368
# @status: the virtual machine @RunState
369
#
370
# Since:  0.14.0
371
#
372
# Notes: @singlestep is enabled through the GDB stub
373
##
374
{ 'type': 'StatusInfo',
375
  'data': {'running': 'bool', 'singlestep': 'bool', 'status': 'RunState'} }
376

    
377
##
378
# @query-status:
379
#
380
# Query the run status of all VCPUs
381
#
382
# Returns: @StatusInfo reflecting all VCPUs
383
#
384
# Since:  0.14.0
385
##
386
{ 'command': 'query-status', 'returns': 'StatusInfo' }
387

    
388
##
389
# @UuidInfo:
390
#
391
# Guest UUID information.
392
#
393
# @UUID: the UUID of the guest
394
#
395
# Since: 0.14.0
396
#
397
# Notes: If no UUID was specified for the guest, a null UUID is returned.
398
##
399
{ 'type': 'UuidInfo', 'data': {'UUID': 'str'} }
400

    
401
##
402
# @query-uuid:
403
#
404
# Query the guest UUID information.
405
#
406
# Returns: The @UuidInfo for the guest
407
#
408
# Since 0.14.0
409
##
410
{ 'command': 'query-uuid', 'returns': 'UuidInfo' }
411

    
412
##
413
# @ChardevInfo:
414
#
415
# Information about a character device.
416
#
417
# @label: the label of the character device
418
#
419
# @filename: the filename of the character device
420
#
421
# Notes: @filename is encoded using the QEMU command line character device
422
#        encoding.  See the QEMU man page for details.
423
#
424
# Since: 0.14.0
425
##
426
{ 'type': 'ChardevInfo', 'data': {'label': 'str', 'filename': 'str'} }
427

    
428
##
429
# @query-chardev:
430
#
431
# Returns information about current character devices.
432
#
433
# Returns: a list of @ChardevInfo
434
#
435
# Since: 0.14.0
436
##
437
{ 'command': 'query-chardev', 'returns': ['ChardevInfo'] }
438

    
439
##
440
# @DataFormat:
441
#
442
# An enumeration of data format.
443
#
444
# @utf8: Data is a UTF-8 string (RFC 3629)
445
#
446
# @base64: Data is Base64 encoded binary (RFC 3548)
447
#
448
# Since: 1.4
449
##
450
{ 'enum': 'DataFormat',
451
  'data': [ 'utf8', 'base64' ] }
452

    
453
##
454
# @ringbuf-write:
455
#
456
# Write to a ring buffer character device.
457
#
458
# @device: the ring buffer character device name
459
#
460
# @data: data to write
461
#
462
# @format: #optional data encoding (default 'utf8').
463
#          - base64: data must be base64 encoded text.  Its binary
464
#            decoding gets written.
465
#            Bug: invalid base64 is currently not rejected.
466
#            Whitespace *is* invalid.
467
#          - utf8: data's UTF-8 encoding is written
468
#          - data itself is always Unicode regardless of format, like
469
#            any other string.
470
#
471
# Returns: Nothing on success
472
#
473
# Since: 1.4
474
##
475
{ 'command': 'ringbuf-write',
476
  'data': {'device': 'str', 'data': 'str',
477
           '*format': 'DataFormat'} }
478

    
479
##
480
# @ringbuf-read:
481
#
482
# Read from a ring buffer character device.
483
#
484
# @device: the ring buffer character device name
485
#
486
# @size: how many bytes to read at most
487
#
488
# @format: #optional data encoding (default 'utf8').
489
#          - base64: the data read is returned in base64 encoding.
490
#          - utf8: the data read is interpreted as UTF-8.
491
#            Bug: can screw up when the buffer contains invalid UTF-8
492
#            sequences, NUL characters, after the ring buffer lost
493
#            data, and when reading stops because the size limit is
494
#            reached.
495
#          - The return value is always Unicode regardless of format,
496
#            like any other string.
497
#
498
# Returns: data read from the device
499
#
500
# Since: 1.4
501
##
502
{ 'command': 'ringbuf-read',
503
  'data': {'device': 'str', 'size': 'int', '*format': 'DataFormat'},
504
  'returns': 'str' }
505

    
506
##
507
# @CommandInfo:
508
#
509
# Information about a QMP command
510
#
511
# @name: The command name
512
#
513
# Since: 0.14.0
514
##
515
{ 'type': 'CommandInfo', 'data': {'name': 'str'} }
516

    
517
##
518
# @query-commands:
519
#
520
# Return a list of supported QMP commands by this server
521
#
522
# Returns: A list of @CommandInfo for all supported commands
523
#
524
# Since: 0.14.0
525
##
526
{ 'command': 'query-commands', 'returns': ['CommandInfo'] }
527

    
528
##
529
# @EventInfo:
530
#
531
# Information about a QMP event
532
#
533
# @name: The event name
534
#
535
# Since: 1.2.0
536
##
537
{ 'type': 'EventInfo', 'data': {'name': 'str'} }
538

    
539
##
540
# @query-events:
541
#
542
# Return a list of supported QMP events by this server
543
#
544
# Returns: A list of @EventInfo for all supported events
545
#
546
# Since: 1.2.0
547
##
548
{ 'command': 'query-events', 'returns': ['EventInfo'] }
549

    
550
##
551
# @MigrationStats
552
#
553
# Detailed migration status.
554
#
555
# @transferred: amount of bytes already transferred to the target VM
556
#
557
# @remaining: amount of bytes remaining to be transferred to the target VM
558
#
559
# @total: total amount of bytes involved in the migration process
560
#
561
# @duplicate: number of duplicate (zero) pages (since 1.2)
562
#
563
# @skipped: number of skipped zero pages (since 1.5)
564
#
565
# @normal : number of normal pages (since 1.2)
566
#
567
# @normal-bytes: number of normal bytes sent (since 1.2)
568
#
569
# @dirty-pages-rate: number of pages dirtied by second by the
570
#        guest (since 1.3)
571
#
572
# @mbps: throughput in megabits/sec. (since 1.6)
573
#
574
# Since: 0.14.0
575
##
576
{ 'type': 'MigrationStats',
577
  'data': {'transferred': 'int', 'remaining': 'int', 'total': 'int' ,
578
           'duplicate': 'int', 'skipped': 'int', 'normal': 'int',
579
           'normal-bytes': 'int', 'dirty-pages-rate' : 'int',
580
           'mbps' : 'number' } }
581

    
582
##
583
# @XBZRLECacheStats
584
#
585
# Detailed XBZRLE migration cache statistics
586
#
587
# @cache-size: XBZRLE cache size
588
#
589
# @bytes: amount of bytes already transferred to the target VM
590
#
591
# @pages: amount of pages transferred to the target VM
592
#
593
# @cache-miss: number of cache miss
594
#
595
# @overflow: number of overflows
596
#
597
# Since: 1.2
598
##
599
{ 'type': 'XBZRLECacheStats',
600
  'data': {'cache-size': 'int', 'bytes': 'int', 'pages': 'int',
601
           'cache-miss': 'int', 'overflow': 'int' } }
602

    
603
##
604
# @MigrationInfo
605
#
606
# Information about current migration process.
607
#
608
# @status: #optional string describing the current migration status.
609
#          As of 0.14.0 this can be 'active', 'completed', 'failed' or
610
#          'cancelled'. If this field is not returned, no migration process
611
#          has been initiated
612
#
613
# @ram: #optional @MigrationStats containing detailed migration
614
#       status, only returned if status is 'active' or
615
#       'completed'. 'comppleted' (since 1.2)
616
#
617
# @disk: #optional @MigrationStats containing detailed disk migration
618
#        status, only returned if status is 'active' and it is a block
619
#        migration
620
#
621
# @xbzrle-cache: #optional @XBZRLECacheStats containing detailed XBZRLE
622
#                migration statistics, only returned if XBZRLE feature is on and
623
#                status is 'active' or 'completed' (since 1.2)
624
#
625
# @total-time: #optional total amount of milliseconds since migration started.
626
#        If migration has ended, it returns the total migration
627
#        time. (since 1.2)
628
#
629
# @downtime: #optional only present when migration finishes correctly
630
#        total downtime in milliseconds for the guest.
631
#        (since 1.3)
632
#
633
# @expected-downtime: #optional only present while migration is active
634
#        expected downtime in milliseconds for the guest in last walk
635
#        of the dirty bitmap. (since 1.3)
636
#
637
# @setup-time: #optional amount of setup time in milliseconds _before_ the
638
#        iterations begin but _after_ the QMP command is issued. This is designed
639
#        to provide an accounting of any activities (such as RDMA pinning) which
640
#        may be expensive, but do not actually occur during the iterative
641
#        migration rounds themselves. (since 1.6)
642
#
643
# Since: 0.14.0
644
##
645
{ 'type': 'MigrationInfo',
646
  'data': {'*status': 'str', '*ram': 'MigrationStats',
647
           '*disk': 'MigrationStats',
648
           '*xbzrle-cache': 'XBZRLECacheStats',
649
           '*total-time': 'int',
650
           '*expected-downtime': 'int',
651
           '*downtime': 'int',
652
           '*setup-time': 'int'} }
653

    
654
##
655
# @query-migrate
656
#
657
# Returns information about current migration process.
658
#
659
# Returns: @MigrationInfo
660
#
661
# Since: 0.14.0
662
##
663
{ 'command': 'query-migrate', 'returns': 'MigrationInfo' }
664

    
665
##
666
# @MigrationCapability
667
#
668
# Migration capabilities enumeration
669
#
670
# @xbzrle: Migration supports xbzrle (Xor Based Zero Run Length Encoding).
671
#          This feature allows us to minimize migration traffic for certain work
672
#          loads, by sending compressed difference of the pages
673
#
674
# @x-rdma-pin-all: Controls whether or not the entire VM memory footprint is
675
#          mlock()'d on demand or all at once. Refer to docs/rdma.txt for usage.
676
#          Disabled by default. Experimental: may (or may not) be renamed after
677
#          further testing is complete. (since 1.6)
678
#
679
# @zero-blocks: During storage migration encode blocks of zeroes efficiently. This
680
#          essentially saves 1MB of zeroes per block on the wire. Enabling requires
681
#          source and target VM to support this feature. To enable it is sufficient
682
#          to enable the capability on the source VM. The feature is disabled by
683
#          default. (since 1.6)
684
#
685
# @auto-converge: If enabled, QEMU will automatically throttle down the guest
686
#          to speed up convergence of RAM migration. (since 1.6)
687
#
688
# Since: 1.2
689
##
690
{ 'enum': 'MigrationCapability',
691
  'data': ['xbzrle', 'x-rdma-pin-all', 'auto-converge', 'zero-blocks'] }
692

    
693
##
694
# @MigrationCapabilityStatus
695
#
696
# Migration capability information
697
#
698
# @capability: capability enum
699
#
700
# @state: capability state bool
701
#
702
# Since: 1.2
703
##
704
{ 'type': 'MigrationCapabilityStatus',
705
  'data': { 'capability' : 'MigrationCapability', 'state' : 'bool' } }
706

    
707
##
708
# @migrate-set-capabilities
709
#
710
# Enable/Disable the following migration capabilities (like xbzrle)
711
#
712
# @capabilities: json array of capability modifications to make
713
#
714
# Since: 1.2
715
##
716
{ 'command': 'migrate-set-capabilities',
717
  'data': { 'capabilities': ['MigrationCapabilityStatus'] } }
718

    
719
##
720
# @query-migrate-capabilities
721
#
722
# Returns information about the current migration capabilities status
723
#
724
# Returns: @MigrationCapabilitiesStatus
725
#
726
# Since: 1.2
727
##
728
{ 'command': 'query-migrate-capabilities', 'returns':   ['MigrationCapabilityStatus']}
729

    
730
##
731
# @MouseInfo:
732
#
733
# Information about a mouse device.
734
#
735
# @name: the name of the mouse device
736
#
737
# @index: the index of the mouse device
738
#
739
# @current: true if this device is currently receiving mouse events
740
#
741
# @absolute: true if this device supports absolute coordinates as input
742
#
743
# Since: 0.14.0
744
##
745
{ 'type': 'MouseInfo',
746
  'data': {'name': 'str', 'index': 'int', 'current': 'bool',
747
           'absolute': 'bool'} }
748

    
749
##
750
# @query-mice:
751
#
752
# Returns information about each active mouse device
753
#
754
# Returns: a list of @MouseInfo for each device
755
#
756
# Since: 0.14.0
757
##
758
{ 'command': 'query-mice', 'returns': ['MouseInfo'] }
759

    
760
##
761
# @CpuInfo:
762
#
763
# Information about a virtual CPU
764
#
765
# @CPU: the index of the virtual CPU
766
#
767
# @current: this only exists for backwards compatible and should be ignored
768
#
769
# @halted: true if the virtual CPU is in the halt state.  Halt usually refers
770
#          to a processor specific low power mode.
771
#
772
# @pc: #optional If the target is i386 or x86_64, this is the 64-bit instruction
773
#                pointer.
774
#                If the target is Sparc, this is the PC component of the
775
#                instruction pointer.
776
#
777
# @nip: #optional If the target is PPC, the instruction pointer
778
#
779
# @npc: #optional If the target is Sparc, the NPC component of the instruction
780
#                 pointer
781
#
782
# @PC: #optional If the target is MIPS, the instruction pointer
783
#
784
# @thread_id: ID of the underlying host thread
785
#
786
# Since: 0.14.0
787
#
788
# Notes: @halted is a transient state that changes frequently.  By the time the
789
#        data is sent to the client, the guest may no longer be halted.
790
##
791
{ 'type': 'CpuInfo',
792
  'data': {'CPU': 'int', 'current': 'bool', 'halted': 'bool', '*pc': 'int',
793
           '*nip': 'int', '*npc': 'int', '*PC': 'int', 'thread_id': 'int'} }
794

    
795
##
796
# @query-cpus:
797
#
798
# Returns a list of information about each virtual CPU.
799
#
800
# Returns: a list of @CpuInfo for each virtual CPU
801
#
802
# Since: 0.14.0
803
##
804
{ 'command': 'query-cpus', 'returns': ['CpuInfo'] }
805

    
806
##
807
# @BlockDeviceInfo:
808
#
809
# Information about the backing device for a block device.
810
#
811
# @file: the filename of the backing device
812
#
813
# @ro: true if the backing device was open read-only
814
#
815
# @drv: the name of the block format used to open the backing device. As of
816
#       0.14.0 this can be: 'blkdebug', 'bochs', 'cloop', 'cow', 'dmg',
817
#       'file', 'file', 'ftp', 'ftps', 'host_cdrom', 'host_device',
818
#       'host_floppy', 'http', 'https', 'nbd', 'parallels', 'qcow',
819
#       'qcow2', 'raw', 'tftp', 'vdi', 'vmdk', 'vpc', 'vvfat'
820
#
821
# @backing_file: #optional the name of the backing file (for copy-on-write)
822
#
823
# @backing_file_depth: number of files in the backing file chain (since: 1.2)
824
#
825
# @encrypted: true if the backing device is encrypted
826
#
827
# @encryption_key_missing: true if the backing device is encrypted but an
828
#                          valid encryption key is missing
829
#
830
# @bps: total throughput limit in bytes per second is specified
831
#
832
# @bps_rd: read throughput limit in bytes per second is specified
833
#
834
# @bps_wr: write throughput limit in bytes per second is specified
835
#
836
# @iops: total I/O operations per second is specified
837
#
838
# @iops_rd: read I/O operations per second is specified
839
#
840
# @iops_wr: write I/O operations per second is specified
841
#
842
# @image: the info of image used (since: 1.6)
843
#
844
# @bps_max: #optional total max in bytes (Since 1.7)
845
#
846
# @bps_rd_max: #optional read max in bytes (Since 1.7)
847
#
848
# @bps_wr_max: #optional write max in bytes (Since 1.7)
849
#
850
# @iops_max: #optional total I/O operations max (Since 1.7)
851
#
852
# @iops_rd_max: #optional read I/O operations max (Since 1.7)
853
#
854
# @iops_wr_max: #optional write I/O operations max (Since 1.7)
855
#
856
# @iops_size: #optional an I/O size in bytes (Since 1.7)
857
#
858
# Since: 0.14.0
859
#
860
# Notes: This interface is only found in @BlockInfo.
861
##
862
{ 'type': 'BlockDeviceInfo',
863
  'data': { 'file': 'str', 'ro': 'bool', 'drv': 'str',
864
            '*backing_file': 'str', 'backing_file_depth': 'int',
865
            'encrypted': 'bool', 'encryption_key_missing': 'bool',
866
            'bps': 'int', 'bps_rd': 'int', 'bps_wr': 'int',
867
            'iops': 'int', 'iops_rd': 'int', 'iops_wr': 'int',
868
            'image': 'ImageInfo',
869
            '*bps_max': 'int', '*bps_rd_max': 'int',
870
            '*bps_wr_max': 'int', '*iops_max': 'int',
871
            '*iops_rd_max': 'int', '*iops_wr_max': 'int',
872
            '*iops_size': 'int' } }
873

    
874
##
875
# @BlockDeviceIoStatus:
876
#
877
# An enumeration of block device I/O status.
878
#
879
# @ok: The last I/O operation has succeeded
880
#
881
# @failed: The last I/O operation has failed
882
#
883
# @nospace: The last I/O operation has failed due to a no-space condition
884
#
885
# Since: 1.0
886
##
887
{ 'enum': 'BlockDeviceIoStatus', 'data': [ 'ok', 'failed', 'nospace' ] }
888

    
889
##
890
# @BlockDeviceMapEntry:
891
#
892
# Entry in the metadata map of the device (returned by "qemu-img map")
893
#
894
# @start: Offset in the image of the first byte described by this entry
895
#         (in bytes)
896
#
897
# @length: Length of the range described by this entry (in bytes)
898
#
899
# @depth: Number of layers (0 = top image, 1 = top image's backing file, etc.)
900
#         before reaching one for which the range is allocated.  The value is
901
#         in the range 0 to the depth of the image chain - 1.
902
#
903
# @zero: the sectors in this range read as zeros
904
#
905
# @data: reading the image will actually read data from a file (in particular,
906
#        if @offset is present this means that the sectors are not simply
907
#        preallocated, but contain actual data in raw format)
908
#
909
# @offset: if present, the image file stores the data for this range in
910
#          raw format at the given offset.
911
#
912
# Since 1.7
913
##
914
{ 'type': 'BlockDeviceMapEntry',
915
  'data': { 'start': 'int', 'length': 'int', 'depth': 'int', 'zero': 'bool',
916
            'data': 'bool', '*offset': 'int' } }
917

    
918
##
919
# @BlockDirtyInfo:
920
#
921
# Block dirty bitmap information.
922
#
923
# @count: number of dirty bytes according to the dirty bitmap
924
#
925
# @granularity: granularity of the dirty bitmap in bytes (since 1.4)
926
#
927
# Since: 1.3
928
##
929
{ 'type': 'BlockDirtyInfo',
930
  'data': {'count': 'int', 'granularity': 'int'} }
931

    
932
##
933
# @BlockInfo:
934
#
935
# Block device information.  This structure describes a virtual device and
936
# the backing device associated with it.
937
#
938
# @device: The device name associated with the virtual device.
939
#
940
# @type: This field is returned only for compatibility reasons, it should
941
#        not be used (always returns 'unknown')
942
#
943
# @removable: True if the device supports removable media.
944
#
945
# @locked: True if the guest has locked this device from having its media
946
#          removed
947
#
948
# @tray_open: #optional True if the device has a tray and it is open
949
#             (only present if removable is true)
950
#
951
# @dirty-bitmaps: #optional dirty bitmaps information (only present if the
952
#                 driver has one or more dirty bitmaps) (Since 1.8)
953
#
954
# @io-status: #optional @BlockDeviceIoStatus. Only present if the device
955
#             supports it and the VM is configured to stop on errors
956
#
957
# @inserted: #optional @BlockDeviceInfo describing the device if media is
958
#            present
959
#
960
# Since:  0.14.0
961
##
962
{ 'type': 'BlockInfo',
963
  'data': {'device': 'str', 'type': 'str', 'removable': 'bool',
964
           'locked': 'bool', '*inserted': 'BlockDeviceInfo',
965
           '*tray_open': 'bool', '*io-status': 'BlockDeviceIoStatus',
966
           '*dirty-bitmaps': ['BlockDirtyInfo'] } }
967

    
968
##
969
# @query-block:
970
#
971
# Get a list of BlockInfo for all virtual block devices.
972
#
973
# Returns: a list of @BlockInfo describing each virtual block device
974
#
975
# Since: 0.14.0
976
##
977
{ 'command': 'query-block', 'returns': ['BlockInfo'] }
978

    
979
##
980
# @BlockDeviceStats:
981
#
982
# Statistics of a virtual block device or a block backing device.
983
#
984
# @rd_bytes:      The number of bytes read by the device.
985
#
986
# @wr_bytes:      The number of bytes written by the device.
987
#
988
# @rd_operations: The number of read operations performed by the device.
989
#
990
# @wr_operations: The number of write operations performed by the device.
991
#
992
# @flush_operations: The number of cache flush operations performed by the
993
#                    device (since 0.15.0)
994
#
995
# @flush_total_time_ns: Total time spend on cache flushes in nano-seconds
996
#                       (since 0.15.0).
997
#
998
# @wr_total_time_ns: Total time spend on writes in nano-seconds (since 0.15.0).
999
#
1000
# @rd_total_time_ns: Total_time_spend on reads in nano-seconds (since 0.15.0).
1001
#
1002
# @wr_highest_offset: The offset after the greatest byte written to the
1003
#                     device.  The intended use of this information is for
1004
#                     growable sparse files (like qcow2) that are used on top
1005
#                     of a physical device.
1006
#
1007
# Since: 0.14.0
1008
##
1009
{ 'type': 'BlockDeviceStats',
1010
  'data': {'rd_bytes': 'int', 'wr_bytes': 'int', 'rd_operations': 'int',
1011
           'wr_operations': 'int', 'flush_operations': 'int',
1012
           'flush_total_time_ns': 'int', 'wr_total_time_ns': 'int',
1013
           'rd_total_time_ns': 'int', 'wr_highest_offset': 'int' } }
1014

    
1015
##
1016
# @BlockStats:
1017
#
1018
# Statistics of a virtual block device or a block backing device.
1019
#
1020
# @device: #optional If the stats are for a virtual block device, the name
1021
#          corresponding to the virtual block device.
1022
#
1023
# @stats:  A @BlockDeviceStats for the device.
1024
#
1025
# @parent: #optional This may point to the backing block device if this is a
1026
#          a virtual block device.  If it's a backing block, this will point
1027
#          to the backing file is one is present.
1028
#
1029
# Since: 0.14.0
1030
##
1031
{ 'type': 'BlockStats',
1032
  'data': {'*device': 'str', 'stats': 'BlockDeviceStats',
1033
           '*parent': 'BlockStats'} }
1034

    
1035
##
1036
# @query-blockstats:
1037
#
1038
# Query the @BlockStats for all virtual block devices.
1039
#
1040
# Returns: A list of @BlockStats for each virtual block devices.
1041
#
1042
# Since: 0.14.0
1043
##
1044
{ 'command': 'query-blockstats', 'returns': ['BlockStats'] }
1045

    
1046
##
1047
# @VncClientInfo:
1048
#
1049
# Information about a connected VNC client.
1050
#
1051
# @host: The host name of the client.  QEMU tries to resolve this to a DNS name
1052
#        when possible.
1053
#
1054
# @family: 'ipv6' if the client is connected via IPv6 and TCP
1055
#          'ipv4' if the client is connected via IPv4 and TCP
1056
#          'unix' if the client is connected via a unix domain socket
1057
#          'unknown' otherwise
1058
#
1059
# @service: The service name of the client's port.  This may depends on the
1060
#           host system's service database so symbolic names should not be
1061
#           relied on.
1062
#
1063
# @x509_dname: #optional If x509 authentication is in use, the Distinguished
1064
#              Name of the client.
1065
#
1066
# @sasl_username: #optional If SASL authentication is in use, the SASL username
1067
#                 used for authentication.
1068
#
1069
# Since: 0.14.0
1070
##
1071
{ 'type': 'VncClientInfo',
1072
  'data': {'host': 'str', 'family': 'str', 'service': 'str',
1073
           '*x509_dname': 'str', '*sasl_username': 'str'} }
1074

    
1075
##
1076
# @VncInfo:
1077
#
1078
# Information about the VNC session.
1079
#
1080
# @enabled: true if the VNC server is enabled, false otherwise
1081
#
1082
# @host: #optional The hostname the VNC server is bound to.  This depends on
1083
#        the name resolution on the host and may be an IP address.
1084
#
1085
# @family: #optional 'ipv6' if the host is listening for IPv6 connections
1086
#                    'ipv4' if the host is listening for IPv4 connections
1087
#                    'unix' if the host is listening on a unix domain socket
1088
#                    'unknown' otherwise
1089
#
1090
# @service: #optional The service name of the server's port.  This may depends
1091
#           on the host system's service database so symbolic names should not
1092
#           be relied on.
1093
#
1094
# @auth: #optional the current authentication type used by the server
1095
#        'none' if no authentication is being used
1096
#        'vnc' if VNC authentication is being used
1097
#        'vencrypt+plain' if VEncrypt is used with plain text authentication
1098
#        'vencrypt+tls+none' if VEncrypt is used with TLS and no authentication
1099
#        'vencrypt+tls+vnc' if VEncrypt is used with TLS and VNC authentication
1100
#        'vencrypt+tls+plain' if VEncrypt is used with TLS and plain text auth
1101
#        'vencrypt+x509+none' if VEncrypt is used with x509 and no auth
1102
#        'vencrypt+x509+vnc' if VEncrypt is used with x509 and VNC auth
1103
#        'vencrypt+x509+plain' if VEncrypt is used with x509 and plain text auth
1104
#        'vencrypt+tls+sasl' if VEncrypt is used with TLS and SASL auth
1105
#        'vencrypt+x509+sasl' if VEncrypt is used with x509 and SASL auth
1106
#
1107
# @clients: a list of @VncClientInfo of all currently connected clients
1108
#
1109
# Since: 0.14.0
1110
##
1111
{ 'type': 'VncInfo',
1112
  'data': {'enabled': 'bool', '*host': 'str', '*family': 'str',
1113
           '*service': 'str', '*auth': 'str', '*clients': ['VncClientInfo']} }
1114

    
1115
##
1116
# @query-vnc:
1117
#
1118
# Returns information about the current VNC server
1119
#
1120
# Returns: @VncInfo
1121
#
1122
# Since: 0.14.0
1123
##
1124
{ 'command': 'query-vnc', 'returns': 'VncInfo' }
1125

    
1126
##
1127
# @SpiceChannel
1128
#
1129
# Information about a SPICE client channel.
1130
#
1131
# @host: The host name of the client.  QEMU tries to resolve this to a DNS name
1132
#        when possible.
1133
#
1134
# @family: 'ipv6' if the client is connected via IPv6 and TCP
1135
#          'ipv4' if the client is connected via IPv4 and TCP
1136
#          'unix' if the client is connected via a unix domain socket
1137
#          'unknown' otherwise
1138
#
1139
# @port: The client's port number.
1140
#
1141
# @connection-id: SPICE connection id number.  All channels with the same id
1142
#                 belong to the same SPICE session.
1143
#
1144
# @connection-type: SPICE channel type number.  "1" is the main control
1145
#                   channel, filter for this one if you want to track spice
1146
#                   sessions only
1147
#
1148
# @channel-id: SPICE channel ID number.  Usually "0", might be different when
1149
#              multiple channels of the same type exist, such as multiple
1150
#              display channels in a multihead setup
1151
#
1152
# @tls: true if the channel is encrypted, false otherwise.
1153
#
1154
# Since: 0.14.0
1155
##
1156
{ 'type': 'SpiceChannel',
1157
  'data': {'host': 'str', 'family': 'str', 'port': 'str',
1158
           'connection-id': 'int', 'channel-type': 'int', 'channel-id': 'int',
1159
           'tls': 'bool'} }
1160

    
1161
##
1162
# @SpiceQueryMouseMode
1163
#
1164
# An enumeration of Spice mouse states.
1165
#
1166
# @client: Mouse cursor position is determined by the client.
1167
#
1168
# @server: Mouse cursor position is determined by the server.
1169
#
1170
# @unknown: No information is available about mouse mode used by
1171
#           the spice server.
1172
#
1173
# Note: spice/enums.h has a SpiceMouseMode already, hence the name.
1174
#
1175
# Since: 1.1
1176
##
1177
{ 'enum': 'SpiceQueryMouseMode',
1178
  'data': [ 'client', 'server', 'unknown' ] }
1179

    
1180
##
1181
# @SpiceInfo
1182
#
1183
# Information about the SPICE session.
1184
#
1185
# @enabled: true if the SPICE server is enabled, false otherwise
1186
#
1187
# @migrated: true if the last guest migration completed and spice
1188
#            migration had completed as well. false otherwise.
1189
#
1190
# @host: #optional The hostname the SPICE server is bound to.  This depends on
1191
#        the name resolution on the host and may be an IP address.
1192
#
1193
# @port: #optional The SPICE server's port number.
1194
#
1195
# @compiled-version: #optional SPICE server version.
1196
#
1197
# @tls-port: #optional The SPICE server's TLS port number.
1198
#
1199
# @auth: #optional the current authentication type used by the server
1200
#        'none'  if no authentication is being used
1201
#        'spice' uses SASL or direct TLS authentication, depending on command
1202
#                line options
1203
#
1204
# @mouse-mode: The mode in which the mouse cursor is displayed currently. Can
1205
#              be determined by the client or the server, or unknown if spice
1206
#              server doesn't provide this information.
1207
#
1208
#              Since: 1.1
1209
#
1210
# @channels: a list of @SpiceChannel for each active spice channel
1211
#
1212
# Since: 0.14.0
1213
##
1214
{ 'type': 'SpiceInfo',
1215
  'data': {'enabled': 'bool', 'migrated': 'bool', '*host': 'str', '*port': 'int',
1216
           '*tls-port': 'int', '*auth': 'str', '*compiled-version': 'str',
1217
           'mouse-mode': 'SpiceQueryMouseMode', '*channels': ['SpiceChannel']} }
1218

    
1219
##
1220
# @query-spice
1221
#
1222
# Returns information about the current SPICE server
1223
#
1224
# Returns: @SpiceInfo
1225
#
1226
# Since: 0.14.0
1227
##
1228
{ 'command': 'query-spice', 'returns': 'SpiceInfo' }
1229

    
1230
##
1231
# @BalloonInfo:
1232
#
1233
# Information about the guest balloon device.
1234
#
1235
# @actual: the number of bytes the balloon currently contains
1236
#
1237
# Since: 0.14.0
1238
#
1239
##
1240
{ 'type': 'BalloonInfo', 'data': {'actual': 'int' } }
1241

    
1242
##
1243
# @query-balloon:
1244
#
1245
# Return information about the balloon device.
1246
#
1247
# Returns: @BalloonInfo on success
1248
#          If the balloon driver is enabled but not functional because the KVM
1249
#          kernel module cannot support it, KvmMissingCap
1250
#          If no balloon device is present, DeviceNotActive
1251
#
1252
# Since: 0.14.0
1253
##
1254
{ 'command': 'query-balloon', 'returns': 'BalloonInfo' }
1255

    
1256
##
1257
# @PciMemoryRange:
1258
#
1259
# A PCI device memory region
1260
#
1261
# @base: the starting address (guest physical)
1262
#
1263
# @limit: the ending address (guest physical)
1264
#
1265
# Since: 0.14.0
1266
##
1267
{ 'type': 'PciMemoryRange', 'data': {'base': 'int', 'limit': 'int'} }
1268

    
1269
##
1270
# @PciMemoryRegion
1271
#
1272
# Information about a PCI device I/O region.
1273
#
1274
# @bar: the index of the Base Address Register for this region
1275
#
1276
# @type: 'io' if the region is a PIO region
1277
#        'memory' if the region is a MMIO region
1278
#
1279
# @prefetch: #optional if @type is 'memory', true if the memory is prefetchable
1280
#
1281
# @mem_type_64: #optional if @type is 'memory', true if the BAR is 64-bit
1282
#
1283
# Since: 0.14.0
1284
##
1285
{ 'type': 'PciMemoryRegion',
1286
  'data': {'bar': 'int', 'type': 'str', 'address': 'int', 'size': 'int',
1287
           '*prefetch': 'bool', '*mem_type_64': 'bool' } }
1288

    
1289
##
1290
# @PciBridgeInfo:
1291
#
1292
# Information about a PCI Bridge device
1293
#
1294
# @bus.number: primary bus interface number.  This should be the number of the
1295
#              bus the device resides on.
1296
#
1297
# @bus.secondary: secondary bus interface number.  This is the number of the
1298
#                 main bus for the bridge
1299
#
1300
# @bus.subordinate: This is the highest number bus that resides below the
1301
#                   bridge.
1302
#
1303
# @bus.io_range: The PIO range for all devices on this bridge
1304
#
1305
# @bus.memory_range: The MMIO range for all devices on this bridge
1306
#
1307
# @bus.prefetchable_range: The range of prefetchable MMIO for all devices on
1308
#                          this bridge
1309
#
1310
# @devices: a list of @PciDeviceInfo for each device on this bridge
1311
#
1312
# Since: 0.14.0
1313
##
1314
{ 'type': 'PciBridgeInfo',
1315
  'data': {'bus': { 'number': 'int', 'secondary': 'int', 'subordinate': 'int',
1316
                    'io_range': 'PciMemoryRange',
1317
                    'memory_range': 'PciMemoryRange',
1318
                    'prefetchable_range': 'PciMemoryRange' },
1319
           '*devices': ['PciDeviceInfo']} }
1320

    
1321
##
1322
# @PciDeviceInfo:
1323
#
1324
# Information about a PCI device
1325
#
1326
# @bus: the bus number of the device
1327
#
1328
# @slot: the slot the device is located in
1329
#
1330
# @function: the function of the slot used by the device
1331
#
1332
# @class_info.desc: #optional a string description of the device's class
1333
#
1334
# @class_info.class: the class code of the device
1335
#
1336
# @id.device: the PCI device id
1337
#
1338
# @id.vendor: the PCI vendor id
1339
#
1340
# @irq: #optional if an IRQ is assigned to the device, the IRQ number
1341
#
1342
# @qdev_id: the device name of the PCI device
1343
#
1344
# @pci_bridge: if the device is a PCI bridge, the bridge information
1345
#
1346
# @regions: a list of the PCI I/O regions associated with the device
1347
#
1348
# Notes: the contents of @class_info.desc are not stable and should only be
1349
#        treated as informational.
1350
#
1351
# Since: 0.14.0
1352
##
1353
{ 'type': 'PciDeviceInfo',
1354
  'data': {'bus': 'int', 'slot': 'int', 'function': 'int',
1355
           'class_info': {'*desc': 'str', 'class': 'int'},
1356
           'id': {'device': 'int', 'vendor': 'int'},
1357
           '*irq': 'int', 'qdev_id': 'str', '*pci_bridge': 'PciBridgeInfo',
1358
           'regions': ['PciMemoryRegion']} }
1359

    
1360
##
1361
# @PciInfo:
1362
#
1363
# Information about a PCI bus
1364
#
1365
# @bus: the bus index
1366
#
1367
# @devices: a list of devices on this bus
1368
#
1369
# Since: 0.14.0
1370
##
1371
{ 'type': 'PciInfo', 'data': {'bus': 'int', 'devices': ['PciDeviceInfo']} }
1372

    
1373
##
1374
# @query-pci:
1375
#
1376
# Return information about the PCI bus topology of the guest.
1377
#
1378
# Returns: a list of @PciInfo for each PCI bus
1379
#
1380
# Since: 0.14.0
1381
##
1382
{ 'command': 'query-pci', 'returns': ['PciInfo'] }
1383

    
1384
##
1385
# @BlockdevOnError:
1386
#
1387
# An enumeration of possible behaviors for errors on I/O operations.
1388
# The exact meaning depends on whether the I/O was initiated by a guest
1389
# or by a block job
1390
#
1391
# @report: for guest operations, report the error to the guest;
1392
#          for jobs, cancel the job
1393
#
1394
# @ignore: ignore the error, only report a QMP event (BLOCK_IO_ERROR
1395
#          or BLOCK_JOB_ERROR)
1396
#
1397
# @enospc: same as @stop on ENOSPC, same as @report otherwise.
1398
#
1399
# @stop: for guest operations, stop the virtual machine;
1400
#        for jobs, pause the job
1401
#
1402
# Since: 1.3
1403
##
1404
{ 'enum': 'BlockdevOnError',
1405
  'data': ['report', 'ignore', 'enospc', 'stop'] }
1406

    
1407
##
1408
# @MirrorSyncMode:
1409
#
1410
# An enumeration of possible behaviors for the initial synchronization
1411
# phase of storage mirroring.
1412
#
1413
# @top: copies data in the topmost image to the destination
1414
#
1415
# @full: copies data from all images to the destination
1416
#
1417
# @none: only copy data written from now on
1418
#
1419
# Since: 1.3
1420
##
1421
{ 'enum': 'MirrorSyncMode',
1422
  'data': ['top', 'full', 'none'] }
1423

    
1424
##
1425
# @BlockJobType:
1426
#
1427
# Type of a block job.
1428
#
1429
# @commit: block commit job type, see "block-commit"
1430
#
1431
# @stream: block stream job type, see "block-stream"
1432
#
1433
# @mirror: drive mirror job type, see "drive-mirror"
1434
#
1435
# @backup: drive backup job type, see "drive-backup"
1436
#
1437
# Since: 1.7
1438
##
1439
{ 'enum': 'BlockJobType',
1440
  'data': ['commit', 'stream', 'mirror', 'backup'] }
1441

    
1442
##
1443
# @BlockJobInfo:
1444
#
1445
# Information about a long-running block device operation.
1446
#
1447
# @type: the job type ('stream' for image streaming)
1448
#
1449
# @device: the block device name
1450
#
1451
# @len: the maximum progress value
1452
#
1453
# @busy: false if the job is known to be in a quiescent state, with
1454
#        no pending I/O.  Since 1.3.
1455
#
1456
# @paused: whether the job is paused or, if @busy is true, will
1457
#          pause itself as soon as possible.  Since 1.3.
1458
#
1459
# @offset: the current progress value
1460
#
1461
# @speed: the rate limit, bytes per second
1462
#
1463
# @io-status: the status of the job (since 1.3)
1464
#
1465
# Since: 1.1
1466
##
1467
{ 'type': 'BlockJobInfo',
1468
  'data': {'type': 'str', 'device': 'str', 'len': 'int',
1469
           'offset': 'int', 'busy': 'bool', 'paused': 'bool', 'speed': 'int',
1470
           'io-status': 'BlockDeviceIoStatus'} }
1471

    
1472
##
1473
# @query-block-jobs:
1474
#
1475
# Return information about long-running block device operations.
1476
#
1477
# Returns: a list of @BlockJobInfo for each active block job
1478
#
1479
# Since: 1.1
1480
##
1481
{ 'command': 'query-block-jobs', 'returns': ['BlockJobInfo'] }
1482

    
1483
##
1484
# @quit:
1485
#
1486
# This command will cause the QEMU process to exit gracefully.  While every
1487
# attempt is made to send the QMP response before terminating, this is not
1488
# guaranteed.  When using this interface, a premature EOF would not be
1489
# unexpected.
1490
#
1491
# Since: 0.14.0
1492
##
1493
{ 'command': 'quit' }
1494

    
1495
##
1496
# @stop:
1497
#
1498
# Stop all guest VCPU execution.
1499
#
1500
# Since:  0.14.0
1501
#
1502
# Notes:  This function will succeed even if the guest is already in the stopped
1503
#         state.  In "inmigrate" state, it will ensure that the guest
1504
#         remains paused once migration finishes, as if the -S option was
1505
#         passed on the command line.
1506
##
1507
{ 'command': 'stop' }
1508

    
1509
##
1510
# @system_reset:
1511
#
1512
# Performs a hard reset of a guest.
1513
#
1514
# Since: 0.14.0
1515
##
1516
{ 'command': 'system_reset' }
1517

    
1518
##
1519
# @system_powerdown:
1520
#
1521
# Requests that a guest perform a powerdown operation.
1522
#
1523
# Since: 0.14.0
1524
#
1525
# Notes: A guest may or may not respond to this command.  This command
1526
#        returning does not indicate that a guest has accepted the request or
1527
#        that it has shut down.  Many guests will respond to this command by
1528
#        prompting the user in some way.
1529
##
1530
{ 'command': 'system_powerdown' }
1531

    
1532
##
1533
# @cpu:
1534
#
1535
# This command is a nop that is only provided for the purposes of compatibility.
1536
#
1537
# Since: 0.14.0
1538
#
1539
# Notes: Do not use this command.
1540
##
1541
{ 'command': 'cpu', 'data': {'index': 'int'} }
1542

    
1543
##
1544
# @cpu-add
1545
#
1546
# Adds CPU with specified ID
1547
#
1548
# @id: ID of CPU to be created, valid values [0..max_cpus)
1549
#
1550
# Returns: Nothing on success
1551
#
1552
# Since 1.5
1553
##
1554
{ 'command': 'cpu-add', 'data': {'id': 'int'} }
1555

    
1556
##
1557
# @memsave:
1558
#
1559
# Save a portion of guest memory to a file.
1560
#
1561
# @val: the virtual address of the guest to start from
1562
#
1563
# @size: the size of memory region to save
1564
#
1565
# @filename: the file to save the memory to as binary data
1566
#
1567
# @cpu-index: #optional the index of the virtual CPU to use for translating the
1568
#                       virtual address (defaults to CPU 0)
1569
#
1570
# Returns: Nothing on success
1571
#
1572
# Since: 0.14.0
1573
#
1574
# Notes: Errors were not reliably returned until 1.1
1575
##
1576
{ 'command': 'memsave',
1577
  'data': {'val': 'int', 'size': 'int', 'filename': 'str', '*cpu-index': 'int'} }
1578

    
1579
##
1580
# @pmemsave:
1581
#
1582
# Save a portion of guest physical memory to a file.
1583
#
1584
# @val: the physical address of the guest to start from
1585
#
1586
# @size: the size of memory region to save
1587
#
1588
# @filename: the file to save the memory to as binary data
1589
#
1590
# Returns: Nothing on success
1591
#
1592
# Since: 0.14.0
1593
#
1594
# Notes: Errors were not reliably returned until 1.1
1595
##
1596
{ 'command': 'pmemsave',
1597
  'data': {'val': 'int', 'size': 'int', 'filename': 'str'} }
1598

    
1599
##
1600
# @cont:
1601
#
1602
# Resume guest VCPU execution.
1603
#
1604
# Since:  0.14.0
1605
#
1606
# Returns:  If successful, nothing
1607
#           If QEMU was started with an encrypted block device and a key has
1608
#              not yet been set, DeviceEncrypted.
1609
#
1610
# Notes:  This command will succeed if the guest is currently running.  It
1611
#         will also succeed if the guest is in the "inmigrate" state; in
1612
#         this case, the effect of the command is to make sure the guest
1613
#         starts once migration finishes, removing the effect of the -S
1614
#         command line option if it was passed.
1615
##
1616
{ 'command': 'cont' }
1617

    
1618
##
1619
# @system_wakeup:
1620
#
1621
# Wakeup guest from suspend.  Does nothing in case the guest isn't suspended.
1622
#
1623
# Since:  1.1
1624
#
1625
# Returns:  nothing.
1626
##
1627
{ 'command': 'system_wakeup' }
1628

    
1629
##
1630
# @inject-nmi:
1631
#
1632
# Injects an Non-Maskable Interrupt into all guest's VCPUs.
1633
#
1634
# Returns:  If successful, nothing
1635
#
1636
# Since:  0.14.0
1637
#
1638
# Notes: Only x86 Virtual Machines support this command.
1639
##
1640
{ 'command': 'inject-nmi' }
1641

    
1642
##
1643
# @set_link:
1644
#
1645
# Sets the link status of a virtual network adapter.
1646
#
1647
# @name: the device name of the virtual network adapter
1648
#
1649
# @up: true to set the link status to be up
1650
#
1651
# Returns: Nothing on success
1652
#          If @name is not a valid network device, DeviceNotFound
1653
#
1654
# Since: 0.14.0
1655
#
1656
# Notes: Not all network adapters support setting link status.  This command
1657
#        will succeed even if the network adapter does not support link status
1658
#        notification.
1659
##
1660
{ 'command': 'set_link', 'data': {'name': 'str', 'up': 'bool'} }
1661

    
1662
##
1663
# @block_passwd:
1664
#
1665
# This command sets the password of a block device that has not been open
1666
# with a password and requires one.
1667
#
1668
# The two cases where this can happen are a block device is created through
1669
# QEMU's initial command line or a block device is changed through the legacy
1670
# @change interface.
1671
#
1672
# In the event that the block device is created through the initial command
1673
# line, the VM will start in the stopped state regardless of whether '-S' is
1674
# used.  The intention is for a management tool to query the block devices to
1675
# determine which ones are encrypted, set the passwords with this command, and
1676
# then start the guest with the @cont command.
1677
#
1678
# @device:   the name of the device to set the password on
1679
#
1680
# @password: the password to use for the device
1681
#
1682
# Returns: nothing on success
1683
#          If @device is not a valid block device, DeviceNotFound
1684
#          If @device is not encrypted, DeviceNotEncrypted
1685
#
1686
# Notes:  Not all block formats support encryption and some that do are not
1687
#         able to validate that a password is correct.  Disk corruption may
1688
#         occur if an invalid password is specified.
1689
#
1690
# Since: 0.14.0
1691
##
1692
{ 'command': 'block_passwd', 'data': {'device': 'str', 'password': 'str'} }
1693

    
1694
##
1695
# @balloon:
1696
#
1697
# Request the balloon driver to change its balloon size.
1698
#
1699
# @value: the target size of the balloon in bytes
1700
#
1701
# Returns: Nothing on success
1702
#          If the balloon driver is enabled but not functional because the KVM
1703
#            kernel module cannot support it, KvmMissingCap
1704
#          If no balloon device is present, DeviceNotActive
1705
#
1706
# Notes: This command just issues a request to the guest.  When it returns,
1707
#        the balloon size may not have changed.  A guest can change the balloon
1708
#        size independent of this command.
1709
#
1710
# Since: 0.14.0
1711
##
1712
{ 'command': 'balloon', 'data': {'value': 'int'} }
1713

    
1714
##
1715
# @block_resize
1716
#
1717
# Resize a block image while a guest is running.
1718
#
1719
# @device:  the name of the device to get the image resized
1720
#
1721
# @size:  new image size in bytes
1722
#
1723
# Returns: nothing on success
1724
#          If @device is not a valid block device, DeviceNotFound
1725
#
1726
# Since: 0.14.0
1727
##
1728
{ 'command': 'block_resize', 'data': { 'device': 'str', 'size': 'int' }}
1729

    
1730
##
1731
# @NewImageMode
1732
#
1733
# An enumeration that tells QEMU how to set the backing file path in
1734
# a new image file.
1735
#
1736
# @existing: QEMU should look for an existing image file.
1737
#
1738
# @absolute-paths: QEMU should create a new image with absolute paths
1739
# for the backing file. If there is no backing file available, the new
1740
# image will not be backed either.
1741
#
1742
# Since: 1.1
1743
##
1744
{ 'enum': 'NewImageMode',
1745
  'data': [ 'existing', 'absolute-paths' ] }
1746

    
1747
##
1748
# @BlockdevSnapshot
1749
#
1750
# @device:  the name of the device to generate the snapshot from.
1751
#
1752
# @snapshot-file: the target of the new image. A new file will be created.
1753
#
1754
# @format: #optional the format of the snapshot image, default is 'qcow2'.
1755
#
1756
# @mode: #optional whether and how QEMU should create a new image, default is
1757
#        'absolute-paths'.
1758
##
1759
{ 'type': 'BlockdevSnapshot',
1760
  'data': { 'device': 'str', 'snapshot-file': 'str', '*format': 'str',
1761
            '*mode': 'NewImageMode' } }
1762

    
1763
##
1764
# @BlockdevSnapshotInternal
1765
#
1766
# @device: the name of the device to generate the snapshot from
1767
#
1768
# @name: the name of the internal snapshot to be created
1769
#
1770
# Notes: In transaction, if @name is empty, or any snapshot matching @name
1771
#        exists, the operation will fail. Only some image formats support it,
1772
#        for example, qcow2, rbd, and sheepdog.
1773
#
1774
# Since: 1.7
1775
##
1776
{ 'type': 'BlockdevSnapshotInternal',
1777
  'data': { 'device': 'str', 'name': 'str' } }
1778

    
1779
##
1780
# @DriveBackup
1781
#
1782
# @device: the name of the device which should be copied.
1783
#
1784
# @target: the target of the new image. If the file exists, or if it
1785
#          is a device, the existing file/device will be used as the new
1786
#          destination.  If it does not exist, a new file will be created.
1787
#
1788
# @format: #optional the format of the new destination, default is to
1789
#          probe if @mode is 'existing', else the format of the source
1790
#
1791
# @sync: what parts of the disk image should be copied to the destination
1792
#        (all the disk, only the sectors allocated in the topmost image, or
1793
#        only new I/O).
1794
#
1795
# @mode: #optional whether and how QEMU should create a new image, default is
1796
#        'absolute-paths'.
1797
#
1798
# @speed: #optional the maximum speed, in bytes per second
1799
#
1800
# @on-source-error: #optional the action to take on an error on the source,
1801
#                   default 'report'.  'stop' and 'enospc' can only be used
1802
#                   if the block device supports io-status (see BlockInfo).
1803
#
1804
# @on-target-error: #optional the action to take on an error on the target,
1805
#                   default 'report' (no limitations, since this applies to
1806
#                   a different block device than @device).
1807
#
1808
# Note that @on-source-error and @on-target-error only affect background I/O.
1809
# If an error occurs during a guest write request, the device's rerror/werror
1810
# actions will be used.
1811
#
1812
# Since: 1.6
1813
##
1814
{ 'type': 'DriveBackup',
1815
  'data': { 'device': 'str', 'target': 'str', '*format': 'str',
1816
            'sync': 'MirrorSyncMode', '*mode': 'NewImageMode',
1817
            '*speed': 'int',
1818
            '*on-source-error': 'BlockdevOnError',
1819
            '*on-target-error': 'BlockdevOnError' } }
1820

    
1821
##
1822
# @Abort
1823
#
1824
# This action can be used to test transaction failure.
1825
#
1826
# Since: 1.6
1827
###
1828
{ 'type': 'Abort',
1829
  'data': { } }
1830

    
1831
##
1832
# @TransactionAction
1833
#
1834
# A discriminated record of operations that can be performed with
1835
# @transaction.
1836
##
1837
{ 'union': 'TransactionAction',
1838
  'data': {
1839
       'blockdev-snapshot-sync': 'BlockdevSnapshot',
1840
       'drive-backup': 'DriveBackup',
1841
       'abort': 'Abort',
1842
       'blockdev-snapshot-internal-sync': 'BlockdevSnapshotInternal'
1843
   } }
1844

    
1845
##
1846
# @transaction
1847
#
1848
# Executes a number of transactionable QMP commands atomically. If any
1849
# operation fails, then the entire set of actions will be abandoned and the
1850
# appropriate error returned.
1851
#
1852
#  List of:
1853
#  @TransactionAction: information needed for the respective operation
1854
#
1855
# Returns: nothing on success
1856
#          Errors depend on the operations of the transaction
1857
#
1858
# Note: The transaction aborts on the first failure.  Therefore, there will be
1859
# information on only one failed operation returned in an error condition, and
1860
# subsequent actions will not have been attempted.
1861
#
1862
# Since 1.1
1863
##
1864
{ 'command': 'transaction',
1865
  'data': { 'actions': [ 'TransactionAction' ] } }
1866

    
1867
##
1868
# @blockdev-snapshot-sync
1869
#
1870
# Generates a synchronous snapshot of a block device.
1871
#
1872
# For the arguments, see the documentation of BlockdevSnapshot.
1873
#
1874
# Returns: nothing on success
1875
#          If @device is not a valid block device, DeviceNotFound
1876
#
1877
# Since 0.14.0
1878
##
1879
{ 'command': 'blockdev-snapshot-sync',
1880
  'data': 'BlockdevSnapshot' }
1881

    
1882
##
1883
# @blockdev-snapshot-internal-sync
1884
#
1885
# Synchronously take an internal snapshot of a block device, when the format
1886
# of the image used supports it.
1887
#
1888
# For the arguments, see the documentation of BlockdevSnapshotInternal.
1889
#
1890
# Returns: nothing on success
1891
#          If @device is not a valid block device, DeviceNotFound
1892
#          If any snapshot matching @name exists, or @name is empty,
1893
#          GenericError
1894
#          If the format of the image used does not support it,
1895
#          BlockFormatFeatureNotSupported
1896
#
1897
# Since 1.7
1898
##
1899
{ 'command': 'blockdev-snapshot-internal-sync',
1900
  'data': 'BlockdevSnapshotInternal' }
1901

    
1902
##
1903
# @blockdev-snapshot-delete-internal-sync
1904
#
1905
# Synchronously delete an internal snapshot of a block device, when the format
1906
# of the image used support it. The snapshot is identified by name or id or
1907
# both. One of the name or id is required. Return SnapshotInfo for the
1908
# successfully deleted snapshot.
1909
#
1910
# @device: the name of the device to delete the snapshot from
1911
#
1912
# @id: optional the snapshot's ID to be deleted
1913
#
1914
# @name: optional the snapshot's name to be deleted
1915
#
1916
# Returns: SnapshotInfo on success
1917
#          If @device is not a valid block device, DeviceNotFound
1918
#          If snapshot not found, GenericError
1919
#          If the format of the image used does not support it,
1920
#          BlockFormatFeatureNotSupported
1921
#          If @id and @name are both not specified, GenericError
1922
#
1923
# Since 1.7
1924
##
1925
{ 'command': 'blockdev-snapshot-delete-internal-sync',
1926
  'data': { 'device': 'str', '*id': 'str', '*name': 'str'},
1927
  'returns': 'SnapshotInfo' }
1928

    
1929
##
1930
# @human-monitor-command:
1931
#
1932
# Execute a command on the human monitor and return the output.
1933
#
1934
# @command-line: the command to execute in the human monitor
1935
#
1936
# @cpu-index: #optional The CPU to use for commands that require an implicit CPU
1937
#
1938
# Returns: the output of the command as a string
1939
#
1940
# Since: 0.14.0
1941
#
1942
# Notes: This command only exists as a stop-gap.  Its use is highly
1943
#        discouraged.  The semantics of this command are not guaranteed.
1944
#
1945
#        Known limitations:
1946
#
1947
#        o This command is stateless, this means that commands that depend
1948
#          on state information (such as getfd) might not work
1949
#
1950
#       o Commands that prompt the user for data (eg. 'cont' when the block
1951
#         device is encrypted) don't currently work
1952
##
1953
{ 'command': 'human-monitor-command',
1954
  'data': {'command-line': 'str', '*cpu-index': 'int'},
1955
  'returns': 'str' }
1956

    
1957
##
1958
# @block-commit
1959
#
1960
# Live commit of data from overlay image nodes into backing nodes - i.e.,
1961
# writes data between 'top' and 'base' into 'base'.
1962
#
1963
# @device:  the name of the device
1964
#
1965
# @base:   #optional The file name of the backing image to write data into.
1966
#                    If not specified, this is the deepest backing image
1967
#
1968
# @top:              The file name of the backing image within the image chain,
1969
#                    which contains the topmost data to be committed down.
1970
#                    Note, the active layer as 'top' is currently unsupported.
1971
#
1972
#                    If top == base, that is an error.
1973
#
1974
#
1975
# @speed:  #optional the maximum speed, in bytes per second
1976
#
1977
# Returns: Nothing on success
1978
#          If commit or stream is already active on this device, DeviceInUse
1979
#          If @device does not exist, DeviceNotFound
1980
#          If image commit is not supported by this device, NotSupported
1981
#          If @base or @top is invalid, a generic error is returned
1982
#          If @top is the active layer, or omitted, a generic error is returned
1983
#          If @speed is invalid, InvalidParameter
1984
#
1985
# Since: 1.3
1986
#
1987
##
1988
{ 'command': 'block-commit',
1989
  'data': { 'device': 'str', '*base': 'str', 'top': 'str',
1990
            '*speed': 'int' } }
1991

    
1992
##
1993
# @drive-backup
1994
#
1995
# Start a point-in-time copy of a block device to a new destination.  The
1996
# status of ongoing drive-backup operations can be checked with
1997
# query-block-jobs where the BlockJobInfo.type field has the value 'backup'.
1998
# The operation can be stopped before it has completed using the
1999
# block-job-cancel command.
2000
#
2001
# For the arguments, see the documentation of DriveBackup.
2002
#
2003
# Returns: nothing on success
2004
#          If @device is not a valid block device, DeviceNotFound
2005
#
2006
# Since 1.6
2007
##
2008
{ 'command': 'drive-backup', 'data': 'DriveBackup' }
2009

    
2010
##
2011
# @drive-mirror
2012
#
2013
# Start mirroring a block device's writes to a new destination.
2014
#
2015
# @device:  the name of the device whose writes should be mirrored.
2016
#
2017
# @target: the target of the new image. If the file exists, or if it
2018
#          is a device, the existing file/device will be used as the new
2019
#          destination.  If it does not exist, a new file will be created.
2020
#
2021
# @format: #optional the format of the new destination, default is to
2022
#          probe if @mode is 'existing', else the format of the source
2023
#
2024
# @mode: #optional whether and how QEMU should create a new image, default is
2025
#        'absolute-paths'.
2026
#
2027
# @speed:  #optional the maximum speed, in bytes per second
2028
#
2029
# @sync: what parts of the disk image should be copied to the destination
2030
#        (all the disk, only the sectors allocated in the topmost image, or
2031
#        only new I/O).
2032
#
2033
# @granularity: #optional granularity of the dirty bitmap, default is 64K
2034
#               if the image format doesn't have clusters, 4K if the clusters
2035
#               are smaller than that, else the cluster size.  Must be a
2036
#               power of 2 between 512 and 64M (since 1.4).
2037
#
2038
# @buf-size: #optional maximum amount of data in flight from source to
2039
#            target (since 1.4).
2040
#
2041
# @on-source-error: #optional the action to take on an error on the source,
2042
#                   default 'report'.  'stop' and 'enospc' can only be used
2043
#                   if the block device supports io-status (see BlockInfo).
2044
#
2045
# @on-target-error: #optional the action to take on an error on the target,
2046
#                   default 'report' (no limitations, since this applies to
2047
#                   a different block device than @device).
2048
#
2049
# Returns: nothing on success
2050
#          If @device is not a valid block device, DeviceNotFound
2051
#
2052
# Since 1.3
2053
##
2054
{ 'command': 'drive-mirror',
2055
  'data': { 'device': 'str', 'target': 'str', '*format': 'str',
2056
            'sync': 'MirrorSyncMode', '*mode': 'NewImageMode',
2057
            '*speed': 'int', '*granularity': 'uint32',
2058
            '*buf-size': 'int', '*on-source-error': 'BlockdevOnError',
2059
            '*on-target-error': 'BlockdevOnError' } }
2060

    
2061
##
2062
# @migrate_cancel
2063
#
2064
# Cancel the current executing migration process.
2065
#
2066
# Returns: nothing on success
2067
#
2068
# Notes: This command succeeds even if there is no migration process running.
2069
#
2070
# Since: 0.14.0
2071
##
2072
{ 'command': 'migrate_cancel' }
2073

    
2074
##
2075
# @migrate_set_downtime
2076
#
2077
# Set maximum tolerated downtime for migration.
2078
#
2079
# @value: maximum downtime in seconds
2080
#
2081
# Returns: nothing on success
2082
#
2083
# Since: 0.14.0
2084
##
2085
{ 'command': 'migrate_set_downtime', 'data': {'value': 'number'} }
2086

    
2087
##
2088
# @migrate_set_speed
2089
#
2090
# Set maximum speed for migration.
2091
#
2092
# @value: maximum speed in bytes.
2093
#
2094
# Returns: nothing on success
2095
#
2096
# Notes: A value lesser than zero will be automatically round up to zero.
2097
#
2098
# Since: 0.14.0
2099
##
2100
{ 'command': 'migrate_set_speed', 'data': {'value': 'int'} }
2101

    
2102
##
2103
# @migrate-set-cache-size
2104
#
2105
# Set XBZRLE cache size
2106
#
2107
# @value: cache size in bytes
2108
#
2109
# The size will be rounded down to the nearest power of 2.
2110
# The cache size can be modified before and during ongoing migration
2111
#
2112
# Returns: nothing on success
2113
#
2114
# Since: 1.2
2115
##
2116
{ 'command': 'migrate-set-cache-size', 'data': {'value': 'int'} }
2117

    
2118
##
2119
# @query-migrate-cache-size
2120
#
2121
# query XBZRLE cache size
2122
#
2123
# Returns: XBZRLE cache size in bytes
2124
#
2125
# Since: 1.2
2126
##
2127
{ 'command': 'query-migrate-cache-size', 'returns': 'int' }
2128

    
2129
##
2130
# @ObjectPropertyInfo:
2131
#
2132
# @name: the name of the property
2133
#
2134
# @type: the type of the property.  This will typically come in one of four
2135
#        forms:
2136
#
2137
#        1) A primitive type such as 'u8', 'u16', 'bool', 'str', or 'double'.
2138
#           These types are mapped to the appropriate JSON type.
2139
#
2140
#        2) A legacy type in the form 'legacy<subtype>' where subtype is the
2141
#           legacy qdev typename.  These types are always treated as strings.
2142
#
2143
#        3) A child type in the form 'child<subtype>' where subtype is a qdev
2144
#           device type name.  Child properties create the composition tree.
2145
#
2146
#        4) A link type in the form 'link<subtype>' where subtype is a qdev
2147
#           device type name.  Link properties form the device model graph.
2148
#
2149
# Since: 1.2
2150
##
2151
{ 'type': 'ObjectPropertyInfo',
2152
  'data': { 'name': 'str', 'type': 'str' } }
2153

    
2154
##
2155
# @qom-list:
2156
#
2157
# This command will list any properties of a object given a path in the object
2158
# model.
2159
#
2160
# @path: the path within the object model.  See @qom-get for a description of
2161
#        this parameter.
2162
#
2163
# Returns: a list of @ObjectPropertyInfo that describe the properties of the
2164
#          object.
2165
#
2166
# Since: 1.2
2167
##
2168
{ 'command': 'qom-list',
2169
  'data': { 'path': 'str' },
2170
  'returns': [ 'ObjectPropertyInfo' ] }
2171

    
2172
##
2173
# @qom-get:
2174
#
2175
# This command will get a property from a object model path and return the
2176
# value.
2177
#
2178
# @path: The path within the object model.  There are two forms of supported
2179
#        paths--absolute and partial paths.
2180
#
2181
#        Absolute paths are derived from the root object and can follow child<>
2182
#        or link<> properties.  Since they can follow link<> properties, they
2183
#        can be arbitrarily long.  Absolute paths look like absolute filenames
2184
#        and are prefixed  with a leading slash.
2185
#
2186
#        Partial paths look like relative filenames.  They do not begin
2187
#        with a prefix.  The matching rules for partial paths are subtle but
2188
#        designed to make specifying objects easy.  At each level of the
2189
#        composition tree, the partial path is matched as an absolute path.
2190
#        The first match is not returned.  At least two matches are searched
2191
#        for.  A successful result is only returned if only one match is
2192
#        found.  If more than one match is found, a flag is return to
2193
#        indicate that the match was ambiguous.
2194
#
2195
# @property: The property name to read
2196
#
2197
# Returns: The property value.  The type depends on the property type.  legacy<>
2198
#          properties are returned as #str.  child<> and link<> properties are
2199
#          returns as #str pathnames.  All integer property types (u8, u16, etc)
2200
#          are returned as #int.
2201
#
2202
# Since: 1.2
2203
##
2204
{ 'command': 'qom-get',
2205
  'data': { 'path': 'str', 'property': 'str' },
2206
  'returns': 'visitor',
2207
  'gen': 'no' }
2208

    
2209
##
2210
# @qom-set:
2211
#
2212
# This command will set a property from a object model path.
2213
#
2214
# @path: see @qom-get for a description of this parameter
2215
#
2216
# @property: the property name to set
2217
#
2218
# @value: a value who's type is appropriate for the property type.  See @qom-get
2219
#         for a description of type mapping.
2220
#
2221
# Since: 1.2
2222
##
2223
{ 'command': 'qom-set',
2224
  'data': { 'path': 'str', 'property': 'str', 'value': 'visitor' },
2225
  'gen': 'no' }
2226

    
2227
##
2228
# @set_password:
2229
#
2230
# Sets the password of a remote display session.
2231
#
2232
# @protocol: `vnc' to modify the VNC server password
2233
#            `spice' to modify the Spice server password
2234
#
2235
# @password: the new password
2236
#
2237
# @connected: #optional how to handle existing clients when changing the
2238
#                       password.  If nothing is specified, defaults to `keep'
2239
#                       `fail' to fail the command if clients are connected
2240
#                       `disconnect' to disconnect existing clients
2241
#                       `keep' to maintain existing clients
2242
#
2243
# Returns: Nothing on success
2244
#          If Spice is not enabled, DeviceNotFound
2245
#
2246
# Since: 0.14.0
2247
##
2248
{ 'command': 'set_password',
2249
  'data': {'protocol': 'str', 'password': 'str', '*connected': 'str'} }
2250

    
2251
##
2252
# @expire_password:
2253
#
2254
# Expire the password of a remote display server.
2255
#
2256
# @protocol: the name of the remote display protocol `vnc' or `spice'
2257
#
2258
# @time: when to expire the password.
2259
#        `now' to expire the password immediately
2260
#        `never' to cancel password expiration
2261
#        `+INT' where INT is the number of seconds from now (integer)
2262
#        `INT' where INT is the absolute time in seconds
2263
#
2264
# Returns: Nothing on success
2265
#          If @protocol is `spice' and Spice is not active, DeviceNotFound
2266
#
2267
# Since: 0.14.0
2268
#
2269
# Notes: Time is relative to the server and currently there is no way to
2270
#        coordinate server time with client time.  It is not recommended to
2271
#        use the absolute time version of the @time parameter unless you're
2272
#        sure you are on the same machine as the QEMU instance.
2273
##
2274
{ 'command': 'expire_password', 'data': {'protocol': 'str', 'time': 'str'} }
2275

    
2276
##
2277
# @eject:
2278
#
2279
# Ejects a device from a removable drive.
2280
#
2281
# @device:  The name of the device
2282
#
2283
# @force:   @optional If true, eject regardless of whether the drive is locked.
2284
#           If not specified, the default value is false.
2285
#
2286
# Returns:  Nothing on success
2287
#           If @device is not a valid block device, DeviceNotFound
2288
#
2289
# Notes:    Ejecting a device will no media results in success
2290
#
2291
# Since: 0.14.0
2292
##
2293
{ 'command': 'eject', 'data': {'device': 'str', '*force': 'bool'} }
2294

    
2295
##
2296
# @change-vnc-password:
2297
#
2298
# Change the VNC server password.
2299
#
2300
# @target:  the new password to use with VNC authentication
2301
#
2302
# Since: 1.1
2303
#
2304
# Notes:  An empty password in this command will set the password to the empty
2305
#         string.  Existing clients are unaffected by executing this command.
2306
##
2307
{ 'command': 'change-vnc-password', 'data': {'password': 'str'} }
2308

    
2309
##
2310
# @change:
2311
#
2312
# This command is multiple commands multiplexed together.
2313
#
2314
# @device: This is normally the name of a block device but it may also be 'vnc'.
2315
#          when it's 'vnc', then sub command depends on @target
2316
#
2317
# @target: If @device is a block device, then this is the new filename.
2318
#          If @device is 'vnc', then if the value 'password' selects the vnc
2319
#          change password command.   Otherwise, this specifies a new server URI
2320
#          address to listen to for VNC connections.
2321
#
2322
# @arg:    If @device is a block device, then this is an optional format to open
2323
#          the device with.
2324
#          If @device is 'vnc' and @target is 'password', this is the new VNC
2325
#          password to set.  If this argument is an empty string, then no future
2326
#          logins will be allowed.
2327
#
2328
# Returns: Nothing on success.
2329
#          If @device is not a valid block device, DeviceNotFound
2330
#          If the new block device is encrypted, DeviceEncrypted.  Note that
2331
#          if this error is returned, the device has been opened successfully
2332
#          and an additional call to @block_passwd is required to set the
2333
#          device's password.  The behavior of reads and writes to the block
2334
#          device between when these calls are executed is undefined.
2335
#
2336
# Notes:  It is strongly recommended that this interface is not used especially
2337
#         for changing block devices.
2338
#
2339
# Since: 0.14.0
2340
##
2341
{ 'command': 'change',
2342
  'data': {'device': 'str', 'target': 'str', '*arg': 'str'} }
2343

    
2344
##
2345
# @block_set_io_throttle:
2346
#
2347
# Change I/O throttle limits for a block drive.
2348
#
2349
# @device: The name of the device
2350
#
2351
# @bps: total throughput limit in bytes per second
2352
#
2353
# @bps_rd: read throughput limit in bytes per second
2354
#
2355
# @bps_wr: write throughput limit in bytes per second
2356
#
2357
# @iops: total I/O operations per second
2358
#
2359
# @ops_rd: read I/O operations per second
2360
#
2361
# @iops_wr: write I/O operations per second
2362
#
2363
# @bps_max: #optional total max in bytes (Since 1.7)
2364
#
2365
# @bps_rd_max: #optional read max in bytes (Since 1.7)
2366
#
2367
# @bps_wr_max: #optional write max in bytes (Since 1.7)
2368
#
2369
# @iops_max: #optional total I/O operations max (Since 1.7)
2370
#
2371
# @iops_rd_max: #optional read I/O operations max (Since 1.7)
2372
#
2373
# @iops_wr_max: #optional write I/O operations max (Since 1.7)
2374
#
2375
# @iops_size: #optional an I/O size in bytes (Since 1.7)
2376
#
2377
# Returns: Nothing on success
2378
#          If @device is not a valid block device, DeviceNotFound
2379
#
2380
# Since: 1.1
2381
##
2382
{ 'command': 'block_set_io_throttle',
2383
  'data': { 'device': 'str', 'bps': 'int', 'bps_rd': 'int', 'bps_wr': 'int',
2384
            'iops': 'int', 'iops_rd': 'int', 'iops_wr': 'int',
2385
            '*bps_max': 'int', '*bps_rd_max': 'int',
2386
            '*bps_wr_max': 'int', '*iops_max': 'int',
2387
            '*iops_rd_max': 'int', '*iops_wr_max': 'int',
2388
            '*iops_size': 'int' } }
2389

    
2390
##
2391
# @block-stream:
2392
#
2393
# Copy data from a backing file into a block device.
2394
#
2395
# The block streaming operation is performed in the background until the entire
2396
# backing file has been copied.  This command returns immediately once streaming
2397
# has started.  The status of ongoing block streaming operations can be checked
2398
# with query-block-jobs.  The operation can be stopped before it has completed
2399
# using the block-job-cancel command.
2400
#
2401
# If a base file is specified then sectors are not copied from that base file and
2402
# its backing chain.  When streaming completes the image file will have the base
2403
# file as its backing file.  This can be used to stream a subset of the backing
2404
# file chain instead of flattening the entire image.
2405
#
2406
# On successful completion the image file is updated to drop the backing file
2407
# and the BLOCK_JOB_COMPLETED event is emitted.
2408
#
2409
# @device: the device name
2410
#
2411
# @base:   #optional the common backing file name
2412
#
2413
# @speed:  #optional the maximum speed, in bytes per second
2414
#
2415
# @on-error: #optional the action to take on an error (default report).
2416
#            'stop' and 'enospc' can only be used if the block device
2417
#            supports io-status (see BlockInfo).  Since 1.3.
2418
#
2419
# Returns: Nothing on success
2420
#          If @device does not exist, DeviceNotFound
2421
#
2422
# Since: 1.1
2423
##
2424
{ 'command': 'block-stream',
2425
  'data': { 'device': 'str', '*base': 'str', '*speed': 'int',
2426
            '*on-error': 'BlockdevOnError' } }
2427

    
2428
##
2429
# @block-job-set-speed:
2430
#
2431
# Set maximum speed for a background block operation.
2432
#
2433
# This command can only be issued when there is an active block job.
2434
#
2435
# Throttling can be disabled by setting the speed to 0.
2436
#
2437
# @device: the device name
2438
#
2439
# @speed:  the maximum speed, in bytes per second, or 0 for unlimited.
2440
#          Defaults to 0.
2441
#
2442
# Returns: Nothing on success
2443
#          If no background operation is active on this device, DeviceNotActive
2444
#
2445
# Since: 1.1
2446
##
2447
{ 'command': 'block-job-set-speed',
2448
  'data': { 'device': 'str', 'speed': 'int' } }
2449

    
2450
##
2451
# @block-job-cancel:
2452
#
2453
# Stop an active background block operation.
2454
#
2455
# This command returns immediately after marking the active background block
2456
# operation for cancellation.  It is an error to call this command if no
2457
# operation is in progress.
2458
#
2459
# The operation will cancel as soon as possible and then emit the
2460
# BLOCK_JOB_CANCELLED event.  Before that happens the job is still visible when
2461
# enumerated using query-block-jobs.
2462
#
2463
# For streaming, the image file retains its backing file unless the streaming
2464
# operation happens to complete just as it is being cancelled.  A new streaming
2465
# operation can be started at a later time to finish copying all data from the
2466
# backing file.
2467
#
2468
# @device: the device name
2469
#
2470
# @force: #optional whether to allow cancellation of a paused job (default
2471
#         false).  Since 1.3.
2472
#
2473
# Returns: Nothing on success
2474
#          If no background operation is active on this device, DeviceNotActive
2475
#
2476
# Since: 1.1
2477
##
2478
{ 'command': 'block-job-cancel', 'data': { 'device': 'str', '*force': 'bool' } }
2479

    
2480
##
2481
# @block-job-pause:
2482
#
2483
# Pause an active background block operation.
2484
#
2485
# This command returns immediately after marking the active background block
2486
# operation for pausing.  It is an error to call this command if no
2487
# operation is in progress.  Pausing an already paused job has no cumulative
2488
# effect; a single block-job-resume command will resume the job.
2489
#
2490
# The operation will pause as soon as possible.  No event is emitted when
2491
# the operation is actually paused.  Cancelling a paused job automatically
2492
# resumes it.
2493
#
2494
# @device: the device name
2495
#
2496
# Returns: Nothing on success
2497
#          If no background operation is active on this device, DeviceNotActive
2498
#
2499
# Since: 1.3
2500
##
2501
{ 'command': 'block-job-pause', 'data': { 'device': 'str' } }
2502

    
2503
##
2504
# @block-job-resume:
2505
#
2506
# Resume an active background block operation.
2507
#
2508
# This command returns immediately after resuming a paused background block
2509
# operation.  It is an error to call this command if no operation is in
2510
# progress.  Resuming an already running job is not an error.
2511
#
2512
# This command also clears the error status of the job.
2513
#
2514
# @device: the device name
2515
#
2516
# Returns: Nothing on success
2517
#          If no background operation is active on this device, DeviceNotActive
2518
#
2519
# Since: 1.3
2520
##
2521
{ 'command': 'block-job-resume', 'data': { 'device': 'str' } }
2522

    
2523
##
2524
# @block-job-complete:
2525
#
2526
# Manually trigger completion of an active background block operation.  This
2527
# is supported for drive mirroring, where it also switches the device to
2528
# write to the target path only.  The ability to complete is signaled with
2529
# a BLOCK_JOB_READY event.
2530
#
2531
# This command completes an active background block operation synchronously.
2532
# The ordering of this command's return with the BLOCK_JOB_COMPLETED event
2533
# is not defined.  Note that if an I/O error occurs during the processing of
2534
# this command: 1) the command itself will fail; 2) the error will be processed
2535
# according to the rerror/werror arguments that were specified when starting
2536
# the operation.
2537
#
2538
# A cancelled or paused job cannot be completed.
2539
#
2540
# @device: the device name
2541
#
2542
# Returns: Nothing on success
2543
#          If no background operation is active on this device, DeviceNotActive
2544
#
2545
# Since: 1.3
2546
##
2547
{ 'command': 'block-job-complete', 'data': { 'device': 'str' } }
2548

    
2549
##
2550
# @ObjectTypeInfo:
2551
#
2552
# This structure describes a search result from @qom-list-types
2553
#
2554
# @name: the type name found in the search
2555
#
2556
# Since: 1.1
2557
#
2558
# Notes: This command is experimental and may change syntax in future releases.
2559
##
2560
{ 'type': 'ObjectTypeInfo',
2561
  'data': { 'name': 'str' } }
2562

    
2563
##
2564
# @qom-list-types:
2565
#
2566
# This command will return a list of types given search parameters
2567
#
2568
# @implements: if specified, only return types that implement this type name
2569
#
2570
# @abstract: if true, include abstract types in the results
2571
#
2572
# Returns: a list of @ObjectTypeInfo or an empty list if no results are found
2573
#
2574
# Since: 1.1
2575
##
2576
{ 'command': 'qom-list-types',
2577
  'data': { '*implements': 'str', '*abstract': 'bool' },
2578
  'returns': [ 'ObjectTypeInfo' ] }
2579

    
2580
##
2581
# @DevicePropertyInfo:
2582
#
2583
# Information about device properties.
2584
#
2585
# @name: the name of the property
2586
# @type: the typename of the property
2587
#
2588
# Since: 1.2
2589
##
2590
{ 'type': 'DevicePropertyInfo',
2591
  'data': { 'name': 'str', 'type': 'str' } }
2592

    
2593
##
2594
# @device-list-properties:
2595
#
2596
# List properties associated with a device.
2597
#
2598
# @typename: the type name of a device
2599
#
2600
# Returns: a list of DevicePropertyInfo describing a devices properties
2601
#
2602
# Since: 1.2
2603
##
2604
{ 'command': 'device-list-properties',
2605
  'data': { 'typename': 'str'},
2606
  'returns': [ 'DevicePropertyInfo' ] }
2607

    
2608
##
2609
# @migrate
2610
#
2611
# Migrates the current running guest to another Virtual Machine.
2612
#
2613
# @uri: the Uniform Resource Identifier of the destination VM
2614
#
2615
# @blk: #optional do block migration (full disk copy)
2616
#
2617
# @inc: #optional incremental disk copy migration
2618
#
2619
# @detach: this argument exists only for compatibility reasons and
2620
#          is ignored by QEMU
2621
#
2622
# Returns: nothing on success
2623
#
2624
# Since: 0.14.0
2625
##
2626
{ 'command': 'migrate',
2627
  'data': {'uri': 'str', '*blk': 'bool', '*inc': 'bool', '*detach': 'bool' } }
2628

    
2629
# @xen-save-devices-state:
2630
#
2631
# Save the state of all devices to file. The RAM and the block devices
2632
# of the VM are not saved by this command.
2633
#
2634
# @filename: the file to save the state of the devices to as binary
2635
# data. See xen-save-devices-state.txt for a description of the binary
2636
# format.
2637
#
2638
# Returns: Nothing on success
2639
#
2640
# Since: 1.1
2641
##
2642
{ 'command': 'xen-save-devices-state', 'data': {'filename': 'str'} }
2643

    
2644
##
2645
# @xen-set-global-dirty-log
2646
#
2647
# Enable or disable the global dirty log mode.
2648
#
2649
# @enable: true to enable, false to disable.
2650
#
2651
# Returns: nothing
2652
#
2653
# Since: 1.3
2654
##
2655
{ 'command': 'xen-set-global-dirty-log', 'data': { 'enable': 'bool' } }
2656

    
2657
##
2658
# @device_del:
2659
#
2660
# Remove a device from a guest
2661
#
2662
# @id: the name of the device
2663
#
2664
# Returns: Nothing on success
2665
#          If @id is not a valid device, DeviceNotFound
2666
#
2667
# Notes: When this command completes, the device may not be removed from the
2668
#        guest.  Hot removal is an operation that requires guest cooperation.
2669
#        This command merely requests that the guest begin the hot removal
2670
#        process.  Completion of the device removal process is signaled with a
2671
#        DEVICE_DELETED event. Guest reset will automatically complete removal
2672
#        for all devices.
2673
#
2674
# Since: 0.14.0
2675
##
2676
{ 'command': 'device_del', 'data': {'id': 'str'} }
2677

    
2678
##
2679
# @dump-guest-memory
2680
#
2681
# Dump guest's memory to vmcore. It is a synchronous operation that can take
2682
# very long depending on the amount of guest memory. This command is only
2683
# supported on i386 and x86_64.
2684
#
2685
# @paging: if true, do paging to get guest's memory mapping. This allows
2686
#          using gdb to process the core file.
2687
#
2688
#          IMPORTANT: this option can make QEMU allocate several gigabytes
2689
#                     of RAM. This can happen for a large guest, or a
2690
#                     malicious guest pretending to be large.
2691
#
2692
#          Also, paging=true has the following limitations:
2693
#
2694
#             1. The guest may be in a catastrophic state or can have corrupted
2695
#                memory, which cannot be trusted
2696
#             2. The guest can be in real-mode even if paging is enabled. For
2697
#                example, the guest uses ACPI to sleep, and ACPI sleep state
2698
#                goes in real-mode
2699
#
2700
# @protocol: the filename or file descriptor of the vmcore. The supported
2701
#            protocols are:
2702
#
2703
#            1. file: the protocol starts with "file:", and the following
2704
#               string is the file's path.
2705
#            2. fd: the protocol starts with "fd:", and the following string
2706
#               is the fd's name.
2707
#
2708
# @begin: #optional if specified, the starting physical address.
2709
#
2710
# @length: #optional if specified, the memory size, in bytes. If you don't
2711
#          want to dump all guest's memory, please specify the start @begin
2712
#          and @length
2713
#
2714
# Returns: nothing on success
2715
#
2716
# Since: 1.2
2717
##
2718
{ 'command': 'dump-guest-memory',
2719
  'data': { 'paging': 'bool', 'protocol': 'str', '*begin': 'int',
2720
            '*length': 'int' } }
2721

    
2722
##
2723
# @netdev_add:
2724
#
2725
# Add a network backend.
2726
#
2727
# @type: the type of network backend.  Current valid values are 'user', 'tap',
2728
#        'vde', 'socket', 'dump' and 'bridge'
2729
#
2730
# @id: the name of the new network backend
2731
#
2732
# @props: #optional a list of properties to be passed to the backend in
2733
#         the format 'name=value', like 'ifname=tap0,script=no'
2734
#
2735
# Notes: The semantics of @props is not well defined.  Future commands will be
2736
#        introduced that provide stronger typing for backend creation.
2737
#
2738
# Since: 0.14.0
2739
#
2740
# Returns: Nothing on success
2741
#          If @type is not a valid network backend, DeviceNotFound
2742
##
2743
{ 'command': 'netdev_add',
2744
  'data': {'type': 'str', 'id': 'str', '*props': '**'},
2745
  'gen': 'no' }
2746

    
2747
##
2748
# @netdev_del:
2749
#
2750
# Remove a network backend.
2751
#
2752
# @id: the name of the network backend to remove
2753
#
2754
# Returns: Nothing on success
2755
#          If @id is not a valid network backend, DeviceNotFound
2756
#
2757
# Since: 0.14.0
2758
##
2759
{ 'command': 'netdev_del', 'data': {'id': 'str'} }
2760

    
2761
##
2762
# @NetdevNoneOptions
2763
#
2764
# Use it alone to have zero network devices.
2765
#
2766
# Since 1.2
2767
##
2768
{ 'type': 'NetdevNoneOptions',
2769
  'data': { } }
2770

    
2771
##
2772
# @NetLegacyNicOptions
2773
#
2774
# Create a new Network Interface Card.
2775
#
2776
# @netdev: #optional id of -netdev to connect to
2777
#
2778
# @macaddr: #optional MAC address
2779
#
2780
# @model: #optional device model (e1000, rtl8139, virtio etc.)
2781
#
2782
# @addr: #optional PCI device address
2783
#
2784
# @vectors: #optional number of MSI-x vectors, 0 to disable MSI-X
2785
#
2786
# Since 1.2
2787
##
2788
{ 'type': 'NetLegacyNicOptions',
2789
  'data': {
2790
    '*netdev':  'str',
2791
    '*macaddr': 'str',
2792
    '*model':   'str',
2793
    '*addr':    'str',
2794
    '*vectors': 'uint32' } }
2795

    
2796
##
2797
# @String
2798
#
2799
# A fat type wrapping 'str', to be embedded in lists.
2800
#
2801
# Since 1.2
2802
##
2803
{ 'type': 'String',
2804
  'data': {
2805
    'str': 'str' } }
2806

    
2807
##
2808
# @NetdevUserOptions
2809
#
2810
# Use the user mode network stack which requires no administrator privilege to
2811
# run.
2812
#
2813
# @hostname: #optional client hostname reported by the builtin DHCP server
2814
#
2815
# @restrict: #optional isolate the guest from the host
2816
#
2817
# @ip: #optional legacy parameter, use net= instead
2818
#
2819
# @net: #optional IP address and optional netmask
2820
#
2821
# @host: #optional guest-visible address of the host
2822
#
2823
# @tftp: #optional root directory of the built-in TFTP server
2824
#
2825
# @bootfile: #optional BOOTP filename, for use with tftp=
2826
#
2827
# @dhcpstart: #optional the first of the 16 IPs the built-in DHCP server can
2828
#             assign
2829
#
2830
# @dns: #optional guest-visible address of the virtual nameserver
2831
#
2832
# @dnssearch: #optional list of DNS suffixes to search, passed as DHCP option
2833
#             to the guest
2834
#
2835
# @smb: #optional root directory of the built-in SMB server
2836
#
2837
# @smbserver: #optional IP address of the built-in SMB server
2838
#
2839
# @hostfwd: #optional redirect incoming TCP or UDP host connections to guest
2840
#           endpoints
2841
#
2842
# @guestfwd: #optional forward guest TCP connections
2843
#
2844
# Since 1.2
2845
##
2846
{ 'type': 'NetdevUserOptions',
2847
  'data': {
2848
    '*hostname':  'str',
2849
    '*restrict':  'bool',
2850
    '*ip':        'str',
2851
    '*net':       'str',
2852
    '*host':      'str',
2853
    '*tftp':      'str',
2854
    '*bootfile':  'str',
2855
    '*dhcpstart': 'str',
2856
    '*dns':       'str',
2857
    '*dnssearch': ['String'],
2858
    '*smb':       'str',
2859
    '*smbserver': 'str',
2860
    '*hostfwd':   ['String'],
2861
    '*guestfwd':  ['String'] } }
2862

    
2863
##
2864
# @NetdevTapOptions
2865
#
2866
# Connect the host TAP network interface name to the VLAN.
2867
#
2868
# @ifname: #optional interface name
2869
#
2870
# @fd: #optional file descriptor of an already opened tap
2871
#
2872
# @fds: #optional multiple file descriptors of already opened multiqueue capable
2873
# tap
2874
#
2875
# @script: #optional script to initialize the interface
2876
#
2877
# @downscript: #optional script to shut down the interface
2878
#
2879
# @helper: #optional command to execute to configure bridge
2880
#
2881
# @sndbuf: #optional send buffer limit. Understands [TGMKkb] suffixes.
2882
#
2883
# @vnet_hdr: #optional enable the IFF_VNET_HDR flag on the tap interface
2884
#
2885
# @vhost: #optional enable vhost-net network accelerator
2886
#
2887
# @vhostfd: #optional file descriptor of an already opened vhost net device
2888
#
2889
# @vhostfds: #optional file descriptors of multiple already opened vhost net
2890
# devices
2891
#
2892
# @vhostforce: #optional vhost on for non-MSIX virtio guests
2893
#
2894
# @queues: #optional number of queues to be created for multiqueue capable tap
2895
#
2896
# Since 1.2
2897
##
2898
{ 'type': 'NetdevTapOptions',
2899
  'data': {
2900
    '*ifname':     'str',
2901
    '*fd':         'str',
2902
    '*fds':        'str',
2903
    '*script':     'str',
2904
    '*downscript': 'str',
2905
    '*helper':     'str',
2906
    '*sndbuf':     'size',
2907
    '*vnet_hdr':   'bool',
2908
    '*vhost':      'bool',
2909
    '*vhostfd':    'str',
2910
    '*vhostfds':   'str',
2911
    '*vhostforce': 'bool',
2912
    '*queues':     'uint32'} }
2913

    
2914
##
2915
# @NetdevSocketOptions
2916
#
2917
# Connect the VLAN to a remote VLAN in another QEMU virtual machine using a TCP
2918
# socket connection.
2919
#
2920
# @fd: #optional file descriptor of an already opened socket
2921
#
2922
# @listen: #optional port number, and optional hostname, to listen on
2923
#
2924
# @connect: #optional port number, and optional hostname, to connect to
2925
#
2926
# @mcast: #optional UDP multicast address and port number
2927
#
2928
# @localaddr: #optional source address and port for multicast and udp packets
2929
#
2930
# @udp: #optional UDP unicast address and port number
2931
#
2932
# Since 1.2
2933
##
2934
{ 'type': 'NetdevSocketOptions',
2935
  'data': {
2936
    '*fd':        'str',
2937
    '*listen':    'str',
2938
    '*connect':   'str',
2939
    '*mcast':     'str',
2940
    '*localaddr': 'str',
2941
    '*udp':       'str' } }
2942

    
2943
##
2944
# @NetdevVdeOptions
2945
#
2946
# Connect the VLAN to a vde switch running on the host.
2947
#
2948
# @sock: #optional socket path
2949
#
2950
# @port: #optional port number
2951
#
2952
# @group: #optional group owner of socket
2953
#
2954
# @mode: #optional permissions for socket
2955
#
2956
# Since 1.2
2957
##
2958
{ 'type': 'NetdevVdeOptions',
2959
  'data': {
2960
    '*sock':  'str',
2961
    '*port':  'uint16',
2962
    '*group': 'str',
2963
    '*mode':  'uint16' } }
2964

    
2965
##
2966
# @NetdevDumpOptions
2967
#
2968
# Dump VLAN network traffic to a file.
2969
#
2970
# @len: #optional per-packet size limit (64k default). Understands [TGMKkb]
2971
# suffixes.
2972
#
2973
# @file: #optional dump file path (default is qemu-vlan0.pcap)
2974
#
2975
# Since 1.2
2976
##
2977
{ 'type': 'NetdevDumpOptions',
2978
  'data': {
2979
    '*len':  'size',
2980
    '*file': 'str' } }
2981

    
2982
##
2983
# @NetdevBridgeOptions
2984
#
2985
# Connect a host TAP network interface to a host bridge device.
2986
#
2987
# @br: #optional bridge name
2988
#
2989
# @helper: #optional command to execute to configure bridge
2990
#
2991
# Since 1.2
2992
##
2993
{ 'type': 'NetdevBridgeOptions',
2994
  'data': {
2995
    '*br':     'str',
2996
    '*helper': 'str' } }
2997

    
2998
##
2999
# @NetdevHubPortOptions
3000
#
3001
# Connect two or more net clients through a software hub.
3002
#
3003
# @hubid: hub identifier number
3004
#
3005
# Since 1.2
3006
##
3007
{ 'type': 'NetdevHubPortOptions',
3008
  'data': {
3009
    'hubid':     'int32' } }
3010

    
3011
##
3012
# @NetClientOptions
3013
#
3014
# A discriminated record of network device traits.
3015
#
3016
# Since 1.2
3017
##
3018
{ 'union': 'NetClientOptions',
3019
  'data': {
3020
    'none':     'NetdevNoneOptions',
3021
    'nic':      'NetLegacyNicOptions',
3022
    'user':     'NetdevUserOptions',
3023
    'tap':      'NetdevTapOptions',
3024
    'socket':   'NetdevSocketOptions',
3025
    'vde':      'NetdevVdeOptions',
3026
    'dump':     'NetdevDumpOptions',
3027
    'bridge':   'NetdevBridgeOptions',
3028
    'hubport':  'NetdevHubPortOptions' } }
3029

    
3030
##
3031
# @NetLegacy
3032
#
3033
# Captures the configuration of a network device; legacy.
3034
#
3035
# @vlan: #optional vlan number
3036
#
3037
# @id: #optional identifier for monitor commands
3038
#
3039
# @name: #optional identifier for monitor commands, ignored if @id is present
3040
#
3041
# @opts: device type specific properties (legacy)
3042
#
3043
# Since 1.2
3044
##
3045
{ 'type': 'NetLegacy',
3046
  'data': {
3047
    '*vlan': 'int32',
3048
    '*id':   'str',
3049
    '*name': 'str',
3050
    'opts':  'NetClientOptions' } }
3051

    
3052
##
3053
# @Netdev
3054
#
3055
# Captures the configuration of a network device.
3056
#
3057
# @id: identifier for monitor commands.
3058
#
3059
# @opts: device type specific properties
3060
#
3061
# Since 1.2
3062
##
3063
{ 'type': 'Netdev',
3064
  'data': {
3065
    'id':   'str',
3066
    'opts': 'NetClientOptions' } }
3067

    
3068
##
3069
# @InetSocketAddress
3070
#
3071
# Captures a socket address or address range in the Internet namespace.
3072
#
3073
# @host: host part of the address
3074
#
3075
# @port: port part of the address, or lowest port if @to is present
3076
#
3077
# @to: highest port to try
3078
#
3079
# @ipv4: whether to accept IPv4 addresses, default try both IPv4 and IPv6
3080
#        #optional
3081
#
3082
# @ipv6: whether to accept IPv6 addresses, default try both IPv4 and IPv6
3083
#        #optional
3084
#
3085
# Since 1.3
3086
##
3087
{ 'type': 'InetSocketAddress',
3088
  'data': {
3089
    'host': 'str',
3090
    'port': 'str',
3091
    '*to': 'uint16',
3092
    '*ipv4': 'bool',
3093
    '*ipv6': 'bool' } }
3094

    
3095
##
3096
# @UnixSocketAddress
3097
#
3098
# Captures a socket address in the local ("Unix socket") namespace.
3099
#
3100
# @path: filesystem path to use
3101
#
3102
# Since 1.3
3103
##
3104
{ 'type': 'UnixSocketAddress',
3105
  'data': {
3106
    'path': 'str' } }
3107

    
3108
##
3109
# @SocketAddress
3110
#
3111
# Captures the address of a socket, which could also be a named file descriptor
3112
#
3113
# Since 1.3
3114
##
3115
{ 'union': 'SocketAddress',
3116
  'data': {
3117
    'inet': 'InetSocketAddress',
3118
    'unix': 'UnixSocketAddress',
3119
    'fd': 'String' } }
3120

    
3121
##
3122
# @getfd:
3123
#
3124
# Receive a file descriptor via SCM rights and assign it a name
3125
#
3126
# @fdname: file descriptor name
3127
#
3128
# Returns: Nothing on success
3129
#
3130
# Since: 0.14.0
3131
#
3132
# Notes: If @fdname already exists, the file descriptor assigned to
3133
#        it will be closed and replaced by the received file
3134
#        descriptor.
3135
#        The 'closefd' command can be used to explicitly close the
3136
#        file descriptor when it is no longer needed.
3137
##
3138
{ 'command': 'getfd', 'data': {'fdname': 'str'} }
3139

    
3140
##
3141
# @closefd:
3142
#
3143
# Close a file descriptor previously passed via SCM rights
3144
#
3145
# @fdname: file descriptor name
3146
#
3147
# Returns: Nothing on success
3148
#
3149
# Since: 0.14.0
3150
##
3151
{ 'command': 'closefd', 'data': {'fdname': 'str'} }
3152

    
3153
##
3154
# @MachineInfo:
3155
#
3156
# Information describing a machine.
3157
#
3158
# @name: the name of the machine
3159
#
3160
# @alias: #optional an alias for the machine name
3161
#
3162
# @default: #optional whether the machine is default
3163
#
3164
# @cpu-max: maximum number of CPUs supported by the machine type
3165
#           (since 1.5.0)
3166
#
3167
# Since: 1.2.0
3168
##
3169
{ 'type': 'MachineInfo',
3170
  'data': { 'name': 'str', '*alias': 'str',
3171
            '*is-default': 'bool', 'cpu-max': 'int' } }
3172

    
3173
##
3174
# @query-machines:
3175
#
3176
# Return a list of supported machines
3177
#
3178
# Returns: a list of MachineInfo
3179
#
3180
# Since: 1.2.0
3181
##
3182
{ 'command': 'query-machines', 'returns': ['MachineInfo'] }
3183

    
3184
##
3185
# @CpuDefinitionInfo:
3186
#
3187
# Virtual CPU definition.
3188
#
3189
# @name: the name of the CPU definition
3190
#
3191
# Since: 1.2.0
3192
##
3193
{ 'type': 'CpuDefinitionInfo',
3194
  'data': { 'name': 'str' } }
3195

    
3196
##
3197
# @query-cpu-definitions:
3198
#
3199
# Return a list of supported virtual CPU definitions
3200
#
3201
# Returns: a list of CpuDefInfo
3202
#
3203
# Since: 1.2.0
3204
##
3205
{ 'command': 'query-cpu-definitions', 'returns': ['CpuDefinitionInfo'] }
3206

    
3207
# @AddfdInfo:
3208
#
3209
# Information about a file descriptor that was added to an fd set.
3210
#
3211
# @fdset-id: The ID of the fd set that @fd was added to.
3212
#
3213
# @fd: The file descriptor that was received via SCM rights and
3214
#      added to the fd set.
3215
#
3216
# Since: 1.2.0
3217
##
3218
{ 'type': 'AddfdInfo', 'data': {'fdset-id': 'int', 'fd': 'int'} }
3219

    
3220
##
3221
# @add-fd:
3222
#
3223
# Add a file descriptor, that was passed via SCM rights, to an fd set.
3224
#
3225
# @fdset-id: #optional The ID of the fd set to add the file descriptor to.
3226
#
3227
# @opaque: #optional A free-form string that can be used to describe the fd.
3228
#
3229
# Returns: @AddfdInfo on success
3230
#          If file descriptor was not received, FdNotSupplied
3231
#          If @fdset-id is a negative value, InvalidParameterValue
3232
#
3233
# Notes: The list of fd sets is shared by all monitor connections.
3234
#
3235
#        If @fdset-id is not specified, a new fd set will be created.
3236
#
3237
# Since: 1.2.0
3238
##
3239
{ 'command': 'add-fd', 'data': {'*fdset-id': 'int', '*opaque': 'str'},
3240
  'returns': 'AddfdInfo' }
3241

    
3242
##
3243
# @remove-fd:
3244
#
3245
# Remove a file descriptor from an fd set.
3246
#
3247
# @fdset-id: The ID of the fd set that the file descriptor belongs to.
3248
#
3249
# @fd: #optional The file descriptor that is to be removed.
3250
#
3251
# Returns: Nothing on success
3252
#          If @fdset-id or @fd is not found, FdNotFound
3253
#
3254
# Since: 1.2.0
3255
#
3256
# Notes: The list of fd sets is shared by all monitor connections.
3257
#
3258
#        If @fd is not specified, all file descriptors in @fdset-id
3259
#        will be removed.
3260
##
3261
{ 'command': 'remove-fd', 'data': {'fdset-id': 'int', '*fd': 'int'} }
3262

    
3263
##
3264
# @FdsetFdInfo:
3265
#
3266
# Information about a file descriptor that belongs to an fd set.
3267
#
3268
# @fd: The file descriptor value.
3269
#
3270
# @opaque: #optional A free-form string that can be used to describe the fd.
3271
#
3272
# Since: 1.2.0
3273
##
3274
{ 'type': 'FdsetFdInfo',
3275
  'data': {'fd': 'int', '*opaque': 'str'} }
3276

    
3277
##
3278
# @FdsetInfo:
3279
#
3280
# Information about an fd set.
3281
#
3282
# @fdset-id: The ID of the fd set.
3283
#
3284
# @fds: A list of file descriptors that belong to this fd set.
3285
#
3286
# Since: 1.2.0
3287
##
3288
{ 'type': 'FdsetInfo',
3289
  'data': {'fdset-id': 'int', 'fds': ['FdsetFdInfo']} }
3290

    
3291
##
3292
# @query-fdsets:
3293
#
3294
# Return information describing all fd sets.
3295
#
3296
# Returns: A list of @FdsetInfo
3297
#
3298
# Since: 1.2.0
3299
#
3300
# Note: The list of fd sets is shared by all monitor connections.
3301
#
3302
##
3303
{ 'command': 'query-fdsets', 'returns': ['FdsetInfo'] }
3304

    
3305
##
3306
# @TargetInfo:
3307
#
3308
# Information describing the QEMU target.
3309
#
3310
# @arch: the target architecture (eg "x86_64", "i386", etc)
3311
#
3312
# Since: 1.2.0
3313
##
3314
{ 'type': 'TargetInfo',
3315
  'data': { 'arch': 'str' } }
3316

    
3317
##
3318
# @query-target:
3319
#
3320
# Return information about the target for this QEMU
3321
#
3322
# Returns: TargetInfo
3323
#
3324
# Since: 1.2.0
3325
##
3326
{ 'command': 'query-target', 'returns': 'TargetInfo' }
3327

    
3328
##
3329
# @QKeyCode:
3330
#
3331
# An enumeration of key name.
3332
#
3333
# This is used by the send-key command.
3334
#
3335
# Since: 1.3.0
3336
##
3337
{ 'enum': 'QKeyCode',
3338
  'data': [ 'shift', 'shift_r', 'alt', 'alt_r', 'altgr', 'altgr_r', 'ctrl',
3339
            'ctrl_r', 'menu', 'esc', '1', '2', '3', '4', '5', '6', '7', '8',
3340
            '9', '0', 'minus', 'equal', 'backspace', 'tab', 'q', 'w', 'e',
3341
            'r', 't', 'y', 'u', 'i', 'o', 'p', 'bracket_left', 'bracket_right',
3342
            'ret', 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'semicolon',
3343
            'apostrophe', 'grave_accent', 'backslash', 'z', 'x', 'c', 'v', 'b',
3344
            'n', 'm', 'comma', 'dot', 'slash', 'asterisk', 'spc', 'caps_lock',
3345
            'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'f10',
3346
            'num_lock', 'scroll_lock', 'kp_divide', 'kp_multiply',
3347
            'kp_subtract', 'kp_add', 'kp_enter', 'kp_decimal', 'sysrq', 'kp_0',
3348
            'kp_1', 'kp_2', 'kp_3', 'kp_4', 'kp_5', 'kp_6', 'kp_7', 'kp_8',
3349
            'kp_9', 'less', 'f11', 'f12', 'print', 'home', 'pgup', 'pgdn', 'end',
3350
            'left', 'up', 'down', 'right', 'insert', 'delete', 'stop', 'again',
3351
            'props', 'undo', 'front', 'copy', 'open', 'paste', 'find', 'cut',
3352
             'lf', 'help', 'meta_l', 'meta_r', 'compose' ] }
3353

    
3354
##
3355
# @KeyValue
3356
#
3357
# Represents a keyboard key.
3358
#
3359
# Since: 1.3.0
3360
##
3361
{ 'union': 'KeyValue',
3362
  'data': {
3363
    'number': 'int',
3364
    'qcode': 'QKeyCode' } }
3365

    
3366
##
3367
# @send-key:
3368
#
3369
# Send keys to guest.
3370
#
3371
# @keys: An array of @KeyValue elements. All @KeyValues in this array are
3372
#        simultaneously sent to the guest. A @KeyValue.number value is sent
3373
#        directly to the guest, while @KeyValue.qcode must be a valid
3374
#        @QKeyCode value
3375
#
3376
# @hold-time: #optional time to delay key up events, milliseconds. Defaults
3377
#             to 100
3378
#
3379
# Returns: Nothing on success
3380
#          If key is unknown or redundant, InvalidParameter
3381
#
3382
# Since: 1.3.0
3383
#
3384
##
3385
{ 'command': 'send-key',
3386
  'data': { 'keys': ['KeyValue'], '*hold-time': 'int' } }
3387

    
3388
##
3389
# @screendump:
3390
#
3391
# Write a PPM of the VGA screen to a file.
3392
#
3393
# @filename: the path of a new PPM file to store the image
3394
#
3395
# Returns: Nothing on success
3396
#
3397
# Since: 0.14.0
3398
##
3399
{ 'command': 'screendump', 'data': {'filename': 'str'} }
3400

    
3401
##
3402
# @nbd-server-start:
3403
#
3404
# Start an NBD server listening on the given host and port.  Block
3405
# devices can then be exported using @nbd-server-add.  The NBD
3406
# server will present them as named exports; for example, another
3407
# QEMU instance could refer to them as "nbd:HOST:PORT:exportname=NAME".
3408
#
3409
# @addr: Address on which to listen.
3410
#
3411
# Returns: error if the server is already running.
3412
#
3413
# Since: 1.3.0
3414
##
3415
{ 'command': 'nbd-server-start',
3416
  'data': { 'addr': 'SocketAddress' } }
3417

    
3418
##
3419
# @nbd-server-add:
3420
#
3421
# Export a device to QEMU's embedded NBD server.
3422
#
3423
# @device: Block device to be exported
3424
#
3425
# @writable: Whether clients should be able to write to the device via the
3426
#     NBD connection (default false). #optional
3427
#
3428
# Returns: error if the device is already marked for export.
3429
#
3430
# Since: 1.3.0
3431
##
3432
{ 'command': 'nbd-server-add', 'data': {'device': 'str', '*writable': 'bool'} }
3433

    
3434
##
3435
# @nbd-server-stop:
3436
#
3437
# Stop QEMU's embedded NBD server, and unregister all devices previously
3438
# added via @nbd-server-add.
3439
#
3440
# Since: 1.3.0
3441
##
3442
{ 'command': 'nbd-server-stop' }
3443

    
3444
##
3445
# @ChardevFile:
3446
#
3447
# Configuration info for file chardevs.
3448
#
3449
# @in:  #optional The name of the input file
3450
# @out: The name of the output file
3451
#
3452
# Since: 1.4
3453
##
3454
{ 'type': 'ChardevFile', 'data': { '*in' : 'str',
3455
                                   'out' : 'str' } }
3456

    
3457
##
3458
# @ChardevHostdev:
3459
#
3460
# Configuration info for device and pipe chardevs.
3461
#
3462
# @device: The name of the special file for the device,
3463
#          i.e. /dev/ttyS0 on Unix or COM1: on Windows
3464
# @type: What kind of device this is.
3465
#
3466
# Since: 1.4
3467
##
3468
{ 'type': 'ChardevHostdev', 'data': { 'device' : 'str' } }
3469

    
3470
##
3471
# @ChardevSocket:
3472
#
3473
# Configuration info for (stream) socket chardevs.
3474
#
3475
# @addr: socket address to listen on (server=true)
3476
#        or connect to (server=false)
3477
# @server: #optional create server socket (default: true)
3478
# @wait: #optional wait for incoming connection on server
3479
#        sockets (default: false).
3480
# @nodelay: #optional set TCP_NODELAY socket option (default: false)
3481
# @telnet: #optional enable telnet protocol on server
3482
#          sockets (default: false)
3483
#
3484
# Since: 1.4
3485
##
3486
{ 'type': 'ChardevSocket', 'data': { 'addr'     : 'SocketAddress',
3487
                                     '*server'  : 'bool',
3488
                                     '*wait'    : 'bool',
3489
                                     '*nodelay' : 'bool',
3490
                                     '*telnet'  : 'bool' } }
3491

    
3492
##
3493
# @ChardevUdp:
3494
#
3495
# Configuration info for datagram socket chardevs.
3496
#
3497
# @remote: remote address
3498
# @local: #optional local address
3499
#
3500
# Since: 1.5
3501
##
3502
{ 'type': 'ChardevUdp', 'data': { 'remote' : 'SocketAddress',
3503
                                  '*local' : 'SocketAddress' } }
3504

    
3505
##
3506
# @ChardevMux:
3507
#
3508
# Configuration info for mux chardevs.
3509
#
3510
# @chardev: name of the base chardev.
3511
#
3512
# Since: 1.5
3513
##
3514
{ 'type': 'ChardevMux', 'data': { 'chardev' : 'str' } }
3515

    
3516
##
3517
# @ChardevStdio:
3518
#
3519
# Configuration info for stdio chardevs.
3520
#
3521
# @signal: #optional Allow signals (such as SIGINT triggered by ^C)
3522
#          be delivered to qemu.  Default: true in -nographic mode,
3523
#          false otherwise.
3524
#
3525
# Since: 1.5
3526
##
3527
{ 'type': 'ChardevStdio', 'data': { '*signal' : 'bool' } }
3528

    
3529
##
3530
# @ChardevSpiceChannel:
3531
#
3532
# Configuration info for spice vm channel chardevs.
3533
#
3534
# @type: kind of channel (for example vdagent).
3535
#
3536
# Since: 1.5
3537
##
3538
{ 'type': 'ChardevSpiceChannel', 'data': { 'type'  : 'str' } }
3539

    
3540
##
3541
# @ChardevSpicePort:
3542
#
3543
# Configuration info for spice port chardevs.
3544
#
3545
# @fqdn: name of the channel (see docs/spice-port-fqdn.txt)
3546
#
3547
# Since: 1.5
3548
##
3549
{ 'type': 'ChardevSpicePort', 'data': { 'fqdn'  : 'str' } }
3550

    
3551
##
3552
# @ChardevVC:
3553
#
3554
# Configuration info for virtual console chardevs.
3555
#
3556
# @width:  console width,  in pixels
3557
# @height: console height, in pixels
3558
# @cols:   console width,  in chars
3559
# @rows:   console height, in chars
3560
#
3561
# Since: 1.5
3562
##
3563
{ 'type': 'ChardevVC', 'data': { '*width'  : 'int',
3564
                                 '*height' : 'int',
3565
                                 '*cols'   : 'int',
3566
                                 '*rows'   : 'int' } }
3567

    
3568
##
3569
# @ChardevRingbuf:
3570
#
3571
# Configuration info for ring buffer chardevs.
3572
#
3573
# @size: #optional ring buffer size, must be power of two, default is 65536
3574
#
3575
# Since: 1.5
3576
##
3577
{ 'type': 'ChardevRingbuf', 'data': { '*size'  : 'int' } }
3578

    
3579
##
3580
# @ChardevBackend:
3581
#
3582
# Configuration info for the new chardev backend.
3583
#
3584
# Since: 1.4
3585
##
3586
{ 'type': 'ChardevDummy', 'data': { } }
3587

    
3588
{ 'union': 'ChardevBackend', 'data': { 'file'   : 'ChardevFile',
3589
                                       'serial' : 'ChardevHostdev',
3590
                                       'parallel': 'ChardevHostdev',
3591
                                       'pipe'   : 'ChardevHostdev',
3592
                                       'socket' : 'ChardevSocket',
3593
                                       'udp'    : 'ChardevUdp',
3594
                                       'pty'    : 'ChardevDummy',
3595
                                       'null'   : 'ChardevDummy',
3596
                                       'mux'    : 'ChardevMux',
3597
                                       'msmouse': 'ChardevDummy',
3598
                                       'braille': 'ChardevDummy',
3599
                                       'stdio'  : 'ChardevStdio',
3600
                                       'console': 'ChardevDummy',
3601
                                       'spicevmc' : 'ChardevSpiceChannel',
3602
                                       'spiceport' : 'ChardevSpicePort',
3603
                                       'vc'     : 'ChardevVC',
3604
                                       'ringbuf': 'ChardevRingbuf',
3605
                                       # next one is just for compatibility
3606
                                       'memory' : 'ChardevRingbuf' } }
3607

    
3608
##
3609
# @ChardevReturn:
3610
#
3611
# Return info about the chardev backend just created.
3612
#
3613
# @pty: #optional name of the slave pseudoterminal device, present if
3614
#       and only if a chardev of type 'pty' was created
3615
#
3616
# Since: 1.4
3617
##
3618
{ 'type' : 'ChardevReturn', 'data': { '*pty' : 'str' } }
3619

    
3620
##
3621
# @chardev-add:
3622
#
3623
# Add a character device backend
3624
#
3625
# @id: the chardev's ID, must be unique
3626
# @backend: backend type and parameters
3627
#
3628
# Returns: ChardevReturn.
3629
#
3630
# Since: 1.4
3631
##
3632
{ 'command': 'chardev-add', 'data': {'id'      : 'str',
3633
                                     'backend' : 'ChardevBackend' },
3634
  'returns': 'ChardevReturn' }
3635

    
3636
##
3637
# @chardev-remove:
3638
#
3639
# Remove a character device backend
3640
#
3641
# @id: the chardev's ID, must exist and not be in use
3642
#
3643
# Returns: Nothing on success
3644
#
3645
# Since: 1.4
3646
##
3647
{ 'command': 'chardev-remove', 'data': {'id': 'str'} }
3648

    
3649
##
3650
# @TpmModel:
3651
#
3652
# An enumeration of TPM models
3653
#
3654
# @tpm-tis: TPM TIS model
3655
#
3656
# Since: 1.5
3657
##
3658
{ 'enum': 'TpmModel', 'data': [ 'tpm-tis' ] }
3659

    
3660
##
3661
# @query-tpm-models:
3662
#
3663
# Return a list of supported TPM models
3664
#
3665
# Returns: a list of TpmModel
3666
#
3667
# Since: 1.5
3668
##
3669
{ 'command': 'query-tpm-models', 'returns': ['TpmModel'] }
3670

    
3671
##
3672
# @TpmType:
3673
#
3674
# An enumeration of TPM types
3675
#
3676
# @passthrough: TPM passthrough type
3677
#
3678
# Since: 1.5
3679
##
3680
{ 'enum': 'TpmType', 'data': [ 'passthrough' ] }
3681

    
3682
##
3683
# @query-tpm-types:
3684
#
3685
# Return a list of supported TPM types
3686
#
3687
# Returns: a list of TpmType
3688
#
3689
# Since: 1.5
3690
##
3691
{ 'command': 'query-tpm-types', 'returns': ['TpmType'] }
3692

    
3693
##
3694
# @TPMPassthroughOptions:
3695
#
3696
# Information about the TPM passthrough type
3697
#
3698
# @path: #optional string describing the path used for accessing the TPM device
3699
#
3700
# @cancel-path: #optional string showing the TPM's sysfs cancel file
3701
#               for cancellation of TPM commands while they are executing
3702
#
3703
# Since: 1.5
3704
##
3705
{ 'type': 'TPMPassthroughOptions', 'data': { '*path' : 'str',
3706
                                             '*cancel-path' : 'str'} }
3707

    
3708
##
3709
# @TpmTypeOptions:
3710
#
3711
# A union referencing different TPM backend types' configuration options
3712
#
3713
# @passthrough: The configuration options for the TPM passthrough type
3714
#
3715
# Since: 1.5
3716
##
3717
{ 'union': 'TpmTypeOptions',
3718
   'data': { 'passthrough' : 'TPMPassthroughOptions' } }
3719

    
3720
##
3721
# @TpmInfo:
3722
#
3723
# Information about the TPM
3724
#
3725
# @id: The Id of the TPM
3726
#
3727
# @model: The TPM frontend model
3728
#
3729
# @options: The TPM (backend) type configuration options
3730
#
3731
# Since: 1.5
3732
##
3733
{ 'type': 'TPMInfo',
3734
  'data': {'id': 'str',
3735
           'model': 'TpmModel',
3736
           'options': 'TpmTypeOptions' } }
3737

    
3738
##
3739
# @query-tpm:
3740
#
3741
# Return information about the TPM device
3742
#
3743
# Returns: @TPMInfo on success
3744
#
3745
# Since: 1.5
3746
##
3747
{ 'command': 'query-tpm', 'returns': ['TPMInfo'] }
3748

    
3749
##
3750
# @AcpiTableOptions
3751
#
3752
# Specify an ACPI table on the command line to load.
3753
#
3754
# At most one of @file and @data can be specified. The list of files specified
3755
# by any one of them is loaded and concatenated in order. If both are omitted,
3756
# @data is implied.
3757
#
3758
# Other fields / optargs can be used to override fields of the generic ACPI
3759
# table header; refer to the ACPI specification 5.0, section 5.2.6 System
3760
# Description Table Header. If a header field is not overridden, then the
3761
# corresponding value from the concatenated blob is used (in case of @file), or
3762
# it is filled in with a hard-coded value (in case of @data).
3763
#
3764
# String fields are copied into the matching ACPI member from lowest address
3765
# upwards, and silently truncated / NUL-padded to length.
3766
#
3767
# @sig: #optional table signature / identifier (4 bytes)
3768
#
3769
# @rev: #optional table revision number (dependent on signature, 1 byte)
3770
#
3771
# @oem_id: #optional OEM identifier (6 bytes)
3772
#
3773
# @oem_table_id: #optional OEM table identifier (8 bytes)
3774
#
3775
# @oem_rev: #optional OEM-supplied revision number (4 bytes)
3776
#
3777
# @asl_compiler_id: #optional identifier of the utility that created the table
3778
#                   (4 bytes)
3779
#
3780
# @asl_compiler_rev: #optional revision number of the utility that created the
3781
#                    table (4 bytes)
3782
#
3783
# @file: #optional colon (:) separated list of pathnames to load and
3784
#        concatenate as table data. The resultant binary blob is expected to
3785
#        have an ACPI table header. At least one file is required. This field
3786
#        excludes @data.
3787
#
3788
# @data: #optional colon (:) separated list of pathnames to load and
3789
#        concatenate as table data. The resultant binary blob must not have an
3790
#        ACPI table header. At least one file is required. This field excludes
3791
#        @file.
3792
#
3793
# Since 1.5
3794
##
3795
{ 'type': 'AcpiTableOptions',
3796
  'data': {
3797
    '*sig':               'str',
3798
    '*rev':               'uint8',
3799
    '*oem_id':            'str',
3800
    '*oem_table_id':      'str',
3801
    '*oem_rev':           'uint32',
3802
    '*asl_compiler_id':   'str',
3803
    '*asl_compiler_rev':  'uint32',
3804
    '*file':              'str',
3805
    '*data':              'str' }}
3806

    
3807
##
3808
# @CommandLineParameterType:
3809
#
3810
# Possible types for an option parameter.
3811
#
3812
# @string: accepts a character string
3813
#
3814
# @boolean: accepts "on" or "off"
3815
#
3816
# @number: accepts a number
3817
#
3818
# @size: accepts a number followed by an optional suffix (K)ilo,
3819
#        (M)ega, (G)iga, (T)era
3820
#
3821
# Since 1.5
3822
##
3823
{ 'enum': 'CommandLineParameterType',
3824
  'data': ['string', 'boolean', 'number', 'size'] }
3825

    
3826
##
3827
# @CommandLineParameterInfo:
3828
#
3829
# Details about a single parameter of a command line option.
3830
#
3831
# @name: parameter name
3832
#
3833
# @type: parameter @CommandLineParameterType
3834
#
3835
# @help: #optional human readable text string, not suitable for parsing.
3836
#
3837
# Since 1.5
3838
##
3839
{ 'type': 'CommandLineParameterInfo',
3840
  'data': { 'name': 'str',
3841
            'type': 'CommandLineParameterType',
3842
            '*help': 'str' } }
3843

    
3844
##
3845
# @CommandLineOptionInfo:
3846
#
3847
# Details about a command line option, including its list of parameter details
3848
#
3849
# @option: option name
3850
#
3851
# @parameters: an array of @CommandLineParameterInfo
3852
#
3853
# Since 1.5
3854
##
3855
{ 'type': 'CommandLineOptionInfo',
3856
  'data': { 'option': 'str', 'parameters': ['CommandLineParameterInfo'] } }
3857

    
3858
##
3859
# @query-command-line-options:
3860
#
3861
# Query command line option schema.
3862
#
3863
# @option: #optional option name
3864
#
3865
# Returns: list of @CommandLineOptionInfo for all options (or for the given
3866
#          @option).  Returns an error if the given @option doesn't exist.
3867
#
3868
# Since 1.5
3869
##
3870
{'command': 'query-command-line-options', 'data': { '*option': 'str' },
3871
 'returns': ['CommandLineOptionInfo'] }
3872

    
3873
##
3874
# @X86CPURegister32
3875
#
3876
# A X86 32-bit register
3877
#
3878
# Since: 1.5
3879
##
3880
{ 'enum': 'X86CPURegister32',
3881
  'data': [ 'EAX', 'EBX', 'ECX', 'EDX', 'ESP', 'EBP', 'ESI', 'EDI' ] }
3882

    
3883
##
3884
# @X86CPUFeatureWordInfo
3885
#
3886
# Information about a X86 CPU feature word
3887
#
3888
# @cpuid-input-eax: Input EAX value for CPUID instruction for that feature word
3889
#
3890
# @cpuid-input-ecx: #optional Input ECX value for CPUID instruction for that
3891
#                   feature word
3892
#
3893
# @cpuid-register: Output register containing the feature bits
3894
#
3895
# @features: value of output register, containing the feature bits
3896
#
3897
# Since: 1.5
3898
##
3899
{ 'type': 'X86CPUFeatureWordInfo',
3900
  'data': { 'cpuid-input-eax': 'int',
3901
            '*cpuid-input-ecx': 'int',
3902
            'cpuid-register': 'X86CPURegister32',
3903
            'features': 'int' } }
3904

    
3905
##
3906
# @RxState:
3907
#
3908
# Packets receiving state
3909
#
3910
# @normal: filter assigned packets according to the mac-table
3911
#
3912
# @none: don't receive any assigned packet
3913
#
3914
# @all: receive all assigned packets
3915
#
3916
# Since: 1.6
3917
##
3918
{ 'enum': 'RxState', 'data': [ 'normal', 'none', 'all' ] }
3919

    
3920
##
3921
# @RxFilterInfo:
3922
#
3923
# Rx-filter information for a NIC.
3924
#
3925
# @name: net client name
3926
#
3927
# @promiscuous: whether promiscuous mode is enabled
3928
#
3929
# @multicast: multicast receive state
3930
#
3931
# @unicast: unicast receive state
3932
#
3933
# @broadcast-allowed: whether to receive broadcast
3934
#
3935
# @multicast-overflow: multicast table is overflowed or not
3936
#
3937
# @unicast-overflow: unicast table is overflowed or not
3938
#
3939
# @main-mac: the main macaddr string
3940
#
3941
# @vlan-table: a list of active vlan id
3942
#
3943
# @unicast-table: a list of unicast macaddr string
3944
#
3945
# @multicast-table: a list of multicast macaddr string
3946
#
3947
# Since 1.6
3948
##
3949

    
3950
{ 'type': 'RxFilterInfo',
3951
  'data': {
3952
    'name':               'str',
3953
    'promiscuous':        'bool',
3954
    'multicast':          'RxState',
3955
    'unicast':            'RxState',
3956
    'broadcast-allowed':  'bool',
3957
    'multicast-overflow': 'bool',
3958
    'unicast-overflow':   'bool',
3959
    'main-mac':           'str',
3960
    'vlan-table':         ['int'],
3961
    'unicast-table':      ['str'],
3962
    'multicast-table':    ['str'] }}
3963

    
3964
##
3965
# @query-rx-filter:
3966
#
3967
# Return rx-filter information for all NICs (or for the given NIC).
3968
#
3969
# @name: #optional net client name
3970
#
3971
# Returns: list of @RxFilterInfo for all NICs (or for the given NIC).
3972
#          Returns an error if the given @name doesn't exist, or given
3973
#          NIC doesn't support rx-filter querying, or given net client
3974
#          isn't a NIC.
3975
#
3976
# Since: 1.6
3977
##
3978
{ 'command': 'query-rx-filter', 'data': { '*name': 'str' },
3979
  'returns': ['RxFilterInfo'] }
3980

    
3981

    
3982
##
3983
# @BlockdevDiscardOptions
3984
#
3985
# Determines how to handle discard requests.
3986
#
3987
# @ignore:      Ignore the request
3988
# @unmap:       Forward as an unmap request
3989
#
3990
# Since: 1.7
3991
##
3992
{ 'enum': 'BlockdevDiscardOptions',
3993
  'data': [ 'ignore', 'unmap' ] }
3994

    
3995
##
3996
# @BlockdevAioOptions
3997
#
3998
# Selects the AIO backend to handle I/O requests
3999
#
4000
# @threads:     Use qemu's thread pool
4001
# @native:      Use native AIO backend (only Linux and Windows)
4002
#
4003
# Since: 1.7
4004
##
4005
{ 'enum': 'BlockdevAioOptions',
4006
  'data': [ 'threads', 'native' ] }
4007

    
4008
##
4009
# @BlockdevCacheOptions
4010
#
4011
# Includes cache-related options for block devices
4012
#
4013
# @writeback:   #optional enables writeback mode for any caches (default: true)
4014
# @direct:      #optional enables use of O_DIRECT (bypass the host page cache;
4015
#               default: false)
4016
# @no-flush:    #optional ignore any flush requests for the device (default:
4017
#               false)
4018
#
4019
# Since: 1.7
4020
##
4021
{ 'type': 'BlockdevCacheOptions',
4022
  'data': { '*writeback': 'bool',
4023
            '*direct': 'bool',
4024
            '*no-flush': 'bool' } }
4025

    
4026
##
4027
# @BlockdevOptionsBase
4028
#
4029
# Options that are available for all block devices, independent of the block
4030
# driver.
4031
#
4032
# @driver:      block driver name
4033
# @id:          #optional id by which the new block device can be referred to.
4034
#               This is a required option on the top level of blockdev-add, and
4035
#               currently not allowed on any other level.
4036
# @discard:     #optional discard-related options (default: ignore)
4037
# @cache:       #optional cache-related options
4038
# @aio:         #optional AIO backend (default: threads)
4039
# @rerror:      #optional how to handle read errors on the device
4040
#               (default: report)
4041
# @werror:      #optional how to handle write errors on the device
4042
#               (default: enospc)
4043
# @read-only:   #optional whether the block device should be read-only
4044
#               (default: false)
4045
#
4046
# Since: 1.7
4047
##
4048
{ 'type': 'BlockdevOptionsBase',
4049
  'data': { 'driver': 'str',
4050
            '*id': 'str',
4051
            '*discard': 'BlockdevDiscardOptions',
4052
            '*cache': 'BlockdevCacheOptions',
4053
            '*aio': 'BlockdevAioOptions',
4054
            '*rerror': 'BlockdevOnError',
4055
            '*werror': 'BlockdevOnError',
4056
            '*read-only': 'bool' } }
4057

    
4058
##
4059
# @BlockdevOptionsFile
4060
#
4061
# Driver specific block device options for the file backend and similar
4062
# protocols.
4063
#
4064
# @filename:    path to the image file
4065
#
4066
# Since: 1.7
4067
##
4068
{ 'type': 'BlockdevOptionsFile',
4069
  'data': { 'filename': 'str' } }
4070

    
4071
##
4072
# @BlockdevOptionsVVFAT
4073
#
4074
# Driver specific block device options for the vvfat protocol.
4075
#
4076
# @dir:         directory to be exported as FAT image
4077
# @fat-type:    #optional FAT type: 12, 16 or 32
4078
# @floppy:      #optional whether to export a floppy image (true) or
4079
#               partitioned hard disk (false; default)
4080
# @rw:          #optional whether to allow write operations (default: false)
4081
#
4082
# Since: 1.7
4083
##
4084
{ 'type': 'BlockdevOptionsVVFAT',
4085
  'data': { 'dir': 'str', '*fat-type': 'int', '*floppy': 'bool',
4086
            '*rw': 'bool' } }
4087

    
4088
##
4089
# @BlockdevOptionsGenericFormat
4090
#
4091
# Driver specific block device options for image format that have no option
4092
# besides their data source.
4093
#
4094
# @file:        reference to or definition of the data source block device
4095
#
4096
# Since: 1.7
4097
##
4098
{ 'type': 'BlockdevOptionsGenericFormat',
4099
  'data': { 'file': 'BlockdevRef' } }
4100

    
4101
##
4102
# @BlockdevOptionsGenericCOWFormat
4103
#
4104
# Driver specific block device options for image format that have no option
4105
# besides their data source and an optional backing file.
4106
#
4107
# @backing:     #optional reference to or definition of the backing file block
4108
#               device (if missing, taken from the image file content). It is
4109
#               allowed to pass an empty string here in order to disable the
4110
#               default backing file.
4111
#
4112
# Since: 1.7
4113
##
4114
{ 'type': 'BlockdevOptionsGenericCOWFormat',
4115
  'base': 'BlockdevOptionsGenericFormat',
4116
  'data': { '*backing': 'BlockdevRef' } }
4117

    
4118
##
4119
# @BlockdevOptionsQcow2
4120
#
4121
# Driver specific block device options for qcow2.
4122
#
4123
# @lazy-refcounts:        #optional whether to enable the lazy refcounts
4124
#                         feature (default is taken from the image file)
4125
#
4126
# @pass-discard-request:  #optional whether discard requests to the qcow2
4127
#                         device should be forwarded to the data source
4128
#
4129
# @pass-discard-snapshot: #optional whether discard requests for the data source
4130
#                         should be issued when a snapshot operation (e.g.
4131
#                         deleting a snapshot) frees clusters in the qcow2 file
4132
#
4133
# @pass-discard-other:    #optional whether discard requests for the data source
4134
#                         should be issued on other occasions where a cluster
4135
#                         gets freed
4136
#
4137
# Since: 1.7
4138
##
4139
{ 'type': 'BlockdevOptionsQcow2',
4140
  'base': 'BlockdevOptionsGenericCOWFormat',
4141
  'data': { '*lazy-refcounts': 'bool',
4142
            '*pass-discard-request': 'bool',
4143
            '*pass-discard-snapshot': 'bool',
4144
            '*pass-discard-other': 'bool' } }
4145

    
4146
##
4147
# @BlockdevOptions
4148
#
4149
# Options for creating a block device.
4150
#
4151
# Since: 1.7
4152
##
4153
{ 'union': 'BlockdevOptions',
4154
  'base': 'BlockdevOptionsBase',
4155
  'discriminator': 'driver',
4156
  'data': {
4157
      'file':       'BlockdevOptionsFile',
4158
      'http':       'BlockdevOptionsFile',
4159
      'https':      'BlockdevOptionsFile',
4160
      'ftp':        'BlockdevOptionsFile',
4161
      'ftps':       'BlockdevOptionsFile',
4162
      'tftp':       'BlockdevOptionsFile',
4163
# TODO gluster: Wait for structured options
4164
# TODO iscsi: Wait for structured options
4165
# TODO nbd: Should take InetSocketAddress for 'host'?
4166
# TODO rbd: Wait for structured options
4167
# TODO sheepdog: Wait for structured options
4168
# TODO ssh: Should take InetSocketAddress for 'host'?
4169
      'vvfat':      'BlockdevOptionsVVFAT',
4170

    
4171
# TODO blkdebug: Wait for structured options
4172
# TODO blkverify: Wait for structured options
4173

    
4174
      'bochs':      'BlockdevOptionsGenericFormat',
4175
      'cloop':      'BlockdevOptionsGenericFormat',
4176
      'cow':        'BlockdevOptionsGenericCOWFormat',
4177
      'dmg':        'BlockdevOptionsGenericFormat',
4178
      'parallels':  'BlockdevOptionsGenericFormat',
4179
      'qcow':       'BlockdevOptionsGenericCOWFormat',
4180
      'qcow2':      'BlockdevOptionsQcow2',
4181
      'qed':        'BlockdevOptionsGenericCOWFormat',
4182
      'raw':        'BlockdevOptionsGenericFormat',
4183
      'vdi':        'BlockdevOptionsGenericFormat',
4184
      'vhdx':       'BlockdevOptionsGenericFormat',
4185
      'vmdk':       'BlockdevOptionsGenericCOWFormat',
4186
      'vpc':        'BlockdevOptionsGenericFormat'
4187
  } }
4188

    
4189
##
4190
# @BlockdevRef
4191
#
4192
# Reference to a block device.
4193
#
4194
# @definition:      defines a new block device inline
4195
# @reference:       references the ID of an existing block device. An
4196
#                   empty string means that no block device should be
4197
#                   referenced.
4198
#
4199
# Since: 1.7
4200
##
4201
{ 'union': 'BlockdevRef',
4202
  'discriminator': {},
4203
  'data': { 'definition': 'BlockdevOptions',
4204
            'reference': 'str' } }
4205

    
4206
##
4207
# @blockdev-add:
4208
#
4209
# Creates a new block device.
4210
#
4211
# @options: block device options for the new device
4212
#
4213
# Since: 1.7
4214
##
4215
{ 'command': 'blockdev-add', 'data': { 'options': 'BlockdevOptions' } }