1、1.3. 参考资料BCM56500 Programmers Register Reference GuideBCM56330 Theory of OperationsLayer 3 Lookups and Enhancements2. 硬件实现原理2.1. 硬件表2.1.1. L3_ENTRY描述: L3_ENTRY是以下四个表的统称:L3_ENTRY_IPV4_UNICAST,L3_ENTRY_IPV4_MULTICAST,L3_ENTRY_IPV6_UNICAST,L3_ENTRY_IPV6_MULTICAST,通过KEY_TYPE的设置,来分别作为上面四个表 最小索引: 最大索引:819
2、1 地址:根据不同表的类型,地址不同L3_ENTRY_IPV4_UNICAST 如下图:L3_ENTRY_IPV4_MULTICAST 如下图L3_ENTRY_IPV6_UNICAST 如下图L3_ENTRY_IPV6_MULTICAST 如下图2.1.2. ING_L3_NEXT_HOP 描述:该表定义了路由报文的下一跳相关信息(出端口)。0x10A100002.1.3. EGR_L3_NEXT_HOP该表定义了路由报文的下一跳相关信息(下一跳目的MAC,intf)。0x03B100002.1.4. EGR_L3_INTF 该表定义了路由报文的下一跳相关信息(下一跳源MAC,出端口vlan)
3、。40950x03B200002.1.5. L3_ECMP_COUNT 该表定义了等价路由的个数。20470x10AA00002.1.6. L3_ECMP 该表定义了等价路由的NEXT_HOP_INDEX信息。0x10A000002.2. BCM56338 L3功能的硬件实现流程图BCM56338 L3功能的硬件实现流程如图 2所示。图 2 BCM56338 L3功能的硬件实现流程图如图 2所示,BCM56338 L3功能的硬件实现流程主要由以下几步组成: 在L3_ENTRY表中查找DIP,如果找到,根据NEXT_HOP_INDEX信息,找ING_L3_NEXT_HOP表和EGR_L3_NEX
4、T_HOP表,获取L3转发路径相关信息; 如果L3_ENTRY中未找到,则在lpm表中寻找; 如果是等价路由,那么在lpm表中,获取ECMP_PTR信息,指向L3_ECMP表和L3_ECMP_COUNT表,获取等价路径的NEXT_HOP_INDEX信息;3. 软件实现原理3.1. bcm56338 L3部分功能软件结构目前在ITN201上实现了bcm56338的L3转发功能,软件接口函数代码集中在cesw_asspipn201_sspsrcbcmIpHw.c中,功能函数代码集中在cesw_asspipn201_sspsrcbcmRoute.c中。3.2. bcm56338 L3部分软件功能实现
5、方案分析3.2.1. 接口ROS_HW_SV_IP_ROUTING实现方案分析接口功能:接口ROS_HW_SV_IP_ROUTING实现L3转发功能的使能与关闭3.2.1.1. 实现原理: bcm_tms_l3_enable_set。3.2.1.2. 硬件关系图3.2.1.3. 特殊要求与实现3.2.1.4. SDK与SSP支持情况SDK提供(1) bcm_l3_enable_set ()(2) bcm_arp_to_cpu_enable ()(3) bcm_l3_info ()(4) bcm_l2_addr_get()(5)bcm_l2_addr_add()其中,bcm_l3_enable_
6、set设置port表的V4L3_ENABLE和V6L3_ENABLE;bcm_arp_to_cpu_enable设置arp报文上交cpu;bcm_l3_info获取芯片支持的最大intf数量;bcm_l2_addr_get根据intf获取的mac和vlan id,查找L2_ENTRY,bcm_l2_addr_add将这些查找到的entry的L3标志位置1。3.2.2. 接口ROS_HW_SS_ROUTE_INFO实现方案分析添加intf信息,并保存3.2.2.1. 实现原理: bcm_tms_route_info_set。3.2.2.2. 硬件关系图3.2.2.3. 特殊要求与实现3.2.2.
7、4. SDK与SSP支持情况(1) bcm_l3_intf_create ()3.2.3. 接口ROS_HW_SS_ROUTE_DEST实现方案分析配置目的路由3.2.3.1. 实现原理: bcm_tms_route_dest_set。3.2.3.2. 硬件关系图3.2.3.3. 特殊要求与实现3.2.3.4. SDK与SSP支持情况(1) bcm_l3_egress_create ()(2)bcm_l3_ip_add()(3)bcm_l3_defip_add()(4)bcm_l3_egress_multipath_add()(5)bcm_l3_egress_multipath_create(
8、)bcm_l3_egress_create()负责创建三层出接口,包括写ING_L3_NEXT_HOP表和HOP表;bcm_l3_ip_add(),创建主机直连路由的时候,使用该函数。最终调用到函数bcm_xgs3_l3_add(),该函数中调用三个函数,分别是:_bcm_xgs3_nh_init_add(),用来获取next hop index;_bcm_xgs3_l3_add(),该函数写L3_ENTRY表;bcm_xgs3_host_as_route(),如果L3_ENTRY写满,不能再写了,执行刚才的函数,写到最长前缀匹配表中。如果是主机路由,并且非直连,或者是网络路由,就要写到最长前
9、缀匹配表中。此时分三种情况:一种是新创建的路由,即原路由不存在,则调用bcm_l3_defip_add函数,此时除了添加必要的信息,比如目的ip地址,下一跳ip地址,还需要传递BCM_L3_D_HIT,BCM_L3_ADD_TO_ARL这两个宏下去,还需要传递bcm_l3_egress_create创建的egr_intf下去;一种是原来就存在的路由,而且是等价路由,那么就只需要将新的路由信息添加到等价组当中就可以,bcm_l3_egress_multipath_add()函数来实现这个功能。该函数实现流程如下:调用bcm_xgs3_l3_egress_multipath_get()函数,来获取
10、原来等价路径的结构;将传递下来的intf添加到获取的等价组的最后;调用bcm_xgs3_l3_egress_multipath_creat()函数来替换原来的等价组,替换的功能,是通过传递的BCM_L3_REPLACE宏和BCM_L3_WITH_ID来实现的;一种是原来存在的路由,但是不是等价路由,也就是只有一条路径,此时流程是:先用bcm_l3_defip_get()函数,各get出原来的路由信息,目的是得到原来的intf;利用bcm_l3_egress_multipath_create()函数,以bcm_l3_egress_create创建的egr_intf为参数,创建等价组,bcm_l3
11、_egress_multipath_create()函数在bcm_l3_egress_multipath_add()函数中也会被调用,区别就是传递的宏不一样,实现的功能就不一样;调用bcm_l3_egress_multipath_add()函数,将get出来的原来路由信息中的intf,加入到刚刚创建的等价组当中;调用bcm_l3_defip_add()函数,更新原来的路由信息为等价路由,功能实现靠的也是两个宏,即BCM_L3_MULTIPATH和BCM_L3_REPLACE。3.2.4. 接口ROS_HW_SS_ROUTE_DEST_UPDATE实现方案分析更新目的路由3.2.4.1. 实现原
12、理: bcm_tms_route_dest_update。3.2.4.2. 硬件关系图3.2.4.3. 特殊要求与实现3.2.4.4. SDK与SSP支持情况(2)bcm_l3_egress_get()先调用bcm_l3_egress_get()获取原来的egress相关信息,包括出端口,vlan,intf信息,再利用bcm_l3_egress_create ()更新原来的egress信息。同样,也是靠宏BCM_L3_REPLACE宏BCM_L3_WITH_ID来实现的3.2.5. 接口ROS_HW_SV_ROUTE_DEST_DEL_ALL实现方案分析删除所有目的路由3.2.5.1. 实现原理: bcm_tms_route_dest_all_delete。3.2.5.2. 硬件关系图3.2.5.3. 特殊要求与实现3.2.5.4. SDK与SSP支持情况SSP提供(1) bcm_l3table_del_all ()(2) bcm_defip_del_all()(1) _bcm_xgs3_l3_del_match ()(2)_bcm_fbx_lpm_update_match ()(3)bcm_l3_egress_multipath_destroy()(4)bcm_