Broadcom以太网交换芯片培训(broadcom56504/56300)
1、 交换芯片架构
交换芯片由 GE/XE 接口(MAC/PHY)模块、CPU 接口模块、输入输出匹配/修
改模块、MMU 模块、L2 转发模块、L3 转发模块、安全模块、流分类模块等模块
组成,其结构如图 1 所示:
图 1 交换芯片的组成
56504 包含 24 个 GE 端口,4 个 10G 端口,10G 端口既可以用于堆叠,也可以用
于上联/级联。56504 交换芯片与 CPU 的接口称为 CMIC 接口。交换芯片与 CPU 通
过 PCI 总线连接。其他类型交换芯片与 CPU 的接口可以是:SPI+MII、I2C+MII、
系统总线+MII、SMI+MII 等。交换芯片的包处理流程如图 2 所示:
图 2 交换芯片的包处理流程简图
包由端口进入交换芯片之后,首先进行包头字段匹配,为流分类做准备;然
后经过一个安全引擎进行包过滤;符合安全的包进行 L2 交换或者 L3 路由,并经
过流分类处理器对匹配的包做相关动作(比如丢弃、限速、修改 VLAN 等);对
于可以转发的包根据 802.1P 或 DSCP 放到不同队列的 buffer 中,调度器根据优
先级或者 WRR 等算法进行队列调度,在端口发出该包之前执行流分类修改动作,
最终从相应端口发送出去。
2、 L2 转发流程
2.1 L2 转发原理
对于交换芯片来说,L2 转发是一个最基本的功能。L2 功能主要包括 ingress
过滤、MAC 学习和老化、根据 MAC+VLAN 转发、广播与洪泛、生成树控制等基本
功能。
L2 转发的具体流程如图 3 所示:
从端口进入交换芯片的包首先检查 TAG,对于 tagged 包,判断是否是 802.1p
的包,(802.1p 的包 vid 为 0),对于 untagged 的包和 802.1p 的包,根据系统
配置加上 tag(这些配置包括:基于 MAC 的 vlan、基于子网的 vlan、基于协议
的 vlan 和基于端口的 vlan)。经过这一步以后,到交换芯片内部的包都变成
802.1Q 的 tagged 包了(vid 为 1-4094,4095 保留),如果设置了 ingress 过
滤,就会检查本端口是否在该 vid 对应的 VLAN 中,对于本端口不在该 vid 对应
的 VLAN 中的包就丢弃。对于没有设置 ingress 过滤,或者设置 ingress 过滤但
本端口在该 vid 对应的 VLAN 中的包进行 STP 端口状态检查,对于 BPDU 以外的包,
只有端口处于 forwarding 状态,才允许包进入。然后进行原 MAC 地址检查,以
原 MAC+VID 的哈希为索引查找 L2 TABLE,如果没有找到,就把这个表项(原 MAC
+VID)以及对应的端口写到 L2 TABLE 中,这个过程称为 MAC 地址学习。当然地
址学习的方法有很多种,可以是硬件学习,也可以是软件学习,可以根据 PORT
表中的 CMI 字段的配置来进行。
下一步进行目的 MAC 地址检查:
图 3 L2 转发流程
目的 MAC 地址为广播地址(0xffffffff)的包,在 vlan 内广播出去;
目的 MAC 地址为组播地址的包,进行组播流程的处理;
对于单播包,查找 L2 TABLE,如果没有找到,就在 vlan 内进行洪泛;如果找到,
检查表项中的 L3 bit 是否设置,如果设置了 L3 bit,就进行 L3 流程的转发;
否则就转发到 L2 TABLE 表项中的端口去,在 egress 方向,也有 egress 过滤设
置(默认是使能的),如果 egress 端口不在 vlan 中也是不能转发的。至此,L2
转发流程完成了。与地址学习相反的过程是地址老化。地址老化的机制是:ASIC
内部有个定时器,称为 age timer,命令行可以对这个寄存器进行设置,每次查
找 L2 TABLE 时(包括原地址查找和目的地址查找,可以配置),如果命中,就
会设置 hit 标志。当老化时间到后,ASIC 把 hit 标志清除,当下一个老化时间
到后,ASIC 把 hit 为 0 的地址设置为无效,这就是为什么实际地址老化的时间
为 1~2 倍 agingTime 的原因。
2.2 L2 转发相关的表项
2.2.1 port 表
图 4 port 表
Port 表是一个非常重要的表,有很多与端口相关的控制都在这里设置。每个端
口对应一个表项,按端口号进行索引。下面介绍一下重要的设置:
1) PVID:设置 PORT_VID
2) 缺省优先级:设置 PORT_PRI
3) 流分类使能:设置 FILTER_ENABLE
4) VLAN 转换使能:设置 VT_ENABLE 和 VT_MISS_DROP
5) Ingress 过滤使能:设置 EN_IFILTER
6) 信任 COS 还是信任 DSCP:对于 IPV4:TRUST_DSCP_V4=0:信任 COS;
TRUST_DSCP_V4=1:信任 DSCP,对于 IPV6:同样设置 TRUST_DSCP_V6。
7) Ingress 方向 mirror 使能:设置 MIRROR
8) MAC 地址学习方式:设置 CML
9) IP 组播是否使用 VLAN 信息:设置 IPMC_DO_VLAN
10) L3 转发使能:设置 V4L3_ENABLE 和 V6L3_ENABLE
11) 是否丢弃 BPDU:设置 DROP_BPDU
12) 控制是否转发带 tag 和不带 tag 的包:设置 PORT_DIS_TAG 和 PORT_DIS_UNTAG
13) Pause 帧控制:设置 PASS_CONTROL_FRAMES
14) 基于子网的 VLAN 使能:设置 SUBNET_BASED_VID_ENABLE
15) 基于 MAC 的 VLAN 使能:设置 MAC_BASED_VID_ENABLE
16) 设置堆叠口:HIGIG_PACKET
17) 设置 NNI 口:NNI_PORT
18) 修改优先级使能:MAP_TAG_PACKET_PRIORITY
19) 堆叠口 modid 设置:MY_MODID
20) Out tpid 设置:OUTER_TPID
21) 基于 MAC 和基于子网的 VLAN 优先级设置:VLAN_PRECEDENCE
22) 是否允许单臂桥功能:PORT_BRIDGE
23) IP 组播位图设置:IGNORE_IPMC_L2_BITMAP 和 IGNORE_IPMC_L3_BITMAP
2.2.2 egress port 表
EGR_PORT 是一组寄存器,每个端口一个,用于 EGRESS 方向的控制,有几个重要
图 5 egress port 表
设置介绍如下:
1) 设置 egress 端口类型:PORT_TYPE=0,UNI 端口;PORT_TYPE=1,NNI 端口
2) 设置 egress 过滤:EN_EFILTER=1
2.2.3 L2 地址表
图 6 L2 地址表
56504 的 L2 地址表大小为 16K,5630X 的 L2 地址表大小为 8K,地址
表使用 MAC+VID 的 hash 值作为索引查表。实际上 56504 的 L2 地址表 hash 值为
4K,每个 hash 值对应 4 条地址,这样最多可以保存 4 条 hash 冲突的地址。地址
表中每个表项都保存了 MAC_ADDR 和 VLAN_ID。MAC 学习的时候使用原 MAC+VID
的 hash 查表,把表中的 MAC+VID 与包中的 MAC+VID 进行比较,如果完全相等,
表示找到了。然后看端口(TGID_PORT)是否相等,如果不相等表示地址发生了
迁移,对于动态学习的地址需要更新 port;如果相等表示命中,更新 hit 标志。
其他几个重要的功能介绍如下:
1) 设置静态地址:STATIC_BIT=1
2) 设置 L3 转发标志:L3=1
3) 设置本地址的包都转发到 CPU 去:CPU=1
4) 设置本地址匹配的包丢弃:SRC_DISCARD=1、DST_DISCARD=1
5) 设置本地址匹配的包对某些端口阻塞:MAC_BLOCK_INDEX
6) 设置本地址匹配的包镜像:MIRROR=1
7) 设置组播索引:L2MC_PTR
8) 地址有效标志:VALID=1
2.2.3 VLAN 表
Vlan 表分为 ingress 和 egress 两个部分,分别对应入口控制和出口控制。
图 7 ingress vlan 表
Ingress Vlan 表中主要包含了端口列表,用于 ingress filter 功能。
PFM 是用于控制组播洪泛的开关。PFM=0,组播在 vlan 内洪泛;PFM=1,注册
的组播按组播表转发,未注册的组播在 vlan 内洪泛;PFM=2,注册的组播按组
播表转发,未注册的组播丢弃。STG 用于标识本 vlan 所属的生成树组。
图 8 egress vlan 表
Egress vlan 表中除了 PFM 和 STG 外,还包含了出口方向的端口位图,以及哪些
端口以 untag 的方式发送本 vlan 的包。
3、 L3 转发流程
图 9 L3 转发流程
如果查目的 MAC 地址表的时候发现 L3bit 置位了,就进入到 L3 转发流程。
与 L2 交 L3 交换可以实现跨 VLAN 转发,而且它的转发依据不是根据目的 MAC 地
址,而是根据目的 IP。L3 转发的流程是:首先对 L3 头部进行校验,校验和错的