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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM