第六章 frr集成sysrepo概述

FRR7.2之后的版本,增加了sysrepo对其的管理,最新版本已对支持到bfd,bgp协议管理,是越来越完善。有兴趣的伙伴可以参阅frr最新代码https://github.com/FRRouting/frr.git。主要还是聊聊frr是如何支持sysrepo对不同协议的管理的。简单画一个FRR的逻辑层次图,支持sysrepo模式是在FRR原来的基础上扩展通过netconf协议下发XML命令的功能。VTY_CLI模式是单机管理模式,XML模式是跨平台,跨网络的统一管理模式。这点对于SDN网络,这点就特别重要,通过支持的netconf协议将路由的配置下发不同的网元节点上。支持sysrepo的实现,是增加了一种网元设备的管理方法。

图1 FRR简易逻辑层次图

1 sysrepo集成编译

   源码下载后,接FRR的说明文档安装各类依赖包:

本地直接安装模式:

1、./bootstrap.sh
2、./configure \
    --bindir=/usr/bin \
    --sbindir=/usr/lib/frr \
    --sysconfdir=/etc/frr \
    --libdir=/usr/lib/frr \
    --libexecdir=/usr/lib/frr \
    --localstatedir=/var/run/frr \
    --with-moduledir=/usr/lib/frr/modules \
    --enable-snmp=agentx \
    --enable-multipath=64 \
    --enable-user=frr \
    --enable-group=frr \
    --enable-vty-group=frrvty \
    --enable-systemd=yes \
    --disable-exampledir \
    --disable-ldpd \
    --enable-fpm \
    --enable-sysrepo \     //划重点,必须带上“--enable-sysrepo”,否则未实现sysrepo的集成
    --with-pkg-git-version \
    --with-pkg-extra-version=-fump \
    SPHINXBUILD=/usr/bin/sphinx-build
3、make
4、make check
5、sudo make install

RPM包安装模式:

 修改{$frr}\redhat\frr.spec.in文件,关键之处添加“--enable-sysrepo”,请参考:

增加如下编译选项,应该都能看懂在哪添加,不详细指出位置

%{!?with_sysrepo:       %global  with_sysrepo       1 }


%if %{with_sysrepo}
    --enable-sysrepo \
%else
    --disable-sysrepo \
%endif


%if %{with_sysrepo}
    %{_libdir}/frr/modules/sysrepo.so
%endif

     接官方文档步骤参考编译,简单写了一个一健编译的方法,可以参考

#!/usr/bin/env bash
#
# frr rpm build script 
#
# PROVIDE: fump
##


if [ "$1" == "clean" ]
then
    echo "clean frr"
    make clean
    exit 1
elif [ "$1" == "build" ]
then
    echo "build frr rpm"
    rm -fr frr-*.rpm
    
    ./bootstrap.sh
    ./configure --with-pkg-extra-version=-fump
    make dist

    LOCAL_LC_TIME=$LC_TIME
    export LC_TIME="en_US.UTF-8"
    FRRVERSION=frr-7.5-fump
    mkdir -p rpms/{BUILD,RPMS,SOURCES,SPECS,SRPMS,tmp}
    mv frr-7.5-dev-fump.tar.gz rpms/SOURCES
    sed -e '7d' redhat/frr.spec > rpms/SPECS/frr.spec
    rpmbuild --ba rpms/SPECS/frr.spec --define "_topdir `pwd`/rpms"
    mv rpms/RPMS/x86_64/frr-*.rpm .
    rm -fr rpms/
    export LC_TIME=$LOCAL_LC_TIME
else
    echo "Usage: ./rpm.sh clean or ./rpm.sh build"
    exit 1
fi

 Deb包的编译类似,修改编译rule, {$frr}\debian\rules,再按步骤编译生成deb包。

加载frr相应库到sysrepo后启动进程,其中加载的脚本实现

#!/bin/bash

#
# frr sysrepo-yang module auto-install script
#
# PROVIDE: fump
##

set -eu -o pipefail

shopt -s failglob

OPER=$1
MODNAME=$2

: ${SYSREPOCTL:=sysrepoctl}
: ${SYSREPOCTL_ROOT_PERMS:=-o root:root -p 666}
: ${YANG_DIR:=/lib/frr/yang}

echo "$OPER, $MODNAME"

is_yang_module_installed() {
    module=$1
    module_name=${module%%@*}

    $SYSREPOCTL -l | grep --count "$module_name" > /dev/null
}

#install
if [ "$OPER" == "install" ]
then
    if ! is_yang_module_installed $MODNAME; then
        echo "- Installing module $MODNAME ..."
        $SYSREPOCTL -i -g ${YANG_DIR}/$MODNAME.yang  $SYSREPOCTL_ROOT_PERMS
    else
       echo "- Module $MODNAME already installed."
    fi

elif [ "$OPER" == "uninstall" ]
then 
    if ! is_yang_module_installed $MODNAME; then
        echo "- Module $MODNAME has not installed."
    else
        echo "- Uninstalling module $MODNAME ..."
        $SYSREPOCTL -u --module=$MODNAME
    fi
else
    echo "Usage $0 <sysrepoctl-path> <install or uninstall> <module-name>"
  

frr-bgp y入sysrepo库    ./setup.sh install frr-bgp

从sysrepo中卸载frr-interface库: ./setup.sh uninstall frr-interface

完成入库后,启动bgpd进程,通过-M 可选参数将sysrepo模块加载并启动bgp进程。

/usr/lib/frr/bgpd -d -M sysrepo:/usr/lib64/frr/modules/ --log-level debugging

完成启动后,就有两种模式可配置bgp咯。

本章只是简单如何在frr中使用集成sysrepo,接下来一章,分析frr是怎么实现sysrepo功能.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值