Verilog开源项目——百兆以太网交换机(六)Packet filter单元设计

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 ArbiterPacket 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

  1. 检查Packet是否带有VLAN tag,单层VLAN or QinQ;
  2. 若不带VLAN tag,则在LPH中填上Port VLAN,L2 check pass;
  3. 若带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干货分享!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值