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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM