SDN實驗4:開源控制器實踐——OpenDaylight
實驗目的
- 能夠獨立完成OpenDaylight控制器的安裝配置
- 能夠使用Postman工具調用OpenDaylight API接口下發流表
實驗要求
(一)基本要求
- 配置JAVA環境,下載並解壓安裝OpenDaylight,版本選擇Carbon 或 Beryllium
- 下載並解壓安裝Postman
- 利用Mininet平台搭建下圖所示網絡拓撲,並連接OpenDaylight控制器
通過sudo mn --topo=single,3 --controller=remote,ip=127.0.0.1,port=6633 --switch ovsk,protocols=OpenFlow13搭建拓撲后,執行pingall,並在之前運行好的ODL中查看拓撲,如下圖所示:

Postman下發流表
通過Postman請求Restful API,進行流表下發,URL和json文件如下所示:
URL:
http://127.0.0.1:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/flow-node-inventory:table/0/flow/1
json文件
{
"flow": [
{
"id": "1",
"match": {
"in-port": "1",
"ethernet-match": {
"ethernet-type": {
"type": "0x0800"
}
},
"ipv4-destination": "10.0.0.3/32"
},
"instructions": {
"instruction": [
{
"order": "0",
"apply-actions": {
"action": [
{
"order": "0",
"drop-action": {}
}
]
}
}
]
},
"flow-name": "flow1",
"priority": "65535",
"hard-timeout": "10",
"cookie": "2",
"table_id": "0"
}
]
}
先執行h1 ping h3,再通過send按鈕下發流表,可以看到json文件中的配置生效:

進階要求
- api文檔

- 獲取流表狀態數量,新增修改和刪除流表

- 獲取特定交換機端口的狀態

- 獲取指定交換機信息

個人總結
遇到的問題和解決方案
- 問題一
運行了sudo mn --topo single,3 --mac --switch ovsk --controller remote,ip=127.0.0.1,port=6633,protocols=Openflow13后,h1無法ping通h3

解決方法:參考鏈接,執行命令./pox/pox.py forwarding.hub后即可ping通h1和h3主機

- 問題二
Postman無法send request,如圖所示報錯:

解決方法:沒有打開ODL,要打開ODL才能請求成功。搜到的通常解決方法是Setting-Proxy-去掉勾選的Use the system proxy,但由於當時都沒開ODL所以效果不明顯。
- 問題三
send之后ping命令絲毫沒有受到影響,一直在進行成功的ping命令
解決方法:之后重啟了虛擬機,再來一次,這個問題就自己消失了
- 問題四
重新嘗試進行實驗時,pox報錯:

解決方法:停止ODL后重新嘗試即可
- 問題五
- 如果點擊send后,出現的執行結果出現error的,而且error的提示信息里有protocol的,可以考慮檢查一下URL是不是不對
個人感想
這次作業做了比較久,一些沒有見過的報錯,以及一些預料之外的問題,讓整個實驗的時間都被延長了。在開始實驗之前,環境的配置也花了一定的時間,實驗后期虛擬機頻繁出現未響應的現象,但好像還沒有什么解決方法。在實驗過程中,對Postman通過json文件下發流表的過程獲得了更全面的了解。(除了耐心的各種嘗試之外,還是需要注重經驗的積累,不然容易花很多時間在處理報錯和debug上)
