P4语言学习(2)——basic_tunnel实验

首先打开readme文件,如下图所示,因为代码不完整所以"make run"指令会失败 

 接着往下看可以看到第一处要补的地方是在数据包解析器这里。

然后打开basic_tunnel.p4文件到达解析器位置 ,很明显需要我们处理my_Tunnel这一标头

 从上面readme文件可知,首先在ethernet解析器那里应该根据etherType来选择解析my_Tunnel还是ipv4,接着我们得知应该在处理过my_Tunnel后再处理ipv4,因此应该把对my_Tunnel的处理置于ipv4上方,并且只有proto_id等于TYPE_IPV4时才执行ipv4的解析,补充如下图所示:

 同样先看readme文件,这里是有三个要求:定义一个action;定义一个表;补充apply

所以我们先定义一个action设置egress_spec等于控制平面提供的port;接着定义一个名为myTunnel_exact的表 ,key指定为hdr.myTunnel.dst_id,如果匹配执行myTunnel_forward,否则drop;最后在apply增加一个判断语句:如果hdr.myTunnel是有效的,应用myTunnel_exact这个表

 如下图所示这里缺少对myTunnel标头的emit,补上即可

 接下来就是执行"make run"创建我们的拓扑

 执行"xterm h1 h2"显示出h1和h2的虚拟终端

 对h2执行"./receive.py"命令运行这一文件使得它能够收到数据包

 在h1上执行"./send.py 10.0.2.2 "P4 is cool""命令,将这一数据包发送给地址为10.0.2.2的主机也就是h2,可以看到h2成功接收到

  在h1上执行"./send.py 10.0.3.3 "hhhhh""命令,将这一数据包发送给地址为10.0.3.3的主机也就是h3,可以看到h3成功接收到

 在h1上执行"./send.py 10.0.2.2 --dst_id 2 "sdjjds""命令,因为存在myTunnel报头的dst_id字段,所以优先根据这一字段进行匹配也就是会发送到h2,如下所示h2成功接收到

 在h1终端上修改目的ip10.0.2.2为其他乱七八糟的ip地址但是后面还是指定dst_id 2,可以看到还是h2成功接收

 最后执行"exit"命令退出并关闭xterm,执行"make stop"和"make clean"命令,清除创建的拓扑

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值