#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 • Rust 包仓库 215/week @ 2024-08-05 • Rust 包仓库 257/week @ 2024-08-12 • Rust 包仓库

每月 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