Verilog开源项目——百兆以太网交换机(六)Packet filter单元设计
🔈声明:未经作者允许,禁止转载
😃博主主页:王_嘻嘻的CSDN主页
🔑全新原创以太网交换机项目,Blog内容将聚焦整体架构、模块设计方面;更新周期可能会略慢,希望朋友们多多包涵
🧡关注本专题的朋友们可以学习到原创交换机设计的全流程,包括设计与验证(FPGA)。
🚩第一代交换机 — 从零开始 verilog 以太网交换机系列专栏:点击这里
💥第二代交换机 — Atom(百兆以太网交换机)专栏:点击这里
Atom PF是Switch入口的重要一环,负责接收的所有Packet的过滤工作,包括L2 VLAN check、L3 IP header checksum check、L4 TCP/UDP header checksum check以及用户自定义过滤规则ACL。
本文将主要介绍PF的功能,不具体介绍每个功能点该如何实现。
一、Feature
- 100M Clk下,pipeline处理,处理速度支持25Gbps;
- MAC->PF path上Bcnt Level Arbiter或Packet Level Arbiter;
- 支持L2 filter,VLAN检查;
- L3/4 filter,IP/UDP/TCP header检查;
- ALC,进行流量类别的检测(防火墙功能),可以根据规则进行指定动作,支持64条rule;
- 优先级控制;
- 纯逻辑实现的TCAM单元,支持五元组包过滤;
- 支持Packet Flush;
二、概述
当数据包被MAC接收处理后,会统一发向PF进行网络层面的筛选过滤,Atom有4个port,对应4个MAC,将以25M的速率向PF发送数据包,PF以100M时钟接收数据包。为了更好的支持port间的公平性,PF支持Byte cnt和Packet cnt两种粒度的仲裁方式。
经过仲裁选出需要检查的packet后,PF以流水的形式分别检测L2 header中的VLAN是否允许packet通过、L3/4 header中各个field是否正确,最后执行ACL,根据用户制定的规则,查询所要求执行的操作,最后以LPH+payload的形式将packet送往Data Buffer。
三、接口
四、功能设计
a)MAC arbitration
Atom中PF需要将多路MAC汇聚成一路,并按端口号处理Packet。考虑到大小包之间仲裁的公平性,PF将实现Byte cnt level/Packet level两种仲裁方式。
- Bcnt level arbitration:例如每次仲裁可以允许MAC通过2KB数据,否则等待下一轮仲裁
- Packet level arbitration:按packet number仲裁,例如每个MAC通过1个packet
b)优先级映射
Packet在进入设备后,设备会根据映射规则修改Packet的本地优先级,为队列调度和拥塞控制服务,Atom将优先级统称为TC(traffic class),并定义了8个TC,TC map将统一实现在PF中,Atom可以配置三张TC map table,优先级配置由global register决定:
- Port priority map table:根据Packet的Port ID,通过Port map table进行TC映射;
- VLAN priority map table:根据VLAN tag中的PRI,通过VLAN priority map table进行TC映射;
- DSCP priority map table;根据IP header中的DSCP,通过DSCP map table映射出对应TC,DSCP如下图所示,共6-bits,有64种类型;
除上述三种TC map table的方式,还可通过ACL更改特殊的流量拥有指定优先级。修改后的TC值将统一记录在LPH中。
c)L2 filter
- 检查Packet是否带有VLAN tag,单层VLAN or QinQ;
- 若不带VLAN tag,则在LPH中填上Port VLAN,L2 check pass;
- 若带VLAN tag,则根据TPID list进行对应检查,若检查成功,允许Packet通过,否则直接丢弃;
Atom中内外层VLAN都允许定义4个TPID,组成inner TPID list和outer TPID list,并利用bitmap的表示,将Port和TPID映射,确定每个Port允许哪些VLAN TPID进入。
例如,上图中Port3的内层VLAN TPID为0x8102和0x8103,外层VLAN TPID为0x8200。通常外层TPID由运营商配置,内层TPID由用户自行配置。
不论哪层的VLAN tag都是可以定义的,但为了发送tagged Packet能被其它设备准确识别,需要设置正确的TPID,设备通过TPID的比较来确定Packet type,TPID需要用户设置准确,否则将被下游设备识别错误,曲解用户本意。
Note:不能与一些特定的协议类型编号相同,否则会导致接口不能正确区分相应类型的协议报文。如:协议类型不能配置为0x0806(ARP协议对应的协议号)
d)L3/4 filter
Atom暂时仅支持MAC + Ipv4/ipv6 + UDP/TCP 类型packet,其它ethertype packet统一作为payload一并发送,所以payload将超过1500B。
L3/4 filter主要负责根据Packet type确定IP/UDP/TCP header位置,以及其中checksum位置,并检查checksum是否正确,若检测失败,则直接丢弃该Packet
e)ACL
当用户提前为某些数据包制定特殊规则时,将通过外部通道将规则写入,action table和Atom TCAM中,而PF将Packet的五元组作为输入,发送给Atom TCAM,得到是否匹配以及对应哪条规则的信息,再从action table得到对应操作,Atom支持以下action(按优先级排列):
- 丢弃该Packet;
- 指定port发送(则该Packet不需要eng指定流向);
- 修改dst mac addr;
- 修改dst IP addr;
- 修改dst TCP addr;
- 修改指定优先级;
f)Flush
为支持port切换设备等应用,需实现port level flush功能,保证该port所有Packet传输完成。
CSR给出flush信号后,PF将不再接收任何符合要求的packet,并在队列尾插入一个flush packet。直到flush register拉低后,允许正常接收Packet。
五、数据结构
a)LPH
LPH(Local Packet Header)是Atom定义的内部传输的一种数据格式,把Packet中提取的重要信息,或者需要在Atom中传输的自定义数据都放在LPH中,避免模块冗余逻辑。
b)优先级映射表
Port/VLAN/DSCP priority map做法都类似,通过bitmap的方式,选择对应优先级,以Port priority map table为例:优先级采用onehot形式,Port对应的优先级点亮即代表从该Port进入的Packet的优先级。
c)Action table
Action table由一块64x109-bits的SRAM实现,存储action rule,支持64条规则,存储方式如下:
若有不专业或错误之处,欢迎指正!
具体电路实现及验证环境代码会在准备完毕后开源,目前暂时不能给出,请见谅
搜索关注我的微信公众号【IC墨鱼仔】,获取我的更多IC干货分享!