1. 程式人生 > 其它 >實驗8:資料平面可程式設計實踐——P4

實驗8:資料平面可程式設計實踐——P4

實驗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 成功。