Crates.io | rscni |
lib.rs | rscni |
version | 0.0.4 |
source | src |
created_at | 2024-01-13 08:23:23.70064 |
updated_at | 2024-04-09 10:35:24.384253 |
description | CNI plugin library for Rust |
homepage | |
repository | https://github.com/terassyi/rscni |
max_upload_size | |
id | 1098378 |
size | 101,249 |
RsCNI is a CNI plugin library for Rust. This is based on containernetworking/cni.
[!WARNING] RsCNI is under experimental.
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.
RsCNI is licensed under the Apache License, Version 2.0. See LICENSE for the full license text.