三層交換機之MAC地址偏移


本文旨在介紹博通XGS系列芯片的MAC地址漂移機制。

Station Movement Control

允許並發生MAC地址漂移時,L2 Table中{DST MAC, VID}表項會被更新module/port信息。如果L2表項的STATIC位置位,則不允許MAC地址漂移,此時,觸發MAC地址漂移的報文會被送往CPU,並打上Station Movement的標簽(bcmRxReasonL2Move)。

Class-Based Station Movement

PORT_TAB.CML_FLAG_NEW決定入端口未知包是否學習MAC,PORT_TAB.CML_FLAG_MOVE決定MAC漂移行為,PORT_TAB.CLASS_BASED_SM_ENABLE決定是否允許MAC地址偏移。

如果CML Bit 1置位,則上述3種場景會將所有報文復制一份並上送CPU。但是實際上CPU只需要第一個報文即可(其他報文均具有重復的SRC MAC + VLAN信息)。要實現只上送第一個報文的效果,則需要置位CML Bit 2,此時SRC MAC + VLAN會硬件學習為Pending表項,Pending表項不用於報文轉發。

如果DST MAC匹配到一個Pending表項,則認為是DST MAC Miss。

如果SRC MAC匹配到一個Pending表項,則認為是SRC MAC Miss for switching purpose,SRC MAC hit for learning purpose。

 

BCM56820支持4個Station Movement優先級,每個端口指定一個優先級。發生MAC MOVE事件時,通過對比兩個端口的優先級決定是否更新L2表項。

虛端口也可以配置Station Movement,通過PORT_CBL_TABLE.VIRTUAL_PORT_LEARNING_CLASS和PORT_CBL_TABLE.PORT_LEARNING_CLASS配置。物理端口通過{MODID,PORT}索引PORT_CBL_TABLE,虛端口通過DVP或者SVP索引PORT_CBL_TABLE。

聚合組也可以配置Station Movement,由TRUNK_CBL_TABLE.PORT_LEARNING_CLASS配置,通過TGID索引TRUNK_CBL_TABLE。

上述PORT_LEARNING_CLASS指向四個CBL_ATTRIBUTE寄存器。

MAC Move檢測

上CPU ACL規則

EID 0x00000043: gid=0x3,
         slice=0, slice_idx=0x21, part =0 prio=0, flags=0x10202, Installed, Enabled
              tcam: color_indep=0, 
 Stage 
 InPorts 
    DATA=0x000000000000000000000000000000000000000000000000000000000001fffe
    MASK=0x000000000000000000000000000000000000000000000000000000001fffffff
         slice=1, slice_idx=0x21, part =1 prio=0, flags=0x10204, Installed, Enabled
              tcam: color_indep=0, 
 L2SrcHit 
    Offset: 184 Width: 1 
    DATA=0x00000001 
    MASK=0x00000001 
 L2StationMove 
    Offset: 193 Width: 1 
    DATA=0x00000001 
    MASK=0x00000001 
         action={act=YpDrop, param0=0(0), param1=0(0), param2=0(0), param3=0(0)}
         action={act=RpDrop, param0=0(0), param1=0(0), param2=0(0), param3=0(0)}
         action={act=GpDrop, param0=0(0), param1=0(0), param2=0(0), param3=0(0)}
         action={act=CosQCpuNew, param0=2(0x2), param1=0(0), param2=0(0), param3=0(0)}
         action={act=GpCopyToCpu, param0=0(0), param1=0(0), param2=0(0), param3=0(0)}
         policer={peak_kbits_sec=0x4, peak_kbits_burst=0x4, commit_kbits_sec=0x4, commit_kbits_burst=0x4, PacketBased=0, mode=0x3, entries=2, Clean}
         statistics=NULL

上CPU的RxReason為bcmRxReasonL2Move。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM