Verilog开源项目——百兆以太网交换机(七)包修改模块设计

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个,当发生风暴时,可以有以下三种策略

  1. 不受风暴TKM控制;
  2. 受风暴TKM控制;
  3. 风暴严重时关闭端口;

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干货分享!

  • 27
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值