P4学习(四)实验一:Basic Forwarding

一.前置知识

  1. Linux基础命令(vim)
  2. V!Model的架构图
  3. P4代码基本结构
  4. P4基本语法
  5. Mininet

二.实验过程记录

1.找到实验文件

在这里插入图片描述

2.拓扑图

在这里插入图片描述

3.明确实验内容

The objective of this exercise is to write a P4 program that implements basic forwarding. To keep things simple, we will just implement forwarding for IPv4.

4.实验初体验

basic.p4初始设置了丢弃所有的数据包,所以一开始会ping不到

  1. 跑起服务
make run

插一个知识点:
"make"是linux的一个工具,通过读取文件makefile来执行操作
所以这里的命令就是:会查找 Makefile 中名为 run 的目标,并执行与之相关的命令。

在这里插入图片描述

  1. 观察数据包传输情况
    在这里插入图片描述
    会发现全部ping不通,也就代表basic.p4中的丢弃所有的包是成功的

  2. 停止服务

make stop
make clean

三. 编写解决方案

1.Parse部分

在这里插入图片描述

Parse采用状态机风格
有三个预定义的状态:start, accept, reject

1.1 Code

在这里插入图片描述

1.2 知识点解析

state xxx{} 定义state "xxxx"
transition xxx; 跳转到state "xxx"

select(){} 和 switch操作一样,不过不需要breakselect(data){
	valA: stateA;
	valB: stateB;
	......
	default: stateDefault;
}

所以本段code的思路是
①先从start这个state开始,直接跳到解析etherHead的部分
②从数据包里提取出Ethernet header
③判断包头中的Type是否为Ipv4
④若是,则跳转到pares_IPv4

2.Ingress部分

Match-Action 的流水线集合

2.1 Code

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

2.2 知识点解析

  1. 定义一个处理IPv4包转发的action,用于更新head的信息
  2. 在表中按照destAddr的lpm进行匹配action
  3. valid是header里的一个隐藏field,isValid可以判断ipv4头是否有效

3.Deparse部分

3.1 Code

在这里插入图片描述

3.2 知识点

①emit 用于将头部字段添加到正在构建的数据包中。
②写与Parse的extract的反逻辑就行

四.实验完成测试

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值