3 个不稳定版本
使用旧的 Rust 2015
0.2.1 | 2017 年 1 月 30 日 |
---|---|
0.2.0 | 2017 年 1 月 30 日 |
0.1.0 | 2016 年 12 月 30 日 |
在 #sdn 中排名 #2
81KB
2K SLoC
rust_ofp
OpenFlow 1.0 协议和控制器在 Rust 中。
rust_ofp
旨在实现 OpenFlow1.0 协议,用于在 Rust 中原型化 SDN 系统。将来,它可能扩展以支持其他 OpenFlow 规范(特别是 1.3),以及其他完全不同的协议。
我大量借鉴了frenetic-lang项目的灵感和代码结构,因为我对其很熟悉。我希望 Rust 能够比 OCaml + CStructs 更自然地实现底层协议,而真正的并行性将允许更高的控制器性能和更简单的事件循环。
请参阅我在此处的博客文章!
构建
rust_ofp
由一个实现 OpenFlow 1.0 协议的 Rust 库和一个 rust_ofp_controller
二进制文件组成,该文件目前仅作为 SDN 配置的回声服务器。它可以像 Rust 项目一样构建和运行。
cd path/to/rust_ofp
cargo build
cargo run
测试
我目前正在进行所有正确性评估,使用mininet。Mininet 提供快速的反馈,以及我现在需要的所有可伸缩性,并且应该正确支持 OpenFlow 1.0(以及其他协议)。没有理由 mininet 中的正确性不能转移到物理硬件上,也许有一天我会设法验证这个假设。
无论如何,假设已安装 mininet,测试控制器二进制文件相当简单。在一个终端
cd path/to/rust_ofp
cargo run
在另一个终端
sudo mn --controller=remote
运行 rust_ofp_controller
的终端将偶尔打印一些内容,记录它接收到的消息类型和行为。
mininet 终端应该启动一个具有典型 mininet 工具的交互式 shell。
目前,rust_ofp
的测试可执行文件实现了 MAC 学习,因此当主机互相 ping 时,控制器会在交换机上安装转发规则,而不是将所有数据包都通过控制器路由。
文档
Travis CI 自动上传由cargo doc
生成的源文档。
待办事项
OpenFlow 1.0 标准的一些部分尚未实现。值得注意的是,rust_ofp
目前不实现以下消息代码
OFPT_VENDOR
OFPT_GET_CONFIG_REQUEST/OFPT_GET_CONFIG_REPLY
OFPT_SET_CONFIG
OFPT_PORT_MOD
OFPT_STATS_REQUEST/OFPT_STATS_REPLY
OFPT_QUEUE_GET_CONFIG_REQUEST/OFPT_QUEUE_GET_CONFIG_REPLY
当前控制器可执行文件是围绕协议的最小包装,不动态处理任何规则配置。控制器的未来目标包括
- 一个GTK GUI,用于动态配置和查询SDN。
- 一个编译器,从某些高级抽象到安装除全局
DROP
之外的其他转发策略。 - 一致更新,用于动态更新SDN的全局转发策略。
依赖项
~120KB