實驗8:數據平面可編程實踐——P4
實驗步驟
一、編寫 P4 程序並啟動 Mininet 運行
- 編寫 basic_tunnel.p4 缺失的部分並使用以下命令運行
make run

二、測試主機之間不用隧道的通信和用隧道的通信
./receive.py
./send.py 10.0.2.2 "Hello h2!"

./send.py 10.0.3.3 "Hello h3!"

./send.py 10.0.3.3 "Hello h2!" --dst_id 2

- 可以看到使用隧道通信時不再根據 IP 報頭進行路由,而是根據 mytunnel 標頭指定的 dst_id 進行轉發
個人總結
- 本次實驗難度適中,實驗過程較為順利,期間遇到的唯一一個問題是 make run 時會出現 mark_to_drop: Passing 1 arguments when 0 expected 的報錯。經查詢,在官方的 p4-guide/blob/master/README-troubleshooting.md 中找到解決辦法。原因是由於使用的 p4c 是從 2019 年 4 月 18 日或更早的源代碼編譯的版本。官方提供兩種解決辦法:
- 1.更改 P4 程序,使其調用 mark_to_drop() 時不帶參數,而不是 mark_to_drop(stdmeta).
- 2.保持 P4 程序不變,但將 p4c 編譯器版本更新為從上述提交或更高版本的源代碼構建的版本。
- 我采用了第一種策略,去除參數,直接使用 mark_to_drop(),make run 成功。