FRR BGP协议分析11 -- ZEBRA初始化

zebra,翻译是斑马,它负责管理其他所有协议进程的路由信息的更新与交互,并负责与内核交换信息,整体的架构如下:

 

Zebra的初始化在zebra/main.c里面,代码也来的干净直接

  • frr_init创建zebra主进程的master数据结构,用来做事件驱动,我们可以看下thread_master的数据结构。

其整合了事件的可读、可写、定时器、信号的处理,后面有时间可以来学习下。

  • frr_pthread_init 初始化所有的线程链表
  • zebra_router_init 初始化和策略路由PBR ?? 相关的HASH

  • zserv

zebra作为其他协议进程的服务端,通过建立socket和其它的进程建立通道来交互信息。

zserv_accept 接受客户端的请求,并创建一个新的客户端,还会给每个客户端创建一个线程处理客户端的读、写请求。

客户端比如bgp会调用zclient_new/zclient_init初始化客服端连接到zebra服务端,并发送关心的事件到zebra的服务端。

bgp_zebra_connected 是连接服务端成功后,向zebra注册各种事件的回调函数。

  • rib_init

rib_queue_init初始化work queue相关的事情,ribq处理rib信息相关的,meta_queue_new会创建5个subq,每个队列是具有优先级的,也就是处理rib的消息是PQ的队列。

zebra_dplane_init 是初始化data plane数据平面的信息,并会初始化linux kernel数据平面处理的函数,也就是会做一个适配层,隔离FRR和DP面,减少耦合。

zebra_dplane_start会Start the dataplane pthread,处理数据下发到DP 数据平面的消息。

  • zebra_mpls_init初始化MPLS相关的信息,主要完成:
  1. 内核是否支持MPLS

  1. Zebra处理MPLS 信息的work queue

  • 最后frr_run, zebra 主线程跑起来,全部初始化完成,其它的初始化点,后续在继续补充 !!!!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值