#sdn #cli #openflow

bin+lib tenjin_sdn

软件定义网络和 Openflow 协议

3 个版本

新版本 0.3.2 2024 年 8 月 14 日
0.3.1 2024 年 8 月 7 日
0.3.0 2024 年 8 月 7 日

502命令行工具

Download history 215/week @ 2024-08-05 257/week @ 2024-08-12

每月 472 次下载

MIT 许可证

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

  1. 将 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");
}
  1. 运行 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