實驗8:資料平面可程式設計實踐——P4
阿新 • • 發佈:2021-10-24
實驗8:資料平面可程式設計實踐——P4
實驗步驟
一、編寫 P4 程式並啟動 Mininet 執行
- 編寫 basic_tunnel.p4 缺失的部分並使用以下命令執行
make run
二、測試主機之間不用隧道的通訊和用隧道的通訊
- 在 h2 和 h3 啟動監聽
./receive.py
- h1 不通過隧道直接通訊
./send.py 10.0.2.2 "Hello h2!"
./send.py 10.0.3.3 "Hello h3!"
- h1 通過隧道進行通訊
./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 成功。