Explore if nbd_aio_notify_error is needed for faster response if
server goes away.
Bindings in other languages.
- Latest attempt at adding Rust:
https://www.redhat.com/archives/libguestfs/2019-August/msg00416.html
Example code integrating with ppoll, pollfd, APR pollset (and others?).
Example command line utils to copy in/out (like qemu-img convert).
NBD resize extension.
TLS should properly shut down the session (calling gnutls_bye).
Performance: Chart it over various buffer sizes and threads, as that
should make it easier to identify systematic issues.
Examine other fuzzers: https://gitlab.com/akihe/radamsa
nbdcopy:
- Use parallel AIO operations if the input or output is a regular
file or block device.
- Consider using more threads.
- Create sparseness in output.
- Handle extents efficiently.
- Write zeroes efficiently.
- Allow copy between NBD servers.
nbdfuse:
- If you write beyond the end of the virtual file, it returns EIO.
- Implement trim/discard.
- Implement write_zeroes.
- Implement block_status.
- Could be made multithreaded for improved performance.
nbdinfo:
- info-list.sh and info-list-json.sh tests should use nbdkit + --run
when nbdkit supports listing exports.
Suggested API improvements:
general:
- synchronous APIs that have a timeout or can be cancelled
connecting:
- nbd_connect_tcp: allow control over whether IPv4 or IPv6 is desired
- nbd_connect_uri: allow control over which features are enabled
- nbd_connect_command: allow passing char **env
- connection completed callback
TLS:
- should be individual APIs for setting each TLS file
(set_tls_certificates can continue to exist)
- TLS should have a way to pass in PIN or password to
support encrypted keys
- allow use of TLS memory APIs (gnutls_datum_t + gnutls_*_mem)
- support PKCS11 URIs (RFC 7512)
Easier server implementation testing:
- a way to force NBD_OPT_EXPORT_NAME over NBD_OPT_GO
- a way to forcefully violate protocol (such as allowing writes to a
readonly connection, or sending a request that exceeds bounds) for
testing server reactions
subprocess
- it should be possible to use nbd_close and never block, so
maybe nbd_shutdown should wait for the subprocess or there
should be another API to do this
- capture error message when nbd_connect_command fails