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目录下)。

另外一个问题是:openflow的路径要加上引号,不知道是不是都是这样。我第一次用的时候没有加,也成功了。但后面再试的时候就不行了,然后在路径上加了上引号之后才能通过的。

$ ./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

原文地址:https://www.cnblogs.com/yibobo-blog/p/4926113.html