qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

qom.json (31179B)


      1 # -*- Mode: Python -*-
      2 # vim: filetype=python
      3 #
      4 # This work is licensed under the terms of the GNU GPL, version 2 or later.
      5 # See the COPYING file in the top-level directory.
      6 
      7 { 'include': 'authz.json' }
      8 { 'include': 'block-core.json' }
      9 { 'include': 'common.json' }
     10 { 'include': 'crypto.json' }
     11 
     12 ##
     13 # = QEMU Object Model (QOM)
     14 ##
     15 
     16 ##
     17 # @ObjectPropertyInfo:
     18 #
     19 # @name: the name of the property
     20 #
     21 # @type: the type of the property.  This will typically come in one of four
     22 #        forms:
     23 #
     24 #        1) A primitive type such as 'u8', 'u16', 'bool', 'str', or 'double'.
     25 #           These types are mapped to the appropriate JSON type.
     26 #
     27 #        2) A child type in the form 'child<subtype>' where subtype is a qdev
     28 #           device type name.  Child properties create the composition tree.
     29 #
     30 #        3) A link type in the form 'link<subtype>' where subtype is a qdev
     31 #           device type name.  Link properties form the device model graph.
     32 #
     33 # @description: if specified, the description of the property.
     34 #
     35 # @default-value: the default value, if any (since 5.0)
     36 #
     37 # Since: 1.2
     38 ##
     39 { 'struct': 'ObjectPropertyInfo',
     40   'data': { 'name': 'str',
     41             'type': 'str',
     42             '*description': 'str',
     43             '*default-value': 'any' } }
     44 
     45 ##
     46 # @qom-list:
     47 #
     48 # This command will list any properties of a object given a path in the object
     49 # model.
     50 #
     51 # @path: the path within the object model.  See @qom-get for a description of
     52 #        this parameter.
     53 #
     54 # Returns: a list of @ObjectPropertyInfo that describe the properties of the
     55 #          object.
     56 #
     57 # Since: 1.2
     58 #
     59 # Example:
     60 #
     61 # -> { "execute": "qom-list",
     62 #      "arguments": { "path": "/chardevs" } }
     63 # <- { "return": [ { "name": "type", "type": "string" },
     64 #                  { "name": "parallel0", "type": "child<chardev-vc>" },
     65 #                  { "name": "serial0", "type": "child<chardev-vc>" },
     66 #                  { "name": "mon0", "type": "child<chardev-stdio>" } ] }
     67 #
     68 ##
     69 { 'command': 'qom-list',
     70   'data': { 'path': 'str' },
     71   'returns': [ 'ObjectPropertyInfo' ],
     72   'allow-preconfig': true }
     73 
     74 ##
     75 # @qom-get:
     76 #
     77 # This command will get a property from a object model path and return the
     78 # value.
     79 #
     80 # @path: The path within the object model.  There are two forms of supported
     81 #        paths--absolute and partial paths.
     82 #
     83 #        Absolute paths are derived from the root object and can follow child<>
     84 #        or link<> properties.  Since they can follow link<> properties, they
     85 #        can be arbitrarily long.  Absolute paths look like absolute filenames
     86 #        and are prefixed  with a leading slash.
     87 #
     88 #        Partial paths look like relative filenames.  They do not begin
     89 #        with a prefix.  The matching rules for partial paths are subtle but
     90 #        designed to make specifying objects easy.  At each level of the
     91 #        composition tree, the partial path is matched as an absolute path.
     92 #        The first match is not returned.  At least two matches are searched
     93 #        for.  A successful result is only returned if only one match is
     94 #        found.  If more than one match is found, a flag is return to
     95 #        indicate that the match was ambiguous.
     96 #
     97 # @property: The property name to read
     98 #
     99 # Returns: The property value.  The type depends on the property
    100 #          type. child<> and link<> properties are returned as #str
    101 #          pathnames.  All integer property types (u8, u16, etc) are
    102 #          returned as #int.
    103 #
    104 # Since: 1.2
    105 #
    106 # Example:
    107 #
    108 # 1. Use absolute path
    109 #
    110 # -> { "execute": "qom-get",
    111 #      "arguments": { "path": "/machine/unattached/device[0]",
    112 #                     "property": "hotplugged" } }
    113 # <- { "return": false }
    114 #
    115 # 2. Use partial path
    116 #
    117 # -> { "execute": "qom-get",
    118 #      "arguments": { "path": "unattached/sysbus",
    119 #                     "property": "type" } }
    120 # <- { "return": "System" }
    121 #
    122 ##
    123 { 'command': 'qom-get',
    124   'data': { 'path': 'str', 'property': 'str' },
    125   'returns': 'any',
    126   'allow-preconfig': true }
    127 
    128 ##
    129 # @qom-set:
    130 #
    131 # This command will set a property from a object model path.
    132 #
    133 # @path: see @qom-get for a description of this parameter
    134 #
    135 # @property: the property name to set
    136 #
    137 # @value: a value who's type is appropriate for the property type.  See @qom-get
    138 #         for a description of type mapping.
    139 #
    140 # Since: 1.2
    141 #
    142 # Example:
    143 #
    144 # -> { "execute": "qom-set",
    145 #      "arguments": { "path": "/machine",
    146 #                     "property": "graphics",
    147 #                     "value": false } }
    148 # <- { "return": {} }
    149 #
    150 ##
    151 { 'command': 'qom-set',
    152   'data': { 'path': 'str', 'property': 'str', 'value': 'any' },
    153   'allow-preconfig': true }
    154 
    155 ##
    156 # @ObjectTypeInfo:
    157 #
    158 # This structure describes a search result from @qom-list-types
    159 #
    160 # @name: the type name found in the search
    161 #
    162 # @abstract: the type is abstract and can't be directly instantiated.
    163 #            Omitted if false. (since 2.10)
    164 #
    165 # @parent: Name of parent type, if any (since 2.10)
    166 #
    167 # Since: 1.1
    168 ##
    169 { 'struct': 'ObjectTypeInfo',
    170   'data': { 'name': 'str', '*abstract': 'bool', '*parent': 'str' } }
    171 
    172 ##
    173 # @qom-list-types:
    174 #
    175 # This command will return a list of types given search parameters
    176 #
    177 # @implements: if specified, only return types that implement this type name
    178 #
    179 # @abstract: if true, include abstract types in the results
    180 #
    181 # Returns: a list of @ObjectTypeInfo or an empty list if no results are found
    182 #
    183 # Since: 1.1
    184 ##
    185 { 'command': 'qom-list-types',
    186   'data': { '*implements': 'str', '*abstract': 'bool' },
    187   'returns': [ 'ObjectTypeInfo' ],
    188   'allow-preconfig': true }
    189 
    190 ##
    191 # @qom-list-properties:
    192 #
    193 # List properties associated with a QOM object.
    194 #
    195 # @typename: the type name of an object
    196 #
    197 # Note: objects can create properties at runtime, for example to describe
    198 #       links between different devices and/or objects. These properties
    199 #       are not included in the output of this command.
    200 #
    201 # Returns: a list of ObjectPropertyInfo describing object properties
    202 #
    203 # Since: 2.12
    204 ##
    205 { 'command': 'qom-list-properties',
    206   'data': { 'typename': 'str'},
    207   'returns': [ 'ObjectPropertyInfo' ],
    208   'allow-preconfig': true }
    209 
    210 ##
    211 # @CanHostSocketcanProperties:
    212 #
    213 # Properties for can-host-socketcan objects.
    214 #
    215 # @if: interface name of the host system CAN bus to connect to
    216 #
    217 # @canbus: object ID of the can-bus object to connect to the host interface
    218 #
    219 # Since: 2.12
    220 ##
    221 { 'struct': 'CanHostSocketcanProperties',
    222   'data': { 'if': 'str',
    223             'canbus': 'str' } }
    224 
    225 ##
    226 # @ColoCompareProperties:
    227 #
    228 # Properties for colo-compare objects.
    229 #
    230 # @primary_in: name of the character device backend to use for the primary
    231 #              input (incoming packets are redirected to @outdev)
    232 #
    233 # @secondary_in: name of the character device backend to use for secondary
    234 #                input (incoming packets are only compared to the input on
    235 #                @primary_in and then dropped)
    236 #
    237 # @outdev: name of the character device backend to use for output
    238 #
    239 # @iothread: name of the iothread to run in
    240 #
    241 # @notify_dev: name of the character device backend to be used to communicate
    242 #              with the remote colo-frame (only for Xen COLO)
    243 #
    244 # @compare_timeout: the maximum time to hold a packet from @primary_in for
    245 #                   comparison with an incoming packet on @secondary_in in
    246 #                   milliseconds (default: 3000)
    247 #
    248 # @expired_scan_cycle: the interval at which colo-compare checks whether
    249 #                      packets from @primary have timed out, in milliseconds
    250 #                      (default: 3000)
    251 #
    252 # @max_queue_size: the maximum number of packets to keep in the queue for
    253 #                  comparing with incoming packets from @secondary_in.  If the
    254 #                  queue is full and additional packets are received, the
    255 #                  additional packets are dropped. (default: 1024)
    256 #
    257 # @vnet_hdr_support: if true, vnet header support is enabled (default: false)
    258 #
    259 # Since: 2.8
    260 ##
    261 { 'struct': 'ColoCompareProperties',
    262   'data': { 'primary_in': 'str',
    263             'secondary_in': 'str',
    264             'outdev': 'str',
    265             'iothread': 'str',
    266             '*notify_dev': 'str',
    267             '*compare_timeout': 'uint64',
    268             '*expired_scan_cycle': 'uint32',
    269             '*max_queue_size': 'uint32',
    270             '*vnet_hdr_support': 'bool' } }
    271 
    272 ##
    273 # @CryptodevBackendProperties:
    274 #
    275 # Properties for cryptodev-backend and cryptodev-backend-builtin objects.
    276 #
    277 # @queues: the number of queues for the cryptodev backend. Ignored for
    278 #          cryptodev-backend and must be 1 for cryptodev-backend-builtin.
    279 #          (default: 1)
    280 #
    281 # Since: 2.8
    282 ##
    283 { 'struct': 'CryptodevBackendProperties',
    284   'data': { '*queues': 'uint32' } }
    285 
    286 ##
    287 # @CryptodevVhostUserProperties:
    288 #
    289 # Properties for cryptodev-vhost-user objects.
    290 #
    291 # @chardev: the name of a Unix domain socket character device that connects to
    292 #           the vhost-user server
    293 #
    294 # Since: 2.12
    295 ##
    296 { 'struct': 'CryptodevVhostUserProperties',
    297   'base': 'CryptodevBackendProperties',
    298   'data': { 'chardev': 'str' } }
    299 
    300 ##
    301 # @DBusVMStateProperties:
    302 #
    303 # Properties for dbus-vmstate objects.
    304 #
    305 # @addr: the name of the DBus bus to connect to
    306 #
    307 # @id-list: a comma separated list of DBus IDs of helpers whose data should be
    308 #           included in the VM state on migration
    309 #
    310 # Since: 5.0
    311 ##
    312 { 'struct': 'DBusVMStateProperties',
    313   'data': { 'addr': 'str' ,
    314             '*id-list': 'str' } }
    315 
    316 ##
    317 # @NetfilterInsert:
    318 #
    319 # Indicates where to insert a netfilter relative to a given other filter.
    320 #
    321 # @before: insert before the specified filter
    322 #
    323 # @behind: insert behind the specified filter
    324 #
    325 # Since: 5.0
    326 ##
    327 { 'enum': 'NetfilterInsert',
    328   'data': [ 'before', 'behind' ] }
    329 
    330 ##
    331 # @NetfilterProperties:
    332 #
    333 # Properties for objects of classes derived from netfilter.
    334 #
    335 # @netdev: id of the network device backend to filter
    336 #
    337 # @queue: indicates which queue(s) to filter (default: all)
    338 #
    339 # @status: indicates whether the filter is enabled ("on") or disabled ("off")
    340 #          (default: "on")
    341 #
    342 # @position: specifies where the filter should be inserted in the filter list.
    343 #            "head" means the filter is inserted at the head of the filter list,
    344 #            before any existing filters.
    345 #            "tail" means the filter is inserted at the tail of the filter list,
    346 #            behind any existing filters (default).
    347 #            "id=<id>" means the filter is inserted before or behind the filter
    348 #            specified by <id>, depending on the @insert property.
    349 #            (default: "tail")
    350 #
    351 # @insert: where to insert the filter relative to the filter given in @position.
    352 #          Ignored if @position is "head" or "tail". (default: behind)
    353 #
    354 # Since: 2.5
    355 ##
    356 { 'struct': 'NetfilterProperties',
    357   'data': { 'netdev': 'str',
    358             '*queue': 'NetFilterDirection',
    359             '*status': 'str',
    360             '*position': 'str',
    361             '*insert': 'NetfilterInsert' } }
    362 
    363 ##
    364 # @FilterBufferProperties:
    365 #
    366 # Properties for filter-buffer objects.
    367 #
    368 # @interval: a non-zero interval in microseconds.  All packets arriving in the
    369 #            given interval are delayed until the end of the interval.
    370 #
    371 # Since: 2.5
    372 ##
    373 { 'struct': 'FilterBufferProperties',
    374   'base': 'NetfilterProperties',
    375   'data': { 'interval': 'uint32' } }
    376 
    377 ##
    378 # @FilterDumpProperties:
    379 #
    380 # Properties for filter-dump objects.
    381 #
    382 # @file: the filename where the dumped packets should be stored
    383 #
    384 # @maxlen: maximum number of bytes in a packet that are stored (default: 65536)
    385 #
    386 # Since: 2.5
    387 ##
    388 { 'struct': 'FilterDumpProperties',
    389   'base': 'NetfilterProperties',
    390   'data': { 'file': 'str',
    391             '*maxlen': 'uint32' } }
    392 
    393 ##
    394 # @FilterMirrorProperties:
    395 #
    396 # Properties for filter-mirror objects.
    397 #
    398 # @outdev: the name of a character device backend to which all incoming packets
    399 #          are mirrored
    400 #
    401 # @vnet_hdr_support: if true, vnet header support is enabled (default: false)
    402 #
    403 # Since: 2.6
    404 ##
    405 { 'struct': 'FilterMirrorProperties',
    406   'base': 'NetfilterProperties',
    407   'data': { 'outdev': 'str',
    408             '*vnet_hdr_support': 'bool' } }
    409 
    410 ##
    411 # @FilterRedirectorProperties:
    412 #
    413 # Properties for filter-redirector objects.
    414 #
    415 # At least one of @indev or @outdev must be present.  If both are present, they
    416 # must not refer to the same character device backend.
    417 #
    418 # @indev: the name of a character device backend from which packets are
    419 #         received and redirected to the filtered network device
    420 #
    421 # @outdev: the name of a character device backend to which all incoming packets
    422 #          are redirected
    423 #
    424 # @vnet_hdr_support: if true, vnet header support is enabled (default: false)
    425 #
    426 # Since: 2.6
    427 ##
    428 { 'struct': 'FilterRedirectorProperties',
    429   'base': 'NetfilterProperties',
    430   'data': { '*indev': 'str',
    431             '*outdev': 'str',
    432             '*vnet_hdr_support': 'bool' } }
    433 
    434 ##
    435 # @FilterRewriterProperties:
    436 #
    437 # Properties for filter-rewriter objects.
    438 #
    439 # @vnet_hdr_support: if true, vnet header support is enabled (default: false)
    440 #
    441 # Since: 2.8
    442 ##
    443 { 'struct': 'FilterRewriterProperties',
    444   'base': 'NetfilterProperties',
    445   'data': { '*vnet_hdr_support': 'bool' } }
    446 
    447 ##
    448 # @InputBarrierProperties:
    449 #
    450 # Properties for input-barrier objects.
    451 #
    452 # @name: the screen name as declared in the screens section of barrier.conf
    453 #
    454 # @server: hostname of the Barrier server (default: "localhost")
    455 #
    456 # @port: TCP port of the Barrier server (default: "24800")
    457 #
    458 # @x-origin: x coordinate of the leftmost pixel on the guest screen
    459 #            (default: "0")
    460 #
    461 # @y-origin: y coordinate of the topmost pixel on the guest screen
    462 #            (default: "0")
    463 #
    464 # @width: the width of secondary screen in pixels (default: "1920")
    465 #
    466 # @height: the height of secondary screen in pixels (default: "1080")
    467 #
    468 # Since: 4.2
    469 ##
    470 { 'struct': 'InputBarrierProperties',
    471   'data': { 'name': 'str',
    472             '*server': 'str',
    473             '*port': 'str',
    474             '*x-origin': 'str',
    475             '*y-origin': 'str',
    476             '*width': 'str',
    477             '*height': 'str' } }
    478 
    479 ##
    480 # @InputLinuxProperties:
    481 #
    482 # Properties for input-linux objects.
    483 #
    484 # @evdev: the path of the host evdev device to use
    485 #
    486 # @grab_all: if true, grab is toggled for all devices (e.g. both keyboard and
    487 #            mouse) instead of just one device (default: false)
    488 #
    489 # @repeat: enables auto-repeat events (default: false)
    490 #
    491 # @grab-toggle: the key or key combination that toggles device grab
    492 #               (default: ctrl-ctrl)
    493 #
    494 # Since: 2.6
    495 ##
    496 { 'struct': 'InputLinuxProperties',
    497   'data': { 'evdev': 'str',
    498             '*grab_all': 'bool',
    499             '*repeat': 'bool',
    500             '*grab-toggle': 'GrabToggleKeys' } }
    501 
    502 ##
    503 # @EventLoopBaseProperties:
    504 #
    505 # Common properties for event loops
    506 #
    507 # @aio-max-batch: maximum number of requests in a batch for the AIO engine,
    508 #                 0 means that the engine will use its default.
    509 #                 (default: 0)
    510 #
    511 # @thread-pool-min: minimum number of threads reserved in the thread pool
    512 #                   (default:0)
    513 #
    514 # @thread-pool-max: maximum number of threads the thread pool can contain
    515 #                   (default:64)
    516 #
    517 # Since: 7.1
    518 ##
    519 { 'struct': 'EventLoopBaseProperties',
    520   'data': { '*aio-max-batch': 'int',
    521             '*thread-pool-min': 'int',
    522             '*thread-pool-max': 'int' } }
    523 
    524 ##
    525 # @IothreadProperties:
    526 #
    527 # Properties for iothread objects.
    528 #
    529 # @poll-max-ns: the maximum number of nanoseconds to busy wait for events.
    530 #               0 means polling is disabled (default: 32768 on POSIX hosts,
    531 #               0 otherwise)
    532 #
    533 # @poll-grow: the multiplier used to increase the polling time when the
    534 #             algorithm detects it is missing events due to not polling long
    535 #             enough. 0 selects a default behaviour (default: 0)
    536 #
    537 # @poll-shrink: the divisor used to decrease the polling time when the
    538 #               algorithm detects it is spending too long polling without
    539 #               encountering events. 0 selects a default behaviour (default: 0)
    540 #
    541 # The @aio-max-batch option is available since 6.1.
    542 #
    543 # Since: 2.0
    544 ##
    545 { 'struct': 'IothreadProperties',
    546   'base': 'EventLoopBaseProperties',
    547   'data': { '*poll-max-ns': 'int',
    548             '*poll-grow': 'int',
    549             '*poll-shrink': 'int' } }
    550 
    551 ##
    552 # @MainLoopProperties:
    553 #
    554 # Properties for the main-loop object.
    555 #
    556 # Since: 7.1
    557 ##
    558 { 'struct': 'MainLoopProperties',
    559   'base': 'EventLoopBaseProperties',
    560   'data': {} }
    561 
    562 ##
    563 # @MemoryBackendProperties:
    564 #
    565 # Properties for objects of classes derived from memory-backend.
    566 #
    567 # @merge: if true, mark the memory as mergeable (default depends on the machine
    568 #         type)
    569 #
    570 # @dump: if true, include the memory in core dumps (default depends on the
    571 #        machine type)
    572 #
    573 # @host-nodes: the list of NUMA host nodes to bind the memory to
    574 #
    575 # @policy: the NUMA policy (default: 'default')
    576 #
    577 # @prealloc: if true, preallocate memory (default: false)
    578 #
    579 # @prealloc-threads: number of CPU threads to use for prealloc (default: 1)
    580 #
    581 # @prealloc-context: thread context to use for creation of preallocation threads
    582 #                    (default: none) (since 7.2)
    583 #
    584 # @share: if false, the memory is private to QEMU; if true, it is shared
    585 #         (default: false)
    586 #
    587 # @reserve: if true, reserve swap space (or huge pages) if applicable
    588 #           (default: true) (since 6.1)
    589 #
    590 # @size: size of the memory region in bytes
    591 #
    592 # @x-use-canonical-path-for-ramblock-id: if true, the canonical path is used
    593 #                                        for ramblock-id. Disable this for 4.0
    594 #                                        machine types or older to allow
    595 #                                        migration with newer QEMU versions.
    596 #                                        (default: false generally,
    597 #                                        but true for machine types <= 4.0)
    598 #
    599 # Note: prealloc=true and reserve=false cannot be set at the same time. With
    600 #       reserve=true, the behavior depends on the operating system: for example,
    601 #       Linux will not reserve swap space for shared file mappings --
    602 #       "not applicable". In contrast, reserve=false will bail out if it cannot
    603 #       be configured accordingly.
    604 #
    605 # Since: 2.1
    606 ##
    607 { 'struct': 'MemoryBackendProperties',
    608   'data': { '*dump': 'bool',
    609             '*host-nodes': ['uint16'],
    610             '*merge': 'bool',
    611             '*policy': 'HostMemPolicy',
    612             '*prealloc': 'bool',
    613             '*prealloc-threads': 'uint32',
    614             '*prealloc-context': 'str',
    615             '*share': 'bool',
    616             '*reserve': 'bool',
    617             'size': 'size',
    618             '*x-use-canonical-path-for-ramblock-id': 'bool' } }
    619 
    620 ##
    621 # @MemoryBackendFileProperties:
    622 #
    623 # Properties for memory-backend-file objects.
    624 #
    625 # @align: the base address alignment when QEMU mmap(2)s @mem-path. Some
    626 #         backend stores specified by @mem-path require an alignment different
    627 #         than the default one used by QEMU, e.g. the device DAX /dev/dax0.0
    628 #         requires 2M alignment rather than 4K. In such cases, users can
    629 #         specify the required alignment via this option.
    630 #         0 selects a default alignment (currently the page size). (default: 0)
    631 #
    632 # @discard-data: if true, the file contents can be destroyed when QEMU exits,
    633 #                to avoid unnecessarily flushing data to the backing file. Note
    634 #                that ``discard-data`` is only an optimization, and QEMU might
    635 #                not discard file contents if it aborts unexpectedly or is
    636 #                terminated using SIGKILL. (default: false)
    637 #
    638 # @mem-path: the path to either a shared memory or huge page filesystem mount
    639 #
    640 # @pmem: specifies whether the backing file specified by @mem-path is in
    641 #        host persistent memory that can be accessed using the SNIA NVM
    642 #        programming model (e.g. Intel NVDIMM).
    643 #
    644 # @readonly: if true, the backing file is opened read-only; if false, it is
    645 #            opened read-write. (default: false)
    646 #
    647 # Since: 2.1
    648 ##
    649 { 'struct': 'MemoryBackendFileProperties',
    650   'base': 'MemoryBackendProperties',
    651   'data': { '*align': 'size',
    652             '*discard-data': 'bool',
    653             'mem-path': 'str',
    654             '*pmem': { 'type': 'bool', 'if': 'CONFIG_LIBPMEM' },
    655             '*readonly': 'bool' } }
    656 
    657 ##
    658 # @MemoryBackendMemfdProperties:
    659 #
    660 # Properties for memory-backend-memfd objects.
    661 #
    662 # The @share boolean option is true by default with memfd.
    663 #
    664 # @hugetlb: if true, the file to be created resides in the hugetlbfs filesystem
    665 #           (default: false)
    666 #
    667 # @hugetlbsize: the hugetlb page size on systems that support multiple hugetlb
    668 #               page sizes (it must be a power of 2 value supported by the
    669 #               system). 0 selects a default page size. This option is ignored
    670 #               if @hugetlb is false. (default: 0)
    671 #
    672 # @seal: if true, create a sealed-file, which will block further resizing of
    673 #        the memory (default: true)
    674 #
    675 # Since: 2.12
    676 ##
    677 { 'struct': 'MemoryBackendMemfdProperties',
    678   'base': 'MemoryBackendProperties',
    679   'data': { '*hugetlb': 'bool',
    680             '*hugetlbsize': 'size',
    681             '*seal': 'bool' } }
    682 
    683 ##
    684 # @MemoryBackendEpcProperties:
    685 #
    686 # Properties for memory-backend-epc objects.
    687 #
    688 # The @share boolean option is true by default with epc
    689 #
    690 # The @merge boolean option is false by default with epc
    691 #
    692 # The @dump boolean option is false by default with epc
    693 #
    694 # Since: 6.2
    695 ##
    696 { 'struct': 'MemoryBackendEpcProperties',
    697   'base': 'MemoryBackendProperties',
    698   'data': {} }
    699 
    700 ##
    701 # @PrManagerHelperProperties:
    702 #
    703 # Properties for pr-manager-helper objects.
    704 #
    705 # @path: the path to a Unix domain socket for connecting to the external helper
    706 #
    707 # Since: 2.11
    708 ##
    709 { 'struct': 'PrManagerHelperProperties',
    710   'data': { 'path': 'str' } }
    711 
    712 ##
    713 # @QtestProperties:
    714 #
    715 # Properties for qtest objects.
    716 #
    717 # @chardev: the chardev to be used to receive qtest commands on.
    718 #
    719 # @log: the path to a log file
    720 #
    721 # Since: 6.0
    722 ##
    723 { 'struct': 'QtestProperties',
    724         'data': { 'chardev': 'str',
    725                   '*log': 'str' } }
    726 
    727 ##
    728 # @RemoteObjectProperties:
    729 #
    730 # Properties for x-remote-object objects.
    731 #
    732 # @fd: file descriptor name previously passed via 'getfd' command
    733 #
    734 # @devid: the id of the device to be associated with the file descriptor
    735 #
    736 # Since: 6.0
    737 ##
    738 { 'struct': 'RemoteObjectProperties',
    739   'data': { 'fd': 'str', 'devid': 'str' } }
    740 
    741 ##
    742 # @VfioUserServerProperties:
    743 #
    744 # Properties for x-vfio-user-server objects.
    745 #
    746 # @socket: socket to be used by the libvfio-user library
    747 #
    748 # @device: the ID of the device to be emulated at the server
    749 #
    750 # Since: 7.1
    751 ##
    752 { 'struct': 'VfioUserServerProperties',
    753   'data': { 'socket': 'SocketAddress', 'device': 'str' } }
    754 
    755 ##
    756 # @RngProperties:
    757 #
    758 # Properties for objects of classes derived from rng.
    759 #
    760 # @opened: if true, the device is opened immediately when applying this option
    761 #          and will probably fail when processing the next option. Don't use;
    762 #          only provided for compatibility. (default: false)
    763 #
    764 # Features:
    765 # @deprecated: Member @opened is deprecated.  Setting true doesn't make sense,
    766 #              and false is already the default.
    767 #
    768 # Since: 1.3
    769 ##
    770 { 'struct': 'RngProperties',
    771   'data': { '*opened': { 'type': 'bool', 'features': ['deprecated'] } } }
    772 
    773 ##
    774 # @RngEgdProperties:
    775 #
    776 # Properties for rng-egd objects.
    777 #
    778 # @chardev: the name of a character device backend that provides the connection
    779 #           to the RNG daemon
    780 #
    781 # Since: 1.3
    782 ##
    783 { 'struct': 'RngEgdProperties',
    784   'base': 'RngProperties',
    785   'data': { 'chardev': 'str' } }
    786 
    787 ##
    788 # @RngRandomProperties:
    789 #
    790 # Properties for rng-random objects.
    791 #
    792 # @filename: the filename of the device on the host to obtain entropy from
    793 #            (default: "/dev/urandom")
    794 #
    795 # Since: 1.3
    796 ##
    797 { 'struct': 'RngRandomProperties',
    798   'base': 'RngProperties',
    799   'data': { '*filename': 'str' } }
    800 
    801 ##
    802 # @SevGuestProperties:
    803 #
    804 # Properties for sev-guest objects.
    805 #
    806 # @sev-device: SEV device to use (default: "/dev/sev")
    807 #
    808 # @dh-cert-file: guest owners DH certificate (encoded with base64)
    809 #
    810 # @session-file: guest owners session parameters (encoded with base64)
    811 #
    812 # @policy: SEV policy value (default: 0x1)
    813 #
    814 # @handle: SEV firmware handle (default: 0)
    815 #
    816 # @cbitpos: C-bit location in page table entry (default: 0)
    817 #
    818 # @reduced-phys-bits: number of bits in physical addresses that become
    819 #                     unavailable when SEV is enabled
    820 #
    821 # @kernel-hashes: if true, add hashes of kernel/initrd/cmdline to a
    822 #                 designated guest firmware page for measured boot
    823 #                 with -kernel (default: false) (since 6.2)
    824 #
    825 # Since: 2.12
    826 ##
    827 { 'struct': 'SevGuestProperties',
    828   'data': { '*sev-device': 'str',
    829             '*dh-cert-file': 'str',
    830             '*session-file': 'str',
    831             '*policy': 'uint32',
    832             '*handle': 'uint32',
    833             '*cbitpos': 'uint32',
    834             'reduced-phys-bits': 'uint32',
    835             '*kernel-hashes': 'bool' } }
    836 
    837 ##
    838 # @ThreadContextProperties:
    839 #
    840 # Properties for thread context objects.
    841 #
    842 # @cpu-affinity: the list of host CPU numbers used as CPU affinity for all
    843 #                threads created in the thread context (default: QEMU main
    844 #                thread CPU affinity)
    845 #
    846 # @node-affinity: the list of host node numbers that will be resolved to a
    847 #                 list of host CPU numbers used as CPU affinity. This is a
    848 #                 shortcut for specifying the list of host CPU numbers
    849 #                 belonging to the host nodes manually by setting
    850 #                 @cpu-affinity. (default: QEMU main thread affinity)
    851 #
    852 # Since: 7.2
    853 ##
    854 { 'struct': 'ThreadContextProperties',
    855   'data': { '*cpu-affinity': ['uint16'],
    856             '*node-affinity': ['uint16'] } }
    857 
    858 
    859 ##
    860 # @ObjectType:
    861 #
    862 # Features:
    863 # @unstable: Member @x-remote-object is experimental.
    864 #
    865 # Since: 6.0
    866 ##
    867 { 'enum': 'ObjectType',
    868   'data': [
    869     'authz-list',
    870     'authz-listfile',
    871     'authz-pam',
    872     'authz-simple',
    873     'can-bus',
    874     { 'name': 'can-host-socketcan',
    875       'if': 'CONFIG_LINUX' },
    876     'colo-compare',
    877     'cryptodev-backend',
    878     'cryptodev-backend-builtin',
    879     'cryptodev-backend-lkcf',
    880     { 'name': 'cryptodev-vhost-user',
    881       'if': 'CONFIG_VHOST_CRYPTO' },
    882     'dbus-vmstate',
    883     'filter-buffer',
    884     'filter-dump',
    885     'filter-mirror',
    886     'filter-redirector',
    887     'filter-replay',
    888     'filter-rewriter',
    889     'input-barrier',
    890     { 'name': 'input-linux',
    891       'if': 'CONFIG_LINUX' },
    892     'iothread',
    893     'main-loop',
    894     { 'name': 'memory-backend-epc',
    895       'if': 'CONFIG_LINUX' },
    896     'memory-backend-file',
    897     { 'name': 'memory-backend-memfd',
    898       'if': 'CONFIG_LINUX' },
    899     'memory-backend-ram',
    900     'pef-guest',
    901     { 'name': 'pr-manager-helper',
    902       'if': 'CONFIG_LINUX' },
    903     'qtest',
    904     'rng-builtin',
    905     'rng-egd',
    906     { 'name': 'rng-random',
    907       'if': 'CONFIG_POSIX' },
    908     'secret',
    909     { 'name': 'secret_keyring',
    910       'if': 'CONFIG_SECRET_KEYRING' },
    911     'sev-guest',
    912     'thread-context',
    913     's390-pv-guest',
    914     'throttle-group',
    915     'tls-creds-anon',
    916     'tls-creds-psk',
    917     'tls-creds-x509',
    918     'tls-cipher-suites',
    919     { 'name': 'x-remote-object', 'features': [ 'unstable' ] },
    920     { 'name': 'x-vfio-user-server', 'features': [ 'unstable' ] }
    921   ] }
    922 
    923 ##
    924 # @ObjectOptions:
    925 #
    926 # Describes the options of a user creatable QOM object.
    927 #
    928 # @qom-type: the class name for the object to be created
    929 #
    930 # @id: the name of the new object
    931 #
    932 # Since: 6.0
    933 ##
    934 { 'union': 'ObjectOptions',
    935   'base': { 'qom-type': 'ObjectType',
    936             'id': 'str' },
    937   'discriminator': 'qom-type',
    938   'data': {
    939       'authz-list':                 'AuthZListProperties',
    940       'authz-listfile':             'AuthZListFileProperties',
    941       'authz-pam':                  'AuthZPAMProperties',
    942       'authz-simple':               'AuthZSimpleProperties',
    943       'can-host-socketcan':         { 'type': 'CanHostSocketcanProperties',
    944                                       'if': 'CONFIG_LINUX' },
    945       'colo-compare':               'ColoCompareProperties',
    946       'cryptodev-backend':          'CryptodevBackendProperties',
    947       'cryptodev-backend-builtin':  'CryptodevBackendProperties',
    948       'cryptodev-backend-lkcf':     'CryptodevBackendProperties',
    949       'cryptodev-vhost-user':       { 'type': 'CryptodevVhostUserProperties',
    950                                       'if': 'CONFIG_VHOST_CRYPTO' },
    951       'dbus-vmstate':               'DBusVMStateProperties',
    952       'filter-buffer':              'FilterBufferProperties',
    953       'filter-dump':                'FilterDumpProperties',
    954       'filter-mirror':              'FilterMirrorProperties',
    955       'filter-redirector':          'FilterRedirectorProperties',
    956       'filter-replay':              'NetfilterProperties',
    957       'filter-rewriter':            'FilterRewriterProperties',
    958       'input-barrier':              'InputBarrierProperties',
    959       'input-linux':                { 'type': 'InputLinuxProperties',
    960                                       'if': 'CONFIG_LINUX' },
    961       'iothread':                   'IothreadProperties',
    962       'main-loop':                  'MainLoopProperties',
    963       'memory-backend-epc':         { 'type': 'MemoryBackendEpcProperties',
    964                                       'if': 'CONFIG_LINUX' },
    965       'memory-backend-file':        'MemoryBackendFileProperties',
    966       'memory-backend-memfd':       { 'type': 'MemoryBackendMemfdProperties',
    967                                       'if': 'CONFIG_LINUX' },
    968       'memory-backend-ram':         'MemoryBackendProperties',
    969       'pr-manager-helper':          { 'type': 'PrManagerHelperProperties',
    970                                       'if': 'CONFIG_LINUX' },
    971       'qtest':                      'QtestProperties',
    972       'rng-builtin':                'RngProperties',
    973       'rng-egd':                    'RngEgdProperties',
    974       'rng-random':                 { 'type': 'RngRandomProperties',
    975                                       'if': 'CONFIG_POSIX' },
    976       'secret':                     'SecretProperties',
    977       'secret_keyring':             { 'type': 'SecretKeyringProperties',
    978                                       'if': 'CONFIG_SECRET_KEYRING' },
    979       'sev-guest':                  'SevGuestProperties',
    980       'thread-context':             'ThreadContextProperties',
    981       'throttle-group':             'ThrottleGroupProperties',
    982       'tls-creds-anon':             'TlsCredsAnonProperties',
    983       'tls-creds-psk':              'TlsCredsPskProperties',
    984       'tls-creds-x509':             'TlsCredsX509Properties',
    985       'tls-cipher-suites':          'TlsCredsProperties',
    986       'x-remote-object':            'RemoteObjectProperties',
    987       'x-vfio-user-server':         'VfioUserServerProperties'
    988   } }
    989 
    990 ##
    991 # @object-add:
    992 #
    993 # Create a QOM object.
    994 #
    995 # Returns: Nothing on success
    996 #          Error if @qom-type is not a valid class name
    997 #
    998 # Since: 2.0
    999 #
   1000 # Example:
   1001 #
   1002 # -> { "execute": "object-add",
   1003 #      "arguments": { "qom-type": "rng-random", "id": "rng1",
   1004 #                     "filename": "/dev/hwrng" } }
   1005 # <- { "return": {} }
   1006 #
   1007 ##
   1008 { 'command': 'object-add', 'data': 'ObjectOptions', 'boxed': true,
   1009   'allow-preconfig': true }
   1010 
   1011 ##
   1012 # @object-del:
   1013 #
   1014 # Remove a QOM object.
   1015 #
   1016 # @id: the name of the QOM object to remove
   1017 #
   1018 # Returns: Nothing on success
   1019 #          Error if @id is not a valid id for a QOM object
   1020 #
   1021 # Since: 2.0
   1022 #
   1023 # Example:
   1024 #
   1025 # -> { "execute": "object-del", "arguments": { "id": "rng1" } }
   1026 # <- { "return": {} }
   1027 #
   1028 ##
   1029 { 'command': 'object-del', 'data': {'id': 'str'},
   1030   'allow-preconfig': true }