# -*- Mode: Python -*-
# vim: filetype=python

##
# Block device exports
# ====================
##

{ 'include': 'sockets.json' }
{ 'include': 'block-core.json' }

##
# @NbdServerOptionsBase:
#
# @handshake-max-seconds: Time limit, in seconds, at which a client
#     that has not completed the negotiation handshake will be
#     disconnected, or 0 for no limit (since 10.0; default: 10).
#
# @tls-creds: ID of the TLS credentials object (since 2.6).
#
# @tls-authz: ID of the QAuthZ authorization object used to validate
#     the client's x509 distinguished name.  This object is is only
#     resolved at time of use, so can be deleted and recreated on the
#     fly while the NBD server is active.  If missing, it will default
#     to denying access (since 4.0).
#
# @max-connections: The maximum number of connections to allow at the
#     same time, 0 for unlimited.  Setting this to 1 also stops the
#     server from advertising multiple client support (since 5.2;
#     default: 100).
##
{ 'struct': 'NbdServerOptionsBase',
  'data': { '*handshake-max-seconds': 'uint32',
            '*tls-creds': 'str',
            '*tls-authz': 'str',
            '*max-connections': 'uint32' } }

##
# @NbdServerOptions:
#
# Keep this type consistent with the `NbdServerOptionsLegacy` type.
# The only intended difference is using `SocketAddress` instead of
# `SocketAddressLegacy`.
#
# @addr: Address on which to listen (since 4.2).
##
{ 'struct': 'NbdServerOptions',
  'base': 'NbdServerOptionsBase',
  'data': { 'addr': 'SocketAddress' } }

##
# @NbdServerOptionsLegacy:
#
# Keep this type consistent with the `NbdServerOptions` type.  The
# only intended difference is using `SocketAddressLegacy` instead of
# `SocketAddress`.
#
# @addr: Address on which to listen (since 1.3).
##
{ 'struct': 'NbdServerOptionsLegacy',
  'base': 'NbdServerOptionsBase',
  'data': { 'addr': 'SocketAddressLegacy' } }

##
# @nbd-server-start:
#
# Start an NBD server listening on the given host and port.  Block
# devices can then be exported using `nbd-server-add`.  The NBD server
# will present them as named exports; for example, another QEMU
# instance could refer to them as "nbd:HOST:PORT:exportname=NAME".
#
# Errors:
#     - if the server is already running
#
# Since: 1.3
##
{ 'command': 'nbd-server-start',
  'data': 'NbdServerOptionsLegacy',
  'allow-preconfig': true }

##
# @BlockExportOptionsNbdBase:
#
# An NBD block export (common options shared between `nbd-server-add`
# and the NBD branch of `block-export-add`).
#
# @name: Export name.  If unspecified, the @device parameter is used
#     as the export name.  (Since 2.12)
#
# @description: Free-form description of the export, up to 4096 bytes.
#     (Since 5.0)
#
# Since: 5.0
##
{ 'struct': 'BlockExportOptionsNbdBase',
  'data': { '*name': 'str', '*description': 'str' } }

##
# @BlockExportOptionsNbd:
#
# An NBD block export (distinct options used in the NBD branch of
# `block-export-add`).
#
# @bitmaps: Also export each of the named dirty bitmaps reachable from
#     @device, so the NBD client can use NBD_OPT_SET_META_CONTEXT with
#     the metadata context name "qemu:dirty-bitmap:BITMAP" to inspect
#     each bitmap.  Since 7.1 bitmap may be specified by node/name
#     pair.
#
# @allocation-depth: Also export the allocation depth map for @device,
#     so the NBD client can use NBD_OPT_SET_META_CONTEXT with the
#     metadata context name "qemu:allocation-depth" to inspect
#     allocation details.  (since 5.2)
#
# Since: 5.2
##
{ 'struct': 'BlockExportOptionsNbd',
  'base': 'BlockExportOptionsNbdBase',
  'data': { '*bitmaps': ['BlockDirtyBitmapOrStr'],
            '*allocation-depth': 'bool' } }

##
# @BlockExportOptionsVhostUserBlk:
#
# A vhost-user-blk block export.
#
# @addr: The vhost-user socket on which to listen.  Both 'unix' and
#     'fd' `SocketAddress` types are supported.  Passed fds must be
#     UNIX domain sockets.
#
# @logical-block-size: Logical block size in bytes.  Defaults to 512
#     bytes.
#
# @num-queues: Number of request virtqueues.  Must be greater than 0.
#     Defaults to 1.
#
# Since: 5.2
##
{ 'struct': 'BlockExportOptionsVhostUserBlk',
  'data': { 'addr': 'SocketAddress',
	    '*logical-block-size': 'size',
            '*num-queues': 'uint16'} }

##
# @FuseExportAllowOther:
#
# Possible allow_other modes for FUSE exports.
#
# @off: Do not pass allow_other as a mount option.
#
# @on: Pass allow_other as a mount option.
#
# @auto: Try mounting with allow_other first, and if that fails, retry
#     without allow_other.
#
# Since: 6.1
##
{ 'enum': 'FuseExportAllowOther',
  'data': ['off', 'on', 'auto'] }

##
# @BlockExportOptionsFuse:
#
# Options for exporting a block graph node on some (file) mountpoint
# as a raw image.
#
# @mountpoint: Path on which to export the block device via FUSE.
#     This must point to an existing regular file.
#
# @growable: Whether writes beyond the EOF should grow the block node
#     accordingly.  (default: false)
#
# @allow-other: If this is off, only QEMU's user is allowed access to
#     this export.  That cannot be changed even with chmod or chown.
#     Enabling this option will allow other users access to the export
#     with the FUSE mount option "allow_other".  Note that using
#     allow_other as a non-root user requires user_allow_other to be
#     enabled in the global fuse.conf configuration file.  In auto
#     mode (the default), the FUSE export driver will first attempt to
#     mount the export with allow_other, and if that fails, try again
#     without.  (since 6.1; default: auto)
#
# Since: 6.0
##
{ 'struct': 'BlockExportOptionsFuse',
  'data': { 'mountpoint': 'str',
            '*growable': 'bool',
            '*allow-other': 'FuseExportAllowOther' },
  'if': 'CONFIG_FUSE' }

##
# @BlockExportOptionsVduseBlk:
#
# A vduse-blk block export.
#
# @name: the name of VDUSE device (must be unique across the host).
#
# @num-queues: the number of virtqueues.  Defaults to 1.
#
# @queue-size: the size of virtqueue.  Defaults to 256.
#
# @logical-block-size: Logical block size in bytes.  Range [512,
#     PAGE_SIZE] and must be power of 2.  Defaults to 512 bytes.
#
# @serial: the serial number of virtio block device.  Defaults to
#     empty string.
#
# Since: 7.1
##
{ 'struct': 'BlockExportOptionsVduseBlk',
  'data': { 'name': 'str',
            '*num-queues': 'uint16',
            '*queue-size': 'uint16',
            '*logical-block-size': 'size',
            '*serial': 'str' } }

##
# @NbdServerAddOptions:
#
# An NBD block export, per legacy `nbd-server-add` command.
#
# @device: The device name or node name of the node to be exported
#
# @writable: Whether clients should be able to write to the device via
#     the NBD connection (default false).
#
# @bitmap: Also export a single dirty bitmap reachable from @device,
#     so the NBD client can use NBD_OPT_SET_META_CONTEXT with the
#     metadata context name "qemu:dirty-bitmap:BITMAP" to inspect the
#     bitmap (since 4.0).
#
# Since: 5.0
##
{ 'struct': 'NbdServerAddOptions',
  'base': 'BlockExportOptionsNbdBase',
  'data': { 'device': 'str',
            '*writable': 'bool', '*bitmap': 'str' } }

##
# @nbd-server-add:
#
# Export a block node to QEMU's embedded NBD server.
#
# The export name will be used as the id for the resulting block
# export.
#
# Features:
#
# @deprecated: This command is deprecated.  Use `block-export-add`
#     instead.
#
# Errors:
#     - if the server is not running
#     - if an export with the same name already exists
#
# Since: 1.3
##
{ 'command': 'nbd-server-add',
  'data': 'NbdServerAddOptions', 'boxed': true, 'features': ['deprecated'],
  'allow-preconfig': true }

##
# @BlockExportRemoveMode:
#
# Mode for removing a block export.
#
# @safe: Remove export if there are no existing connections, fail
#     otherwise.
#
# @hard: Drop all connections immediately and remove export.
#
# TODO: Potential additional modes to be added in the future:
#
#     - hide: Just hide export from new clients, leave existing
#       connections as is.  Remove export after all clients are
#       disconnected.
#
#     - soft: Hide export from new clients, answer with ESHUTDOWN for
#       all further requests from existing clients.
#
# Since: 2.12
##
{'enum': 'BlockExportRemoveMode', 'data': ['safe', 'hard']}

##
# @nbd-server-remove:
#
# Remove NBD export by name.
#
# @name: Block export id.
#
# @mode: Mode of command operation.  See `BlockExportRemoveMode`
#     description.  Default is 'safe'.
#
# Features:
#
# @deprecated: This command is deprecated.  Use `block-export-del`
#     instead.
#
# Errors:
#     - if the server is not running
#     - if export is not found
#     - if mode is 'safe' and there are existing connections
#
# Since: 2.12
##
{ 'command': 'nbd-server-remove',
  'data': {'name': 'str', '*mode': 'BlockExportRemoveMode'},
  'features': ['deprecated'],
  'allow-preconfig': true }

##
# @nbd-server-stop:
#
# Stop QEMU's embedded NBD server, and unregister all devices
# previously added via `nbd-server-add`.
#
# Since: 1.3
##
{ 'command': 'nbd-server-stop',
  'allow-preconfig': true }

##
# @BlockExportType:
#
# An enumeration of block export types
#
# @nbd: NBD export
#
# @vhost-user-blk: vhost-user-blk export (since 5.2)
#
# @fuse: FUSE export (since: 6.0)
#
# @vduse-blk: vduse-blk export (since 7.1)
#
# Since: 4.2
##
{ 'enum': 'BlockExportType',
  'data': [ 'nbd',
            { 'name': 'vhost-user-blk',
              'if': 'CONFIG_VHOST_USER_BLK_SERVER' },
            { 'name': 'fuse', 'if': 'CONFIG_FUSE' },
            { 'name': 'vduse-blk', 'if': 'CONFIG_VDUSE_BLK_EXPORT' } ] }

##
# @BlockExportOptions:
#
# Describes a block export, i.e. how single node should be exported on
# an external interface.
#
# @type: Block export type
#
# @id: A unique identifier for the block export (across all export
#     types)
#
# @node-name: The node name of the block node to be exported
#     (since: 5.2)
#
# @writable: True if clients should be able to write to the export
#     (default false)
#
# @writethrough: If true, caches are flushed after every write request
#     to the export before completion is signalled.  (since: 5.2;
#     default: false)
#
# @iothread: The name of the iothread object where the export will
#     run.  The default is to use the thread currently associated with
#     the block node.  (since: 5.2)
#
# @fixed-iothread: True prevents the block node from being moved to
#     another thread while the export is active.  If true and
#     @iothread is given, export creation fails if the block node
#     cannot be moved to the iothread.  The default is false.
#     (since: 5.2)
#
# @allow-inactive: If true, the export allows the exported node to be
#     inactive.  If it is created for an inactive block node, the node
#     remains inactive.  If the export type doesn't support running on
#     an inactive node, an error is returned.  If false, inactive
#     block nodes are automatically activated before creating the
#     export and trying to inactivate them later fails.
#     (since: 10.0; default: false)
#
# Since: 4.2
##
{ 'union': 'BlockExportOptions',
  'base': { 'type': 'BlockExportType',
            'id': 'str',
            '*fixed-iothread': 'bool',
            '*iothread': 'str',
            'node-name': 'str',
            '*writable': 'bool',
            '*writethrough': 'bool',
            '*allow-inactive': 'bool' },
  'discriminator': 'type',
  'data': {
      'nbd': 'BlockExportOptionsNbd',
      'vhost-user-blk': { 'type': 'BlockExportOptionsVhostUserBlk',
                          'if': 'CONFIG_VHOST_USER_BLK_SERVER' },
      'fuse': { 'type': 'BlockExportOptionsFuse',
                'if': 'CONFIG_FUSE' },
      'vduse-blk': { 'type': 'BlockExportOptionsVduseBlk',
                     'if': 'CONFIG_VDUSE_BLK_EXPORT' }
   } }

##
# @block-export-add:
#
# Creates a new block export.
#
# Since: 5.2
##
{ 'command': 'block-export-add',
  'data': 'BlockExportOptions', 'boxed': true,
  'allow-preconfig': true }

##
# @block-export-del:
#
# Request to remove a block export.  This drops the user's reference
# to the export, but the export may still stay around after this
# command returns until the shutdown of the export has completed.
#
# @id: Block export id.
#
# @mode: Mode of command operation.  See `BlockExportRemoveMode`
#     description.  Default is 'safe'.
#
# Errors:
#     - if the export is not found
#     - if @mode is 'safe' and the export is still in use (e.g. by
#       existing client connections)
#
# Since: 5.2
##
{ 'command': 'block-export-del',
  'data': { 'id': 'str', '*mode': 'BlockExportRemoveMode' },
  'allow-preconfig': true }

##
# @BLOCK_EXPORT_DELETED:
#
# Emitted when a block export is removed and its id can be reused.
#
# @id: Block export id.
#
# Since: 5.2
##
{ 'event': 'BLOCK_EXPORT_DELETED',
  'data': { 'id': 'str' } }

##
# @BlockExportInfo:
#
# Information about a single block export.
#
# @id: The unique identifier for the block export
#
# @type: The block export type
#
# @node-name: The node name of the block node that is exported
#
# @shutting-down: True if the export is shutting down (e.g. after a
#     `block-export-del` command, but before the shutdown has
#     completed)
#
# Since: 5.2
##
{ 'struct': 'BlockExportInfo',
  'data': { 'id': 'str',
            'type': 'BlockExportType',
            'node-name': 'str',
            'shutting-down': 'bool' } }

##
# @query-block-exports:
#
# Returns: A list describing all block exports
#
# Since: 5.2
##
{ 'command': 'query-block-exports', 'returns': ['BlockExportInfo'],
  'allow-preconfig': true }
