开篇首先记住一张图
上图展示了一个P4程序通过编译载入到芯片中,通过底层驱动与上层API和控制面进行配合。
今天首先学习P4语言的一部分。P4有14和16版本,这里以16为例。
P4的数据面模型是PISA形式,即不依赖协议的交换机架构。当收到报文时,首先解析器解析报文头部信息,之后通过Match-Action去匹配,最后通过deparser封装报文头部信息,转发出去。
在上述过程中,是一个流水线的一半的过程,即是pipeline的ingress或者egress的流程。一条流水线如图:
其中PRE是包复制引擎,TM是流量管理器。
TNA架构包含的部分为:
ingress 和 egress的pipeline、tf的固有数据、PacketIO、Packet复制引擎(PRE)、TM
一个合格的P4程序:
#include <core.p4>
#include <tna.p4>
parser start {
}
control ingress {
apply {
// 处理入口数据包的逻辑
}
drop {} // 丢弃不符合规则的数据包
}
control egress {
apply {
// 处理出口数据包的逻辑
}
drop {} // 丢弃不符合规则的数据包
}
除此之外,还要定义头文件:
header_type ethernet_t {
bit<48> dst_addr;
bit<48> src_addr;
....
}
header ethernet_t ethernet_header;
以上就是今日主要分享的内容,包括前置知识P4交换机结构以及P4程序的工作流程、P4程序模板。
下期继续学习P4!!