Marvell DSA(分布式交换架构)
by 韩大卫@吉林师范大学*************** 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 为 1Word 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 .(.2..@..3...... 0x0030: 0a1e 0014 04b0 19f8 d415 66eb f4b8 5000 ..........f...P. 0x0040: 0200 ca03 0000 0000 0000 0000Word 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 为 1Word 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******************************