\documentclass[12pt,a4paper]{article}
\usepackage[utf8x]{inputenc}
\usepackage{parskip}
\usepackage{hyperref}
\usepackage{xcolor}
\hypersetup{
    colorlinks,
    linkcolor={red!50!black},
    citecolor={blue!50!black},
    urlcolor={blue!80!black}
}
%\usepackage{abstract}
%\usepackage{graphicx}
%\DeclareGraphicsExtensions{.pdf,.png,.jpg}
\usepackage{float}
\floatstyle{boxed}
\restylefloat{figure}
\usepackage{fancyhdr}
  \pagestyle{fancy}
  %\fancyhead{}
  %\fancyfoot{}

\title{Summary of changes in NBD-related projects since mid 2016}

\begin{document}
\maketitle

\section{NBD protocol}
\url{https://github.com/NetworkBlockDevice/nbd/blob/master/doc/proto.md}

\begin{description}
\item[2016]

\verb|WRITE_ZEROES|

\verb|NBD_OPT_INFO| and \verb|NBD_OPT_GO| (finalized)

TLS support (finalized)

\verb|NBD_OPT_BLOCK_SIZE|

\verb|NBD_FLAG_CAN_MULTI_CONN|

\item[2017]

\verb|STRUCTURED_REPLY| merged

\item[2018]

\verb|NBD_CMD_BLOCK_STATUS|, metadata contexts, \verb|base:|
namespace, etc. merged

Preferred block size specified as 512 bytes.  Document maximum
request size limits.

\verb|NBD_CMD_CACHE|

\item[2019]

\verb|NBD_CMD_FLAG_FAST_ZERO|

Recommend use of \verb|TCP_NODELAY|

\end{description}

\subsection{URIs}

\begin{description}
\item[2019]
NBD URI specification was introduced.
\url{https://github.com/NetworkBlockDevice/nbd/blob/master/doc/uri.md}
\end{description}



\section{qemu-nbd}




\section{nbdkit}



\section{libnbd}

Project started last day of April 2019.

\begin{description}

\item[May 2019]

Most \verb|NBD_CMD_| implemented, and working connection to nbdkit,
within first 10 days.  Interoperating with qemu-nbd within 2 weeks.
TLS implemented and interoperating with qemu-nbd within 16 days.

Generated C API, Python 3 bindings and \verb|nbdsh|, OCaml bindings,
hierarchical state machine.

Export names

Subprocess server (\verb|nbd_connect_command|)

Structured replies

\verb|NBD_CMD_BLOCK_STATUS| and \verb|base:allocation|

Multiple commands ready to issue and in flight

Callbacks

``Internal'' multi-conn support added then removed

Valgrinding

Some API calls can be handled without taking the lock

libnbd $0.1.2$ was released on May $30^{th}$ 2019.

\item[June 2019]

NBD URIs supported

\verb|nbdsh -c| parameter

\verb|MSG_MORE| optimization

Better handling of multiple in-flight commands, a lot of
optimization, and finessing of the API.

Python bindings custom exception \verb|nbd.Error|

\item[July 2019]

Port to FreeBSD

Further work on callbacks

Optimize command queue to be $O(1)$ instead of $O(n)$

Symbol versions

libnbd $0.9.6$ was released on Jul $30^{th}$ 2019.

\item[August 2019]

More tests

Debug output includes function names, parameters, return values

Optional function parameters

Man pages for every API

Port to RHEL 7

First stable version $1.0$ was released on August $27^{th}$ 2019.

\item[September 2019]

Support for \verb|FAST_ZERO|

New APIs for testing servers without Structured Replies and explicitly
setting handshake flags.  New APIs for finding out if TLS was
negotiated, and what NBD protocol is being used.

Reproducible build

Two CVEs found

Share \verb|nbd-protocol.h| file with nbdkit

\item[October 2019]

Systemd socket activation

Fuzz testing (discovers one serious CVE)

New API to connect directly to socket

New \verb|nbdfuse| tool

\end{description}

\end{document}
