Skip to content

FRRouting 软件架构 ​

FRRouting 由一组功能独立的守护进程组成。每个守护进程负责特定协议或管理能力,进程之间通过内部接口协作,最终由 zebra 汇聚路由信息并与系统路由表交互。

组件关系 ​

组件角色说明
zebra路由管理中间层汇聚各协议进程产生的路由,负责路由表同步和接口信息管理
mgmtd管理进程承担配置管理和数据模型相关职责
ospfdOSPFv2 协议进程负责 IPv4 OSPF 邻居、LSDB、SPF 计算和路由生成
ospf6dOSPFv3 协议进程负责 IPv6 OSPFv3 协议能力
staticd静态路由进程管理静态路由配置并提交给 zebra
bfddBFD 进程提供快速链路检测,可与 OSPF 等协议联动
vtysh统一 CLI为多个 FRR 守护进程提供统一显示和配置入口

事件循环模型 ​

FRR 应用进程的基础运行模式是事件循环。进程创建全局事件循环对象后,将初始任务加入队列,然后不断获取并执行下一项任务。典型任务包括:

事件类型说明
EVENT_READ等待文件描述符可读后执行回调
EVENT_WRITE等待文件描述符可写后执行回调
EVENT_TIMER定时器到期后执行回调
EVENT_EVENT通用高优先级事件,常用于协议有限状态机
EVENT_READY表示任务已经进入就绪队列
EVENT_UNUSED表示事件对象处于可复用状态
EVENT_EXECUTE表示任务正在执行

事件循环的典型过程是:

  1. 通过 event_add_* 类函数注册读写、定时器或通用事件。
  2. 通过 event_fetch() 选择下一项待执行任务。
  3. 通过 event_call() 执行任务回调。
  4. 回调过程中根据协议状态继续安排后续事件。

注意

同一个文件描述符上通常只能保留一个读事件和一个写事件。连续安排多个同类型 I/O 事件时,后一次可能覆盖前一次,容易导致协议状态异常。定时器精度还取决于底层操作系统提供的单调时钟。

VTYSH 与配置文件 ​

vtysh 是 FRR 的统一命令行入口。官方文档说明,vtysh 可以在一个会话中连接多个 FRR 守护进程,并提供显示命令、配置命令和配置保存能力。

FRR 支持统一配置文件 frr.conf。当 /etc/frr/frr.conf 存在时,各守护进程启动时不会直接读取各自独立配置文件,而需要通过 vtysh -b 或启动脚本把统一配置分发给各守护进程。翼辉 SDK 使用文档中也建议根据业务需求提前修改 /etc/frr/frr.conf 和 /etc/frr/zebra.conf,或在启动后通过 vtysh 进入配置视图完成配置。

与 SylixOS 的适配边界 ​

SylixOS FRRouting SDK 交付的是已经适配目标系统的可执行程序、依赖库、启动脚本、配置文件和 YANG 数据文件。使用时需要关注:

  • 可执行文件和动态库是否与目标 CPU 架构、SylixOS 内核版本匹配。
  • patch/ 中的内核优化补丁是否已经按需合入。
  • 网络接口命名是否与配置文件中的接口名称一致。
  • 协议进程是否按业务需要启动,例如 OSPFv2 使用 ospfd,IPv6 OSPF 使用 ospf6d,BFD 使用 bfdd。
  • 配置保存前对应守护进程是否处于运行状态。

参考资料 ​