NS3之路---在NS3中添加openflow模块

如何在NS3中安装openflow模块

Note:目前NS3中虽然支持openflow(貌似仅为V0.89),但是并不支持外部控制器,仅使用内部封装的一个控制器(ofi::Controller)。

模型描述

该模型依赖于建立一个外部的openflow switch库(Openflow software implementation distribution, OFSID),然后编译ns3封装器来调用该openflow库函数。ns3的封装源码位于“src/openflow/model”路径下。

设计

为了将Openflow协议安装至节点(node)中,openflow模块提供了openflow交换机网卡类(OpenFlowSwitchNetDevice)和openflow交换机帮助类(OpenFlowSwitchHelper)。另外,对虚流表和TCAM的维护,旨在提供最基本的openflow协议的功能(类openflow-results)。

控制器由用户添加,位于ofi命名空间中(ofi::Controller)。ns3中的控制器分为DropController(创建流忽略每一个单独包)和LearningController(将交换机变为复杂的桥接网卡)。

Openflow交换机模型

常规openflow交换机模型

--------------------------------------------------------------------------------------

|    安全通道(和控制器通信)    |   openflow协议     |   外部控制器     |

|    硬件、软件、流表             |

--------------------------------------------------------------------------------------

NS3支持的openflow交换机模型

---------------------------------------------------------------------------------------------

|   Controller->ReceiveFromSwitch()   |   openflow协议     |  内部交换机   |

|   软件、虚拟流表、虚拟的TCAM      |

---------------------------------------------------------------------------------------------

上述两种模型中主要有两点区别:

  1. NS3支持的openflow交换机没有安全通道,而且控制器嵌入在系统内部,即系统内部提供了一个控制器原型(ofi::Controller),继承于ns3::Object。因此,没有必要添加SSL部分,网络基本不会down掉。但是,ns3将来的发展可能会将内部控制器设置为可选项,既可以从外部添加,也可以直接使用系统本身的。
  2. 虚拟流表、TCAM(三重可寻址寄存器):一般来说,openflow交换机在硬件TCAM上实现,而OFSID包含了软件虚拟的TCAM部分(VTCAM)。而如何让VTCAM运作性能等与硬件上的TCAM接近是将来有待继续加强的部分。

预安装软件包

OFSID的实现需要提前安装以下依赖包:

1.libxml2(用于解析MPLS FIB xml文件);

$ sudo apt-get install libxml2

2.libdl(错误检测);

TODO

3.boost(断言);

$ sudo apt-get install libboost-signals-dev libboost-filesystem-dev

搭建OFSID

为了使用openflowswitch模块,必须创建OFSID,并将其链接至ns3。

  1. 获取OFSID源码(使用mercurial下载,waf编译openflow)

$ hg clone http://code.nsnam.org/openflow

$ cd openflow

$ ./waf configure

$ ./waf build

  1. 经过上面的步骤后,OFSID被编译进了libopenflow.a库中,在ns3-dev目录下将其链接(例如:ns-3.15)

$ ./waf configure –enable-examples –enable-tests –with-openflow=path/to/openflow

最后在一系列的输出信息中看到以下信息则表示成功链接。

$ “NS-3 openflow integration    :   enable”

PS: 本人在这块遇到的问题:“--with-openflow无法被waf识别”,原因在于src目录下原本有openflow文件夹,但是被我误删了,因此无法识别。

到达这一步之后,剩下的工作仅需要进行编译ns3以激活openflowswitch模块(在ns-3.15目录下)。

$ ./waf build

测试例子

$ ./waf –run openflow-switch

Helper类介绍

TODO

相关属性

交换机网卡(openflowSwitchNetDevice)属性

l  流表查询时延(FlowTableLookUpDelay) : 流表的查询时间

l  标识 :OFPC_SEND_FLOW_EXP (交换机通知控制器一条流过期了)

OFPC_FRAG_NORMAL (分片匹配流表)

OFPC_FRAG_DROP (丢弃分片)

OFPC_FRAG_REASM (分片重新组装,ns3目前不支持ip分片重新组装)

OFPC_FRAG_MASK (掩码分片)

l  流表不匹配发送长度(FlowTableMissSendLength):当包不被匹配时,转发该包给控制器的长度(并非一整个包)。

跟踪

TODO

日志

TODO

验证

验证openflow是否设置好或者是否存在的命令如下:

$ ./test.py –suite = openflow

PS:在整个安装过程中,建议使用图形化文件管理界面去观察下载的openflow源码文件分布结构和原本存在于ns3中,且位于src下的openflow文件结构,对比下二者的区别。

以管理员权限打开文件管理器命令如下:

$ sudo nautilus

时间: 2024-10-25 05:03:29

NS3之路---在NS3中添加openflow模块的相关文章

php中添加新模块支持

php安装额外的扩展模块php安装完成以后,如果php中缺少某个模块,这是我们也不可能重新编译php,只能通过php的模块扩展来安装缺少的功能模块使用/usr/local/php7/bin/php -m 查看php已编译的模块,也可查看未编译的模块,配合grep查看是否存在模块可以下载一个第三方的的php扩展,这里只使用php内置模块演示:进入内置模块目录(第三方需要解压后进入其目录中),在目录中执行/usr/local/php7/bin/phpize,生成./configure编译文件,如果p

Latex使用:在latex中添加算法模块

在Miktex下有三个latex algorithm包,分别为:algorithm,algorithmic,algorithm2e三个,其中algorithm,algorithmic经常成套使用: latex中algorithm模板为: latex文件中顶端加入的package: \usepackage{algorithm} \usepackage{algorithmic} \usepackage{setspace} 算法块代码: \begin{algorithm}[htb] \setstret

opencv第二课,使用cmake编译OpenCV,并添加opencv_contrib模块

一.下载安装cmake 想要在Windows平台下生成OpenCV的解决方案,我们需要一个名为cmake的开源软件,可以在camke的官网:http://www.cmake.org/上下载到 或者点击此链接进行下载http://www.cmake.org/files/v2.8/cmake-2.8.12.2-win32-x86.exe 下载完成直接运行安装就行. 二.使用cmake生成OpenCV源代码工程的解决方案 在进行opencv_contrib模块添加时,一定要保证opencv和openc

生产环境上nginx 不覆盖添加lua模块

需求如下: 需要在nginx配置文件中判断请求中是否带某参数变量,nginx配置本身没有此判断功能. 网上查找资料,可以在nginx中添加lua模块,使用lua的脚本去判断.比较靠谱的文章:CentOS系统下,如何安装 nginx_lua_module 模块 以及 echo-nginx-module 模块 主要安装: lua-nginx-module-master ngx_devel_kit-master LuaJIT 三个模块,但找了一圈发现都是需要**重新编译nginx并且覆盖安装**. 再

NS3之路---NS3Tutorial解读---Introduction & Resource

NS3网络模拟器 学习NS3最好的途径肯定是阅读官方给定的文档啦.目前NS3官网上给出了Tutorial.Mannual.Module三个pdf,对于新手的我而言,tutorial显然是比较好的入门教材,于是便开始阅读tutorial,同时进行部分的翻译,并夹杂一些个人想法. ns-3.2-入门基础篇 介绍 NS3是一个离散事件驱动的网络模拟器,旨在为学术研究和教育提供帮助. ns3是一个开源项目,起源于2006年. 对于ns3的新用户而言,从详细的英文技术细节手册上收集信息并将其转化为仿真环境

向NS2中添加协议PING

在NS2中增加自己的协议模块一般分一下几个步骤: (1)       添加协议类 (2)       定义协议分组头结构 (3)       编译代码 其实在ns3.35版本中已经有ping协议,此步骤只是为了了解ns2添加协议的一般步骤. 1.  在ping协议中,需要定义自己的控制分组,因此首先需要在ping.h头文件中定义ping的分组头结构,C++代码如下: //在ping协议中定义自己的控制分组 struct hdr_ping { char ret;       //0:从发送者到接收

向Java枚举类型中添加新方法

除了不能继承enum之外,可将其看做一个常规类.甚至可以有main方法. 注意:必须先定义enum实例,实例的最后有一个分号. 下面是一个例子:返回对实例自身的描述,而非默认的toString返回枚举实例的名字. public enum Color { RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4); // 成员变量 private String nam

水煮 ASP.NET Web API(1-2)在 WebForm 应用程序中添加 ASP.NET Web API

问题 怎么样将 Asp.Net Web Api 加入到 Asp.Net Web From 应用程序中 解决方案 在 Visual Studio 2013 中,创建新的 Web From,可以直接在"新建 ASP.NET 项目" 创建项目向导中,勾选 ASP.NET Web API ,将其加入进来.如图 1-2 所示. 图 1-2. 在Asp.NET 项目向导,同时选中 Web Form 和 Web API 因为可以通过 NuGet 添加 ASP.NET Web API ,所以使用&qu

127使用 TableView 自带的单元格样式实现好友列表,另外在单元格中添加辅助按钮

类似的做法如之前这篇随笔:114自定义 UITableViewCell 实现好友列表(扩展知识:如何使用xib创建自定义的表格视图单元格 KMTableViewCell) 相比之下:自定义 UITableViewCell 的内容灵活,可根据需求调整展示效果,应用场景更广:一般适用于TableView 自带的单元格样式无法实现的效果. 效果如下: ViewController.h 1 #import <UIKit/UIKit.h> 2 3 @interface ViewController :