• 三层交换机之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。

  • 相关阅读:
    8 pandas模块,多层索引
    7 numpy 傅里叶,提取图片轮廓
    6 DataFrame处理丢失数据--数据清洗
    5 pandas模块,DataFrame类
    4 pandas模块,Series类
    3 numpy模块
    2 线性代数基础
    1 Ipython、Jupyter 入门
    jdk安装与环境变量配置(一劳永逸)
    对jsp可见域的变量感悟
  • 原文地址:https://www.cnblogs.com/justin-y-lin/p/15655497.html
Copyright © 2020-2023  润新知