zoukankan      html  css  js  c++  java
  • 三层交换机之L2

    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位。

  • 相关阅读:
    python字典
    python中List添加、删除元素的几种方法
    python数据处理之基本函数
    python批量处理
    python正则表达式
    python模块学习:os模块
    Hough transform(霍夫变换)
    MODBUS TCP/IP协议规范详细介绍
    Linux下run文件的直接运行
    双边滤波和引导滤波的原理
  • 原文地址:https://www.cnblogs.com/justin-y-lin/p/14241816.html
Copyright © 2011-2022 走看看