Verilog开源项目——百兆以太网交换机(七)包修改模块设计
🔈声明:未经作者允许,禁止转载
😃博主主页:王_嘻嘻的CSDN主页
🔑全新原创以太网交换机项目,Blog内容将聚焦整体架构、模块设计方面;更新周期可能会略慢,希望朋友们多多包涵
🧡关注本专题的朋友们可以学习到原创交换机设计的全流程,包括设计与验证(FPGA)。
🚩第一代交换机 — 从零开始 verilog 以太网交换机系列专栏:点击这里
💥第二代交换机 — Atom(百兆以太网交换机)专栏:点击这里
包修改模块 PM(Packet Modifier)和PF对称,负责Atom出口Packet的整合,Packet从PM出去后就不再被改变。PM将负责出口带宽控制、风暴控制、VLAN映射、VLAN透传等VLAN管理,以及流量统计。
一、Feature
- 100M时钟下,pipeline处理,处理速度支持25Gbps;
- 支持通过令牌桶控制发送速率;
- VLAN manage:Insert VLAN、VLAN map、QinQ VLAN透传;
- 支持风暴控制(multicast、boardcast和no dest packet);
- 支持流量统计;
- 支持Flush功能;
二、概述
PM采用申请的方式从DB获取Packet,这是因为PM需要支持Port出口限速,以及风暴控制,会导致某些Port不能接收Packet,所以由PM主动申请数据更合理。PM内存在4个Port buffer,各自对应一个MAC,并提供buffer almost full信号。每个Port使用两个TKM来实现output QoS,一个负责Port出口控速,另一个负责Port的风暴控制,共计8个TKM。PM根据buffer almost full和TKM的令牌情况决定如何从DB获取Packet。
当DB发送Packet至PM后,PM根据LPH确定VLAN策略,重新组包发送至对应mac buffer,并进行相应Packet type进行统计。
三、接口
四、功能设计
a)QoS & Storm control
为了在出口Port同样支持带宽控制,以及风暴控制,将在PM模块中支持该特性。
Normal Packet(单播)的output width control通过TKM来实现,TKM动态维护normal Packet令牌数,由TKM增加令牌数量,每次发包PM请求减少令牌数量。PM对multicast、boardcast pkt采用另一个TKM,以此控制多播包的速率,该TKM将不针对单播包改变令牌数量。
风暴控制:每个Port都需要有独立的TKM,共PORT_NUM * 2=8个,当发生风暴时,可以有以下三种策略:
- 不受风暴TKM控制;
- 受风暴TKM控制;
- 风暴严重时关闭端口;
b)VLAN管理
和商用交换机类似,Atom的Port也分为了三种模式:access、trunk、hybrid,默认状态下统一为hybird模式,每种模式对VLAN tag的处理都不相同。
PM主要功能就是根据LPH的dst Port、Port type、VLAN状态进行组包,并发送至TMAC,其中最为复杂的便是VLAN处理。
在Atom中支持VLAN以及QinQ,以下是untagged Packet、tagged Packet和QinQ Packet结构,tagged Packet在Source MAC和Length field间插入了一个4B的VLAN tag,而QinQ加入了内外两层的VLAN tag,其中内层VLAN tag常用于用户定义,外层VLAN tag常用于厂商定义。Atom中如何识别VLAN和QinQ Packet的具体实现方案可以参考PF模块的介绍:Verilog开源项目——百兆以太网交换机(六)Packet filter单元设计。
- TPID:Tag Protocol Identifier(标签协议标识符),表示数据帧类型;
- PRI:帧优先级,dot1p;
- CFI:规范标识位,0为规范格式;
- VID:VLAN ID;
VLAN管理
VLAN映射可以修改报文携带的VLAN Tag或为报文添加VLAN Tag,实现不同VLAN ID之间的相互转换。Atom支持下面几种映射能力:
- 1:1 VLAN映射:将某一特定VLAN的报文所携带的VLAN Tag替换为新的VLAN Tag;
- N:1 VLAN映射:将多个VLAN的报文所携带的不同VLAN Tag替换为相同的VLAN Tag;
- 1:2 VLAN映射:为携带有一层VLAN Tag的报文添加外层VLAN Tag,使报文携带两层VLAN Tag。
- 0:2 VLAN映射:为没有携带VLAN Tag的报文添加两层VLAN Tag。
- 2:2 VLAN映射:将携带有两层VLAN Tag的报文的内、外层VLAN Tag都替换为新的VLAN Tag。
Atom在PM中通过VLAN map table来实现VLAN映射功能,当packet从DB发送到PM后,PM即开始判断是否需要VLAN map。只有规则完全匹配,才能进行VLAN map,例如packet为双层VLAN,但是内层VLAN对应1:2VLAN映射规则,此时判断为匹配失败,拒绝映射。
Atom每个Port将支持128条映射规则。
VLAN透传
VLAN透传功能可使端口在收到带有指定VLAN Tag的报文后,不为其添加外层VLAN Tag而直接在运营商网络中传输。
Atom如果需要开启VLAN透传功能,必须在配置VLAN透传功能前,配置端口路为Trunk/Hybrid类型,并在报文传输路径的所有端口上都配置允许透传VLAN通过。为了便于实现Atom将不支持同一接口上同时配置VLAN透传和VLAN映射。
Atom每个port将支持16条VLAN透传配置(直接以寄存器形式实现),当启用透传后,原本的QinQ规则将无效。
基于端口管理的VLAN
Atom支持两种VLAN管理方式:基于端口管理的VLAN、基于MAC地址管理的VLAN。缺省情况下,对于Untagged报文的处理优先级为:基于MAC的VLAN > 基于端口的VLAN。
以下为不同端口类型的VLAN管理行为:
当端口为Trunk或Hybrid类型时,每个端口存在一份VLAN ID list配置,用于控制允许哪些VLAN向外发送,Access类型端口可以不进行配置。
基于MAC地址管理的VLAN
无线终端可能本次使用Port A接入网络,下次使用Port B接入网络。如果Port A和Port B的VLAN配置不同,那么第二次设备接入会被划分到另一VLAN,导致报文丢失或发生其它不可预计的情况;如果Port A和Port B的VLAN配置相同,当Port B被分配给别的终端设备时,又会引入安全问题,这种情况下基于MAC的VLAN将起到作用。
Atom中仅支持静态MAC VLAN配置,且只在Hybrid端口类型起作用:
- 手动配置静态MAC VLAN:用户强制配置MAC、VLAN、Port等关系,无法被后续相同的MAC所修改;
- 动态触发端口加入静态MAC VLAN:当用户不确定该MAC会从哪个Port接收时,先绑定MAC和VLAN关系,等交换机运行后,根据该MAC的实际情况确定Port信息;
基于MAC地址管理的VLAN将在PF实现,仅负责插入VLAN tag或更新MAC VLAN list。
c)流量统计
支持Port level的流量统计,例如:
- Port totally byte cnt / packet number
- Port ipv4/ipv6 byte cnt / packet number
- 组播/广播packet byte cnt / packet number
将这些寄存器放在PM本地维护,直接assign to CSR,上层通过读寄存器获得统计值。
d)Flush
当PM完成LPH中携带Flush标志的Packet后,通过给CSR发送一个flush done的脉冲使得CSR结束Flush流程。
五、数据结构
a)LPH
LPH(Local Packet Header)是Atom定义的内部传输的一种数据格式,把Packet中提取的重要信息,或者需要在Atom中传输的自定义数据都放在LPH中,避免模块冗余逻辑。
b)VLAN map table
Atom的每个Port将支持128条VLAN映射规则,具体映射表如上图所示,需要用户定义映射类型、原始内外层VLAN tag以及映射后的内外层VLAN tag。
其中VLAN map type由0x0~0x4分别对应了1:1、N:1、1:2、0:2、2:2的映射方式,需要注意的是packet需要完全和规则对应才能执行映射规则,否则结束映射检测。例如:rule0对应1:2映射,此时只需比较Packet.inner VLAN ID是否为0x100,若匹配成功,则将内层VLAN ID替换为0x200,并插入VLAN ID为0x3的外层VLAN tag,不需要在意原始外层VLAN这项。
而rule1对应为2:2映射方式,就需要Packet的内外层VLAN ID完全匹配,当然Packet需要满足基础的VLAN tag个数。
c)VLAN ID list
Atom采用全局VLAN ID list共享的模式,支持所有内层VLAN ID的管理,采用一块32-bits x 512的ram实现,每个VLAN ID占据4-bits,分别对应4个Port,每个个地址存放8个VLAN ID,共4096 VLAN ID,其中VLAN0和VLAN4095默认全0,保留功能。
具体格式如下图,VLAN1存放在地址0的7~4 bits,图中值为‘0110’,表示只有Port1、Port2允许该VLAN通过。
d)MAC VLAN list
Atom的MAC VLAN list同样共享,格式如下:
- MAC VLAN type用以区分是手动配置还是动态触发;
- Src mac和mask为用户定义的源MAC地址和掩码,用来控制MAC地址的模糊匹配或精确匹配;
- VLAN ID为该MAC地址所对应的VLAN ID;
&emsp手动配置模式,定义的MAC VLAN只对untagged Packet进行VLAN 插入的作用;而动态触发模式,会将匹配上的VLAN记录在VLAN ID list中,并点亮对应Port。
若有不专业或错误之处,欢迎指正!
具体电路实现及验证环境代码会在准备完毕后开源,目前暂时不能给出,请见谅
搜索关注我的微信公众号【IC墨鱼仔】,获取我的更多IC干货分享!