cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

vhost-user.json (6459B)


      1# -*- Mode: Python -*-
      2# vim: filetype=python
      3#
      4# Copyright (C) 2018 Red Hat, Inc.
      5#
      6# Authors:
      7#  Marc-André Lureau <marcandre.lureau@redhat.com>
      8#
      9# This work is licensed under the terms of the GNU GPL, version 2 or
     10# later. See the COPYING file in the top-level directory.
     11
     12##
     13# = vhost user backend discovery & capabilities
     14##
     15
     16##
     17# @VHostUserBackendType:
     18#
     19# List the various vhost user backend types.
     20#
     21# @9p: 9p virtio console
     22# @balloon: virtio balloon
     23# @block: virtio block
     24# @caif: virtio caif
     25# @console: virtio console
     26# @crypto: virtio crypto
     27# @gpu: virtio gpu
     28# @input: virtio input
     29# @net: virtio net
     30# @rng: virtio rng
     31# @rpmsg: virtio remote processor messaging
     32# @rproc-serial: virtio remoteproc serial link
     33# @scsi: virtio scsi
     34# @vsock: virtio vsock transport
     35# @fs: virtio fs (since 4.2)
     36#
     37# Since: 4.0
     38##
     39{
     40  'enum': 'VHostUserBackendType',
     41  'data': [
     42      '9p',
     43      'balloon',
     44      'block',
     45      'caif',
     46      'console',
     47      'crypto',
     48      'gpu',
     49      'input',
     50      'net',
     51      'rng',
     52      'rpmsg',
     53      'rproc-serial',
     54      'scsi',
     55      'vsock',
     56      'fs'
     57  ]
     58}
     59
     60##
     61# @VHostUserBackendBlockFeature:
     62#
     63# List of vhost user "block" features.
     64#
     65# @read-only: The --read-only command line option is supported.
     66# @blk-file: The --blk-file command line option is supported.
     67#
     68# Since: 5.0
     69##
     70{
     71  'enum': 'VHostUserBackendBlockFeature',
     72  'data': [ 'read-only', 'blk-file' ]
     73}
     74
     75##
     76# @VHostUserBackendCapabilitiesBlock:
     77#
     78# Capabilities reported by vhost user "block" backends
     79#
     80# @features: list of supported features.
     81#
     82# Since: 5.0
     83##
     84{
     85  'struct': 'VHostUserBackendCapabilitiesBlock',
     86  'data': {
     87    'features': [ 'VHostUserBackendBlockFeature' ]
     88  }
     89}
     90
     91##
     92# @VHostUserBackendInputFeature:
     93#
     94# List of vhost user "input" features.
     95#
     96# @evdev-path: The --evdev-path command line option is supported.
     97# @no-grab: The --no-grab command line option is supported.
     98#
     99# Since: 4.0
    100##
    101{
    102  'enum': 'VHostUserBackendInputFeature',
    103  'data': [ 'evdev-path', 'no-grab' ]
    104}
    105
    106##
    107# @VHostUserBackendCapabilitiesInput:
    108#
    109# Capabilities reported by vhost user "input" backends
    110#
    111# @features: list of supported features.
    112#
    113# Since: 4.0
    114##
    115{
    116  'struct': 'VHostUserBackendCapabilitiesInput',
    117  'data': {
    118    'features': [ 'VHostUserBackendInputFeature' ]
    119  }
    120}
    121
    122##
    123# @VHostUserBackendGPUFeature:
    124#
    125# List of vhost user "gpu" features.
    126#
    127# @render-node: The --render-node command line option is supported.
    128# @virgl: The --virgl command line option is supported.
    129#
    130# Since: 4.0
    131##
    132{
    133  'enum': 'VHostUserBackendGPUFeature',
    134  'data': [ 'render-node', 'virgl' ]
    135}
    136
    137##
    138# @VHostUserBackendCapabilitiesGPU:
    139#
    140# Capabilities reported by vhost user "gpu" backends.
    141#
    142# @features: list of supported features.
    143#
    144# Since: 4.0
    145##
    146{
    147  'struct': 'VHostUserBackendCapabilitiesGPU',
    148  'data': {
    149    'features': [ 'VHostUserBackendGPUFeature' ]
    150  }
    151}
    152
    153##
    154# @VHostUserBackendCapabilities:
    155#
    156# Capabilities reported by vhost user backends.
    157#
    158# @type: The vhost user backend type.
    159#
    160# Since: 4.0
    161##
    162{
    163  'union': 'VHostUserBackendCapabilities',
    164  'base': { 'type': 'VHostUserBackendType' },
    165  'discriminator': 'type',
    166  'data': {
    167    'input': 'VHostUserBackendCapabilitiesInput',
    168    'gpu': 'VHostUserBackendCapabilitiesGPU'
    169  }
    170}
    171
    172##
    173# @VhostUserBackend:
    174#
    175# Describes a vhost user backend to management software.
    176#
    177# It is possible for multiple @VhostUserBackend elements to match the
    178# search criteria of management software. Applications thus need rules
    179# to pick one of the many matches, and users need the ability to
    180# override distro defaults.
    181#
    182# It is recommended to create vhost user backend JSON files (each
    183# containing a single @VhostUserBackend root element) with a
    184# double-digit prefix, for example "50-qemu-gpu.json",
    185# "50-crosvm-gpu.json", etc, so they can be sorted in predictable
    186# order. The backend JSON files should be searched for in three
    187# directories:
    188#
    189#   - /usr/share/qemu/vhost-user -- populated by distro-provided
    190#                                   packages (XDG_DATA_DIRS covers
    191#                                   /usr/share by default),
    192#
    193#   - /etc/qemu/vhost-user -- exclusively for sysadmins' local additions,
    194#
    195#   - $XDG_CONFIG_HOME/qemu/vhost-user -- exclusively for per-user local
    196#                                         additions (XDG_CONFIG_HOME
    197#                                         defaults to $HOME/.config).
    198#
    199# Top-down, the list of directories goes from general to specific.
    200#
    201# Management software should build a list of files from all three
    202# locations, then sort the list by filename (i.e., basename
    203# component). Management software should choose the first JSON file on
    204# the sorted list that matches the search criteria. If a more specific
    205# directory has a file with same name as a less specific directory,
    206# then the file in the more specific directory takes effect. If the
    207# more specific file is zero length, it hides the less specific one.
    208#
    209# For example, if a distro ships
    210#
    211#   - /usr/share/qemu/vhost-user/50-qemu-gpu.json
    212#
    213#   - /usr/share/qemu/vhost-user/50-crosvm-gpu.json
    214#
    215# then the sysadmin can prevent the default QEMU GPU being used at all with
    216#
    217#   $ touch /etc/qemu/vhost-user/50-qemu-gpu.json
    218#
    219# The sysadmin can replace/alter the distro default QEMU GPU with
    220#
    221#   $ vim /etc/qemu/vhost-user/50-qemu-gpu.json
    222#
    223# or they can provide a parallel QEMU GPU with higher priority
    224#
    225#   $ vim /etc/qemu/vhost-user/10-qemu-gpu.json
    226#
    227# or they can provide a parallel QEMU GPU with lower priority
    228#
    229#   $ vim /etc/qemu/vhost-user/99-qemu-gpu.json
    230#
    231# @type: The vhost user backend type.
    232#
    233# @description: Provides a human-readable description of the backend.
    234#               Management software may or may not display @description.
    235#
    236# @binary: Absolute path to the backend binary.
    237#
    238# @tags: An optional list of auxiliary strings associated with the
    239#        backend for which @description is not appropriate, due to the
    240#        latter's possible exposure to the end-user. @tags serves
    241#        development and debugging purposes only, and management
    242#        software shall explicitly ignore it.
    243#
    244# Since: 4.0
    245#
    246# Example:
    247#
    248# {
    249#   "description": "QEMU vhost-user-gpu",
    250#   "type": "gpu",
    251#   "binary": "/usr/libexec/qemu/vhost-user-gpu",
    252#   "tags": [
    253#     "CONFIG_OPENGL=y",
    254#     "CONFIG_GBM=y"
    255#   ]
    256# }
    257#
    258##
    259{
    260  'struct' : 'VhostUserBackend',
    261  'data'   : {
    262    'description': 'str',
    263    'type': 'VHostUserBackendType',
    264    'binary': 'str',
    265    '*tags': [ 'str' ]
    266  }
    267}