这个项目能做什么
bgp 包实现了 RFC 4271 及相关 RFC 所描述的边界网关协议第 4 版(BGP-4),涵盖线格式、有限状态机和会话生命周期。采用 MIT 许可证,使用 Go 编写。
该库按层组织,每一层都可以在不使用其上层的情况下单独使用:
- 消息类型,如 Open、Update 和 Notification,及其二进制编码。
- Conn,在连接之上对消息进行分帧。
- FSM,在 Conn 之上运行 RFC 4271 有限状态机:每次 Connect 调用尝试一次会话,向处理器交付零拷贝的借用值。
- Peer,在 FSM 之上包装重试循环和处理器,其值为完全拥有。
- Server,协调多个 Peer,在共享监听器上接受连接。
大多数调用方应使用 Peer 或 Server;FSM 是面向需要零拷贝交付或自定义重试策略的调用方的高级层。
README 展示了一个示例 speaker,它向邻居通告一条路由并记录收到的路由。Run 负责连接生命周期:拨号、OPEN 交换、keepalive,以及重试已死亡的会话,直到上下文被取消。取消上下文会发送 Cease / Administrative Shutdown。包示例涵盖多协议 IPv6、双栈、被动对等体以及加固的面向互联网的配置。
范围被有意限制:永久不包含路由表和策略引擎。已建立的会话将收到的 UPDATE 消息交给调用方,由调用方负责所有路由决策。RIB 通过其处理器接入 Peer 层,将方法接入每个 PeerConfig,并通过发送路径排空其 Adj-RIB-Out。配套项目如 BMP(RFC 7854)监控和 BFD(RFC 5880)存活检测构建在相同的接缝之上,位于单独的仓库中。
平台支持:消息、Conn、FSM、Peer 和 Server 层是可移植的 Go。生产 BGP speaker 所需的 TCP 套接字选项,如 TCP-MD5、GTSM 和 DSCP,仅在 Linux 上受支持;在其他平台上设置它们会失败,并返回包装了 errors.ErrUnsupported 的错误。
测试针对真实互联网路由数据和真实路由器进行:语料库测试解析路由收集器归档中的每条消息以及完整互联网表中的每条路由,要求逐字节的 marshal 往返;模糊测试目标覆盖消息解析、属性解析和连接分帧,并以语料库为种子;互操作测试框架针对 FRRouting 运行实时会话,涵盖建立、能力协商、路由交换、TCP-MD5 和 GTSM。
评论
0 评分人数达到10人后显示
登录后参与讨论。