blob: de079d31fd8d37632ef1c8f261302f5d375b0270 [file] [log] [blame]
Peter Maydell8dac93a2024-08-09 17:37:54 +01001QEMU NBD protocol support
2=========================
3
4QEMU supports the NBD protocol, and has an internal NBD client (see
5``block/nbd.c``), an internal NBD server (see ``blockdev-nbd.c``), and an
6external NBD server tool (see ``qemu-nbd.c``). The common code is placed
7in ``nbd/*``.
8
9The NBD protocol is specified here:
10https://github.com/NetworkBlockDevice/nbd/blob/master/doc/proto.md
11
12The following paragraphs describe some specific properties of NBD
13protocol realization in QEMU.
14
15Metadata namespaces
16-------------------
17
18QEMU supports the ``base:allocation`` metadata context as defined in the
19NBD protocol specification, and also defines an additional metadata
20namespace ``qemu``.
21
22``qemu`` namespace
23------------------
24
25The ``qemu`` namespace currently contains two available metadata context
26types. The first is related to exposing the contents of a dirty
27bitmap alongside the associated disk contents. That metadata context
28is named with the following form::
29
30 qemu:dirty-bitmap:<dirty-bitmap-export-name>
31
32Each dirty-bitmap metadata context defines only one flag for extents
33in reply for ``NBD_CMD_BLOCK_STATUS``:
34
35bit 0:
36 ``NBD_STATE_DIRTY``, set when the extent is "dirty"
37
38The second is related to exposing the source of various extents within
39the image, with a single metadata context named::
40
41 qemu:allocation-depth
42
43In the allocation depth context, the entire 32-bit value represents a
44depth of which layer in a thin-provisioned backing chain provided the
45data (0 for unallocated, 1 for the active layer, 2 for the first
46backing layer, and so forth).
47
48For ``NBD_OPT_LIST_META_CONTEXT`` the following queries are supported
49in addition to the specific ``qemu:allocation-depth`` and
50``qemu:dirty-bitmap:<dirty-bitmap-export-name>``:
51
52``qemu:``
53 returns list of all available metadata contexts in the namespace
54``qemu:dirty-bitmap:``
55 returns list of all available dirty-bitmap metadata contexts
56
57Features by version
58-------------------
59
60The following list documents which qemu version first implemented
61various features (both as a server exposing the feature, and as a
62client taking advantage of the feature when present), to make it
63easier to plan for cross-version interoperability. Note that in
64several cases, the initial release containing a feature may require
65additional patches from the corresponding stable branch to fix bugs in
66the operation of that feature.
67
682.6
69 ``NBD_OPT_STARTTLS`` with TLS X.509 Certificates
702.8
71 ``NBD_CMD_WRITE_ZEROES``
722.10
73 ``NBD_OPT_GO``, ``NBD_INFO_BLOCK``
742.11
75 ``NBD_OPT_STRUCTURED_REPLY``
762.12
77 ``NBD_CMD_BLOCK_STATUS`` for ``base:allocation``
783.0
79 ``NBD_OPT_STARTTLS`` with TLS Pre-Shared Keys (PSK),
80 ``NBD_CMD_BLOCK_STATUS`` for ``qemu:dirty-bitmap:``, ``NBD_CMD_CACHE``
814.2
82 ``NBD_FLAG_CAN_MULTI_CONN`` for shareable read-only exports,
83 ``NBD_CMD_FLAG_FAST_ZERO``
845.2
85 ``NBD_CMD_BLOCK_STATUS`` for ``qemu:allocation-depth``
867.1
87 ``NBD_FLAG_CAN_MULTI_CONN`` for shareable writable exports
888.2
89 ``NBD_OPT_EXTENDED_HEADERS``, ``NBD_FLAG_BLOCK_STATUS_PAYLOAD``