• 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

  • 相关阅读:
    表格排序插件datatables
    dropzone手动上传
    上传文件插件dropzone的实例
    table加载慢
    利用touchslide实现tab滑动切换
    Qt之事件处理机制
    Qt容器组件(二)之QWidgetStack、QMdiArea、QDockWidget
    ActiveMQ之ActiveMQ-CPP安装及测试
    Qt容器组件(一)之QGroupBox、QScrollArea、QToolBox、QTabWidget
    Qt属性系统(Qt Property System)
  • 原文地址:https://www.cnblogs.com/yibobo-blog/p/4926113.html
Copyright © 2020-2023  润新知