rscni

Crates.iorscni
lib.rsrscni
version0.0.4
sourcesrc
created_at2024-01-13 08:23:23.70064
updated_at2024-04-09 10:35:24.384253
descriptionCNI plugin library for Rust
homepage
repositoryhttps://github.com/terassyi/rscni
max_upload_size
id1098378
size101,249
Tomoya Terashima (terassyi)

documentation

README

RsCNI

RsCNI is a CNI plugin library for Rust. This is based on containernetworking/cni.

GitHub release crate-name at crates.io crate-name at docs.rs CI

[!WARNING] RsCNI is under experimental.

Use

RsCNI has a similar APIs to containernetworking/cni/pkg/skel.

The entrypoint structure is Plugin. It accepts callback functions defined as CmdFn to represent CNI Add, Del and Check commands.

pub struct Plugin {
    add: CmdFn,
    del: CmdFn,
    check: CmdFn,
    version_info: PluginInfo,
    about: String,
    dispatcher: Dispatcher,
}

CmdFn is the type for CNI commands. It is the function type that accepts Args that is CNI arguments and return CNIResult or Error. As we implement some functions satisfy this type, we can build our own CNI plugin.

pub type CmdFn = fn(args: Args) -> Result<CNIResult, Error>;

For async version, we have to implement the following type.

[!NOTE] To use async version of rscni, please enable the async feature in your Cargo.toml.

pub type CmdFn = fn(Args) -> Pin<Box<dyn Future<Output = Result<CNIResult, Error>>>>;

To run Plugin, we can call run() method like following.

fn main() {
    let version_info = PluginInfo::default();
    let mut dispatcher = Plugin::new(add, del, check, version_info, ABOUT_MSG);

    dispatcher.run().expect("Failed to complete the CNI call");
}

For details, please see examples/rscni-debug.

Example project

License

RsCNI is licensed under the Apache License, Version 2.0. See LICENSE for the full license text.

Commit count: 18

cargo fmt