BCM56440芯片支持以下L2特性:
1)Learning - MAC地址學習
2)Station Movement Control - MAC地址漂移
3)L2 Address Aging - MAC地址老化
4)L2 Address Learning Limits - MAC地址學習限制
5)L2 Multicast - 二層組播
6)L2 User Entry - 二層表項
7)My Station
8)L2 Port Bridge
9)Spanning Tree - 分發樹
概述
通常情況下,二層學習是根據OVID+SMAC學習L2表項,二層轉發是根據OVID+DMAC查表轉發,其核心是L2_ENTRY表。二層轉發時,當查找到表項時,L2 User Entry提供module ID(芯片ID), port ID, TGID或者VPG等信息。如果沒有找到表項,則為DLF(Destination Lookup Failure)報文,在整個VLAN內洪泛,廣播報文也在VLAN內洪泛(或者廣播)。
Learning
L2_ENTRY表支持基於VLAN的硬件學習。當接收報文的SMAC在VLAN內未知時,如果CML(CPU managed Learning)使能時,則硬件學習OVID+SMAC到L2_ENTRY表項。
CML包含兩個4bits的屬性值,即CML_FLAG_NEW和CML_FLAG_MOVE,可以配置到每個物理端口或者虛端口。(PORT/LPORT/SOURCE_VP表)

CML_FLAG_NEW控制未知報文的學習動作,CML_FLAG_MOVE控制入端口不匹配L2_ENTRY表項,但是OVID+SMAC匹配場景(即MAC MOVE場景)的學習動作。
BCM.0> dump chg PORT_TAB 0 10 CML_FLAGS_NEW CML_FLAGS_MOVE
PORT.ipipe0[0]: <CML_FLAGS_MOVE=4,>
PORT.ipipe0[1]: <CML_FLAGS_NEW=8,CML_FLAGS_MOVE=8,>
PORT.ipipe0[2]: <CML_FLAGS_NEW=8,CML_FLAGS_MOVE=8,>
PORT.ipipe0[3]: <CML_FLAGS_NEW=8,CML_FLAGS_MOVE=8,>
PORT.ipipe0[4]: <CML_FLAGS_NEW=8,CML_FLAGS_MOVE=8,>
PORT.ipipe0[5]: <CML_FLAGS_NEW=8,CML_FLAGS_MOVE=8,>
PORT.ipipe0[6]: <CML_FLAGS_NEW=8,CML_FLAGS_MOVE=8,>
PORT.ipipe0[7]: <CML_FLAGS_NEW=8,CML_FLAGS_MOVE=8,>
PORT.ipipe0[8]: <CML_FLAGS_NEW=8,CML_FLAGS_MOVE=8,>
PORT.ipipe0[9]: <CML_FLAGS_NEW=8,CML_FLAGS_MOVE=8,>
Station Movement Control
如果L2_ENTRY表中已經存在PORT_A+OVID+SMAC表項,此時,從PORT_B學習到PORT_B+OVID+SMAC表項,則稱為MAC MOVE事件。此時,如果MAC MOVE使能,則PORT_A+OVID+SMAC表項被PORT_B+OVID+SMAC表項替換;如果MAC MOVE去使能,則PORT_B+OVID+SMAC的報文上送CPU,標記為MAC MOVE報文。還有一種特殊的情況是,如果PORT_A+OVID+SMAC表項的L2_ENTRY.STATIC位置位(即靜態MAC),無論MAC MOVE使能還是去使能,PORT_B+OVID+SMAC表項均不能替換PORT_A+OVID+SMAC表項。
博通交換芯片設計了一種基於端口的優先級可配置的Class-Based Station Movement,每個端口的PORT_TAB.CLASS_BASED_SM_ENABLE位控制是否使能MAC MOVE。每個端口可以配置一個優先級(共4個優先級),如果發生MAC MOVE事件時,優先級高的端口產生MAC MOVE事件的報文學習的L2_ENTRY表項覆蓋優先級低的端口已學習的表項。如果發生MAC MOVE事件的兩個端口優先級相同,則根據CBL_ATTRIBUTE寄存器(4個,對應4個優先級)的ALLOW_MOVE_IN_CLASS域配置決定。

BCM.0> listreg CBL_ATTRIBUTE Register: CBL_ATTRIBUTE(0).ipipe0 general register address 0x0b180602 Flags: array[0-3] Blocks: ipipe0 (1 copy) Description: Class based station movement attribute register, index from PORT_CBL_TABLE Displaying: reset defaults, reset value 0 mask 7 PORT_LEARNING_PRIORITY<2:1> = 0 ALLOW_MOVE_IN_CLASS<0> = 0 BCM.0> getreg CBL_ATTRIBUTE CBL_ATTRIBUTE(0).ipipe0[0xb180602]=1: <PORT_LEARNING_PRIORITY=0, ALLOW_MOVE_IN_CLASS=1> CBL_ATTRIBUTE(1).ipipe0[0xb180603]=0: <PORT_LEARNING_PRIORITY=0, ALLOW_MOVE_IN_CLASS=0> CBL_ATTRIBUTE(2).ipipe0[0xb180604]=0: <PORT_LEARNING_PRIORITY=0, ALLOW_MOVE_IN_CLASS=0> CBL_ATTRIBUTE(3).ipipe0[0xb180605]=0: <PORT_LEARNING_PRIORITY=0, ALLOW_MOVE_IN_CLASS=0>
每個端口的優先級是通過port index的PORT_CBL_TABLE表配置的,包括物理端口和虛端口。物理端口通過(MODID,PORT)索引(PORT_CBL_TABLE.PORT_LEARNING_CLASS),虛端口通過DVP或者SVP端口號索引(PORT_CBL_TABLE.VIRTUAL_PORT_LEARNING_CLASS)。
除物理端口和虛端口外,Trunk組也可以通過TGID索引的TRUNK_CBL_TABLE.PORT_LEARNING_CLASS配置優先級。
上述PORT_LEARNING_CLASS索引到4個CBL_ATTRIBUTE寄存器中的一個,具體優先級由CBL_ATTRIBUTE.PORT_LEARNING_PRIORITY指定。
L2 Multicast
二層組播轉發,首先在L2表中查找OVID+DA表項,找到的L2_ENTRY表項中包含一個指向L2MC表的指針(L2MC_PTR),L2MC表項中獲取目的端口的位映射表,即組播成員端口列表。

L2MC表包含1024個表項。

每個VLAN可以配置三種PFM(Port Filtering Mode)配置:

VLAN.VLAN_PROFILE_PRT指向VLAN_PROFILE表,VLAN_PROFILE.L2_PFM即該PFM屬性。

實際上,所有的組播報文,都是目的MAC為組播MAC地址,但是L2學習的是源MAC,而不是目的MAC。博通SDK針對這種情況,在創建組播組時,在CPU端口添加了一個靜態表項,該表項不用做報文轉發,僅為快速查找組播組信息。因此,首先l2 show查看CPU端口的組播MAC靜態表項,其中的MCast字段表示組播組序號,然后通過multicast show命令查看組播組硬表,Group ID與MCast一一對應,這樣可以快速查找到組播組的成員端口。
BCM.0> mcast Usage (MCAST): Usages: For Switch Devices: mcast add MACaddress=<val> Vlanid=<val> Cos=<val> PortBitMap=<val> UntagBitMap=<val> Index=<val> mcast delete MACaddress=<val> Vlanid=<val> mcast join MACaddress=<val> Vlanid=<val> PortBitMap=<val> mcast leave MACaddress=<val> Vlanid=<val> PortBitMap=<val> mcast padd MACaddress=<val> Vlanid=<val> PortBitMap=<val> mcast premove MACaddress=<val> Vlanid=<val> PortBitMap=<val> For Fabric Devices: mcast bitmap max mcast bitmap set Port=<val> PortBitMap=<val> Index=<val> mcast bitmap del Port=<val> PortBitMap=<val> Index=<val> mcast bitmap get Port=<val> Index=<val> BCM.0> mcast add macaddress=01:00:5e:00:00:76 vlanid=102 PortBitmap=0x1ffe0001 BCM.0> l2 show mac=00:0a:88:88:88:01 vlan=4089 GPORT=0x10 modid=0 port=16/xe14 Hit mac=01:00:5e:00:00:76 vlan=102 GPORT=0x0 modid=0 port=0/cpu0 Static CPU MCast=1 mac=00:0a:88:88:88:05 vlan=4089 GPORT=0x8 modid=0 port=8/xe7 Hit BCM.0> multicast show Group 0x1000001 (L2) port cpu0, encap id -1 port xe15, encap id -1 port xe16, encap id -1 port xe17, encap id -1 port xe18, encap id -1 port xe19, encap id -1 port xe20, encap id -1 port xe21, encap id -1 port xe22, encap id -1 port ge0, encap id -1 port ge1, encap id -1 port ge2, encap id -1 port ge3, encap id -1 BCM.0> pbmp 0x1ffe0001 (實測無論pbmp是否添加cpu端口,l2 show時cpu端口均顯示) 0x000000000000000000000000000000000000000000000000000000001ffe0001 ==> cpu,ge,xe15-xe22
L2 User Entry
L2_USER_ENTRY一般有128個表項,一般是軟件編輯BPDU地址信息,其表項為MAC_DA+VLAN構成,不受硬件老化機制影響。在查表轉發時,優先於L2_ENTRY進行查找。
L2 Port Bridge
正常情況下,交換芯片禁止報文從源端口轉發出去,但是使能端口PORT_TAB.PORT_BRIDGE位以后,則允許報文從源端口轉發出去。
如果Trunk組需要支持Port Bridge特性,則Trunk組所有成員端口需要同時配置PORT_BRIDGE_BMAP表中的對應pbmp位。
