云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > Bcm56540与bcm56330 MPLS模块底层实现比较

Bcm56540与bcm56330 MPLS模块底层实现比较

  • 62 次阅读
  • 3 次下载
  • 2025/6/5 22:46:55

Bcm56540与bcm56330 MPLS模块底层实现比较

本文结合SDK6.2.1与5.9.0,分析了56540系列交换芯片与56330系列芯片底层软件实现的差别。代码比较中,右侧默认为6.2.1SDK代码。

两款芯片MPLS模块底层软件实现的差异主要包括两个部分,其一是在5.9.0版本基础上做了一些的软件优化,以达到高效目的,其二56540较56330硬件上有所差别,包括一些表中增加了一些控制域,以及一些细微的硬件处理流程差异。

1、产品宏定义:

本文结合5.9.0版本SDK以及6.2.1版本SDK,根据产品宏,分析了56330系列与56540系列交换芯片底层SDK的MPLS模块的实现区别,另外,两类系列交换芯片对应的适配接口相同。

bcm56540定义宏

bcm56540芯片采用的产品宏如下:

#if defined(BCM_56640_A0) || defined(BCM_56640_B0) #define BCM_56640 #define BCM_56840 #define BCM_56634 #define BCM_56624 #define BCM_56304 #define BCM_56800

#define BCM_FIREBOLT_SUPPORT #define BCM_BRADLEY_SUPPORT #define BCM_SCORPION_SUPPORT #define BCM_TRIUMPH_SUPPORT #define BCM_TRIUMPH2_SUPPORT #define BCM_TRX_SUPPORT #define BCM_TRIDENT_SUPPORT #define BCM_TRIUMPH3_SUPPORT #define BCM_MPLS_SUPPORT #define BCM_CMICM_SUPPORT

#define BCM_EXTND_SBUS_SUPPORT #define BCM_TIMESYNC_SUPPORT #define BCM_SBUSDMA_SUPPORT #endif

bcm56338定义宏

bcm56338芯片采用的产品宏如下:

#if defined(BCM_56334_A0) || defined(BCM_56334_B0) #define BCM_56334 #define BCM_56624 #define BCM_56304 #define BCM_56800

#define BCM_FIREBOLT_SUPPORT #define BCM_BRADLEY_SUPPORT #define BCM_TRIUMPH_SUPPORT #define BCM_TRIUMPH2_SUPPORT #define BCM_ENDURO_SUPPORT #define BCM_TRX_SUPPORT #define BCM_MPLS_SUPPORT #endif

2、MPLS模块SDK代码实现对比

1、适配接口对应的SDK函数对比表

序号 1 2 3 4 bcm_tms_mpls_l3_enable_set bcm_tms_mpls_vpn_set_extend bcm_tms_mpls_vpn_del_extend bcm_tms_mpls_ing_xc_set_extend bcm_l2_tunnel_add bcm_mpls_vpn_id_create bcm_mpls_vpn_id_destroy bcm_mpls_tunnel_initiator_set 适配层接口 SDK层接口 bcm56540 (6.2.1版本) bcm_tr3_metro_myStation_add bcm_tr_mpls_vpn_id_create bcm_tr_mpls_vpn_id_destroy bcm_tr_mpls_tunnel_initiator_set 5 bcm_tms_mpls_ing_xc_del_extend bcm_mpls_tunnel_initiator_clear bcm_tr_mpls_tunnel_initiator_clear 6 bcm_tms_mpls_tran_xc_set_extend 7 bcm_tms_mpls_tran_xc_del_extend 8 bcm_tms_mpls_egr_xc_set bcm_mpls_tunnel_switch_add bcm_mpls_tunnel_switch_delete bcm_mpls_tunnel_switch_add bcm_tr3_mpls_tunnel_switch_add bcm_tr3_mpls_tunnel_switch_delete bcm_tr3_mpls_tunnel_switch_add 9 bcm_tms_mpls_egr_xc_del bcm_mpls_tunnel_switch_delete bcm_tr3_mpls_tunnel_switch_delete 10 bcm_tms_mpls_vpn_uni_port_set_extend bcm_tms_mpls_vpn_nni_port_set_bcm_mpls_port_add _bcm_tr_mpls_vpws_port_add _bcm_tr_mpls_vpls_port_add bcm_tr_mpls_tunnel_switch_delete 同 bcm_tr_mpls_tunnel_switch_delete bcm_tr_mpls_tunnel_switch_add bcm_tr_mpls_tunnel_switch_add 同 底层SDK函数 bcm56330 (5.9.0版本) bcm_trx_metro_l2_tunnel_add 同 同 同 extend

2、详细对比

本节,按照上一小节中列出的不同产品最终调用的SDK函数,详细分析两类芯片MPLS模块的软件实现差异。

1、MPLS使能

bcm_tr3_metro_myStation_add:将mac vlan信息写入MY_STATION_TCAM中。

bcm_trx_metro_l2_tunnel_add: 将本机mac以及vlan写入MPLS_STATION_TCAMm 另外,6.2.1版本SDK的mpls初始化中,增加了对EGR_MPLS_VC_AND_SWAP_LABEL_TABLE的第一个entry的预留处理,且将MPLS_LABEL_ACTIONf域设置为3;

2、创建/删除VPN

1、bcm_tr_mpls_vpn_id_create(int unit, bcm_mpls_vpn_config_t *info)

对于vpsw的需要分配vpn_id的情况,代码差异如下所示

6.2.1版本封装了_bcm_tr_vpws_vpn_alloc(int unit, bcm_vpn_t *vpn_id)函数,用来分配给vpws分配vpn_id

2、bcm_tr_mpls_vpn_id_destroy (int unit, bcm_vpn_t vpn) 对于vpws业务来说,差异如下

Sdk6.2.1中对于vpws的vpn_id与相应的vp的对应关系通过_bcm_tr_mpls_vpws_vp_map_set函数记录,删除操作会调用_bcm_tr_mpls_vpws_vp_map_clear实现清除软件记录以及vp free功能。

3、创建INGRESS LSP

函数bcm_tr_mpls_tunnel_initiator_set所实现的功能:

1、首先读取指定egr_l3_intf中的tunnel_index以及mpls_tunnel_index,如果

mpls_tunnel_index为0,则新分配一个egr_ip_tunnel_mpls索引。

2、将标签值等数据写入到egr_ip_tunnel_mpls(每个location中有四个entry)的某个entry中;通过设置该表项的push_action,可支持打两次标签业务。

3、 egr_ip_tunnel_mpls的entry的索引与tunnel_index做或运算写入

egr_l3_intf.mpls_tunnel_index。

代码中可以看见 mpls_index = tnl_index * 4;表示mpls_index是将tnl_index向左移动两位得到的,低两位用来表示四个entry的某一个。

4、egr_ip_tunnel与egr_ip_tunnel_mpls一一对应,一行egr_ip_tunnel_mpls有四个entry。bcm_xgs3_tnl_init_add只有在四个entry都用了的情况下,才会被调用,创建一个新的egr_ip_tunnel,只有此时才会调用_BCM_MPLS_IP_TNL_USED_SET标记该tnl_index为已用。这点也是该函数的精髓所在。

此外,6.2.1较5.9.0多了一些软件上记录处理:

1、如果将要设定的lsp的出标签以及push_action与硬件中的某个entry一致,6.2.1则采用同一个egr_ip_tunnel_mpls中的enry,相对于5.9.0来说节约的资源。但是通过分析可知,这样比较的效率很低,是通过逐一读取表项然后比较实现的。

2、_bcm_tr_mpls_egr_tunnel_ref_count_adjust函数用来记录mpls_tunnel_index的引用次数,此处将mpls_tunnel_index的引入次数增加1,在bcm_tr_mpls_tunnel_initiator_clear会将相应的mpls_tunnel_index的引用次数减一,减一后如果等于0,可清空EGR_IP_TUNNEL_MPLS表,否则只清空egr_l3_intf的mpls_tunnel_index域。

3、增加了对局部标签的处理,代码如下:

4、创建EGRESS LSP

bcm_tr3_mpls_tunnel_switch_add:主要增加了对P2MP以及FRR模式的处理,FRR模式中可以看到向L3_TUNNEL表里写入了标签以及弹出动作。 bcm_tr_mpls_tunnel_switch_add:

5、L2VPN

本节主要描述_bcm_tr_mpls_vpws_port_add/_bcm_tr_mpls_vpls_port_add函数在6.2.1版本的SDK与5.9.0的区别。

下面以该函数中vp is not valid的流程为例,介绍6.2.1与5.9.0的区别

搜索更多关于: Bcm56540与bcm56330 MPLS模块底层实现比较 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

Bcm56540与bcm56330 MPLS模块底层实现比较 本文结合SDK6.2.1与5.9.0,分析了56540系列交换芯片与56330系列芯片底层软件实现的差别。代码比较中,右侧默认为6.2.1SDK代码。 两款芯片MPLS模块底层软件实现的差异主要包括两个部分,其一是在5.9.0版本基础上做了一些的软件优化,以达到高效目的,其二56540较56330硬件上有所差别,包括一些表中增加了一些控制域,以及一些细微的硬件处理流程差异。 1、产品宏定义: 本文结合5.9.0版本SDK以及6.2.1版本SDK,根据产品宏,分析了56330系列与56540系列交换芯片底层SDK的MPLS模块的实现区别,另外,两类系列交换芯片对应的适配接口相同。 bcm56540定义宏 bcm56540芯片采用的产品宏如

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com