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

block-export.json (12041B)


      1# -*- Mode: Python -*-
      2# vim: filetype=python
      3
      4##
      5# == Block device exports
      6##
      7
      8{ 'include': 'sockets.json' }
      9
     10##
     11# @NbdServerOptions:
     12#
     13# Keep this type consistent with the nbd-server-start arguments. The only
     14# intended difference is using SocketAddress instead of SocketAddressLegacy.
     15#
     16# @addr: Address on which to listen.
     17# @tls-creds: ID of the TLS credentials object (since 2.6).
     18# @tls-authz: ID of the QAuthZ authorization object used to validate
     19#             the client's x509 distinguished name. This object is
     20#             is only resolved at time of use, so can be deleted and
     21#             recreated on the fly while the NBD server is active.
     22#             If missing, it will default to denying access (since 4.0).
     23# @max-connections: The maximum number of connections to allow at the same
     24#                   time, 0 for unlimited. (since 5.2; default: 0)
     25#
     26# Since: 4.2
     27##
     28{ 'struct': 'NbdServerOptions',
     29  'data': { 'addr': 'SocketAddress',
     30            '*tls-creds': 'str',
     31            '*tls-authz': 'str',
     32            '*max-connections': 'uint32' } }
     33
     34##
     35# @nbd-server-start:
     36#
     37# Start an NBD server listening on the given host and port.  Block
     38# devices can then be exported using @nbd-server-add.  The NBD
     39# server will present them as named exports; for example, another
     40# QEMU instance could refer to them as "nbd:HOST:PORT:exportname=NAME".
     41#
     42# Keep this type consistent with the NbdServerOptions type. The only intended
     43# difference is using SocketAddressLegacy instead of SocketAddress.
     44#
     45# @addr: Address on which to listen.
     46# @tls-creds: ID of the TLS credentials object (since 2.6).
     47# @tls-authz: ID of the QAuthZ authorization object used to validate
     48#             the client's x509 distinguished name. This object is
     49#             is only resolved at time of use, so can be deleted and
     50#             recreated on the fly while the NBD server is active.
     51#             If missing, it will default to denying access (since 4.0).
     52# @max-connections: The maximum number of connections to allow at the same
     53#                   time, 0 for unlimited. (since 5.2; default: 0)
     54#
     55# Returns: error if the server is already running.
     56#
     57# Since: 1.3
     58##
     59{ 'command': 'nbd-server-start',
     60  'data': { 'addr': 'SocketAddressLegacy',
     61            '*tls-creds': 'str',
     62            '*tls-authz': 'str',
     63            '*max-connections': 'uint32' } }
     64
     65##
     66# @BlockExportOptionsNbdBase:
     67#
     68# An NBD block export (common options shared between nbd-server-add and
     69# the NBD branch of block-export-add).
     70#
     71# @name: Export name. If unspecified, the @device parameter is used as the
     72#        export name. (Since 2.12)
     73#
     74# @description: Free-form description of the export, up to 4096 bytes.
     75#               (Since 5.0)
     76#
     77# Since: 5.0
     78##
     79{ 'struct': 'BlockExportOptionsNbdBase',
     80  'data': { '*name': 'str', '*description': 'str' } }
     81
     82##
     83# @BlockExportOptionsNbd:
     84#
     85# An NBD block export (distinct options used in the NBD branch of
     86# block-export-add).
     87#
     88# @bitmaps: Also export each of the named dirty bitmaps reachable from
     89#           @device, so the NBD client can use NBD_OPT_SET_META_CONTEXT with
     90#           the metadata context name "qemu:dirty-bitmap:BITMAP" to inspect
     91#           each bitmap.
     92#
     93# @allocation-depth: Also export the allocation depth map for @device, so
     94#                    the NBD client can use NBD_OPT_SET_META_CONTEXT with
     95#                    the metadata context name "qemu:allocation-depth" to
     96#                    inspect allocation details. (since 5.2)
     97#
     98# Since: 5.2
     99##
    100{ 'struct': 'BlockExportOptionsNbd',
    101  'base': 'BlockExportOptionsNbdBase',
    102  'data': { '*bitmaps': ['str'], '*allocation-depth': 'bool' } }
    103
    104##
    105# @BlockExportOptionsVhostUserBlk:
    106#
    107# A vhost-user-blk block export.
    108#
    109# @addr: The vhost-user socket on which to listen. Both 'unix' and 'fd'
    110#        SocketAddress types are supported. Passed fds must be UNIX domain
    111#        sockets.
    112# @logical-block-size: Logical block size in bytes. Defaults to 512 bytes.
    113# @num-queues: Number of request virtqueues. Must be greater than 0. Defaults
    114#              to 1.
    115#
    116# Since: 5.2
    117##
    118{ 'struct': 'BlockExportOptionsVhostUserBlk',
    119  'data': { 'addr': 'SocketAddress',
    120	    '*logical-block-size': 'size',
    121            '*num-queues': 'uint16'} }
    122
    123##
    124# @FuseExportAllowOther:
    125#
    126# Possible allow_other modes for FUSE exports.
    127#
    128# @off: Do not pass allow_other as a mount option.
    129#
    130# @on: Pass allow_other as a mount option.
    131#
    132# @auto: Try mounting with allow_other first, and if that fails, retry
    133#        without allow_other.
    134#
    135# Since: 6.1
    136##
    137{ 'enum': 'FuseExportAllowOther',
    138  'data': ['off', 'on', 'auto'] }
    139
    140##
    141# @BlockExportOptionsFuse:
    142#
    143# Options for exporting a block graph node on some (file) mountpoint
    144# as a raw image.
    145#
    146# @mountpoint: Path on which to export the block device via FUSE.
    147#              This must point to an existing regular file.
    148#
    149# @growable: Whether writes beyond the EOF should grow the block node
    150#            accordingly. (default: false)
    151#
    152# @allow-other: If this is off, only qemu's user is allowed access to
    153#               this export.  That cannot be changed even with chmod or
    154#               chown.
    155#               Enabling this option will allow other users access to
    156#               the export with the FUSE mount option "allow_other".
    157#               Note that using allow_other as a non-root user requires
    158#               user_allow_other to be enabled in the global fuse.conf
    159#               configuration file.
    160#               In auto mode (the default), the FUSE export driver will
    161#               first attempt to mount the export with allow_other, and
    162#               if that fails, try again without.
    163#               (since 6.1; default: auto)
    164#
    165# Since: 6.0
    166##
    167{ 'struct': 'BlockExportOptionsFuse',
    168  'data': { 'mountpoint': 'str',
    169            '*growable': 'bool',
    170            '*allow-other': 'FuseExportAllowOther' },
    171  'if': 'CONFIG_FUSE' }
    172
    173##
    174# @NbdServerAddOptions:
    175#
    176# An NBD block export, per legacy nbd-server-add command.
    177#
    178# @device: The device name or node name of the node to be exported
    179#
    180# @writable: Whether clients should be able to write to the device via the
    181#            NBD connection (default false).
    182#
    183# @bitmap: Also export a single dirty bitmap reachable from @device, so the
    184#          NBD client can use NBD_OPT_SET_META_CONTEXT with the metadata
    185#          context name "qemu:dirty-bitmap:BITMAP" to inspect the bitmap
    186#          (since 4.0).
    187#
    188# Since: 5.0
    189##
    190{ 'struct': 'NbdServerAddOptions',
    191  'base': 'BlockExportOptionsNbdBase',
    192  'data': { 'device': 'str',
    193            '*writable': 'bool', '*bitmap': 'str' } }
    194
    195##
    196# @nbd-server-add:
    197#
    198# Export a block node to QEMU's embedded NBD server.
    199#
    200# The export name will be used as the id for the resulting block export.
    201#
    202# Features:
    203# @deprecated: This command is deprecated. Use @block-export-add instead.
    204#
    205# Returns: error if the server is not running, or export with the same name
    206#          already exists.
    207#
    208# Since: 1.3
    209##
    210{ 'command': 'nbd-server-add',
    211  'data': 'NbdServerAddOptions', 'boxed': true, 'features': ['deprecated'] }
    212
    213##
    214# @BlockExportRemoveMode:
    215#
    216# Mode for removing a block export.
    217#
    218# @safe: Remove export if there are no existing connections, fail otherwise.
    219#
    220# @hard: Drop all connections immediately and remove export.
    221#
    222# Potential additional modes to be added in the future:
    223#
    224# hide: Just hide export from new clients, leave existing connections as is.
    225# Remove export after all clients are disconnected.
    226#
    227# soft: Hide export from new clients, answer with ESHUTDOWN for all further
    228# requests from existing clients.
    229#
    230# Since: 2.12
    231##
    232{'enum': 'BlockExportRemoveMode', 'data': ['safe', 'hard']}
    233
    234##
    235# @nbd-server-remove:
    236#
    237# Remove NBD export by name.
    238#
    239# @name: Block export id.
    240#
    241# @mode: Mode of command operation. See @BlockExportRemoveMode description.
    242#        Default is 'safe'.
    243#
    244# Features:
    245# @deprecated: This command is deprecated. Use @block-export-del instead.
    246#
    247# Returns: error if
    248#            - the server is not running
    249#            - export is not found
    250#            - mode is 'safe' and there are existing connections
    251#
    252# Since: 2.12
    253##
    254{ 'command': 'nbd-server-remove',
    255  'data': {'name': 'str', '*mode': 'BlockExportRemoveMode'},
    256  'features': ['deprecated'] }
    257
    258##
    259# @nbd-server-stop:
    260#
    261# Stop QEMU's embedded NBD server, and unregister all devices previously
    262# added via @nbd-server-add.
    263#
    264# Since: 1.3
    265##
    266{ 'command': 'nbd-server-stop' }
    267
    268##
    269# @BlockExportType:
    270#
    271# An enumeration of block export types
    272#
    273# @nbd: NBD export
    274# @vhost-user-blk: vhost-user-blk export (since 5.2)
    275# @fuse: FUSE export (since: 6.0)
    276#
    277# Since: 4.2
    278##
    279{ 'enum': 'BlockExportType',
    280  'data': [ 'nbd', 'vhost-user-blk',
    281            { 'name': 'fuse', 'if': 'CONFIG_FUSE' } ] }
    282
    283##
    284# @BlockExportOptions:
    285#
    286# Describes a block export, i.e. how single node should be exported on an
    287# external interface.
    288#
    289# @id: A unique identifier for the block export (across all export types)
    290#
    291# @node-name: The node name of the block node to be exported (since: 5.2)
    292#
    293# @writable: True if clients should be able to write to the export
    294#            (default false)
    295#
    296# @writethrough: If true, caches are flushed after every write request to the
    297#                export before completion is signalled. (since: 5.2;
    298#                default: false)
    299#
    300# @iothread: The name of the iothread object where the export will run. The
    301#            default is to use the thread currently associated with the
    302#            block node. (since: 5.2)
    303#
    304# @fixed-iothread: True prevents the block node from being moved to another
    305#                  thread while the export is active. If true and @iothread is
    306#                  given, export creation fails if the block node cannot be
    307#                  moved to the iothread. The default is false. (since: 5.2)
    308#
    309# Since: 4.2
    310##
    311{ 'union': 'BlockExportOptions',
    312  'base': { 'type': 'BlockExportType',
    313            'id': 'str',
    314            '*fixed-iothread': 'bool',
    315            '*iothread': 'str',
    316            'node-name': 'str',
    317            '*writable': 'bool',
    318            '*writethrough': 'bool' },
    319  'discriminator': 'type',
    320  'data': {
    321      'nbd': 'BlockExportOptionsNbd',
    322      'vhost-user-blk': 'BlockExportOptionsVhostUserBlk',
    323      'fuse': { 'type': 'BlockExportOptionsFuse',
    324                'if': 'CONFIG_FUSE' }
    325   } }
    326
    327##
    328# @block-export-add:
    329#
    330# Creates a new block export.
    331#
    332# Since: 5.2
    333##
    334{ 'command': 'block-export-add',
    335  'data': 'BlockExportOptions', 'boxed': true }
    336
    337##
    338# @block-export-del:
    339#
    340# Request to remove a block export. This drops the user's reference to the
    341# export, but the export may still stay around after this command returns until
    342# the shutdown of the export has completed.
    343#
    344# @id: Block export id.
    345#
    346# @mode: Mode of command operation. See @BlockExportRemoveMode description.
    347#        Default is 'safe'.
    348#
    349# Returns: Error if the export is not found or @mode is 'safe' and the export
    350#          is still in use (e.g. by existing client connections)
    351#
    352# Since: 5.2
    353##
    354{ 'command': 'block-export-del',
    355  'data': { 'id': 'str', '*mode': 'BlockExportRemoveMode' } }
    356
    357##
    358# @BLOCK_EXPORT_DELETED:
    359#
    360# Emitted when a block export is removed and its id can be reused.
    361#
    362# @id: Block export id.
    363#
    364# Since: 5.2
    365##
    366{ 'event': 'BLOCK_EXPORT_DELETED',
    367  'data': { 'id': 'str' } }
    368
    369##
    370# @BlockExportInfo:
    371#
    372# Information about a single block export.
    373#
    374# @id: The unique identifier for the block export
    375#
    376# @type: The block export type
    377#
    378# @node-name: The node name of the block node that is exported
    379#
    380# @shutting-down: True if the export is shutting down (e.g. after a
    381#                 block-export-del command, but before the shutdown has
    382#                 completed)
    383#
    384# Since:  5.2
    385##
    386{ 'struct': 'BlockExportInfo',
    387  'data': { 'id': 'str',
    388            'type': 'BlockExportType',
    389            'node-name': 'str',
    390            'shutting-down': 'bool' } }
    391
    392##
    393# @query-block-exports:
    394#
    395# Returns: A list of BlockExportInfo describing all block exports
    396#
    397# Since: 5.2
    398##
    399{ 'command': 'query-block-exports', 'returns': ['BlockExportInfo'] }