3 个版本
新版本 0.3.2 | 2024 年 8 月 14 日 |
---|---|
0.3.1 | 2024 年 8 月 7 日 |
0.3.0 | 2024 年 8 月 7 日 |
502 在 命令行工具 中
每月 472 次下载
155KB
4.5K SLoC
Tenjin SDN
使用 Rust 的软件定义网络。
目标
为了更好地理解软件定义网络,我尝试使用 Rust 语言创建一个简单的 SDN,最初支持 Openflow 1.0,然后是 1.3。
安装
安装 Rust
或者运行以下命令。(适用于 macOS、Linux 或其他类 Unix 系统)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
安装 Tenjin
cargo install tenjin_sdn
通过命令行运行
默认运行控制器(Controller13,支持 Openflow 1.3)
tenjin run
运行 Controller10,支持 Openflow 1.0
tenjin run ctrl10
使用特定端口运行
tenjin run --port 6653
tenjin run --port 6653,6633
显示 run
命令的详细信息
tenjin run --help
仅运行控制器
您可以使用以下命令将 tenjin 添加到您的项目中
cargo add tenjin
或者您可以将此源代码克隆到您的工作区并修改代码。
以下代码是仅运行控制器的示例。如果您想修改控制器的代码,它位于 ./src/example/ 中。
Openflow 1.3
- 将 Controller13 导入 main 函数。
use tenjin::{example, openflow::ofp13::ControllerFrame13};
extern crate byteorder;
fn main() {
let controller = example::Controller13::new();
controller.listener("127.0.0.1:6633");
}
- 运行 Tenjin
cargo run --release
Openflow 1.0
将 Controller10 导入 main 函数。
use tenjin::{example, openflow::ofp10::ControllerFrame10};
extern crate byteorder;
fn main() {
let controller = example::Controller10::new();
controller.listener("127.0.0.1:6633");
}
运行 Tenjin
cargo run --release
Mininet
Mininet 是一个网络模拟器,用于创建用于快速原型设计的虚拟网络。使用 Mininet 测试此 SDN 框架。
使用 Openflow 1.3 运行 Mininet
sudo mn --controller=remote,ip=127.0.0.1 --mac --switch=ovsk,protocols=OpenFlow13 --topo=tree,2
使用 Openflow 1.0 运行 Mininet
sudo mn --controller=remote,ip=127.0.0.1 --mac --switch=ovsk,protocols=OpenFlow10 --topo=tree,2
待办事项
- 设计代码结构和功能。
- 编写测试用例。(阅读文档)
- 在 README 中添加更多描述。
- 处理所需的消息。
- 移除所有 unwarp。
学习资源
计划
图表
stateDiagram
con: Controller
conf10: Controller frame 10
conf13: Controller frame 13
ofp10: Openflow Manager 10
ofp13: Openflow Manager 13
ofpv10_h: openflow v1.0 header
ofpv10_e: openflow v1.0 Event
ofpv13_h: openflow v1.3 header
ofpv13_e: openflow v1.3 Event
[*] --> con
con --> conf10
conf10 --> ofp10
ofp10 --> ofpv10_h
ofp10 --> ofpv10_e
con --> conf13
conf13 --> ofp13
ofp13 --> ofpv13_h
ofp13 --> ofpv13_e
依赖关系
~1.2–1.8MB
~35K SLoC