【原】BCM5633x Layer-2/3 千兆交换芯片系列之二 — 基于电信标准的二层功能的实现

 

BCM5633x交换芯片基于电信标准的二层功能的实现

 

对于交换芯片来说,L2转发是一个最基本的功能。L2功能主要包括ingress过滤、MAC学习和老化、根据MAC+VLAN转发、广播与洪泛、生成树控制等基本功能。

如图,L2的转发流程:

 

【原】BCM5633x Layer-2/3 千兆交换芯片系列之二 — 基于电信标准的二层功能的实现

数据包进入端口后,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表。

广播包也遵循单播包的处理流程。经历过地址学习后,该报文会在所有VLAN中广播。

最终,符合条件的报文会通过一个(部分/全部)端口转发出去。

 

下面,具体说明一下2层功能的实现

地址学习

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互斥。

 

 

你可能感兴趣的:(电信)