1 2 Fork me on GitHub 6

实验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 成功。
posted @ 2021-10-24 17:16  鹤寻  阅读(298)  评论(0编辑  收藏  举报
1