首页 > 编程知识 正文

bgp协议有哪些,frrrf

时间:2023-05-03 20:40:28 阅读:176253 作者:616

FRR支持BGP-4、BGP-4协议。 BGP协议本身的知识点可以参考很多资料。 TCP/IP路由技术是本好书,建议多看几次。 另外还有红茶哥哥的博客和视频http://blog.sina.com.cn/vinsoney

初始化始于bgp_main.c的main函数,并且也适用于其他协议,例如ospf的main函数在ospf_main.c中。

main中最重要的是初始化,包括:

事件驱动初始化

事件驱动必须对每个线程持有struct thread_master来驱动事件。 (具体的驾驶方法,大部分是之后写文章介绍。 )还包括work queue初始化和BGP标签的初始化。

bgp_master全局变量综合所有这些,夸耀天下。

VRF初始化

VRF初始化,在FRR中VRF在linux上创建,处理整个过程,然后进行重新分析。

最重要的是被称为voidBGP_init(void )的函数

包括:

线程初始化

进行的初始化。 从上面可以看出,FRR也模拟了线程的概念,但与linux的线程不同。 我们可以稍后再谈。 BGP的线程包含bgpd/bgpd_io/bgpd_ka :

从名字中也可以看出他们的主要任务:

bgpd_io ---发送和接收包,将消息入队,并调用bgpd继续处理。 入口函数是fpt_run

bgpd----处理BGP的所有业务逻辑并处理函数frr_run

bgpd _ ka处理BGP的keeplive,bgp_keepalives_start

Zebra初始化

zclient_new创建zclient客户端,struct thread_master输入bgp的master。 这样,客户端回调函数将在bgp的流程上下文中执行

当zclient_init初始化与客户端相关的数据时,它会调用zclient_event来添加事件。 回调函数为zclient_connect,初始化完成后将与zebra进程建立连接。

然后,填充各种bgp感兴趣的事件的回调函数。 一些bgp_zebra_connected回调函数在客户端连接到zebra成功后被调用。 注册各种bgp感兴趣的事件,如路由器id、接口和分布式路由器

命令行初始化

是注册CLI。 没什么好说的。 CLI的实现也很复杂。 稍后再分析

属性相关初始化

aspath_initaspath_init初始化aspath的散列存储、散列报头ashash,所有aspath是否由全局散列存储?

相关的数据结构如下:

 

attrhash_init

attrhash_init 初始化属性的hash存储,hash头attrhash,所有的属性用全局的hash存放??

attr数据结构较大,包含了BGP的所有属性,AS_PATH,community,med, origin, local_pref, med等等

community

community_init 初始化community的HASH,全局comhash存储,存放到全局干嘛??

ecommunity

ecommunity_init初始化ecommunity的HASH ,全局ecomhash存储

lcommunity

lcommunity_init初始化lcommunity的HASH ,全局lcomhash存储

cluster

cluster_init 初始化 cluster 路由反射器的HASH,全局变量cluster_hash

transit

transit_init初始化传输的属性的HASH,全局变量transit_hash

encap

encap_init 初始化BGP Encap Hash, 没太懂,后续补充

路由表的初始化

afi  网络类型(IPV4, IPV6)

safi 子网络类型(SAFI_UNICAST,SAFI_MULTICAST,SAFI_RESERVED_3,SAFI_MPLS_VPN,SAFI_ENCAP)

lock 引用计数

route_table 路由表项的集合,与zebra使用的是同一个数据结构,存放路由表项

route_map

初始化路由图的实现,并增加hook的回调函数

 

route_map 初始化 route_map策略的实现

具体的实现,后面再分析

 

mplsvpn

MPLS VPN的初始化全是CLI的初始化

 

EVPN

bgp_ethernetvpn_init CLI的初始化

 

FLOWSPEC

bgp_flowspec_vty_init CLI的初始化

 

Access list

 CLI的初始化

功能后面分析

Filter list

CLI的初始化

功能后面分析

 

Prefix list

CLI的初始化

   

 

功能后面分析

 

Community list

CLI的初始化

/* Community list initialize. */

     bgp_clist = community_list_init();

 

BFD init

    

 

Main函数继续初始化

frr_config_fork 后面分析,没看明白处理啥

bgp_pthreads_run 创建线程

Bgp_pthread_run创建对应的线程,并运行起来。

然后frr_run bgpd开始死循环,处理各种事件

 

初始化完成!!!!!!!!!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。