写在前面
承接上文SONiC路由协议简述,这边文章记录SONiC上使能OSPF的过程。
实验过程
拓扑说明
拓扑图如下:

实验预期:
- 三台设备上能建立ospf邻居,完成LSDB交换,建立ospf路由
- 192.168.1.2能够- ping通- 192.168.2.2
启动OSPF
在bgp容器中启动ospf进程:
| 1 | /usr/lib/frr/ospfd -A 127.0.0.1 -d | 
参照bgpd的启动过程,将ospf添加到supervisor中,并指定配置文件,在/etc/supervisor/conf.d/supervisord.conf中添加:
| 1 | [program:ospfd] | 
在/usr/bin/start.sh中添加:
| 1 | supervisorctl start ospfd | 
创建ospf配置文件/etc/frr/ospfd.conf, 根据具体业务添加配置内容:
| 1 | frr version 7.2.1-sonic | 
配置接口IP
在SONiC命令行中可配置接口ip,命令如下:
| 1 | config interface ip add 192.168.2.1/24 | 
zebra会通过netlink获取接口配置,反之在vty中配置接口ip不能同步到sonic。也可将配置写到配置文件中:
| 1 | "INTERFACE": { | 
配置完成之后,在vty中可以看到使能了ospf的接口:

注意将接口的mtu配置成1500或者在ospf中关闭mtu check。
配置ASIC
SONiC中默认ospf报文不送CPU,这可能和各家的SDK初始化实现有关。在broadcom下我们需要做一些配置:
| 1 | fp qset add ipprotocol | 
应当在ASIC中看到使能的配置:

sonic中提供了copp功能配置sdk下发这些报文上CPU等的控制操作,受当前实验版本限制暂不做这方面深入研究。
功能验证
查看邻居状态:

查看数据库信息:

查看路由表:

ping测试:

小结
当前SONiC上ospf功能使能需要做三方面的配置:
- ospf自身,包括功能启用以及协议参数配置
- 启用ospf协议的接口
- 配置ASIC,协议报文上CPU