It can be useful to figure out which NBD protocol features are exposed by a server, as well as what features a client will take advantage of if available, for a given qemu release. It's not always precise to base features on version numbers (thanks to downstream backports), but any documentation is better than making users search through git logs themselves. This patch originally stemmed from a request to document that pristine 3.0 has a known bug where NBD_OPT_LIST_META_CONTEXT with 0 queries forgot to advertise an available "qemu:dirty-bitmap" context, but documenting bugs like this (or the fact that 3.0 also botched NBD_CMD_CACHE) gets to be too much details, especially since buggy releases will be less likely connection targets over time. Instead, I chose to just remind users to check stable release branches. Suggested-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> Signed-off-by: Eric Blake <eblake@redhat.com> Message-Id: <20181215135324.152629-3-eblake@redhat.com> Reviewed-by: Richard W.M. Jones <rjones@redhat.com> Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
56 lines
2.1 KiB
Plaintext
56 lines
2.1 KiB
Plaintext
Qemu supports the NBD protocol, and has an internal NBD client (see
|
|
block/nbd.c), an internal NBD server (see blockdev-nbd.c), and an
|
|
external NBD server tool (see qemu-nbd.c). The common code is placed
|
|
in nbd/*.
|
|
|
|
The NBD protocol is specified here:
|
|
https://github.com/NetworkBlockDevice/nbd/blob/master/doc/proto.md
|
|
|
|
The following paragraphs describe some specific properties of NBD
|
|
protocol realization in Qemu.
|
|
|
|
= Metadata namespaces =
|
|
|
|
Qemu supports the "base:allocation" metadata context as defined in the
|
|
NBD protocol specification, and also defines an additional metadata
|
|
namespace "qemu".
|
|
|
|
== "qemu" namespace ==
|
|
|
|
The "qemu" namespace currently contains only one type of context,
|
|
related to exposing the contents of a dirty bitmap alongside the
|
|
associated disk contents. That context has the following form:
|
|
|
|
qemu:dirty-bitmap:<dirty-bitmap-export-name>
|
|
|
|
Each dirty-bitmap metadata context defines only one flag for extents
|
|
in reply for NBD_CMD_BLOCK_STATUS:
|
|
|
|
bit 0: NBD_STATE_DIRTY, means that the extent is "dirty"
|
|
|
|
For NBD_OPT_LIST_META_CONTEXT the following queries are supported
|
|
in addition to "qemu:dirty-bitmap:<dirty-bitmap-export-name>":
|
|
|
|
* "qemu:" - returns list of all available metadata contexts in the
|
|
namespace.
|
|
* "qemu:dirty-bitmap:" - returns list of all available dirty-bitmap
|
|
metadata contexts.
|
|
|
|
= Features by version =
|
|
|
|
The following list documents which qemu version first implemented
|
|
various features (both as a server exposing the feature, and as a
|
|
client taking advantage of the feature when present), to make it
|
|
easier to plan for cross-version interoperability. Note that in
|
|
several cases, the initial release containing a feature may require
|
|
additional patches from the corresponding stable branch to fix bugs in
|
|
the operation of that feature.
|
|
|
|
* 2.6: NBD_OPT_STARTTLS with TLS X.509 Certificates
|
|
* 2.8: NBD_CMD_WRITE_ZEROES
|
|
* 2.10: NBD_OPT_GO, NBD_INFO_BLOCK
|
|
* 2.11: NBD_OPT_STRUCTURED_REPLY
|
|
* 2.12: NBD_CMD_BLOCK_STATUS for "base:allocation"
|
|
* 3.0: NBD_OPT_STARTTLS with TLS Pre-Shared Keys (PSK),
|
|
NBD_CMD_BLOCK_STATUS for "qemu:dirty-bitmap:", NBD_CMD_CACHE
|