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

##
# == Block device exports
##

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

##
# @NbdServerOptions:
#
# Keep this type consistent with the nbd-server-start arguments.  The
# only intended difference is using SocketAddress instead of
# SocketAddressLegacy.
#
# @addr: Address on which to listen.
#
# @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)
#
# Since: 4.2
##
{ 'struct': 'NbdServerOptions',
  'data': { 'addr': 'SocketAddress',
            '*tls-creds': 'str',
            '*tls-authz': 'str',
            '*max-connections': 'uint32' } }

##
# @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".
#
# Keep this type consistent with the NbdServerOptions type.  The only
# intended difference is using SocketAddressLegacy instead of
# SocketAddress.
#
# @addr: Address on which to listen.
#
# @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).
#
# Errors:
#     - if the server is already running
#
# Since: 1.3
##
{ 'command': 'nbd-server-start',
  'data': { 'addr': 'SocketAddressLegacy',
            '*tls-creds': 'str',
            '*tls-authz': 'str',
            '*max-connections': 'uint32' },
  '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)
#
# Since: 4.2
##
{ 'union': 'BlockExportOptions',
  'base': { 'type': 'BlockExportType',
            'id': 'str',
            '*fixed-iothread': 'bool',
            '*iothread': 'str',
            'node-name': 'str',
            '*writable': 'bool',
            '*writethrough': '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 of BlockExportInfo describing all block exports
#
# Since: 5.2
##
{ 'command': 'query-block-exports', 'returns': ['BlockExportInfo'],
  'allow-preconfig': true }
