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。
[!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参数)并返回 CNIResult
或 Error
的函数类型。由于我们实现了一些满足此类型的函数,我们可以构建自己的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