FRR代码分析系列第二篇:FRRouting配置显示与保存

FRR代码分析系列第二篇

FRR代码分析系列第一篇:进程角色分类

FRRouting配置显示与保存

如果将FRR应用于项目中,那么它的配置文件是一个很好的配置处理方式。配置保存贯穿整个项目,与其他各模块耦合度较高,所以构建软件架构时,应该优先考虑好配置模块。

配置显示

  • 命令show running-config显示当前设备配置信息。
    vtysh定义该命令在vtysh.c中:show running-config [<zebra|ripd|ripngd|ospfd|ospf6d|ldpd|bgpd|isisd|pimd>]
  1. 命令直接调用接口vtysh_write_terminal():
    接口vtysh_write_terminal()是命令write terminal的处理函数,也就是说,show running-config等价于write terminal

  2. 接口vtysh_write_terminal()调用vtysh_client_config()向各个daemon发送write terminal命令,并接收daemon返回的配置信息,解析,daemon配置信息接收完毕之后再调用接口生成vtysh进程自己的config配置信息,打印。

    这里需要注意:vtysh_client_config()调用
    vtysh_client_run_all(head_client, line, 1, vtysh_config_parse_line, NULL);会对返回的数据进行解析和保存。
    vtysh_client_config()处理完成之后调用vtysh_config_dump();遍历保存数据的数据结构,进行格式化输出,保证各进程配置的规范,不至于出现乱序。
    至于这个结构的实现,没有仔细看,无非就是一些链表吧,目前不太关心。如果需要,可以看看vtysh_config_parse_line()这个接口。
    (2020.12.08修改)

  3. daemon收到write terminal命令,这里需要注意的时,在daemon进程初始化调用frr_init()时,会注册一些默认的节点和命令,即command.c的cmd_init()接口,write terminal命令也在这里注册,该命令区分terminal和file:

    • terminal:将调用vty_write_config()接口,首先输出frr信息,之后调用注册节点(接口:install_node()的第二个参数)的回调函数:node->func()。
    • file:将调用file_write_config()接口写入自己进程的配置文件中。

配置保存

  • 命令write file将配置写入文件。
    vtysh命令定义在vtysh.c中:write [<memory|file>]

配置保存有两种模式:

  • 配置文件统一保存在frr.conf文件中
  • 各daemon进程独立保存到自己的配置文件中

在命令write file中使用:want_config_integrated()接口去判断使用哪种模式。在该接口中使用变量:vtysh_write_integrated来进行判断,该变量可以通过命令:service integrated-vtysh-configno service integrated-vtysh-config进行配置。

模式一

查找VTYSH_WATCHFRR进程是否启动(实际是是否连接,这个和编译时是否使用watchfrr进程都有关系)

  • 如果找到,则向watchfrr进程发送do write integrated命令,watchfrr进程拿到后,fork子进程,execl启动vtysh,使用参数 –w,根据参数新启动的vtysh将调用接口:vtysh_write_config_integrated()接口,进行配置保存完毕后,直接退出。
  • 否则,直接调用vtysh_write_config_integrated()接口,进行配置保存。但是会有如下提示信息,警告配置可能会失败:
    在这里插入图片描述

vtysh_write_config_integrated()接口首先对旧配置文件进行备份,之后向各个daemon进程发送do write terminal命令,各daemon去执行。

模式二

vtysh直接给各daemon进程发送do write memory命令,各daemon去执行。

需要注意的是,不管哪种模式,发送接收daemon进程消息时,都使用的sock通信,如果是写入到文件,那么vty->of中存放的是打开的文件描述符,vtysh拿到配置数据后,调用vty_out则,会向vty->of中写入数据。对于show,这个of是串口输出。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Ubuntu 20.04中使用FRRFree Range Routing)进行配置是相对简单的。FRR是一个开源的路由软件套件,可以在许多不同的操作系统上使用。 首先,确保已经安装了Ubuntu 20.04操作系统,并具有管理员权限。 1. 打开终端并使用以下命令安装FRR软件包: ``` sudo apt update sudo apt install frr ``` 2. 安装完成后,进入FRR配置文件目录: ``` cd /etc/frr ``` 3. 使用文本编辑器(如nano或vi)打开FRR的主配置文件: ``` sudo nano frr.conf ``` 4. 在配置文件中,可以指定各种路由协议和相关参数。以下是一个基本的配置示例: ``` ! frr version 7.5 frr defaults traditional ! router ospf ospf router-id 1.1.1.1 ! address-family ipv4 unicast network 10.0.0.0/24 area 0.0.0.0 exit-address-family ! exit ``` 在上面的示例中,将FRR配置为运行OSPF路由协议,并指定了路由器的ID为1.1.1.1。还将网络10.0.0.0/24分配到区域0.0.0.0。 5. 保存并关闭配置文件。 6. 使用以下命令启动FRR服务: ``` sudo systemctl start frr ``` 7. 如果需要在系统启动时自动启动FRR服务,请使用以下命令: ``` sudo systemctl enable frr ``` 至此,配置FRR的过程已经完成。你可以根据需要根据实际情况进行其他配置,例如BGP、RIP或静态路由等。 需要注意的是,FRR是一个功能强大的路由软件套件,配置复杂度可能会根据网络环境和需求而有所不同。在进行配置之前,请确保对网络和路由的基本概念有一定的了解,并仔细阅读官方文档或相关教程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值