2个版本

0.0.6 2024年2月21日
0.0.5 2024年2月21日

#715网络编程

MIT 许可证

125KB
3K SLoC

ovsdb-build

将OVSDB模式编译成Rust模型和代理,以便在ovsdb中进行类型化数据库交互。

概述

为了以类型安全的方式与OVSDB实例交互,我们需要创建强类型结构体,这些结构体映射到OVSDB中的表。 ovsdb-build接受一个OVSDB模式,并为每个表生成2个结构体

  • 一个客户端应用程序使用的本地结构体,
  • 一个代理结构体,由serde使用以处理消息的编码/解码

转换主要通过现有Rust类型周围的新类型包装器来处理,因此应该非常高效。

然而,在构建之前,您需要一个模式。例如,假设您想与Open vSwitch数据库交互。您需要做的第一件事是获取模式副本(通常以.ovsschema扩展名存储)。模式文件可以在仓库中找到,或者通过直接连接到OVSDB实例来获取。如果您正在运行Open vSwitch,那么OVSDB已经在您的计算机上运行(通常监听在本地套接字上)。例如,在我的本地计算机上,我可以使用以下命令连接并下载模式副本

# ovsdb-client get-schema /var/run/openvswitch/db.sock > /tmp/vswitch.ovsschema

请注意,连接到OVSDB套接字需要root权限。在继续之前,查看模式文件本身可能是值得的,因为OVSDB模式引入了一些在其他数据库系统中不存在的概念。

安装

只需将ovsdb-build作为依赖项添加,无论是通过cargo

$ cargo add --build ovsdb-build

还是直接到Cargo.toml

[build-dependencies]
ovsdb-build = <ovsdb-version>

示例

假设之前下载的模式存储在/tmp/vswitch.ovsschema中,在build.rs

fn main() -> Result<(), Box<dyn std::error::Error>> {
    ovsdb_build::configure().compile("/tmp/vswitch.ovsschema", "vswitch")?;
    Ok(())
}

许可证

此项目根据MIT许可证授权。

作者

依赖项

~5–15MB
~173K SLoC