FRR BGP协议分析17 -- labeled-unicast

LABELED_UNICAST 的update消息和前面的不同点是在bgp_attr_parse解析属性的时候会调用bgp_mp_reach_parse解析BGP_ATTR_MP_REACH_NLRI,而在bgp_mp_reach_parse会处理label和vpn的一些选项,本地我们只说明处理label的,VPN的参照前面的文章。

在bgp_mp_reach_parse会解析label里面的nexthop属性,并保存在attr里面。

然后bgp_nlri_parse继续处理,labeled_unicast的处理函数是bgp_nlri_parse_label

同时我们也看下具体的MP_REACH_NLRI的报文

bgp_nlri_parse_label 解析报文主要完成下面的几件事情:

  • 解析prefix 前缀和长度
  • 解析label
  • 准备好数据,调用bgp_update

bgp_update 前面已经大致说过,这次我们只说明下label-unicat的处理:

  • has_valid_label处理会变成1,因为前面传入了解析出来的label值

  • 在构建struct bgp_path_info的时候,如果label有值,还需要构建struct bgp_path_info_extra,然后把label值存放在info_extra里面

后续的处理和在路由更新章节的WORK_QUEUE处理的逻辑一样,在bgp_process_main_one函数里面调用bgp_zebra_announce通告ZEBRA路由,ZEBRA处理路由的解析在zebra章节也已经讲过,这里重点补充下label相关的处理。

  • bgp_zebra_announce函数里面对nh label的处理,保存label信息

  • zapi_route_decode 解析nh的label

  • 生成nexthop的时候,如果有label,那么把label copy进nexthop

rib_process_add_fib处理LSP 下发的代码,我们继续跟踪下

这里又涉及到MPLS 的fec,简单理解就是保存了MPLS 转发表的in-label,而out-label保存在nh里面的label里面的,MPLS存放在NHLFE里面,LSP保存了整个LABEL转发路径。具体的数据结果的组织在MPLS里面讲解。

lsp_install 主要完成创建LSP,在LSP里面填充in-label和nhlfe的out-label,然后调用lsp_processq_add入队处理,入队后续的处理在MPLS章节讲解,这里就可以看到BGP的LABEL-UNICAT的label经过这样的处理就下发到了内核的MPLS转发表里面了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值