一、實驗目的
- 掌握V1Model框架下P4_16的程序結構和基本語法
- 能夠運用 P4 進行簡單數據平面編程
二、實驗環境
- 下載虛擬機軟件Oracle VisualBox或VMware;
- 在虛擬機中安裝Ubuntu 16.04 Desktop amd64,並安裝完整Mininet和P4開發環境;
- 提供P4鏡像P4-Suite2018.ova,提取碼:egwf
三、實驗要求
學習P4官方示例教程,鏈接:https://github.com/p4lang/tutorials,了解P4-16版本的基本語法、基於V1Model的P4代碼結構,完成如下練習:
(一)基本要求
熟悉使用P4實現交換機IPv4的基本轉發原理,編寫P4程序,在下面的拓撲中實現IPV4 隧道轉發。
-
編寫補充basic_tunnel.p4中的代碼並運行
-
您現在應該會看到一個 Mininet 命令提示符。輸入xterm命令打開h1和h2兩個終端
-
先在主機2的界面輸入
./receive.py
啟動服務器以接收消息 -
在h1的界面輸入
./send.py 10.0.2.2 "SDN last Lab"
h2接收到h1的消息 -
使用隧道進行測試,在h1中發送消息給h2
./send.py 10.0.2.2 "byebye SDN" --dst_id 2
使用隧道通信時根據指定的 dst_id 進行轉發
四、個人總結
-
實驗難度:難,需要學習p4相關知識,並且要補充寫很多代碼,實驗過程中遇到了一點問題,進行地不是特別順利
-
遇到的問題:
- make run 運行報錯,檢查代碼后發現是代碼寫錯了,不該加參數的地方加了個參數
- 使用隧道進行轉發時h2收不到報文,檢查時發現在更新解析器時在state parse_ethernet中忘記了添加TYPE_MYTUNNEL: parse_myTunnel;
- make run運行失敗后一直都無法再次運行成功,需要用make stop進行失敗環境清除
-
個人感想:
在這次的實驗過程中學會了V1Model框架下P4_16的程序結構和基本語法,能夠運用 P4 進行簡單數據平面編程,感覺這次在閱讀文檔學習p4方面能力有所提升,也許是因為這次翻譯比較給力吧,挺到位的沒有什么障礙。只是在編寫代碼方面還是需要加強,因為在Linux環境下沒安裝IDE,代碼出錯了也不太容易找到,debug很搞心態。實驗中遇到的問題大多數都是因為basic_tunnel.p4的代碼編寫造成的問題。對於p4的編寫這次實驗還是停留在一知半解的狀態,雖然能做到基本要求,但是不能深刻理解,還需要多花點時間學習。