BCM芯片数据包转发基本流程--ingress处理之vlan处理

 

Ingress过程

Ingress过程负责二层交换以及三层交换的转发决定,FFP的执行,实现堆叠、链路汇聚、端口镜像等功能。在Ingress过程中,维护了一些转发决定需要的系统变量,分别是:PORT_BITMAP(数据包将要发往的端口集合,初始化为0),UT_PORT_BITMAP(指示数据包从这些端口发出时不打802.1Q TAG,初始化为0),DROP(指示数据包是否被交换,初始化为FALSE不被交换),CPU(指示是否发送数据包的一个拷贝给CPU,初始化为FALSE),EPORT(发送端口号,初始化为0x3F),IPORT(输入端口号,是常量,为数据包进入的端口号)。

1.1    获取VLAN相关信息

本过程操作的寄存器:PTABLEVTABLEEN_IFILTER

本过程操作的系统变量:PORT_BITMAPUT_PORT_BITMAPDROPCPU

本过程主要获取VLAN的成员信息、untagged成员信息,进行准入规则检查。根据进入的数据包为untaggedpriority taggedtagged的情况,BCM进行不同的处理。

1.1.1    untaggedpriority tagged数据包处理

由于BCM内部都是对tagged的数据包进行处理,因此对于此类数据包首先要进行插入tag的操作。插入的VID取自PTABLE[IPORT].VLAN_TAG;对于untagged的数据包,插入的priority取决于PTABLE[IPORT].RPE,如果它被置位则priorityPTABLE[IPORT].PRI,否则priority0,对于priority tagged的数据包,插入的priority就是数据包上带的优先级值。

接下来,从PTABLE[IPORT].PORT_BITMAP取出VLAN成员表并赋值给PORT_BITMAP,从PTABLE[IPORT].UT_PORT_BITMAP取出VLANuntagged成员表并赋值给UT_PORT_BITMAP

最后进行准入规则检查,也就是判断IPORT是否可以接受untaggedpriority tagged的数据包。如果PTABLE[IPORT].PRI_DISbit51,则表示该端口应丢弃这一类数据包,此时DROP赋值为TRUE

1.1.2    tagged数据包的处理

首先从数据包中取出VID,用它来搜索VTABLE,如果没有找到或VID0xFFF(保留VID),则DROP赋值为TRUECPU也赋值为TRUEUT_PORT_BITMAP赋值为PTABLE[IPORT].UT_PORT_BITMAP,即对于不可识别的VIDBCM不转发该数据并交给CPU处理。如果找到了该VID,则将VLAN成员端口表VTABLE[VID].PORT_BITMAP赋值给PORT_BITMAP,将untagged成员端口表VTABLE[VID].UT_PORT_BITMAP赋值给UT_PORT_BITMAP。最后进行准入规则检查,主要是对输入端口不属于VID的情况该如何处理,如果EN_IFILTER[IPORT]置位,即准入规则打开,则DROP赋值为TRUE

你可能感兴趣的:(数据通信)