4个版本

0.0.4 2024年4月9日
0.0.3 2024年1月16日
0.0.2 2024年1月13日
0.0.1 2024年1月13日

#693网络编程

每月32次下载

自定义许可

84KB
2K SLoC

RsCNI

RsCNI是Rust的CNI插件库。这是基于 containernetworking/cni

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

[!WARNING] RsCNI处于实验性阶段。

使用

RsCNI与 containernetworking/cni/pkg/skel 具有相似的API。

入口结构是 Plugin。它接受定义为 CmdFn 的回调函数来表示CNI Add、Del和Check命令。

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

CmdFn 是CNI命令的类型。它是接受 Args(CNI参数)并返回 CNIResultError 的函数类型。由于我们实现了一些满足此类型的函数,我们可以构建自己的CNI插件。

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

对于异步版本,我们必须实现以下类型。

[!NOTE] 要使用rscni的异步版本,请启用Cargo.toml中的async功能。

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

要运行 Plugin,我们可以像以下那样调用 run() 方法。

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");
}

有关详细信息,请参阅 examples/rscni-debug

示例项目

许可证

RsCNI采用Apache许可证第2版授权。有关完整许可证文本,请参阅 LICENSE

依赖关系

~0.7–1.6MB
~35K SLoC