openflow協議代碼的大體結構如下:
1.涉及報文傳輸與生成的main函數
2.udatapath.c負責datapath (OpenFlow網絡中,每個OpenFlow實例都使用唯一的Datapath ID來標識本實例。缺省情況下,OpenFlow實例的Datapath ID由實例ID和設備橋MAC組成,用戶可以配置Datapath ID。)
3.controller.c負責controller
4.secchan.c負責安全通道
5.dpctl.c負責dp
具體代碼結構參考百度文庫:http://wenku.baidu.com/link?url=KLvgQJLI-Luk0nYqq7IIvyhr4E3nvP0LTH0P6CcFiJX-H-2pJx8DNh2IeNG-iVWBgv_gpk-960ArKSd–ye0f0ixuQ-m2-StZ3daigY2DJe
根據openflow協議的代碼結構就比較好理解軟的交換機的實現組件的組成,openflow13softwareswitch組件以及其作用:
1)ofdatapath:交換機的安裝啓用
2)ofprotocol:用來連接交換機和控制器的安全通道
3)oflib:用來轉換1.3版本格式的庫
4)dpctl:是從console口來配置switch的一個工具(這個會在另外一篇文章中詳細說明)
安裝請參考:https://github.com/CPqD/ofsoftswitch13 中給出的步驟
運行:
1)啓動datapath
sudo udatapath/ofdatapath --datapath-id=<dpid> --interfaces=<if-list> ptcp:<port>
這個命令會啓動datapath,使用給定的datapath ID和列出的接口。它將會打開一條被動的TCP連接通道在給定的端口上。如果想要獲得完整的選項列表,使用–help參數
2)啓動secure channel,這將會將第一步中啓動的datapath連接到控制器上。
secchan/ofprotocol tcp:<switch-host>:<switch-port> tcp:<ctrl-host>:<ctrl-port>
備註:這裏的switch-host就是127.0.0.1 switch-port是自己設置的端口一般爲6632或6633
這將會打開TCP連接到交換機和控制器上,基於OpenFlow協議在二者之間進行溝通。想要獲得完整的選項清單請使用–help參數。
配置:
可以使用dpctl工具向switch發送要求
例如:檢查流表0的流狀態統計
utilities/dpctl tcp:<switch-host>:<switch-port> stats-flow table=0
增加一個meter
utilities/dpctl tcp:<switch-host>:<switch-port> meter-mod cmd=add,meter=1 drop:rate=50
想要獲得完整的選項清單仍然使用–help參數
但是dpctl有一些使用限制
1.不支持OXM掩碼
2.不支持多部分消息
3.一些set_field的action fieds將不會呈現