Section 4:Packet Flow
L2 Ingress Packet on Gbe/10-Gbe PORTS
GbE:千兆以太网,经济高效的特点,网络中断最小化是因为能够避免协议变更;部署灵活,能够在光纤连接上运行1000BASE-X或在标准5类铜缆连接上运行1000BASE-T。 服务质量号。利用端口聚合和全双工,完全使用带宽
BCM56680支持标准的Ethernet/IEEE 802.3 packets(64bytes到1522bytes),也可以多达12k bytes的包。
The packet parse within the ingress block parse :Parse an incoming packetsand extracts all the fields
Need by:ingress logic and ContentAwareprocessor.
Determines if the packets:tagged,untagged,or priority tagged.
数据包进入端口后,5633x会检查数据包的TAG域,如果是Untagged 包或者是802.1p的包(802.1p的包vid=0),会根据端口的配置加上Tag(加TAG的操作可基于上述图中描述的方法)。这样,进入交换机内部的网络包都变成了802.1Q标准的Tagged数据包了。
此时,如果交换机配置了Ingress过滤,硬件逻辑会检查该端口在不在VID对应的VLAN中,如果不在,则丢弃该包;如果在,则会进行STP端口状态检查,对于上述非BPDU包,只有端口处于Forwarding状态,才允许包进入;如果交换机没有配置Ingress过滤,硬件逻辑不会检查端口、VID和VLAN的关系,而只进行STP端口的状态检查,对于上述非BPDU包,只有端口处于Forwarding状态,才允许包进入。
接着,会进行MAC地址表(地址 :VID:接口:时间)查询。
首先进行MAC_SA查询,5633x根据数据包的源MAC + VID查询L2Table。如果L2Table中存在源MAC和对应的VID,表示该地址信息之前已经学习到了,则转入MAC_DA查询;如果L2Table中不存在该记录,则根据CML的配置进行处理,Learn/Copy/Drop。如果配置要求进行地址学习,那么会将MAC和VID写入L2Table,实现地址学习功能。除Drop动作,执行完后进入MAC_DA查询;
MAC_DA查询,MAC_DA查询主要用以实现转发路径的确定。查找的表包括L2_User_Entry和L2_Entry。
如果在L2_User_Entry中找到对应的MAC_DA,那么根据BPDU设置来确定转发的目的类型:BPDU=0,转发目的是DST_MODID和DST_PORT;BPDU=1,表示是BPDU包,处理Drop/Copy/Flood;如果在L2_User_Entry中没找到,在L2_Entry中找到,则转发到对应的DST_MODID和DST_PORT/TGID;如果以上两个表都没有MAC_DA的记录,那么就在VLAN中Flood。
对于多播报文,遵循单播包的处理流程。不过多播包在L2_Entry表中匹配完成后生成的索引值(还在L2_Entry中),用来索引L2MC表。
The L2MC table specifies which port bitmap the packet egresses toupon the setting of the PFM field. The PFM field is VLAN-based. A
PFM value of 0 causes the packet to flood to the member of that VLAN. A PFMvalue of 1 causes the packet to be forwarded
to the ports that are specified in the L2MC table. A PFM value of 2 causes thepacket to be dropped if there is no match in
the L2_Entry table. Otherwise, if it is a match, then the packet is forwardedto the specified ports. In the case where multiple
BCM56680 devices are connected through HiGig links, the multicast packet isforwarded from one local BCM56680 device
to another, provided that the HiGig links are set as part of the L2MC tableentries. The L2MC entries must be in the same
location for both local and remote devices. This is because the L2MC Pointer isembedded in the HiGig module header.
广播包也遵循单播包的处理流程。经历过地址学习后,该报文会在所有VLAN中广播。
最终,符合条件的报文会通过一个(部分/全部)端口转发出去。
L2_USER_ENTRY:
表的最小索引:0
最大索引:511
地址:0x07A4000
记忆表描述:结合L2_ENTRY TCAM/Data RAM来保证L2 entries 和BPUDS,这个表是有软件来编程。表中的entries不能被动态的学习也不能被硬件老化进程所影响。
TCAM:
TCAM (ternary content addressable memory)是一种三态内容寻址 存储器,主要用于快速查找ACL、路由等表项。 TCAM中每个bit位有三种状态,除掉“0”和“1”外,还有一个 “don’t care”状态,所以称为“三态”.
Address: 0x07A40000
Memory Table Description: Combined L2_ENTRY TCAM/Data RAM for guaranteed L2entries and BPDUs.
This table is programmed by software. Entries in this table cannot be learneddynamically and are not affected by the hardware aging process.
BPDU:
网桥协议数据单元(Bridge Protocol Data Unit)。是一种生成树协议问候数据包,它以可配置的间隔发出,用来在网络的网桥间进行信息交换。
BPDU内包含了STP所需的路径和优先级信息,STP便利用这些信息来确定根桥以及到根桥的路径
地址学习
BCM5633x支持MAC地址学习功能。BCM5633x有一个内部L2_ENTRY表,该表逻辑上由4096个buckets(每个bucket有8个entries)组成,所以支持8K个入口。每个入口即代表一个地址学习域,所以可以最多存储8K条地址信息。
地址老化
在经历地址学习之后,同样需要进行老化过程。地址老化是为了保证当前网络拓扑结构尽可能处于最新状态,同时也考虑到交换机内部存储不足以维护很大转发表的因素。
5633x的地址老化机制:芯片内部有个定时器,称为aging timer,该定时器通过寄存器L2_Age_Timer可对MAC地址的老化使能和老化时间进行配置。当新学习到MAC地址或者之前已经存在的记录重新被命中,就会设置对应的hit标志(源Hit 和 目的Hit)。当老化时间到后,硬件清除hit标志,当下一个老化时间到后,CPU删除hit为0的记录,这样一来,真正的老化时间将会是配置的老化时间的1~2倍。
BCM5633x支持硬件老化和软件老化。
当一个老化时间到达时,5633x从L2_ENTRY中删除hit bit为0的entry,并将到达老化时间的entries的hit bit清零,等待下一个老化时间到达时删除。
老化时间配置:
L2_AGE_TIMER.AGE_ENA= 1; 使能老化机制
L2_AGE_TIMER.AGE_VAL= xxx; 配置老化时间20bits,单位是秒。
初次配置老化使能后,因为要好内部时钟同步,所以须等待3倍老化时间。
端口镜像
端口镜像被用来在特定端口(或者端口组)监控交换机的出入流量。流量可被镜像到一个不被使用的端口,从而网络嗅探器可以连接该端口,从而达到监控目的。端口镜像按照流量方向分为:入口镜像和出口镜像。
入向镜像:将该端口收到的网络包镜像到监控端口
出向镜像:将该端口发出的网络包镜像到监控端口
5633X支持双方向镜像,支持镜像包的多份拷贝,支持指定MAC_SA和MAC_DA的镜像。5633X在端口镜像的时候,可单独配置成两种镜像方式:
Mirroring only mode:仅仅镜像packet,不提供地址学习和DA查询功能
Switch and mirroring mode:5633X 在对packet镜像的同时,也执行交换功能—地址学习和DA查询。
入向镜像
1. PORT.MIRROR= 1; /* 配置端口镜像使能 */
2. IM_MTP_INDEX.MODULE_ID= xxxxxxx;
3. IM_MTP_INDEX.PORT_NUM= xxxxxx;
4. MIRROR_CONTROL.IM_MTP_INDEX= (b, c)的指针;
说明:当端口的入口方向的镜像使能后,则查找MIRROR_CONTROL寄存器的IM_MTP_INDEX指向的IM_MTP_INDEX的入口,找到镜像的端口号(数据包镜像到的端口号,以及所在的模块号)。
出向镜像
1. EMIRROR_CONTROL设置需要镜像的端口的位图
2. EM_MTP_INDEX.MODULE_ID= xxxxxxx
3. EM_MTP_INDEX.PORT_NUM= xxxxxx
4. MIRROR_CONTROL.EM_MTP_INDEX= (b, c)的指针
说明:EMIRROR_CONTROL的端口位图指出哪个端口的数据需要进行出方向的镜像,MIRROR_CONTROL.EM_MTP_INDEX和EM_MTP_INDEX则共同实现镜像的目的端口
多播/广播/未知单播镜像
Trunk口镜像
8个物理端口可以组成一个Trunk。
Trunk的入向镜像:EGR_IM_MTP_INDEX指明了镜像到的端口
Trunk的出向镜像:EGR_EM_MTP_INDEX指明了镜像到的端口
注意:注意的问题参考开发手册
基于MAC地址的镜像
进行L2层表查询的时候,可以为指定MAC地址的报文开启镜像功能.
基于报文流的镜像
不说明
流量及拥塞控制
流量控制分为两种情况,半双工和全双工模式的流控。
半双工模式下的流控方式:后压式流控和载波检测方式(遵循CSMA/CD协议)
全双工模式下的流控方式:遵循IEEE802.3x定义的PAUSE控制帧
后压式流控:在半双工模式下,当接收端因持续突发数据量而造成缓冲区溢出,或者网络拥塞时,接收端可制造一次冲突(碰撞),冲突会将总线上的信号电压变大(一般是多站点的叠加值),造成多站点将要发送数据的假象。一旦发送方检测到信号强度过大,将退避发送。退避的意思是发送端将等待一个随机时间再进行数据发送,当等待时间超时后仍能检测到“冲突迹象”则继续退避。以太网采用截断二进制指数退避算法来解决碰撞问题;
载波检测方式:当接收端缓冲溢出时,接收端可向对端发送载波监听信号,造成要发送数据的假象,接收到该信号的站点将被抑制,直到取消载波监听信号。
PAUSE控制帧流控:网络拥塞时,接收端可向发送端发送PAUSE控制帧,接收到PAUSE控制帧的站点,将在PAUSE帧指定的时间内停止发送数据。
BCM5633x提供传统流控和服务相关的流控。传统流控是指通过Pause Frame后压整个port的形式来实现流控。服务相关的流控,则细致到port内部的每个CoS队列,每个CoS队列之间的流控是独立的,这样就允许基于CoS队列的细化流控。试想有这样一种情况:高优先级的流需要得到最小的丢失而被控制,低优先级的流需要被控制在一个门限范围(如果超出门限,不执行流控而直接丢弃),这样一来,独立的流控配置就显得很重要,尤其是对实时如VoIP等实时性比较强的业务很有帮助。
服务相关的流控配置
服务相关流控是在链路层进行的控制,也是基于端口的,使能LLFC_ENA
XPORT_CONFIG.LLFC_ENA = 1;
PRIO2COS_LLFC;配置映射关系
MMU_LLFC_TX_CONFIG_1/2;具体的参数
PFC(PAUSE frame control)
PFC是在MAC进行发送的,首先使能PAUSE机制,PAUSE_CONTROL=1(默认)
配置端口在收到PAUSE帧时允许通过,PORT.PASS_CONTROL_FRAMES=1(如果需要);MAC_RxCtrl.RxPausEn,收到PAUSE帧时停止数据发送;MAC_TxCtrl.TxPausEn,流控下,强制发送PAUSE帧。
BCM5633x对PAUSE帧携带的信息是可编程控制的。
基于端口的优先级标记
基于端口的优先级标记,即配置该端口接收的数据映射进高优先级队列还是低优先级队列。调度器根据调度算法,对不同优先级队列的数据包进行调度。BCM5633x可以配置每个端口的优先级,该优先级映射到内部的CoS队列,当某个端口配置了优先级后,过该端口的数据包最后将被压入对应的CoS队列中,调度器将根据调度算法将报文调度发送出去。
端口流控
端口流控本章4已介绍。PFC和SAFC互斥。
【本博客 http://www.cnblogs.com/iTsihang 中原创之博文,版权属作者所有,欢迎转载。转载之时请保留本段内容,否则作者将保留追究版权之权利】