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.
basic.p4初始设置了丢弃所有的数据包,所以一开始会ping不到
make run
插一个知识点:
"make"是linux的一个工具,通过读取文件makefile来执行操作
所以这里的命令就是:会查找 Makefile 中名为 run 的目标,并执行与之相关的命令。
观察数据包传输情况
会发现全部ping不通,也就代表basic.p4中的丢弃所有的包是成功的
停止服务
make stop
make clean
Parse采用状态机风格
有三个预定义的状态:start, accept, reject
state xxx{} 定义state "xxxx"
transition xxx; 跳转到state "xxx"
select(){} 和 switch操作一样,不过不需要break;
select(data){
valA: stateA;
valB: stateB;
......
default: stateDefault;
}
所以本段code的思路是
①先从start这个state开始,直接跳到解析etherHead的部分
②从数据包里提取出Ethernet header
③判断包头中的Type是否为Ipv4
④若是,则跳转到pares_IPv4
Match-Action 的流水线集合
①emit 用于将头部字段添加到正在构建的数据包中。
②写与Parse的extract的反逻辑就行