Crate nbdkit

source ·
Expand description

Rust bindings to NBDKit.

NBDKit is a toolkit for building Network Block Device servers.

https://gitlab.com/nbdkit/nbdkit

To use nbdkit, build your project as a cdylib. Define your plugin by implementing Server, and then register it with plugin!. See ramdisk.rs in the source code for a complete example.

#[derive(Default)]
struct MyPlugin {
    // ...
}
impl Server for MyPlugin {
    fn get_size(&self) -> Result<i64> {
        // ...
    }

    fn name() -> &'static str {
        "my_plugin"
    }

    fn open(_readonly: bool) -> Result<Box<dyn Server>> {
        Ok(Box::new(MyPlugin::default()))
    }

    fn read_at(&self, buf: &mut [u8], offset: u64) -> Result<()> {
        // ...
    }
}
plugin!(MyPlugin {});

Macros

  • Print a debug message.
  • Register your plugin with NBDKit.

Structs

Enums

Traits

  • Define the entry point for your plugin.
  • Anything that, in C, can be cast back and forth to sockaddr.

Functions

  • Request nbdkit to disconnect the current client.
  • Return the optional NBD export name if one was negotiated with the current client
  • Is it safe to interact with stdin and stdout during the configuration phase?
  • Did the client complete TLS authentication?
  • Parse a string as a boolean using nbdkit_parse_bool.
  • Parse a string as a probability/percentage using nbdkit_parse_probability.
  • Parse a string as a size using nbdkit_parse_size.
  • Return the peer (client) address, if available.
  • Request nbdkit to asynchronously and safely shutdown the server.

Type Definitions