This series is for qemu 2.7, and will probably need some rework especially since some of it is trying to implement features that are still marked experimental in upstream NBD.
Included are some interoperability bug fixes, code cleanups, then added support both client-side and server-side for: NBD_FLAG_C_NO_ZEROES NBD_CMD_WRITE_ZEROES NBD_CMD_CLOSE NBD_OPT_INFO NBD_OPT_GO Still to come: improvements to NBD_CMD_WRITE_ZEROES support for NBD_OPT_STRUCTURED_REPLY strawman implementations to help with discussions towards NBD_CMD_BLOCK_STATUS proposal I'm still working up to teach NBD servers to advertise minimum/preferred/maximum block sizes This posting is tied to this particular version of the NBD protocol: https://github.com/yoe/nbd/blob/18918eb/doc/proto.md plus this email about NBD_CMD_CLOSE: https://sourceforge.net/p/nbd/mailman/message/35000466/ I performed testing by temporarily turning on DEBUG_NBD while compiling, then connecting variations on: ./qemu-nbd -f raw -x foo file ./qemu-io -f raw nbd://localhost:10809/foo and watching the traces on both screen (both for startup negotiation, and for various 'write -z', 'discard', and 'q' commands in qemu-io). I intentionally tested all three combinations of: old client, new server new client, old server new client, new server to make sure that either side gracefully handles unknown advertisements when the other side is newer, and correctly falls back to older usage when the other side is too old. I'm posting now so that others may compile my work and help with cross-project testing (such as qemu client to Alex's NBDGO server), which in turn will help us move experimental extensions into final form in the NBD protocol. Also available as a tag at this location: git fetch git://repo.or.cz/qemu/ericb.git nbd-flags-v2 Tag is named v2 because patches 1 and 2 in this grouping have been previously posted for inclusion in qemu 2.6 Eric Blake (18): nbd: Don't kill server on client that doesn't request TLS nbd: Don't fail handshake on NBD_OPT_LIST descriptions nbd: More debug typo fixes, use correct formats nbd: Detect servers that send unexpected error values nbd: Reject unknown request flags nbd: Avoid magic number for NBD max name size nbd: Treat flags vs. command type as separate fields nbd: Limit nbdflags to 16 bits nbd: Share common reply-sending code in server nbd: Share common option-sending code in client nbd: Let client skip portions of server reply nbd: Less allocation during NBD_OPT_LIST nbd: Support shorter handshake nbd: Implement NBD_OPT_GO on client nbd: Implement NBD_OPT_GO on server nbd: Support NBD_CMD_CLOSE nbd: Implement NBD_CMD_WRITE_ZEROES on server nbd: Implement NBD_CMD_WRITE_ZEROES on client block/nbd-client.h | 2 + include/block/nbd.h | 61 ++++-- nbd/nbd-internal.h | 13 +- block/nbd-client.c | 88 ++++++++- block/nbd.c | 23 +++ nbd/client.c | 522 ++++++++++++++++++++++++++++++---------------------- nbd/server.c | 356 ++++++++++++++++++++++++++--------- qemu-nbd.c | 2 +- 8 files changed, 744 insertions(+), 323 deletions(-) -- 2.5.5