Marvell DSA(分布式交换架构)
by 韩大卫@吉林师范大学
***************
请参见 Marvell Prestera/Cheetah/xcat/lion 系列交换芯片手册获取更详细的说明
Marvell DSA(分布式交换架构)技术使得设备之间通过级联的方式, 组成一个大型交换网络, 最大程度上加速报文的转发和处理. 在此系统中, 最多允许31个设备相连, 相连设备间的端口需要配置为级联端口, 这样端口间传输的报文会被芯片打上一个DSA 的标记(类似于VLAN), DSA Tag中主要信息有:
Vlan-ID , Souce ID(用于标记报文原始出处),
TrgDev(目的设备), TrgPort(目的端口), SrcDev(源设备), SrcPort(源端口)等.
所以首先要将级联系统中的每一个设备配置一个唯一的级联设备号(Hardware Device ID).0-31.
将指定端口配置为级联端口, 此时该端口同时应该关闭Ingess PCL, Bridge Engine, Policer engine, TTI lookups 和Route等功能. 设备对报文的处理, 仅根据报文中DSA Tag 的相关信息. 进而最大程度上加快报文的转发速度.
关于DSA Tag 的产生: 在一个设备中, 一个网络接口接收到报文, 并将其转发到其他端口, 如果某端口配置为DSA mode(级联接口). 在报文进入此级联接口时会被设备打印上DSA标记, DSA Tag 里的内容根据该设备的各种配置而定, 此后会一直携带此DSA Tag转发到所有可能进入的级联设备. 当报文由级联接口转发到网络接口时, DSA Tag会自动转换为IEEE 802.1Q格式的报文.
NOTE:
DSA Tag 可以分为DSA Extend mode和 DSA Regular mode.
DSA Extend mode 为8个字节, Marvell定义为两个word, Word 0 和word 1. DSA Regular mode 为4个字节, 只有一个word. DSA Extend mode会携带更多的信息. 现大多数Marvell Prestera/Cheetah/xcat/lion 系列交换芯片均支持 DSA Extend mode. 如果一个配置为 DSA Extend mode的级联接口与一个配置为DSA Regular mode的级联接口相连, 在传输报文时, 报文中DSA Tag会在两者间自动转换.
在级联系统中, 对于报文的转发, 根据报文有无已知出口路径而分两种情况,
一, 如在设备中存在有直接转发该报文的路径, 比如有该报文中目的MAC与出接口的对应关系的FDB表, 或者有PCL来指定报文的出接口, 那么此时报文根据设备中 “ Dev Map Table” 中目的设备与指定出接口的对应关系来转发至该出接口. 此报文可以当作在级联系统中的单播报文.
单播的报文中示例如下:
13:51:27.575755 00:16:31:fe:e7:e8 > 12:13:18:cc:dd:ff, ethertype Unknown (0xc100), length 68:
0x0000: 1213 18cc ddff 0016 31fe e7e8 c100 3001 ........1.....0.
0x0010: 1010 0101 0800 4500 0028 2b75 0000 4006 ......E..(+u..@.
0x0020: b9f0 c0a1 0a0a c0a1 0a1e 0014 04b0 1cbe ................
0x0030: 45aa 07a7 22fe 5000 0200 86a8 0000 0000 E...".P.........
0x0040: 0000 0000
DSA Tag 为: c100 3001 1010 0101
含义如下:
Word 0: c100 3001 :
[31:30]TagCommand : forwarding
[28:24]SrcDev : 00001 -------> 报文来自设备1
[23:19]SrcPort : 0000 -------> 来自设备1 的Port 0
[15:13]UP : 001 -------> User Priority 1
[12] : 1 -------> DSA Extend 类型
[11:0] : 1 -------> VLAN-ID 为 1
Word 1: 1010 0101
[28]EgressFilter 1: -------> 报文为已知路径的单播报文.
[24:20]Source ID 00001: -------> 1 : Souce ID 为 1
[10:5]TrgPort 0010000: -------> 8 : 目的port 为 8
[4:0]TrgDev 00001: -------> 1 : 目的dev 为 1
这样, 在dev 0的级联接口接收到此报文后, 根据dev 0 内部的Dev Map Table配置找到对应出接口, 转发报文.
NOTE:
Source ID
Source ID 为一个 5bit的数字, 用于在级联系统中标识一个设备, 建议与Hardware Device ID配置一致, 这样可以通过此Source ID 来看出报文来自哪个设备从而加以处理.默认值为0.
如果将ge 0 的”端口默认Source ID” 使能, 报文中的Source ID 为ge 0的默认Source ID配置.
对于级联系统中的单播报文, 可通过配置Dev Map Table来决定报文的走向, 例如, 对于上面的报文,
在设备中配置DEV MAP Table,--------------> 配置连接 Dev1 的接口为 8
这样, 上面的报文会被转发到ge 8.
二, 如果在设备中, 对此报文没有直接的出口路径, 那么便在级联系统中广播, 广播的报文示例如下:
14:19:12.911557 00:16:31:fe:e7:e8 > 12:13:18:cc:dd:ff, ethertype Unknown (0xd000), length 76:
0x0000: 1213 18cc ddff 0016 31fe e7e8 d000 3001 ........1.....0.
0x0010: 0010 1fff c100 3001 1010 0101 0800 4500 ......0.......E.
0x0020: 0028 e032 0000 4006 0533 c0a1 0a0a c0a1 .([email protected]......
0x0030: 0a1e 0014 04b0 19f8 d415 66eb f4b8 5000 ..........f...P.
0x0040: 0200 ca03 0000 0000 0000 0000
Word 0 : d000 3001
[31:30]TagCommand : forwarding
[28:24]SrcDev : 10000 -------> 报文来自设备16
[23:19]SrcPort : 0000 -------> 来自设备1 的Port 0
[15:13]UP : 001 -------> User Priority 1
[12] : 1 -------> DSA Extend 类型
[11:0] : 1 -------> VLAN-ID 为 1
Word 1 : 0010 1fff
[28]EgressFilter 0: -------> 报文为知路径的多播报文.
[24:20]Source ID 00001: -------> 1 : Souce ID 为 1
[10:5]TrgPort 1111111: -------> 8 : 目的端口为所有端口
[4:0]TrgDev 11111: -------> 1 : 目的dev 为所有设备
对于级联系统中的多播报文, 可使用Source ID Group 来决定报文的出口,
比如, 对于上述报文, 做如下配置:
一, 将接口 16 添加到 Soure ID group 1 中
二, 将接口 25 在 Soure ID group 1 中删除
这样, 同在 VLAN 1 下的ge 16和xe 25, 只有ge 16可以收到报文, 进而在级联系统中进行广播.
另外, Marvell 定义了一种 Fast Failover(快速故障处理) 的机制.
当级联系统中某一个设备出现故障时, 为保证链路畅通, Marvell允许用户定义弟二个出接口, 当设备默认出接口有问题时, 会自动切换到弟二个出接口.
NOTE:
Dev Map Table , Source ID Group , Vlan 几个表的作用范围:
作用范围依次变大:
Dev Map Table ----> Source ID Group --------> Vlan
首先, 要保证级联接口在报文的Vlan中.
对于要在级联系统中没有已知路径(广播)的报文, 使用Source ID Group来决定报文出口.
对于在级联系统中有已知路径(单播)的报文, 在满足Source ID Group情况下, 由Dev Map Table决定报文出口.
根据Marvell 提供的配置, 可以决定是否Source ID可以决定过滤DSA单播报文, 默认功能是使能的(因为单播的范围在广播范围中), 所以DSA单播报文, 需要先满足Source ID Group, 再根据Dev Map Table进行转发.
NOTE:
当两个设备作为级联时, 整个级联系统作为一个设备来学习目的设备/目的接口 与报文中MAC的对应关系.例如如果dev 0 的ge 0 进入报文经过ge 8发出, 最后由dev 11 的 ge 18转发到目的地, 之后该地址发送回应报文.
那么dev 0 自动学习的结果是:
VID MAC Interface Type DstDev
1 00:16:31:ff:31:11 18 dynamic 11
VID MAC Interface Type DstDev
1 30:16:31:ff:3a:ee 0 dynamic 0
如果不是作为级联系统, 那么dev 0 的学习结果仅为自身的出接口:
VID MAC Interface Type DstDev
1 00:16:31:ff:31:11 8 dynamic 0
********* ********************
Thanks for review
******************************