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


<!--[if !supportLists]-->1.1    <!--[endif]-->获取VLAN相关信息
本过程操作的寄存器:PTABLE、VTABLE、EN_IFILTER。

本过程操作的系统变量:PORT_BITMAP、UT_PORT_BITMAP、DROP、CPU。

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

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

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

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

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

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/cabinhome/archive/2006/11/28/1417923.aspx