如何在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 |
---------------------------------------------------------------------------------------------
上述兩種模型中主要有兩點區別:
- NS3支持的openflow交換機沒有安全通道,而且控制器嵌入在系統內部,即系統內部提供了一個控制器原型(ofi::Controller),繼承於ns3::Object。因此,沒有必要添加SSL部分,網絡基本不會down掉。但是,ns3將來的發展可能會將內部控制器設置為可選項,既可以從外部添加,也可以直接使用系統本身的。
- 虛擬流表、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。
- 獲取OFSID源碼(使用mercurial下載,waf編譯openflow)
$ hg clone http://code.nsnam.org/openflow
$ cd openflow
$ ./waf configure
$ ./waf build
- 經過上面的步驟后,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