Merge pull request #41 from donaldsharp/quagga_to_frr

Quagga to frr - Rename of Quagga to FRR (FreeRangeRouting)
This commit is contained in:
Martin Winter 2017-01-06 20:07:41 +07:00 committed by GitHub
commit 7d53a49360
90 changed files with 651 additions and 646 deletions

View File

@ -2,11 +2,11 @@
SUBDIRS = lib qpb fpm @ZEBRA@ @LIBRFP@ @RFPTEST@ \ SUBDIRS = lib qpb fpm @ZEBRA@ @LIBRFP@ @RFPTEST@ \
@BGPD@ @RIPD@ @RIPNGD@ @OSPFD@ @OSPF6D@ @LDPD@ \ @BGPD@ @RIPD@ @RIPNGD@ @OSPFD@ @OSPF6D@ @LDPD@ \
@ISISD@ @PIMD@ @WATCHQUAGGA@ @VTYSH@ @OSPFCLIENT@ @DOC@ m4 @pkgsrcdir@ \ @ISISD@ @PIMD@ @WATCHFRR@ @VTYSH@ @OSPFCLIENT@ @DOC@ m4 @pkgsrcdir@ \
redhat @SOLARIS@ tests tools cumulus redhat @SOLARIS@ tests tools cumulus
DIST_SUBDIRS = lib qpb fpm zebra bgpd ripd ripngd ospfd ospf6d ldpd \ DIST_SUBDIRS = lib qpb fpm zebra bgpd ripd ripngd ospfd ospf6d ldpd \
isisd watchquagga vtysh ospfclient doc m4 pkgsrc redhat tests \ isisd watchfrr vtysh ospfclient doc m4 pkgsrc redhat tests \
solaris pimd @LIBRFP@ @RFPTEST@ tools cumulus solaris pimd @LIBRFP@ @RFPTEST@ tools cumulus
EXTRA_DIST = aclocal.m4 SERVICES REPORTING-BUGS \ EXTRA_DIST = aclocal.m4 SERVICES REPORTING-BUGS \

View File

@ -213,8 +213,8 @@ AC_ARG_ENABLE(ospf6d,
AS_HELP_STRING([--disable-ospf6d], [do not build ospf6d])) AS_HELP_STRING([--disable-ospf6d], [do not build ospf6d]))
AC_ARG_ENABLE(ldpd, AC_ARG_ENABLE(ldpd,
AS_HELP_STRING([--enable-ldpd], [build ldpd])) AS_HELP_STRING([--enable-ldpd], [build ldpd]))
AC_ARG_ENABLE(watchquagga, AC_ARG_ENABLE(watchfrr,
AS_HELP_STRING([--disable-watchquagga], [do not build watchquagga])) AS_HELP_STRING([--disable-watchfrr], [do not build watchfrr]))
AC_ARG_ENABLE(isisd, AC_ARG_ENABLE(isisd,
AS_HELP_STRING([--disable-isisd], [do not build isisd])) AS_HELP_STRING([--disable-isisd], [do not build isisd]))
AC_ARG_ENABLE(pimd, AC_ARG_ENABLE(pimd,
@ -1170,12 +1170,12 @@ else
fi fi
AM_CONDITIONAL(LDPD, test "x$LDPD" = "xldpd") AM_CONDITIONAL(LDPD, test "x$LDPD" = "xldpd")
if test "${enable_watchquagga}" = "no";then if test "${enable_watchfrr}" = "no";then
WATCHQUAGGA="" WATCHFRR=""
else else
WATCHQUAGGA="watchquagga" WATCHFRR="watchfrr"
fi fi
AM_CONDITIONAL(WATCHQUAGGA, test "x$WATCHQUAGGA" = "xwatchquagga") AM_CONDITIONAL(WATCHFRR, test "x$WATCHFRR" = "xwatchfrr")
OSPFCLIENT="" OSPFCLIENT=""
if test "${enable_ospfapi}" != "no";then if test "${enable_ospfapi}" != "no";then
@ -1250,7 +1250,7 @@ AC_SUBST(RIPNGD)
AC_SUBST(OSPFD) AC_SUBST(OSPFD)
AC_SUBST(OSPF6D) AC_SUBST(OSPF6D)
AC_SUBST(LDPD) AC_SUBST(LDPD)
AC_SUBST(WATCHQUAGGA) AC_SUBST(WATCHFRR)
AC_SUBST(ISISD) AC_SUBST(ISISD)
AC_SUBST(PIMD) AC_SUBST(PIMD)
AC_SUBST(SOLARIS) AC_SUBST(SOLARIS)
@ -1548,7 +1548,7 @@ AC_DEFINE_UNQUOTED(PATH_LDPD_PID, "$frr_statedir/ldpd.pid",ldpd PID)
AC_DEFINE_UNQUOTED(LDPD_SOCKET, "$frr_statedir/ldpd.sock",ldpd control socket) AC_DEFINE_UNQUOTED(LDPD_SOCKET, "$frr_statedir/ldpd.sock",ldpd control socket)
AC_DEFINE_UNQUOTED(PATH_ISISD_PID, "$frr_statedir/isisd.pid",isisd PID) AC_DEFINE_UNQUOTED(PATH_ISISD_PID, "$frr_statedir/isisd.pid",isisd PID)
AC_DEFINE_UNQUOTED(PATH_PIMD_PID, "$frr_statedir/pimd.pid",pimd PID) AC_DEFINE_UNQUOTED(PATH_PIMD_PID, "$frr_statedir/pimd.pid",pimd PID)
AC_DEFINE_UNQUOTED(PATH_WATCHQUAGGA_PID, "$frr_statedir/watchquagga.pid",watchquagga PID) AC_DEFINE_UNQUOTED(PATH_WATCHFRR_PID, "$frr_statedir/watchfrr.pid",watchfrr PID)
AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$frr_statedir/zserv.api",zebra api socket) AC_DEFINE_UNQUOTED(ZEBRA_SERV_PATH, "$frr_statedir/zserv.api",zebra api socket)
AC_DEFINE_UNQUOTED(ZEBRA_VTYSH_PATH, "$frr_statedir/zebra.vty",zebra vty socket) AC_DEFINE_UNQUOTED(ZEBRA_VTYSH_PATH, "$frr_statedir/zebra.vty",zebra vty socket)
AC_DEFINE_UNQUOTED(RIP_VTYSH_PATH, "$frr_statedir/ripd.vty",rip vty socket) AC_DEFINE_UNQUOTED(RIP_VTYSH_PATH, "$frr_statedir/ripd.vty",rip vty socket)
@ -1559,7 +1559,7 @@ AC_DEFINE_UNQUOTED(OSPF6_VTYSH_PATH, "$frr_statedir/ospf6d.vty",ospf6d vty socke
AC_DEFINE_UNQUOTED(LDP_VTYSH_PATH, "$frr_statedir/ldpd.vty",ldpd vty socket) AC_DEFINE_UNQUOTED(LDP_VTYSH_PATH, "$frr_statedir/ldpd.vty",ldpd vty socket)
AC_DEFINE_UNQUOTED(ISIS_VTYSH_PATH, "$frr_statedir/isisd.vty",isisd vty socket) AC_DEFINE_UNQUOTED(ISIS_VTYSH_PATH, "$frr_statedir/isisd.vty",isisd vty socket)
AC_DEFINE_UNQUOTED(PIM_VTYSH_PATH, "$frr_statedir/pimd.vty",pimd vty socket) AC_DEFINE_UNQUOTED(PIM_VTYSH_PATH, "$frr_statedir/pimd.vty",pimd vty socket)
AC_DEFINE_UNQUOTED(WATCHQUAGGA_VTYSH_PATH, "$frr_statedir/watchquagga.vty",watchquagga vty socket) AC_DEFINE_UNQUOTED(WATCHFRR_VTYSH_PATH, "$frr_statedir/watchfrr.vty",watchfrr vty socket)
AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$frr_statedir",daemon vty directory) AC_DEFINE_UNQUOTED(DAEMON_VTY_DIR, "$frr_statedir",daemon vty directory)
dnl autoconf does this, but it does it too late... dnl autoconf does this, but it does it too late...
@ -1605,7 +1605,7 @@ AC_CACHE_VAL(ac_cv_htonl_works,
AC_MSG_RESULT($ac_cv_htonl_works) AC_MSG_RESULT($ac_cv_htonl_works)
AC_CONFIG_FILES([Makefile lib/Makefile qpb/Makefile zebra/Makefile ripd/Makefile AC_CONFIG_FILES([Makefile lib/Makefile qpb/Makefile zebra/Makefile ripd/Makefile
ripngd/Makefile bgpd/Makefile ospfd/Makefile watchquagga/Makefile ripngd/Makefile bgpd/Makefile ospfd/Makefile watchfrr/Makefile
ospf6d/Makefile ldpd/Makefile isisd/Makefile vtysh/Makefile ospf6d/Makefile ldpd/Makefile isisd/Makefile vtysh/Makefile
doc/Makefile ospfclient/Makefile tests/Makefile m4/Makefile doc/Makefile ospfclient/Makefile tests/Makefile m4/Makefile
pimd/Makefile pimd/Makefile
@ -1629,9 +1629,9 @@ AC_CONFIG_FILES([Makefile lib/Makefile qpb/Makefile zebra/Makefile ripd/Makefile
doc/ripngd.8 doc/ripngd.8
doc/pimd.8 doc/pimd.8
doc/vtysh.1 doc/vtysh.1
doc/watchquagga.8 doc/watchfrr.8
doc/zebra.8 doc/zebra.8
doc/quagga.1 doc/frr.1
pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh]) pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh])

View File

@ -18,7 +18,7 @@
# When using "vtysh" such a config file is also needed. It should be owned by # When using "vtysh" such a config file is also needed. It should be owned by
# group "quaggavty" and set to ug=rw,o= though. Check /etc/pam.d/quagga, too. # group "quaggavty" and set to ug=rw,o= though. Check /etc/pam.d/quagga, too.
# #
# The watchquagga daemon is always started. Per default in monitoring-only but # The watchfrr daemon is always started. Per default in monitoring-only but
# that can be changed via /etc/quagga/debian.conf. # that can be changed via /etc/quagga/debian.conf.
# #
zebra=no zebra=no

View File

@ -14,5 +14,5 @@ isisd_options=" --daemon -A 127.0.0.1"
pimd_options=" --daemon -A 127.0.0.1" pimd_options=" --daemon -A 127.0.0.1"
# The list of daemons to watch is automatically generated by the init script. # The list of daemons to watch is automatically generated by the init script.
watchquagga_enable=yes watchfrr_enable=yes
watchquagga_options=(-adz -r /usr/sbin/servicebBquaggabBrestartbB%s -s /usr/sbin/servicebBquaggabBstartbB%s -k /usr/sbin/servicebBquaggabBstopbB%s -b bB -t 30) watchfrr_options=(-adz -r /usr/sbin/servicebBquaggabBrestartbB%s -s /usr/sbin/servicebBquaggabBstartbB%s -k /usr/sbin/servicebBquaggabBstopbB%s -b bB -t 30)

50
debian/README.Debian vendored
View File

@ -2,34 +2,34 @@
================== ==================
Please consider setting this package "on hold" by typing Please consider setting this package "on hold" by typing
echo "quagga hold" | dpkg --set-selections echo "frr hold" | dpkg --set-selections
and verifying this using and verifying this using
dpkg --get-selections | grep 'hold$' dpkg --get-selections | grep 'hold$'
Setting a package "on hold" means that it will not automatically be upgraded. Setting a package "on hold" means that it will not automatically be upgraded.
Instead apt-get only displays a warning saying that a new version would be Instead apt-get only displays a warning saying that a new version would be
available forcing you to explicitly type "apt-get install quagga" to upgrade it. available forcing you to explicitly type "apt-get install frr" to upgrade it.
* What is quagga? * What is frr?
================= =================
http://www.quagga.net/ http://www.freerangerouting.net/
> Quagga is a routing software suite, providing implementations of OSPFv2, > Frr is a routing software suite, providing implementations of OSPFv2,
> OSPFv3, RIP v1 and v2, RIPv3 and BGPv4 for Unix platforms, particularly > OSPFv3, RIP v1 and v2, RIPv3 and BGPv4 for Unix platforms, particularly
> FreeBSD and Linux and also NetBSD, to mention a few. Quagga is a fork of GNU > FreeBSD and Linux and also NetBSD, to mention a few. Frr is a fork of GNU
> Zebra which was developed by Kunihiro Ishiguro. Development of GNU Zebra > Zebra which was developed by Kunihiro Ishiguro. Development of GNU Zebra
> slowed dramatically to the point where eventually GNU Zebra was forked into > slowed dramatically to the point where eventually GNU Zebra was forked into
> Quagga. > Frr.
> The Quagga tree is an attempt to provide a zebra tree with at least the > The Frr tree is an attempt to provide a zebra tree with at least the
> bug-fixes, which have accumulated, applied, while tracking any significant > bug-fixes, which have accumulated, applied, while tracking any significant
> changes made to the zebra.org tree. Ultimately, this tree hopes to revitalise > changes made to the zebra.org tree. Ultimately, this tree hopes to revitalise
> development of this code base. > development of this code base.
I packaged zebra-pj which was then renamed to quagga to get people used to it I packaged zebra-pj which was then renamed to frr to get people used to it
and offer Debian users the choice which versions they like to use. I hope this and offer Debian users the choice which versions they like to use. I hope this
brings quagga some feedback and helps it evolving to a good successor of the brings frr some feedback and helps it evolving to a good successor of the
orphaned zebra. orphaned zebra.
-- Christian Hammers <ch@debian.org>, Jul/Aug 2003 -- Christian Hammers <ch@debian.org>, Jul/Aug 2003
@ -37,16 +37,16 @@ orphaned zebra.
* Why has SNMP support been disabled? * Why has SNMP support been disabled?
===================================== =====================================
Quagga used to link against the NetSNMP libraries to provide SNMP Frr used to link against the NetSNMP libraries to provide SNMP
support. Those libraries sadly link against the OpenSSL libraries support. Those libraries sadly link against the OpenSSL libraries
to provide crypto support for SNMPv3 among others. to provide crypto support for SNMPv3 among others.
OpenSSL now is not compatible with the GNU GENERAL PUBLIC LICENSE (GPL) OpenSSL now is not compatible with the GNU GENERAL PUBLIC LICENSE (GPL)
licence that Quagga is distributed under. For more explanation read: licence that Frr is distributed under. For more explanation read:
http://www.gnome.org/~markmc/openssl-and-the-gpl.html http://www.gnome.org/~markmc/openssl-and-the-gpl.html
http://www.gnu.org/licenses/gpl-faq.html#GPLIncompatibleLibs http://www.gnu.org/licenses/gpl-faq.html#GPLIncompatibleLibs
Updating the licence to explecitly allow linking against OpenSSL Updating the licence to explecitly allow linking against OpenSSL
would requite the affirmation of all people that ever contributed would requite the affirmation of all people that ever contributed
a significant part to Zebra or Quagga and thus are the collective a significant part to Zebra or Frr and thus are the collective
"copyright holder". That's too much work. Using a shrinked down "copyright holder". That's too much work. Using a shrinked down
version of NetSNMP without OpenSSL or convincing the NetSNMP people version of NetSNMP without OpenSSL or convincing the NetSNMP people
to change to GnuTLS are maybe good solutions but not reachable to change to GnuTLS are maybe good solutions but not reachable
@ -55,17 +55,17 @@ during the last days before the Sarge release :-(
*BUT* *BUT*
It is allowed by the used licence mix that you fetch the sources and It is allowed by the used licence mix that you fetch the sources and
build Quagga yourself with SNMP with build Frr yourself with SNMP with
<remove the "grep ^smux" block at the end of debian/quagga.preinst> <remove the "grep ^smux" block at the end of debian/frr.preinst>
# export WANT_SNMP=1 # export WANT_SNMP=1
# apt-get -b source quagga # apt-get -b source frr
Just distributing it in binary form, linked against OpenSSL, is forbidden. Just distributing it in binary form, linked against OpenSSL, is forbidden.
* Daemon selection: * Daemon selection:
=================== ===================
The Debian package uses /etc/quagga/daemons to tell the The Debian package uses /etc/frr/daemons to tell the
initscript which daemons to start. It's in the format initscript which daemons to start. It's in the format
<daemon>=<yes|no|priority> <daemon>=<yes|no|priority>
with no spaces (it's simply source-d into the initscript). with no spaces (it's simply source-d into the initscript).
@ -73,13 +73,13 @@ Default is not to start anything, since it can hose your
system's routing table if not set up properly. system's routing table if not set up properly.
Priorities were suggested by Dancer <dancer@zeor.simegen.com>. Priorities were suggested by Dancer <dancer@zeor.simegen.com>.
They're used to start the Quagga daemons in more than one step They're used to start the Frr daemons in more than one step
(for example start one or two at network initialization and the (for example start one or two at network initialization and the
rest later). The number of Quagga daemons being small, priorities rest later). The number of Frr daemons being small, priorities
must be between 1 and 9, inclusive (or the initscript has to be must be between 1 and 9, inclusive (or the initscript has to be
changed). /etc/init.d/quagga then can be started as changed). /etc/init.d/frr then can be started as
/etc/init.d/quagga <start|stop|restart|<priority>> /etc/init.d/frr <start|stop|restart|<priority>>
where priority 0 is the same as 'stop', priority 10 or 'start' where priority 0 is the same as 'stop', priority 10 or 'start'
means 'start all' means 'start all'
@ -96,15 +96,15 @@ into the kernel.
===================================================================== =====================================================================
If this message occurs the receive buffer should be increased by adding the If this message occurs the receive buffer should be increased by adding the
following to /etc/sysctl.conf and "--nl-bufsize" to /etc/quagga/debian.conf. following to /etc/sysctl.conf and "--nl-bufsize" to /etc/frr/debian.conf.
> net.core.rmem_default = 262144 > net.core.rmem_default = 262144
> net.core.rmem_max = 262144 > net.core.rmem_max = 262144
See message #4525 from 2005-05-09 in the quagga-users mailing list. See message #4525 from 2005-05-09 in the frr-users mailing list.
* vtysh immediately exists: * vtysh immediately exists:
=========================== ===========================
Check /etc/pam.d/quagga, it probably denies access to your user. The passwords Check /etc/pam.d/frr, it probably denies access to your user. The passwords
configured in /etc/quagga/Quagga.conf are only for telnet access. configured in /etc/frr/Frr.conf are only for telnet access.

View File

@ -4,19 +4,19 @@
for i in debian/patches/*.diff; do echo -e "#\n# $i\n#"; patch --fuzz=3 --dry-run -p1 < $i; done for i in debian/patches/*.diff; do echo -e "#\n# $i\n#"; patch --fuzz=3 --dry-run -p1 < $i; done
# #
# Filename transition from zebra to quagga # Filename transition from zebra to frr
# #
Files that keep their names Files that keep their names
/usr/bin/vtysh /usr/bin/vtysh
Files that got an -pj suffix Files that got an -pj suffix
/etc/default/zebra -> /etc/quagga/debian.conf /etc/default/zebra -> /etc/frr/debian.conf
/etc/init.d/zebra -> /etc/init.d/quagga /etc/init.d/zebra -> /etc/init.d/frr
/etc/zebra/ -> /etc/quagga/ /etc/zebra/ -> /etc/frr/
/usr/share/doc/zebra/ -> /usr/share/doc/quagga/ /usr/share/doc/zebra/ -> /usr/share/doc/frr/
/var/log/zebra/ -> /var/log/quagga/ /var/log/zebra/ -> /var/log/frr/
/var/run/ -> /var/run/quagga/ /var/run/ -> /var/run/frr/
Files that were moved Files that were moved
/usr/sbin/* -> /usr/lib/quagga/ /usr/sbin/* -> /usr/lib/frr/

4
debian/changelog vendored
View File

@ -1,3 +1,7 @@
frr (2.0) Released; urgency=medium
* Switchover to FRR
quagga (0.99.24+cl3u5) RELEASED; urgency=medium quagga (0.99.24+cl3u5) RELEASED; urgency=medium
* Closes: CM-12846 - Resolve Memory leaks in 'show ip bgp neighbor json' * Closes: CM-12846 - Resolve Memory leaks in 'show ip bgp neighbor json'

30
debian/control vendored
View File

@ -1,14 +1,14 @@
Source: quagga Source: frr
Section: net Section: net
Priority: optional Priority: optional
Maintainer: Christian Hammers <ch@debian.org> Maintainer: Christian Hammers <ch@debian.org>
Uploaders: Florian Weimer <fw@debian.org> Uploaders: Florian Weimer <fw@debian.org>
Build-Depends: debhelper (>= 7.0.50~), libncurses5-dev, libreadline-dev, texlive-latex-base, texlive-generic-recommended, libpam0g-dev | libpam-dev, libcap-dev, texinfo (>= 4.7), imagemagick, ghostscript, groff, po-debconf, autotools-dev, hardening-wrapper, libpcre3-dev, gawk, chrpath, libsnmp-dev, git, dh-autoreconf, libjson0, libjson0-dev, dh-systemd, libsystemd-dev, python-ipaddr Build-Depends: debhelper (>= 7.0.50~), libncurses5-dev, libreadline-dev, texlive-latex-base, texlive-generic-recommended, libpam0g-dev | libpam-dev, libcap-dev, texinfo (>= 4.7), imagemagick, ghostscript, groff, po-debconf, autotools-dev, hardening-wrapper, libpcre3-dev, gawk, chrpath, libsnmp-dev, git, dh-autoreconf, libjson0, libjson0-dev, dh-systemd, libsystemd-dev, python-ipaddr
Standards-Version: 3.9.6 Standards-Version: 3.9.6
Homepage: http://www.quagga.net/ Homepage: http://www.frr.net/
XS-Testsuite: autopkgtest XS-Testsuite: autopkgtest
Package: quagga Package: frr
Architecture: any Architecture: any
Depends: ${shlibs:Depends}, logrotate (>= 3.2-11), iproute, ${misc:Depends} Depends: ${shlibs:Depends}, logrotate (>= 3.2-11), iproute, ${misc:Depends}
Pre-Depends: adduser Pre-Depends: adduser
@ -16,37 +16,33 @@ Conflicts: zebra, zebra-pj
Replaces: zebra, zebra-pj Replaces: zebra, zebra-pj
Suggests: snmpd Suggests: snmpd
Description: BGP/OSPF/RIP routing daemon Description: BGP/OSPF/RIP routing daemon
GNU Quagga is free software which manages TCP/IP based routing protocols. Frr is free software which manages TCP/IP based routing protocols.
It supports BGP4, BGP4+, OSPFv2, OSPFv3, IS-IS, RIPv1, RIPv2, and RIPng as It supports BGP4, BGP4+, OSPFv2, OSPFv3, IS-IS, RIPv1, RIPv2, and RIPng as
well as the IPv6 versions of these. well as the IPv6 versions of these.
. .
As the precessor Zebra has been considered orphaned, the Quagga project Frr uses threading if the kernel supports it, but can also run on
has been formed by members of the zebra mailing list and the former
zebra-pj project to continue developing.
.
Quagga uses threading if the kernel supports it, but can also run on
kernels that do not support threading. Each protocol has its own daemon. kernels that do not support threading. Each protocol has its own daemon.
. .
It is more than a routed replacement, it can be used as a Route Server and It is more than a routed replacement, it can be used as a Route Server and
a Route Reflector. a Route Reflector.
Package: quagga-dbg Package: frr-dbg
Architecture: any Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}, quagga (= ${binary:Version}) Depends: ${shlibs:Depends}, ${misc:Depends}, frr (= ${binary:Version})
Priority: extra Priority: extra
Section: debug Section: debug
Description: BGP/OSPF/RIP routing daemon (debug symbols) Description: BGP/OSPF/RIP routing daemon (debug symbols)
This package provides debugging symbols for all binary packages built from This package provides debugging symbols for all binary packages built from
quagga source package. It's highly recommended to have this package installed frr source package. It's highly recommended to have this package installed
before reporting any Quagga crashes to either Quagga developers or Debian before reporting any Frr crashes to either Frr developers or Debian
package maintainers. package maintainers.
Package: quagga-doc Package: frr-doc
Section: net Section: net
Architecture: all Architecture: all
Depends: ${misc:Depends} Depends: ${misc:Depends}
Suggests: quagga Suggests: frr
Description: documentation files for quagga Description: documentation files for frr
This package includes info files for quagga, a free software which manages This package includes info files for frr, a free software which manages
TCP/IP based routing protocols. It supports BGP4, BGP4+, OSPFv2, OSPFv3, TCP/IP based routing protocols. It supports BGP4, BGP4+, OSPFv2, OSPFv3,
IS-IS, RIPv1, RIPv2, and RIPng as well as the IPv6 versions of these. IS-IS, RIPv1, RIPv2, and RIPng as well as the IPv6 versions of these.

6
debian/copyright vendored
View File

@ -1,7 +1,7 @@
Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: Quagga Upstream-Name: Frr
Upstream-Contact: maintainers@quagga.net, security@quagga.net Upstream-Contact: maintainers@freerangerouting.net, security@freerangerouting.net
Source: http://www.quagga.net/ Source: http://www.freerangerouting.net/
Files: * Files: *
Copyright: 1996-2003 by the original Zebra authors: Copyright: 1996-2003 by the original Zebra authors:

1
debian/frr-doc.info vendored Normal file
View File

@ -0,0 +1 @@
doc/frr.info*

1
debian/frr-doc.lintian-overrides vendored Normal file
View File

@ -0,0 +1 @@
frr-doc: wrong-section-according-to-package-name frr-doc => doc

2
debian/frr.conf vendored Normal file
View File

@ -0,0 +1,2 @@
# Create the /run/frr directory at boot or from systemd-tmpfiles on install
d /run/frr 0755 frr frr

7
debian/frr.dirs vendored Normal file
View File

@ -0,0 +1,7 @@
etc/logrotate.d/
etc/frr/
usr/share/doc/frr/
usr/share/doc/frr/examples/
usr/share/lintian/overrides/
usr/share/snmp/mibs/
var/log/frr/

View File

@ -1,12 +1,12 @@
etc/quagga/ etc/frr/
usr/bin/vtysh usr/bin/vtysh
usr/include/quagga/ usr/include/frr/
usr/lib/ usr/lib/
tools/quagga-reload.py usr/lib/quagga/ tools/frr-reload.py usr/lib/frr/
tools/quagga usr/lib/quagga tools/frr usr/lib/frr
usr/share/doc/quagga/ usr/share/doc/frr/
usr/share/man/man1/vtysh.1 usr/share/man/man1/vtysh.1
usr/share/man/man1/quagga.1 usr/share/man/man1/frr.1
usr/share/man/man8 usr/share/man/man8
usr/share/man/man8/bgpd.8 usr/share/man/man8/bgpd.8
usr/share/man/man8/ospf6d.8 usr/share/man/man8/ospf6d.8
@ -15,8 +15,8 @@ usr/share/man/man8/ripd.8
usr/share/man/man8/ripngd.8 usr/share/man/man8/ripngd.8
usr/share/man/man8/zebra.8 usr/share/man/man8/zebra.8
usr/share/man/man8/isisd.8 usr/share/man/man8/isisd.8
usr/share/man/man8/watchquagga.8 usr/share/man/man8/watchfrr.8
usr/share/snmp/mibs/ usr/share/snmp/mibs/
cumulus/etc/* etc/ cumulus/etc/* etc/
tools/*.service lib/systemd/system tools/*.service lib/systemd/system
debian/quagga.conf usr/lib/tmpfiles.d debian/frr.conf usr/lib/tmpfiles.d

4
debian/frr.lintian-overrides vendored Normal file
View File

@ -0,0 +1,4 @@
frr: non-dev-pkg-with-shlib-symlink usr/lib/libospfapiclient.so.0.0.0 usr/lib/libospfapiclient.so
frr: non-dev-pkg-with-shlib-symlink usr/lib/libospf.so.0.0.0 usr/lib/libospf.so
frr: non-dev-pkg-with-shlib-symlink usr/lib/libzebra.so.0.0.0 usr/lib/libzebra.so
frr: package-name-doesnt-match-sonames libospf0 libospfapiclient0 libzebra0

View File

@ -1,15 +1,15 @@
/var/log/quagga/*.log { /var/log/frr/*.log {
size 500k size 500k
sharedscripts sharedscripts
missingok missingok
compress compress
rotate 14 rotate 14
create 640 quagga quaggavty create 640 frr frrvty
postrotate postrotate
for i in zebra bgpd ripd ospfd ripngd ospf6d isisd pimd; do for i in zebra bgpd ripd ospfd ripngd ospf6d isisd pimd; do
if [ -e /var/run/quagga/$i.pid ] ; then if [ -e /var/run/frr/$i.pid ] ; then
kill -USR1 `cat /var/run/quagga/$i.pid` kill -USR1 `cat /var/run/frr/$i.pid`
fi fi
done done

View File

@ -6,4 +6,4 @@ doc/ripngd.8
doc/vtysh.1 doc/vtysh.1
doc/zebra.8 doc/zebra.8
doc/isisd.8 doc/isisd.8
doc/watchquagga.8 doc/watchfrr.8

View File

@ -1,3 +1,3 @@
# Any user may call vtysh but only those belonging to the group quaggavty can # Any user may call vtysh but only those belonging to the group frrvty can
# actually connect to the socket and use the program. # actually connect to the socket and use the program.
auth sufficient pam_permit.so auth sufficient pam_permit.so

41
debian/frr.postinst vendored Normal file
View File

@ -0,0 +1,41 @@
#!/bin/bash -e
######################
PASSWDFILE=/etc/passwd
GROUPFILE=/etc/group
frruid=`egrep "^frr:" $PASSWDFILE | awk -F ":" '{ print $3 }'`
frrgid=`egrep "^frr:" $GROUPFILE | awk -F ":" '{ print $3 }'`
frrvtygid=`egrep "^frrvty:" $GROUPFILE | awk -F ":" '{ print $3 }'`
[ -n ${frruid} ] || (echo "No uid for frr in ${PASSWDFILE}" && /bin/false)
[ -n ${frrgid} ] || (echo "No gid for frr in ${GROUPFILE}" && /bin/false)
[ -n ${frrVTYgid} ] || (echo "No gid for frrvty in ${GROUPFILE}" && /bin/false)
chown -R ${frruid}:${frrgid} /etc/frr
touch /etc/frr/vtysh.conf
chgrp ${frrvtygid} /etc/frr/vtysh*
chmod 440 /etc/sudoers.d/frr_sudoers
chmod 644 /etc/frr/*
ENVIRONMENTFILE=/etc/environment
if ! grep --quiet VTYSH_PAGER=/bin/cat ${ENVIRONMENTFILE}; then
echo "VTYSH_PAGER=/bin/cat" >> ${ENVIRONMENTFILE}
fi
##################################################
if [ -n "$DEBIAN_SCRIPT_DEBUG" ]; then set -v -x; DEBIAN_SCRIPT_TRACE=1; fi
${DEBIAN_SCRIPT_TRACE:+ echo "#42#DEBUG# RUNNING $0 $*"}
# This is most likely due to the answer "no" to the "really stop the server"
# question in the prerm script.
if [ "$1" = "abort-upgrade" ]; then
exit 0
fi
. /usr/share/debconf/confmodule
db_stop
#DEBHELPER#

View File

@ -5,8 +5,8 @@ ${DEBIAN_SCRIPT_TRACE:+ echo "#42#DEBUG# RUNNING $0 $*"}
# set -u not because of debhelper # set -u not because of debhelper
if [ "$1" = "purge" ]; then if [ "$1" = "purge" ]; then
rm -rf /etc/quagga /var/run/quagga /var/log/quagga rm -rf /etc/frr /var/run/frr /var/log/frr
userdel quagga >/dev/null 2>&1 || true userdel frr >/dev/null 2>&1 || true
fi fi
#DEBHELPER# #DEBHELPER#

View File

@ -5,73 +5,73 @@ ${DEBIAN_SCRIPT_TRACE:+ echo "#42#DEBUG# RUNNING $0 $*"}
set -e set -e
set -u set -u
# creating quaggavty group if it isn't already there # creating frrvty group if it isn't already there
if ! getent group quaggavty >/dev/null; then if ! getent group frrvty >/dev/null; then
addgroup --system quaggavty >/dev/null addgroup --system frrvty >/dev/null
fi fi
# creating quagga group if it isn't already there # creating frr group if it isn't already there
if ! getent group quagga >/dev/null; then if ! getent group frr >/dev/null; then
addgroup --system quagga >/dev/null addgroup --system frr >/dev/null
fi fi
# creating quagga user if he isn't already there # creating frr user if he isn't already there
if ! getent passwd quagga >/dev/null; then if ! getent passwd frr >/dev/null; then
adduser \ adduser \
--system \ --system \
--ingroup quagga \ --ingroup frr \
--home /var/run/quagga/ \ --home /var/run/frr/ \
--gecos "Quagga routing suite" \ --gecos "Frr routing suite" \
--shell /bin/false \ --shell /bin/false \
quagga >/dev/null frr >/dev/null
fi fi
# We may be installing over an older version of # We may be installing over an older version of
# quagga and as such we need to intelligently # frr and as such we need to intelligently
# check to see if the quagga user is in the quaggavty # check to see if the frr user is in the frrvty
# group. # group.
if ! /usr/bin/id quagga | grep &>/dev/null 'quaggavty'; then if ! /usr/bin/id frr | grep &>/dev/null 'frrvty'; then
usermod -a -G quaggavty quagga >/dev/null usermod -a -G frrvty frr >/dev/null
fi fi
# Do not change permissions when upgrading as it would violate policy. # Do not change permissions when upgrading as it would violate policy.
if [ "$1" = "install" ]; then if [ "$1" = "install" ]; then
# Logfiles are group readable in case users were put into the quagga group. # Logfiles are group readable in case users were put into the frr group.
d=/var/log/quagga/ d=/var/log/frr/
mkdir -p $d mkdir -p $d
chown -R quagga:quagga $d chown -R frr:frr $d
chmod u=rwx,go=rx $d chmod u=rwx,go=rx $d
find $d -type f -print0 | xargs -0 --no-run-if-empty chmod u=rw,g=r,o= find $d -type f -print0 | xargs -0 --no-run-if-empty chmod u=rw,g=r,o=
# Strict permissions for the sockets. # Strict permissions for the sockets.
d=/var/run/quagga/ d=/var/run/frr/
mkdir -p $d mkdir -p $d
chown -R quagga:quagga $d chown -R frr:frr $d
chmod u=rwx,go=rx $d chmod u=rwx,go=rx $d
find $d -type f -print0 | xargs -0 --no-run-if-empty chmod u=rw,go= find $d -type f -print0 | xargs -0 --no-run-if-empty chmod u=rw,go=
# Config files. Vtysh does not have access to the individual daemons config file # Config files. Vtysh does not have access to the individual daemons config file
d=/etc/quagga/ d=/etc/frr/
mkdir -p $d mkdir -p $d
chown quagga:quaggavty $d chown frr:frrvty $d
chmod ug=rwx,o=rx $d chmod ug=rwx,o=rx $d
find $d -type f -print0 | xargs -0 --no-run-if-empty chown quagga:quagga find $d -type f -print0 | xargs -0 --no-run-if-empty chown frr:frr
find $d -type f -print0 | xargs -0 --no-run-if-empty chmod u=rw,g=r,o= find $d -type f -print0 | xargs -0 --no-run-if-empty chmod u=rw,g=r,o=
# Exceptions for vtysh. # Exceptions for vtysh.
f=$d/vtysh.conf f=$d/vtysh.conf
if [ -f $f ]; then if [ -f $f ]; then
chown quagga:quaggavty $f chown frr:frrvty $f
chmod u=rw,g=r,o= $f chmod u=rw,g=r,o= $f
fi fi
# Exceptions for vtysh. # Exceptions for vtysh.
f=$d/Quagga.conf f=$d/Frr.conf
if [ -f $d/Zebra.conf ]; then if [ -f $d/Zebra.conf ]; then
mv $d/Zebra.conf $f mv $d/Zebra.conf $f
fi fi
if [ -f $f ]; then if [ -f $f ]; then
chown quagga:quaggavty $f chown frr:frrvty $f
chmod u=rw,g=r,o= $f chmod u=rw,g=r,o= $f
fi fi
fi fi

View File

@ -15,7 +15,7 @@ case $1 in
;; ;;
failed-upgrade) failed-upgrade)
# If quagga/really_stop was negated then this script exits with return # If frr/really_stop was negated then this script exits with return
# code 1 and is called again with "failed-upgrade". Well, exit again. # code 1 and is called again with "failed-upgrade". Well, exit again.
exit 1 exit 1
;; ;;

View File

@ -1 +0,0 @@
doc/quagga.info*

View File

@ -1 +0,0 @@
quagga-doc: wrong-section-according-to-package-name quagga-doc => doc

2
debian/quagga.conf vendored
View File

@ -1,2 +0,0 @@
# Create the /run/quagga directory at boot or from systemd-tmpfiles on install
d /run/quagga 0755 quagga quagga

7
debian/quagga.dirs vendored
View File

@ -1,7 +0,0 @@
etc/logrotate.d/
etc/quagga/
usr/share/doc/quagga/
usr/share/doc/quagga/examples/
usr/share/lintian/overrides/
usr/share/snmp/mibs/
var/log/quagga/

View File

@ -1,4 +0,0 @@
quagga: non-dev-pkg-with-shlib-symlink usr/lib/libospfapiclient.so.0.0.0 usr/lib/libospfapiclient.so
quagga: non-dev-pkg-with-shlib-symlink usr/lib/libospf.so.0.0.0 usr/lib/libospf.so
quagga: non-dev-pkg-with-shlib-symlink usr/lib/libzebra.so.0.0.0 usr/lib/libzebra.so
quagga: package-name-doesnt-match-sonames libospf0 libospfapiclient0 libzebra0

View File

@ -1,41 +0,0 @@
#!/bin/bash -e
######################
PASSWDFILE=/etc/passwd
GROUPFILE=/etc/group
quaggauid=`egrep "^quagga:" $PASSWDFILE | awk -F ":" '{ print $3 }'`
quaggagid=`egrep "^quagga:" $GROUPFILE | awk -F ":" '{ print $3 }'`
quaggavtygid=`egrep "^quaggavty:" $GROUPFILE | awk -F ":" '{ print $3 }'`
[ -n ${quaggauid} ] || (echo "No uid for quagga in ${PASSWDFILE}" && /bin/false)
[ -n ${quaggagid} ] || (echo "No gid for quagga in ${GROUPFILE}" && /bin/false)
[ -n ${quaggaVTYgid} ] || (echo "No gid for quaggavty in ${GROUPFILE}" && /bin/false)
chown -R ${quaggauid}:${quaggagid} /etc/quagga
touch /etc/quagga/vtysh.conf
chgrp ${quaggavtygid} /etc/quagga/vtysh*
chmod 440 /etc/sudoers.d/quagga_sudoers
chmod 644 /etc/quagga/*
ENVIRONMENTFILE=/etc/environment
if ! grep --quiet VTYSH_PAGER=/bin/cat ${ENVIRONMENTFILE}; then
echo "VTYSH_PAGER=/bin/cat" >> ${ENVIRONMENTFILE}
fi
##################################################
if [ -n "$DEBIAN_SCRIPT_DEBUG" ]; then set -v -x; DEBIAN_SCRIPT_TRACE=1; fi
${DEBIAN_SCRIPT_TRACE:+ echo "#42#DEBUG# RUNNING $0 $*"}
# This is most likely due to the answer "no" to the "really stop the server"
# question in the prerm script.
if [ "$1" = "abort-upgrade" ]; then
exit 0
fi
. /usr/share/debconf/confmodule
db_stop
#DEBHELPER#

38
debian/rules vendored
View File

@ -20,10 +20,10 @@ MAKEFLAGS += -j$(DEBIAN_JOBS)
endif endif
%: %:
dh $@ --with=systemd,autoreconf --parallel --dbg-package=quagga-dbg --list-missing dh $@ --with=systemd,autoreconf --parallel --dbg-package=frr-dbg --list-missing
override_dh_auto_configure: override_dh_auto_configure:
# Quagga needs /proc to check some BSD vs Linux specific stuff. # Frr needs /proc to check some BSD vs Linux specific stuff.
# Else it fails with an obscure error message pointing out that # Else it fails with an obscure error message pointing out that
# IPCTL_FORWARDING is an undefined symbol which is not very helpful. # IPCTL_FORWARDING is an undefined symbol which is not very helpful.
@if ! [ -d /proc/1 ]; then \ @if ! [ -d /proc/1 ]; then \
@ -33,18 +33,18 @@ override_dh_auto_configure:
if ! [ -e config.status ]; then \ if ! [ -e config.status ]; then \
dh_auto_configure -- \ dh_auto_configure -- \
--enable-exampledir=/usr/share/doc/quagga/examples/ \ --enable-exampledir=/usr/share/doc/frr/examples/ \
--localstatedir=/var/run/quagga \ --localstatedir=/var/run/frr \
--sbindir=/usr/lib/quagga \ --sbindir=/usr/lib/frr \
--sysconfdir=/etc/quagga \ --sysconfdir=/etc/frr \
$(USE_SNMP) \ $(USE_SNMP) \
--enable-ospfapi=yes \ --enable-ospfapi=yes \
--enable-vtysh=yes \ --enable-vtysh=yes \
--enable-isisd=yes \ --enable-isisd=yes \
--enable-multipath=256 \ --enable-multipath=256 \
--enable-user=quagga \ --enable-user=frr \
--enable-group=quagga \ --enable-group=frr \
--enable-vty-group=quaggavty \ --enable-vty-group=frrvty \
--enable-configfile-mask=0640 \ --enable-configfile-mask=0640 \
--enable-logfile-mask=0640 \ --enable-logfile-mask=0640 \
--enable-werror \ --enable-werror \
@ -53,7 +53,7 @@ override_dh_auto_configure:
--enable-systemd=yes \ --enable-systemd=yes \
--enable-poll=yes \ --enable-poll=yes \
--enable-cumulus=yes \ --enable-cumulus=yes \
--enable-pimd=no \ --enable-pimd=yes \
--enable-dependency-tracking \ --enable-dependency-tracking \
--enable-bgp-vnc=no; \ --enable-bgp-vnc=no; \
fi fi
@ -66,11 +66,11 @@ override_dh_auto_build:
# doc/ is a bit crazy # doc/ is a bit crazy
ifeq ($(GENERATE_PDF), 1) ifeq ($(GENERATE_PDF), 1)
dh_auto_build -- -C doc quagga.pdf || true # pdfetex fails with exit code 1 but still produces a good looking .pdf dh_auto_build -- -C doc frr.pdf || true # pdfetex fails with exit code 1 but still produces a good looking .pdf
endif endif
rm -vf doc/quagga.info rm -vf doc/frr.info
dh_auto_build -- -C doc quagga.info dh_auto_build -- -C doc frr.info
rm -vf doc/quagga.info.html* rm -vf doc/frr.info.html*
override_dh_auto_test: override_dh_auto_test:
@ -81,18 +81,18 @@ override_dh_auto_install:
rm -f debian/tmp/usr/share/info/dir* rm -f debian/tmp/usr/share/info/dir*
# install config files # install config files
mkdir -p debian/tmp/etc/quagga/ mkdir -p debian/tmp/etc/frr/
perl -pi -e 's#^!log file #!log file /var/log/quagga/#' debian/tmp/usr/share/doc/quagga/examples/*sample* perl -pi -e 's#^!log file #!log file /var/log/frr/#' debian/tmp/usr/share/doc/frr/examples/*sample*
# installing the Quagga specific SNMP MIB # installing the Frr specific SNMP MIB
install -D -m 644 ./zebra/GNOME-PRODUCT-ZEBRA-MIB debian/tmp/usr/share/snmp/mibs/GNOME-PRODUCT-ZEBRA-MIB install -D -m 644 ./zebra/GNOME-PRODUCT-ZEBRA-MIB debian/tmp/usr/share/snmp/mibs/GNOME-PRODUCT-ZEBRA-MIB
# cleaning .la files # cleaning .la files
sed -i "/dependency_libs/ s/'.*'/''/" debian/tmp/usr/lib/*.la sed -i "/dependency_libs/ s/'.*'/''/" debian/tmp/usr/lib/*.la
override_dh_systemd_start: override_dh_systemd_start:
dh_systemd_start quagga.service dh_systemd_start frr.service
override_dh_systemd_enable: override_dh_systemd_enable:
dh_systemd_enable quagga.service dh_systemd_enable frr.service

View File

@ -1,3 +1,3 @@
Tests: daemons Tests: daemons
Depends: quagga Depends: frr
Restrictions: needs-root Restrictions: needs-root

10
debian/tests/daemons vendored
View File

@ -1,21 +1,21 @@
#!/bin/bash #!/bin/bash
#--------------- #---------------
# Testing quagga # Testing frr
#--------------- #---------------
set -e set -e
# modify config file to enable all daemons and copy config files # modify config file to enable all daemons and copy config files
CONFIG_FILE=/etc/quagga/daemons CONFIG_FILE=/etc/frr/daemons
DAEMONS=("zebra" "bgpd" "ospfd" "ospf6d" "ripd" "ripngd" "isisd" "pimd") DAEMONS=("zebra" "bgpd" "ospfd" "ospf6d" "ripd" "ripngd" "isisd" "pimd")
for daemon in "${DAEMONS[@]}" for daemon in "${DAEMONS[@]}"
do do
sed -i -e "s/${daemon}=no/${daemon}=yes/g" $CONFIG_FILE sed -i -e "s/${daemon}=no/${daemon}=yes/g" $CONFIG_FILE
cp /usr/share/doc/quagga/examples/${daemon}.conf.sample /etc/quagga/${daemon}.conf cp /usr/share/doc/frr/examples/${daemon}.conf.sample /etc/frr/${daemon}.conf
done done
# reload quagga # reload frr
/etc/init.d/quagga restart > /dev/null 2>&1 /etc/init.d/frr restart > /dev/null 2>&1
# check daemons # check daemons
for daemon in "${DAEMONS[@]}" for daemon in "${DAEMONS[@]}"

2
debian/watch vendored
View File

@ -4,5 +4,5 @@
# Site Directory Pattern Version Script # Site Directory Pattern Version Script
version=3 version=3
opts=uversionmangle=s/(\d)[_\.\-\+]?((RC|rc|pre|dev|beta|alpha|b|a)[\-\.]?\d*)$/$1~$2/ \ opts=uversionmangle=s/(\d)[_\.\-\+]?((RC|rc|pre|dev|beta|alpha|b|a)[\-\.]?\d*)$/$1~$2/ \
http://download.savannah.gnu.org/releases/quagga/quagga-(\d.*)\.(?:tgz|tar\.(?:gz|bz2|xz)) http://download.savannah.gnu.org/releases/frr/quagga-(\d.*)\.(?:tgz|tar\.(?:gz|bz2|xz))
# Bart Martens <bartm@debian.org> Fri, 25 Jan 2013 06:38:53 +0000 # Bart Martens <bartm@debian.org> Fri, 25 Jan 2013 06:38:53 +0000

4
debian/watchfrr.rc vendored Normal file
View File

@ -0,0 +1,4 @@
check process watchfrr with pidfile /var/run/frr/watchfrr.pid
start program = "/etc/init.d/frr start watchfrr" with timeout 120 seconds
stop program = "/etc/init.d/frr stop watchfrr"
if 3 restarts within 10 cycles then timeout

View File

@ -1,4 +0,0 @@
check process watchquagga with pidfile /var/run/quagga/watchquagga.pid
start program = "/etc/init.d/quagga start watchquagga" with timeout 120 seconds
stop program = "/etc/init.d/quagga stop watchquagga"
if 3 restarts within 10 cycles then timeout

12
doc/.gitignore vendored
View File

@ -2,17 +2,17 @@ Makefile
Makefile.in Makefile.in
mdate-sh mdate-sh
draft-zebra-00.txt draft-zebra-00.txt
quagga.info-* frr.info-*
zebra.html zebra.html
defines.texi defines.texi
version.texi version.texi
texinfo.tex texinfo.tex
quagga.html frr.html
quagga.info frr.info
*.pdf *.pdf
*.eps *.eps
quagga.ps frr.ps
quagga.dvi frr.dvi
stamp-vti stamp-vti
.nfs* .nfs*
*.aux *.aux
@ -28,6 +28,8 @@ stamp-vti
*.toc *.toc
*.tp *.tp
*.vr *.vr
*.8
*.1
.arch-inventory .arch-inventory
.arch-ids .arch-ids
*~ *~

View File

@ -7,7 +7,7 @@
# #
# Here we use 'convert' from the well known 'ImageMagick' package # Here we use 'convert' from the well known 'ImageMagick' package
# to do conversion from png to eps/pdf for figures. # to do conversion from png to eps/pdf for figures.
# PDF form is required for quagga.pdf, using PDFTex at least. # PDF form is required for frr.pdf, using PDFTex at least.
# #
# TeX implementation, which we depend on already anyway. # TeX implementation, which we depend on already anyway.
# #
@ -20,7 +20,7 @@ PNGTOPDF = $(PNGTOEPS)
EPSTOPDF = epstopdf EPSTOPDF = epstopdf
VNCFIGURES_PNG = VNCFIGURES_PNG =
VNCFIGURES_DIA = -vnc-mesh -vnc-quagga-route-reflector \ VNCFIGURES_DIA = -vnc-mesh -vnc-frr-route-reflector \
-vnc-commercial-route-reflector -vnc-redundant-route-reflectors \ -vnc-commercial-route-reflector -vnc-redundant-route-reflectors \
-vnc-gw -vnc-gw-rr -vnc-gw -vnc-gw-rr
@ -40,7 +40,7 @@ figures_eps = $(figures_names_parts:%=fig%.eps) $(VNCFIGURES_PNG:%.png=%.eps)
figures_txt = $(figures_names_parts:%=fig%.txt) figures_txt = $(figures_names_parts:%=fig%.txt)
# rather twisted logic because we have to build PDFs of the EPS figures for # rather twisted logic because we have to build PDFs of the EPS figures for
# PDFTex and yet build one PDF, quagga.pdf, from texi source. Which means we # PDFTex and yet build one PDF, frr.pdf, from texi source. Which means we
# cant rely on a single automatic rule for *.pdf, eg the one automatically # cant rely on a single automatic rule for *.pdf, eg the one automatically
# provided by automake. If you are an automake wizard, please feel free to # provided by automake. If you are an automake wizard, please feel free to
# compact it somehow. # compact it somehow.
@ -48,16 +48,16 @@ figures_txt = $(figures_names_parts:%=fig%.txt)
# Built from defines.texi.in # Built from defines.texi.in
BUILT_SOURCES = defines.texi BUILT_SOURCES = defines.texi
info_TEXINFOS = quagga.texi info_TEXINFOS = frr.texi
# Have to manually specify the quagga.pdf rule in order to allow # Have to manually specify the frr.pdf rule in order to allow
# us to have a generic automatic .pdf rule to build the figure sources # us to have a generic automatic .pdf rule to build the figure sources
# because it cant just work from the png's directly it seems - contrary # because it cant just work from the png's directly it seems - contrary
# to the documentation... # to the documentation...
quagga.pdf: $(info_TEXINFOS) $(figures_pdf) $(quagga_TEXINFOS) frr.pdf: $(info_TEXINFOS) $(figures_pdf) $(frr_TEXINFOS)
$(TEXI2PDF) -o "$@" $< || true $(TEXI2PDF) -o "$@" $< || true
quagga_TEXINFOS = appendix.texi basic.texi bgpd.texi isisd.texi filter.texi \ frr_TEXINFOS = appendix.texi basic.texi bgpd.texi isisd.texi filter.texi \
vnc.texi \ vnc.texi \
install.texi ipv6.texi kernel.texi main.texi ospf6d.texi ospfd.texi \ install.texi ipv6.texi kernel.texi main.texi ospf6d.texi ospfd.texi \
overview.texi protocol.texi ripd.texi ripngd.texi routemap.texi \ overview.texi protocol.texi ripd.texi ripngd.texi routemap.texi \
@ -73,7 +73,7 @@ quagga_TEXINFOS = appendix.texi basic.texi bgpd.texi isisd.texi filter.texi \
.dia.png: .dia.png:
$(DIATOPNG) "$@" $< $(DIATOPNG) "$@" $<
man_MANS = quagga.1 man_MANS = frr.1
if PIMD if PIMD
man_MANS += pimd.8 man_MANS += pimd.8
@ -115,8 +115,8 @@ if VTYSH
man_MANS += vtysh.1 man_MANS += vtysh.1
endif endif
if WATCHQUAGGA if WATCHFRR
man_MANS += watchquagga.8 man_MANS += watchfrr.8
endif endif
if ZEBRA if ZEBRA
@ -135,9 +135,9 @@ EXTRA_DIST = BGP-TypeCode draft-zebra-00.ms draft-zebra-00.txt \
ripngd.8.in \ ripngd.8.in \
pimd.8.in \ pimd.8.in \
vtysh.1.in \ vtysh.1.in \
watchquagga.8.in \ watchfrr.8.in \
zebra.8.in \ zebra.8.in \
quagga.1.in \ frr.1.in \
\ \
mpls/ChangeLog.opaque.txt mpls/cli_summary.txt \ mpls/ChangeLog.opaque.txt mpls/cli_summary.txt \
mpls/opaque_lsa.txt mpls/ospfd.conf \ mpls/opaque_lsa.txt mpls/ospfd.conf \

View File

@ -110,7 +110,7 @@ with severity @code{errors}.
If you want to log into a file, please specify @code{filename} as If you want to log into a file, please specify @code{filename} as
in this example: in this example:
@example @example
log file /var/log/quagga/bgpd.log informational log file /var/log/frr/bgpd.log informational
@end example @end example
If the optional second argument specifying the If the optional second argument specifying the
logging level is not present, the default logging level (typically debugging, logging level is not present, the default logging level (typically debugging,
@ -119,7 +119,7 @@ The @code{no} form of the command disables logging to a file.
Note: if you do not configure any file logging, and a daemon crashes due Note: if you do not configure any file logging, and a daemon crashes due
to a signal or an assertion failure, it will attempt to save the crash to a signal or an assertion failure, it will attempt to save the crash
information in a file named /var/tmp/quagga.<daemon name>.crashlog. information in a file named /var/tmp/frr.<daemon name>.crashlog.
For security reasons, this will not happen if the file exists already, so For security reasons, this will not happen if the file exists already, so
it is important to delete the file after reporting the crash information. it is important to delete the file after reporting the crash information.
@end deffn @end deffn

View File

@ -1,9 +1,9 @@
@c -*-texinfo-*- @c -*-texinfo-*-
@c This is part of the Quagga Manual. @c This is part of the Frr Manual.
@c @value{COPYRIGHT_STR} @c @value{COPYRIGHT_STR}
@c Portions: @c Portions:
@c Copyright @copyright{} 2015 Hewlett Packard Enterprise Development LP @c Copyright @copyright{} 2015 Hewlett Packard Enterprise Development LP
@c See file quagga.texi for copying conditions. @c See file frr.texi for copying conditions.
@node BGP @node BGP
@chapter BGP @chapter BGP
@ -114,7 +114,7 @@ This command set distance value to
@node BGP decision process @node BGP decision process
@subsection BGP decision process @subsection BGP decision process
The decision process Quagga BGP uses to select routes is as follows: The decision process Frr BGP uses to select routes is as follows:
@table @asis @table @asis
@item 1. Weight check @item 1. Weight check
@ -240,7 +240,7 @@ The BGP MED (Multi_Exit_Discriminator) attribute has properties which can
cause subtle convergence problems in BGP. These properties and problems cause subtle convergence problems in BGP. These properties and problems
have proven to be hard to understand, at least historically, and may still have proven to be hard to understand, at least historically, and may still
not be widely understood. The following attempts to collect together and not be widely understood. The following attempts to collect together and
present what is known about MED, to help operators and Quagga users in present what is known about MED, to help operators and Frr users in
designing and configuring their networks. designing and configuring their networks.
The BGP @acronym{MED, Multi_Exit_Discriminator} attribute is intended to The BGP @acronym{MED, Multi_Exit_Discriminator} attribute is intended to
@ -263,7 +263,7 @@ MED values to those of AS X. The MED values have been set by different
administrators, with different frames of reference. administrators, with different frames of reference.
The default behaviour of BGP therefore is to not compare MED values across The default behaviour of BGP therefore is to not compare MED values across
routes received from different neighbouring ASes. In Quagga this is done by routes received from different neighbouring ASes. In Frr this is done by
comparing the neighbouring, left-most AS in the received AS_PATHs of the comparing the neighbouring, left-most AS in the received AS_PATHs of the
routes and only comparing MED if those are the same. routes and only comparing MED if those are the same.
@ -341,7 +341,7 @@ in response to the most common sequence of received updates.
A deterministic order of evaluation tends to imply an additional overhead of A deterministic order of evaluation tends to imply an additional overhead of
sorting over any set of n routes to a destination. The implementation of sorting over any set of n routes to a destination. The implementation of
deterministic MED in Quagga scales significantly worse than most sorting deterministic MED in Frr scales significantly worse than most sorting
algorithms at present, with the number of paths to a given destination. algorithms at present, with the number of paths to a given destination.
That number is often low enough to not cause any issues, but where there are That number is often low enough to not cause any issues, but where there are
many paths, the deterministic comparison may quickly become increasingly many paths, the deterministic comparison may quickly become increasingly
@ -408,7 +408,7 @@ preferences between the routes:
This particular type of oscillation in full-mesh iBGP topologies can be This particular type of oscillation in full-mesh iBGP topologies can be
avoided by speakers preferring already selected, external routes rather than avoided by speakers preferring already selected, external routes rather than
choosing to update to new a route based on a post-MED metric (e.g. choosing to update to new a route based on a post-MED metric (e.g.
router-ID), at the cost of a non-deterministic selection process. Quagga router-ID), at the cost of a non-deterministic selection process. Frr
implements this, as do many other implementations, so long as it is not implements this, as do many other implementations, so long as it is not
overridden by setting @ref{bgp bestpath compare-routerid}, and see also overridden by setting @ref{bgp bestpath compare-routerid}, and see also
@ref{BGP decision process}, . @ref{BGP decision process}, .
@ -480,7 +480,7 @@ with MED may be determined largely by the order that routes were received
in. in.
Setting this option will have a performance cost that may be noticeable when Setting this option will have a performance cost that may be noticeable when
there are many routes for each destination. Currently in Quagga it is there are many routes for each destination. Currently in Frr it is
implemented in a way that scales poorly as the number of routes per implemented in a way that scales poorly as the number of routes per
destination increases. destination increases.
@ -1478,11 +1478,11 @@ unicast neighbor, @command{bgpd} does not send these Capability
Negotiation packets (at least not unless other optional BGP features Negotiation packets (at least not unless other optional BGP features
require capability negotation). require capability negotation).
By default, Quagga will bring up peering with minimal common capability By default, Frr will bring up peering with minimal common capability
for the both sides. For example, local router has unicast and for the both sides. For example, local router has unicast and
multicast capabilitie and remote router has unicast capability. In multicast capabilitie and remote router has unicast capability. In
this case, the local router will establish the connection with unicast this case, the local router will establish the connection with unicast
only capability. When there are no common capabilities, Quagga sends only capability. When there are no common capabilities, Frr sends
Unsupported Capability error and then resets the connection. Unsupported Capability error and then resets the connection.
If you want to completely match capabilities with remote peer. Please If you want to completely match capabilities with remote peer. Please
@ -1588,10 +1588,10 @@ When bgp config-type cisco is specified,
``network'' and ``aggregate-address'' argument is displayed as ``network'' and ``aggregate-address'' argument is displayed as
``A.B.C.D M.M.M.M'' ``A.B.C.D M.M.M.M''
Quagga: network 10.0.0.0/8 Frr: network 10.0.0.0/8
Cisco: network 10.0.0.0 Cisco: network 10.0.0.0
Quagga: aggregate-address 192.168.0.0/24 Frr: aggregate-address 192.168.0.0/24
Cisco: aggregate-address 192.168.0.0 255.255.255.0 Cisco: aggregate-address 192.168.0.0 255.255.255.0
Community attribute handling is also different. If there is no Community attribute handling is also different. If there is no
@ -1615,7 +1615,7 @@ router bgp 1
@end example @end example
@deffn {Command} {bgp config-type zebra} {} @deffn {Command} {bgp config-type zebra} {}
Quagga style BGP configuration. This is default. Frr style BGP configuration. This is default.
@end deffn @end deffn
@node BGP instance and view @node BGP instance and view

View File

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 49 KiB

View File

@ -2,7 +2,7 @@
@comment node-name, next, previous, up @comment node-name, next, previous, up
@chapter Filtering @chapter Filtering
Quagga provides many very flexible filtering features. Filtering is used Frr provides many very flexible filtering features. Filtering is used
for both input and output of the routing information. Once filtering is for both input and output of the routing information. Once filtering is
defined, it can be applied in any direction. defined, it can be applied in any direction.

View File

@ -1,28 +1,28 @@
.TH Quagga 1 "27 July 2006" "@PACKAGE_FULLNAME@ Systemd Script" "Version @PACKAGE_VERSION@" .TH Frr 1 "27 July 2006" "@PACKAGE_FULLNAME@ Systemd Script" "Version @PACKAGE_VERSION@"
.SH NAME .SH NAME
quagga \- a systemd interaction script frr \- a systemd interaction script
.SH SYNOPSIS .SH SYNOPSIS
.B quagga .B frr
[ [
.B start .B start
] ]
.br .br
.B quagga .B frr
[ [
.B stop .B stop
] ]
.br .br
.B quagga .B frr
[ [
.B reload .B reload
] ]
.br .br
.B quagga .B frr
[ [
.B restart .B restart
] ]
.br .br
.B quagga .B frr
[ [
.B status .B status
] ]
@ -34,12 +34,12 @@ is a systemd interaction script for the
routing engine. routing engine.
.SH OPTIONS .SH OPTIONS
Options available for the Options available for the
.B quagga .B frr
command: command:
.IP start .IP start
Start enabled Quagga daemons Start enabled Frr daemons
.IP stop .IP stop
Stop enabled Quagga daemons Stop enabled Frr daemons
.IP reload .IP reload
Reload modified configuration files Reload modified configuration files
.IP restart .IP restart
@ -55,7 +55,7 @@ Status of all the daemons
.BR isisd (8), .BR isisd (8),
.BR zebra (8) .BR zebra (8)
.SH BUGS .SH BUGS
.B quagga .B frr
eats bugs for breakfast. If you have food for the maintainers try eats bugs for breakfast. If you have food for the maintainers try
.BI @PACKAGE_BUGREPORT@ .BI @PACKAGE_BUGREPORT@
.SH AUTHORS .SH AUTHORS

View File

@ -4,10 +4,10 @@
@include defines.texi @include defines.texi
@c %**start of header @c %**start of header
@setfilename quagga.info @setfilename frr.info
@c Set variables - sourced from defines.texi @c Set variables - sourced from defines.texi
@include defines.texi @include defines.texi
@settitle @uref{http://www.quagga.net,,@value{PACKAGE_NAME}} @settitle @uref{http://www.freerangerouting.net,,@value{PACKAGE_NAME}}
@c %**end of header @c %**end of header
@c automake will automatically generate version.texi @c automake will automatically generate version.texi
@ -38,26 +38,26 @@ approved by Kunihiro Ishiguro.
@c Info entry @c Info entry
@dircategory Routing Software: @dircategory Routing Software:
@direntry @direntry
* @value{PACKAGE_NAME}: (quagga). The Quagga Software Routing Suite * @value{PACKAGE_NAME}: (frr). The Frr Suite
@end direntry @end direntry
@c @smallbook @c @smallbook
@ifinfo @ifinfo
This file documents the Quagga Software Routing Suite which manages common This file documents the Frr Software Routing Suite which manages common
TCP/IP routing protocols. TCP/IP routing protocols.
This is Edition @value{EDITION}, last updated @value{UPDATED} of This is Edition @value{EDITION}, last updated @value{UPDATED} of
@cite{The Quagga Manual}, for @uref{http://www.quagga.net/,,@value{PACKAGE_NAME}} @cite{The Frr Manual}, for @uref{http://www.freerangerouting.net/,,@value{PACKAGE_NAME}}
Version @value{VERSION}. Version @value{VERSION}.
@insertcopying @insertcopying
@end ifinfo @end ifinfo
@titlepage @titlepage
@title @uref{http://www.quagga.net,,Quagga} @title @uref{http://www.freerangerouting.net,,Frr}
@subtitle A routing software package for TCP/IP networks @subtitle A routing software package for TCP/IP networks
@subtitle @uref{http://www.quagga.net,,@value{PACKAGE_NAME}} @value{VERSION} @subtitle @uref{http://www.freerangerouting.net,,@value{PACKAGE_NAME}} @value{VERSION}
@subtitle @value{UPDATED-MONTH} @subtitle @value{UPDATED-MONTH}
@author @value{AUTHORS} @author @value{AUTHORS}
@ -70,12 +70,12 @@ Version @value{VERSION}.
@ifnottex @ifnottex
@node Top @node Top
@top Quagga -- With Virtual Network Control @top Frr -- With Virtual Network Control
@uref{http://www.quagga.net,,Quagga} is an advanced routing software package @uref{http://www.freerangerouting.net,,Frr} is an advanced routing software package
that provides a suite of TCP/IP based routing protocols. This is the Manual that provides a suite of TCP/IP based routing protocols. This is the Manual
for @value{PACKAGE_STRING}. @uref{http://www.quagga.net,,Quagga} is a fork of for @value{PACKAGE_STRING}. @uref{http://www.freerangerouting.net,,Frr} is a fork of
@uref{http://www.zebra.org,,GNU Zebra}. @uref{http://www.quagga.net,,Quagga}.
@insertcopying @insertcopying
@end ifnottex @end ifnottex
@ -91,7 +91,7 @@ for @value{PACKAGE_STRING}. @uref{http://www.quagga.net,,Quagga} is a fork of
* OSPFv3:: * OSPFv3::
* ISIS:: * ISIS::
* BGP:: * BGP::
* Configuring Quagga as a Route Server:: * Configuring Frr as a Route Server::
* VNC and VNC-GW:: * VNC and VNC-GW::
* VTY shell:: * VTY shell::
* Filtering:: * Filtering::

View File

@ -1,11 +1,11 @@
@node Installation @node Installation
@chapter Installation @chapter Installation
@cindex How to install Quagga @cindex How to install Frr
@cindex Installation @cindex Installation
@cindex Installing Quagga @cindex Installing Frr
@cindex Building the system @cindex Building the system
@cindex Making Quagga @cindex Making Frr
There are three steps for installing the software: configuration, There are three steps for installing the software: configuration,
compilation, and installation. compilation, and installation.
@ -16,7 +16,7 @@ compilation, and installation.
* Install the Software:: * Install the Software::
@end menu @end menu
The easiest way to get Quagga running is to issue the following The easiest way to get Frr running is to issue the following
commands: commands:
@example @example
@ -43,7 +43,7 @@ commands:
@cindex Distribution configuration @cindex Distribution configuration
@cindex Options to @code{./configure} @cindex Options to @code{./configure}
Quagga has an excellent configure script which automatically detects most Frr has an excellent configure script which automatically detects most
host configurations. There are several additional configure options to host configurations. There are several additional configure options to
customize the build to include or exclude specific features and dependencies. customize the build to include or exclude specific features and dependencies.
@ -122,13 +122,13 @@ This command will configure zebra and the routing daemons.
@node Least-Privilege support @node Least-Privilege support
@subsection Least-Privilege support @subsection Least-Privilege support
@cindex Quagga Least-Privileges @cindex Frr Least-Privileges
@cindex Quagga Privileges @cindex Frr Privileges
Additionally, you may configure zebra to drop its elevated privileges Additionally, you may configure zebra to drop its elevated privileges
shortly after startup and switch to another user. The configure script will shortly after startup and switch to another user. The configure script will
automatically try to configure this support. There are three configure automatically try to configure this support. There are three configure
options to control the behaviour of Quagga daemons. options to control the behaviour of Frr daemons.
@table @option @table @option
@item --enable-user=@var{user} @item --enable-user=@var{user}
@ -145,29 +145,29 @@ delegate this group to individual users, or to run vtysh setgid to
this group. this group.
@end table @end table
The default user and group which will be configured is 'quagga' if no user The default user and group which will be configured is 'frr' if no user
or group is specified. Note that this user or group requires write access to or group is specified. Note that this user or group requires write access to
the local state directory (see --localstatedir) and requires at least read the local state directory (see --localstatedir) and requires at least read
access, and write access if you wish to allow daemons to write out their access, and write access if you wish to allow daemons to write out their
configuration, to the configuration directory (see --sysconfdir). configuration, to the configuration directory (see --sysconfdir).
On systems which have the 'libcap' capabilities manipulation library On systems which have the 'libcap' capabilities manipulation library
(currently only linux), the quagga system will retain only minimal (currently only linux), the frr system will retain only minimal
capabilities required, further it will only raise these capabilities for capabilities required, further it will only raise these capabilities for
brief periods. On systems without libcap, quagga will run as the user brief periods. On systems without libcap, frr will run as the user
specified and only raise its uid back to uid 0 for brief periods. specified and only raise its uid back to uid 0 for brief periods.
@node Linux notes @node Linux notes
@subsection Linux Notes @subsection Linux Notes
@cindex Configuring Quagga @cindex Configuring Frr
@cindex Building on Linux boxes @cindex Building on Linux boxes
@cindex Linux configurations @cindex Linux configurations
There are several options available only to @sc{gnu}/Linux systems: There are several options available only to @sc{gnu}/Linux systems:
@footnote{@sc{gnu}/Linux has very flexible kernel configuration features}. If @footnote{@sc{gnu}/Linux has very flexible kernel configuration features}. If
you use @sc{gnu}/Linux, make sure that the current kernel configuration is you use @sc{gnu}/Linux, make sure that the current kernel configuration is
what you want. Quagga will run with any kernel configuration but some what you want. Frr will run with any kernel configuration but some
recommendations do exist. recommendations do exist.
@table @var @table @var
@ -190,7 +190,7 @@ This option should be specified when you use @command{ripd} (@pxref{RIP}) or
@end table @end table
IPv6 support has been added in @sc{gnu}/Linux kernel version 2.2. If you IPv6 support has been added in @sc{gnu}/Linux kernel version 2.2. If you
try to use the Quagga IPv6 feature on a @sc{gnu}/Linux kernel, please try to use the Frr IPv6 feature on a @sc{gnu}/Linux kernel, please
make sure the following libraries have been installed. Please note that make sure the following libraries have been installed. Please note that
these libraries will not be needed when you uses @sc{gnu} C library 2.1 these libraries will not be needed when you uses @sc{gnu} C library 2.1
or upper. or upper.
@ -244,7 +244,7 @@ programs and supporting files to a standard location. After the
installation process has completed, these files have been copied installation process has completed, these files have been copied
from your work directory to @file{/usr/local/bin}, and @file{/usr/local/etc}. from your work directory to @file{/usr/local/bin}, and @file{/usr/local/etc}.
To install the Quagga suite, issue the following command at your shell To install the Frr suite, issue the following command at your shell
prompt: @command{make install}. prompt: @command{make install}.
@example @example
@ -253,7 +253,7 @@ prompt: @command{make install}.
% %
@end example @end example
Quagga daemons have their own terminal interface or VTY. After Frr daemons have their own terminal interface or VTY. After
installation, you have to setup each beast's port number to connect to installation, you have to setup each beast's port number to connect to
them. Please add the following entries to @file{/etc/services}. them. Please add the following entries to @file{/etc/services}.

View File

@ -1,14 +1,14 @@
@node IPv6 Support @node IPv6 Support
@chapter IPv6 Support @chapter IPv6 Support
Quagga fully supports IPv6 routing. As described so far, Quagga supports Frr fully supports IPv6 routing. As described so far, Frr supports
RIPng, OSPFv3, and BGP-4+. You can give IPv6 addresses to an interface RIPng, OSPFv3, and BGP-4+. You can give IPv6 addresses to an interface
and configure static IPv6 routing information. Quagga IPv6 also provides and configure static IPv6 routing information. Frr IPv6 also provides
automatic address configuration via a feature called @code{address automatic address configuration via a feature called @code{address
auto configuration}. To do it, the router must send router advertisement auto configuration}. To do it, the router must send router advertisement
messages to the all nodes that exist on the network. messages to the all nodes that exist on the network.
Previous versions of Quagga could be built without IPv6 support. This is Previous versions of Frr could be built without IPv6 support. This is
no longer possible. no longer possible.
@menu @menu

View File

@ -31,7 +31,7 @@ information.
@item netlink @item netlink
On recent Linux kernels (2.0.x and 2.2.x), there is a kernel/user On recent Linux kernels (2.0.x and 2.2.x), there is a kernel/user
communication support called @code{netlink}. It makes asynchronous communication support called @code{netlink}. It makes asynchronous
communication between kernel and Quagga possible, similar to a routing communication between kernel and Frr possible, similar to a routing
socket on BSD systems. socket on BSD systems.
Before you use this feature, be sure to select (in kernel configuration) Before you use this feature, be sure to select (in kernel configuration)
@ -41,7 +41,7 @@ the kernel/netlink support option 'Kernel/User network link driver' and
Today, the /dev/route special device file is obsolete. Netlink Today, the /dev/route special device file is obsolete. Netlink
communication is done by reading/writing over netlink socket. communication is done by reading/writing over netlink socket.
After the kernel configuration, please reconfigure and rebuild Quagga. After the kernel configuration, please reconfigure and rebuild Frr.
You can use netlink as a dynamic routing update channel between Quagga You can use netlink as a dynamic routing update channel between Frr
and the kernel. and the kernel.
@end table @end table

View File

@ -103,7 +103,7 @@ just to show how the VPLS configuration should look like in the future.
# ip -6 route add 3:3:3::3/128 via 2001:db8:4::3 # ip -6 route add 3:3:3::3/128 via 2001:db8:4::3
``` ```
6 - Edit /etc/quagga/ospfd.conf: 6 - Edit /etc/frr/ospfd.conf:
``` ```
router ospf router ospf
network 4.4.4.4/32 area 0.0.0.0 network 4.4.4.4/32 area 0.0.0.0
@ -112,7 +112,7 @@ router ospf
! !
``` ```
7 - Edit /etc/quagga/ldpd.conf: 7 - Edit /etc/frr/ldpd.conf:
``` ```
debug mpls ldp messages recv debug mpls ldp messages recv
debug mpls ldp messages sent debug mpls ldp messages sent
@ -207,7 +207,7 @@ LDPv6 but the IOS-XR implementation is not RFC compliant in this regard.
# route -n add 2:2:2::2/128 2001:db8:2::2 # route -n add 2:2:2::2/128 2001:db8:2::2
``` ```
6 - Edit /etc/quagga/ospfd.conf: 6 - Edit /etc/frr/ospfd.conf:
``` ```
router ospf router ospf
network 10.0.2.3/24 area 0 network 10.0.2.3/24 area 0
@ -216,7 +216,7 @@ router ospf
! !
``` ```
7 - Edit /etc/quagga/ldpd.conf: 7 - Edit /etc/frr/ldpd.conf:
``` ```
debug mpls ldp messages recv debug mpls ldp messages recv
debug mpls ldp messages sent debug mpls ldp messages sent

View File

@ -258,7 +258,7 @@ addresses but unicast addresses.
This table is fully separate from the default unicast table. However, This table is fully separate from the default unicast table. However,
RPF lookup can include the unicast table. RPF lookup can include the unicast table.
WARNING: RPF lookup results are non-responsive in this version of Quagga, WARNING: RPF lookup results are non-responsive in this version of Frr,
i.e. multicast routing does not actively react to changes in underlying i.e. multicast routing does not actively react to changes in underlying
unicast topology! unicast topology!
@ -330,7 +330,7 @@ Multicast RIB instead of the Unicast RIB.
@node zebra Route Filtering @node zebra Route Filtering
@section zebra Route Filtering @section zebra Route Filtering
Zebra supports @command{prefix-list} and @command{route-map} to match Zebra supports @command{prefix-list} and @command{route-map} to match
routes received from other quagga components. The routes received from other frr components. The
@command{permit}/@command{deny} facilities provided by these commands @command{permit}/@command{deny} facilities provided by these commands
can be used to filter which routes zebra will install in the kernel. can be used to filter which routes zebra will install in the kernel.
@ -374,16 +374,16 @@ ip protocol rip route-map RM1
@section zebra FIB push interface @section zebra FIB push interface
Zebra supports a 'FIB push' interface that allows an external Zebra supports a 'FIB push' interface that allows an external
component to learn the forwarding information computed by the Quagga component to learn the forwarding information computed by the Frr
routing suite. routing suite.
In Quagga, the Routing Information Base (RIB) resides inside In Frr, the Routing Information Base (RIB) resides inside
zebra. Routing protocols communicate their best routes to zebra, and zebra. Routing protocols communicate their best routes to zebra, and
zebra computes the best route across protocols for each prefix. This zebra computes the best route across protocols for each prefix. This
latter information makes up the Forwarding Information Base latter information makes up the Forwarding Information Base
(FIB). Zebra feeds the FIB to the kernel, which allows the IP stack in (FIB). Zebra feeds the FIB to the kernel, which allows the IP stack in
the kernel to forward packets according to the routes computed by the kernel to forward packets according to the routes computed by
Quagga. The kernel FIB is updated in an OS-specific way. For example, Frr. The kernel FIB is updated in an OS-specific way. For example,
the @code{netlink} interface is used on Linux, and route sockets are the @code{netlink} interface is used on Linux, and route sockets are
used on FreeBSD. used on FreeBSD.
@ -408,7 +408,7 @@ interaction of zebra with the kernel remains unchanged -- that is, the
kernel continues to receive FIB updates as before. kernel continues to receive FIB updates as before.
The encapsulation header for the messages exchanged with the FPM is The encapsulation header for the messages exchanged with the FPM is
defined by the file @file{fpm/fpm.h} in the quagga tree. The routes defined by the file @file{fpm/fpm.h} in the frr tree. The routes
themselves are encoded in netlink or protobuf format, with netlink themselves are encoded in netlink or protobuf format, with netlink
being the default. being the default.

View File

@ -1,7 +1,7 @@
0. Introduction 0. Introduction
This is the design specification for next hop tracking feature in This is the design specification for next hop tracking feature in
Quagga. Frr.
1. Background 1. Background
@ -259,7 +259,7 @@ rnh table:
5. User interface changes 5. User interface changes
quagga# show ip nht frr# show ip nht
3.3.3.3 3.3.3.3
resolved via kernel resolved via kernel
via 11.0.0.6, swp1 via 11.0.0.6, swp1
@ -277,7 +277,7 @@ quagga# show ip nht
via 10.0.1.2, eth0 via 10.0.1.2, eth0
Client list: bgp(fd 12) Client list: bgp(fd 12)
quagga# show ip bgp nexthop frr# show ip bgp nexthop
Current BGP nexthop cache: Current BGP nexthop cache:
3.3.3.3 valid [IGP metric 0], #paths 3 3.3.3.3 valid [IGP metric 0], #paths 3
Last update: Wed Oct 16 04:43:49 2013 Last update: Wed Oct 16 04:43:49 2013
@ -291,11 +291,11 @@ Current BGP nexthop cache:
11.11.11.11 valid [IGP metric 0], #paths 1 11.11.11.11 valid [IGP metric 0], #paths 1
Last update: Wed Oct 16 04:43:47 2013 Last update: Wed Oct 16 04:43:47 2013
quagga# show ipv6 nht frr# show ipv6 nht
quagga# show ip bgp nexthop detail frr# show ip bgp nexthop detail
quagga# debug bgp nht frr# debug bgp nht
quagga# debug zebra nht frr# debug zebra nht
6. Sample test cases 6. Sample test cases

View File

@ -77,7 +77,7 @@ which still can reach the backbone - this restriction exists primarily
to ensure routing-loops are avoided. to ensure routing-loops are avoided.
With the "Cisco" or "IBM" ABR type, the default in this release of With the "Cisco" or "IBM" ABR type, the default in this release of
Quagga, this restriction is lifted, allowing an ABR to consider Frr, this restriction is lifted, allowing an ABR to consider
summaries learnt from other ABRs through non-backbone areas, and hence summaries learnt from other ABRs through non-backbone areas, and hence
route via non-backbone areas as a last resort when, and only when, route via non-backbone areas as a last resort when, and only when,
backbone links are down. backbone links are down.
@ -169,7 +169,7 @@ calculations will always be seperated by between 400ms to 10s, the
hold-time increasing by 400ms each time an SPF-triggering event occurs hold-time increasing by 400ms each time an SPF-triggering event occurs
within the hold-time of the previous SPF calculation. within the hold-time of the previous SPF calculation.
This command supercedes the @command{timers spf} command in previous Quagga This command supercedes the @command{timers spf} command in previous Frr
releases. releases.
@end deffn @end deffn
@ -259,7 +259,7 @@ Summarize intra area paths from specified area into one Type-3 summary-LSA
announced to other areas. This command can be used only in ABR and ONLY announced to other areas. This command can be used only in ABR and ONLY
router-LSAs (Type-1) and network-LSAs (Type-2) (ie. LSAs with scope area) can router-LSAs (Type-1) and network-LSAs (Type-2) (ie. LSAs with scope area) can
be summarized. Type-5 AS-external-LSAs can't be summarized - their scope is AS. be summarized. Type-5 AS-external-LSAs can't be summarized - their scope is AS.
Summarizing Type-7 AS-external-LSAs isn't supported yet by Quagga. Summarizing Type-7 AS-external-LSAs isn't supported yet by Frr.
@example @example
@group @group
@ -784,7 +784,7 @@ of networks between the areas:
@group @group
! !
password ABCDEF password ABCDEF
log file /var/log/quagga/ospfd.log log file /var/log/frr/ospfd.log
service advanced-vty service advanced-vty
! !
interface eth0 interface eth0

View File

@ -2,73 +2,73 @@
@chapter Overview @chapter Overview
@cindex Overview @cindex Overview
@uref{http://www.quagga.net,,Quagga} is a routing software package that @uref{http://www.freerangerouting.net,,Frr} is a routing software package that
provides TCP/IP based routing services with routing protocols support such provides TCP/IP based routing services with routing protocols support such
as RIPv1, RIPv2, RIPng, OSPFv2, OSPFv3, IS-IS, BGP-4, and BGP-4+ (@pxref{Supported as RIPv1, RIPv2, RIPng, OSPFv2, OSPFv3, IS-IS, BGP-4, and BGP-4+ (@pxref{Supported
RFCs}). Quagga also supports special BGP Route Reflector and Route Server RFCs}). Frr also supports special BGP Route Reflector and Route Server
behavior. In addition to traditional IPv4 routing protocols, Quagga also behavior. In addition to traditional IPv4 routing protocols, Frr also
supports IPv6 routing protocols. With SNMP daemon which supports SMUX and AgentX supports IPv6 routing protocols. With SNMP daemon which supports SMUX and AgentX
protocol, Quagga provides routing protocol MIBs (@pxref{SNMP Support}). protocol, Frr provides routing protocol MIBs (@pxref{SNMP Support}).
Quagga uses an advanced software architecture to provide you with a high Frr uses an advanced software architecture to provide you with a high
quality, multi server routing engine. Quagga has an interactive user quality, multi server routing engine. Frr has an interactive user
interface for each routing protocol and supports common client commands. interface for each routing protocol and supports common client commands.
Due to this design, you can add new protocol daemons to Quagga easily. You Due to this design, you can add new protocol daemons to Frr easily. You
can use Quagga library as your program's client user interface. can use Frr library as your program's client user interface.
Quagga is distributed under the @sc{gnu} General Public License. Frr is distributed under the @sc{gnu} General Public License.
@menu @menu
* About Quagga:: Basic information about Quagga * About Frr:: Basic information about Frr
* System Architecture:: The Quagga system architecture * System Architecture:: The Frr system architecture
* Supported Platforms:: Supported platforms and future plans * Supported Platforms:: Supported platforms and future plans
* Supported RFCs:: Supported RFCs * Supported RFCs:: Supported RFCs
* How to get Quagga:: * How to get Frr::
* Mailing List:: Mailing list information * Mailing List:: Mailing list information
* Bug Reports:: Mail address for bug data * Bug Reports:: Mail address for bug data
@end menu @end menu
@node About Quagga @node About Frr
@comment node-name, next, previous, up @comment node-name, next, previous, up
@section About Quagga @section About Frr
@cindex About Quagga @cindex About Frr
Today, TCP/IP networks are covering all of the world. The Internet has Today, TCP/IP networks are covering all of the world. The Internet has
been deployed in many countries, companies, and to the home. When you been deployed in many countries, companies, and to the home. When you
connect to the Internet your packet will pass many routers which have TCP/IP connect to the Internet your packet will pass many routers which have TCP/IP
routing functionality. routing functionality.
A system with Quagga installed acts as a dedicated router. With Quagga, A system with Frr installed acts as a dedicated router. With Frr,
your machine exchanges routing information with other routers using routing your machine exchanges routing information with other routers using routing
protocols. Quagga uses this information to update the kernel routing table protocols. Frr uses this information to update the kernel routing table
so that the right data goes to the right place. You can dynamically change so that the right data goes to the right place. You can dynamically change
the configuration and you may view routing table information from the Quagga the configuration and you may view routing table information from the Frr
terminal interface. terminal interface.
Adding to routing protocol support, Quagga can setup interface's flags, Adding to routing protocol support, Frr can setup interface's flags,
interface's address, static routes and so on. If you have a small network, interface's address, static routes and so on. If you have a small network,
or a stub network, or xDSL connection, configuring the Quagga routing or a stub network, or xDSL connection, configuring the Frr routing
software is very easy. The only thing you have to do is to set up the software is very easy. The only thing you have to do is to set up the
interfaces and put a few commands about static routes and/or default routes. interfaces and put a few commands about static routes and/or default routes.
If the network is rather large, or if the network structure changes If the network is rather large, or if the network structure changes
frequently, you will want to take advantage of Quagga's dynamic routing frequently, you will want to take advantage of Frr's dynamic routing
protocol support for protocols such as RIP, OSPF, IS-IS or BGP. protocol support for protocols such as RIP, OSPF, IS-IS or BGP.
Traditionally, UNIX based router configuration is done by Traditionally, UNIX based router configuration is done by
@command{ifconfig} and @command{route} commands. Status of routing @command{ifconfig} and @command{route} commands. Status of routing
table is displayed by @command{netstat} utility. Almost of these commands table is displayed by @command{netstat} utility. Almost of these commands
work only if the user has root privileges. Quagga has a different system work only if the user has root privileges. Frr has a different system
administration method. There are two user modes in Quagga. One is normal administration method. There are two user modes in Frr. One is normal
mode, the other is enable mode. Normal mode user can only view system mode, the other is enable mode. Normal mode user can only view system
status, enable mode user can change system configuration. This UNIX account status, enable mode user can change system configuration. This UNIX account
independent feature will be great help to the router administrator. independent feature will be great help to the router administrator.
Currently, Quagga supports common unicast routing protocols, that is BGP, Currently, Frr supports common unicast routing protocols, that is BGP,
OSPF, RIP and IS-IS. Upcoming for MPLS support, an implementation of LDP is OSPF, RIP and IS-IS. Upcoming for MPLS support, an implementation of LDP is
currently being prepared for merging. Implementations of BFD and PIM-SSM currently being prepared for merging. Implementations of BFD and PIM-SSM
(IPv4) also exist, but are not actively being worked on. (IPv4) also exist, but are not actively being worked on.
The ultimate goal of the Quagga project is making a productive, quality, free The ultimate goal of the Frr project is making a productive, quality, free
TCP/IP routing software package. TCP/IP routing software package.
@node System Architecture @node System Architecture
@ -79,7 +79,7 @@ TCP/IP routing software package.
@cindex Software internals @cindex Software internals
Traditional routing software is made as a one process program which Traditional routing software is made as a one process program which
provides all of the routing protocol functionalities. Quagga takes a provides all of the routing protocol functionalities. Frr takes a
different approach. It is made from a collection of several daemons that different approach. It is made from a collection of several daemons that
work together to build the routing table. There may be several work together to build the routing table. There may be several
protocol-specific routing daemons and zebra the kernel routing manager. protocol-specific routing daemons and zebra the kernel routing manager.
@ -110,7 +110,7 @@ architecture creates new possibilities for the routing system.
| | | |
+------------------------------+ +------------------------------+
Quagga System Architecture Frr System Architecture
@end group @end group
@end example @end example
@ -120,11 +120,11 @@ and terminal interfaces. Each daemon has it's own configuration file and
terminal interface. When you configure a static route, it must be done in terminal interface. When you configure a static route, it must be done in
@command{zebra} configuration file. When you configure BGP network it must @command{zebra} configuration file. When you configure BGP network it must
be done in @command{bgpd} configuration file. This can be a very annoying be done in @command{bgpd} configuration file. This can be a very annoying
thing. To resolve the problem, Quagga provides integrated user interface thing. To resolve the problem, Frr provides integrated user interface
shell called @command{vtysh}. @command{vtysh} connects to each daemon with shell called @command{vtysh}. @command{vtysh} connects to each daemon with
UNIX domain socket and then works as a proxy for user input. UNIX domain socket and then works as a proxy for user input.
Quagga was planned to use multi-threaded mechanism when it runs with a Frr was planned to use multi-threaded mechanism when it runs with a
kernel that supports multi-threads. But at the moment, the thread library kernel that supports multi-threads. But at the moment, the thread library
which comes with @sc{gnu}/Linux or FreeBSD has some problems with running which comes with @sc{gnu}/Linux or FreeBSD has some problems with running
reliable services such as routing software, so we don't use threads at all. reliable services such as routing software, so we don't use threads at all.
@ -136,18 +136,18 @@ events.
@section Supported Platforms @section Supported Platforms
@cindex Supported platforms @cindex Supported platforms
@cindex Quagga on other systems @cindex Frr on other systems
@cindex Compatibility with other systems @cindex Compatibility with other systems
@cindex Operating systems that support Quagga @cindex Operating systems that support Frr
Currently Quagga supports @sc{gnu}/Linux and BSD. Porting Quagga Currently Frr supports @sc{gnu}/Linux and BSD. Porting Frr
to other platforms is not too difficult as platform dependent code should to other platforms is not too difficult as platform dependent code should
most be limited to the @command{zebra} daemon. Protocol daemons are mostly most be limited to the @command{zebra} daemon. Protocol daemons are mostly
platform independent. Please let us know when you find out Quagga runs on a platform independent. Please let us know when you find out Frr runs on a
platform which is not listed below. platform which is not listed below.
The list of officially supported platforms are listed below. Note that The list of officially supported platforms are listed below. Note that
Quagga may run correctly on other platforms, and may run with partial Frr may run correctly on other platforms, and may run with partial
functionality on further platforms. functionality on further platforms.
@sp 1 @sp 1
@ -176,7 +176,7 @@ Mac OSX
@end itemize @end itemize
Also note that, in particular regarding proprietary platforms, compiler Also note that, in particular regarding proprietary platforms, compiler
and C library choice will affect Quagga. Only recent versions of the and C library choice will affect Frr. Only recent versions of the
following C compilers are well-tested: following C compilers are well-tested:
@sp 1 @sp 1
@ -269,39 +269,39 @@ November 1995.}
@end table @end table
@node How to get Quagga @node How to get Frr
@comment node-name, next, previous, up @comment node-name, next, previous, up
@section How to get Quagga @section How to get Frr
The official Quagga web-site is located at: The official Frr web-site is located at:
@uref{http://www.quagga.net/} @uref{http://www.freerangerouting.net/}
and contains further information, as well as links to additional and contains further information, as well as links to additional
resources. resources.
@uref{http://www.quagga.net/,Quagga} is a fork of GNU Zebra, whose @uref{http://www.freerangerouting.net/,Frr} is a fork of Quagga, whose
web-site is located at: web-site is located at:
@uref{http://www.zebra.org/}. @uref{http://www.quagga.net/}.
@node Mailing List @node Mailing List
@comment node-name, next, previous, up @comment node-name, next, previous, up
@section Mailing List @section Mailing List
@cindex How to get in touch with Quagga @cindex How to get in touch with Frr
@cindex Mailing Quagga @cindex Mailing Frr
@cindex Contact information @cindex Contact information
@cindex Mailing lists @cindex Mailing lists
There is a mailing list for discussions about Quagga. If you have any There is a mailing list for discussions about Frr. If you have any
comments or suggestions to Quagga, please subscribe to: comments or suggestions to Frr, please subscribe to:
@uref{http://lists.quagga.net/mailman/listinfo/quagga-users}. @uref{http://lists.nox.tf/listinfo/frr-users}.
The @uref{http://www.quagga.net/,,Quagga} site has further information on The @uref{http://www.freerangerouting.net/,,Frr} site has further information on
the available mailing lists, see: the available mailing lists, see:
@uref{http://www.quagga.net/lists.php} @uref{http://lists.nox.tf/lists.php}
@node Bug Reports @node Bug Reports
@section Bug Reports @section Bug Reports
@ -315,7 +315,7 @@ the available mailing lists, see:
If you think you have found a bug, please send a bug report to: If you think you have found a bug, please send a bug report to:
@uref{http://bugzilla.quagga.net} @uref{http://github.com/freerangerouting/frr/issues}
When you send a bug report, please be careful about the points below. When you send a bug report, please be careful about the points below.
@ -332,6 +332,6 @@ Please send your configuration file with the report. If you specify
arguments to the configure script please note that too. arguments to the configure script please note that too.
@end itemize @end itemize
Bug reports are very important for us to improve the quality of Quagga. Bug reports are very important for us to improve the quality of Frr.
Quagga is still in the development stage, but please don't hesitate to Frr is still in the development stage, but please don't hesitate to
send a bug report to @uref{http://bugzilla.quagga.net}. send a bug report to @uref{http://github.com/freerangerouting/frr/issues}.

View File

@ -25,8 +25,11 @@ enough to allow for future extensions to done compatibly through
seperate commands. seperate commands.
Version 0 is used by all versions of GNU Zebra as of this writing, and Version 0 is used by all versions of GNU Zebra as of this writing, and
versions of Quagga up to and including Quagga 0.98. Version 1 will be versions of Quagga up to and including Quagga 0.98. Version 2 was created
used as of Quagga 1.0. for 0.99.21 of Quagga. Version 3 designates VRF compatibility and was
released in 1.0. Version 4 will be used as of Frr 2.0 to indicate that
we are a different Routing Suite now and to hopefully prevent accidental
Quagga <-> FRR issues.
@appendixsection Zebra Protocol Definition @appendixsection Zebra Protocol Definition
@appendixsubsec Zebra Protocol Header (version 0) @appendixsubsec Zebra Protocol Header (version 0)

View File

@ -1,7 +1,7 @@
@c -*-texinfo-*- @c -*-texinfo-*-
@c This is part of the Quagga Manual. @c This is part of the Frr Manual.
@c @value{COPYRIGHT_STR} @c @value{COPYRIGHT_STR}
@c See file quagga.texi for copying conditions. @c See file frr.texi for copying conditions.
@node RIP @node RIP
@chapter RIP @chapter RIP
@ -97,7 +97,7 @@ to the packet on the basis of the interface that received the packet.
Version 2 of RIP supports a variable length subnet mask (VLSM). By Version 2 of RIP supports a variable length subnet mask (VLSM). By
extending the subnet mask, the mask can be divided and reused. Each extending the subnet mask, the mask can be divided and reused. Each
subnet can be used for different purposes such as large to middle size subnet can be used for different purposes such as large to middle size
LANs and WAN links. Quagga @command{ripd} does not support the non-sequential LANs and WAN links. Frr @command{ripd} does not support the non-sequential
netmasks that are included in RIP Version 2. netmasks that are included in RIP Version 2.
In a case of similar information with the same prefix and metric, the In a case of similar information with the same prefix and metric, the
@ -294,10 +294,10 @@ If you want to specify RIP only static routes:
@deffn {RIP command} {route @var{a.b.c.d/m}} {} @deffn {RIP command} {route @var{a.b.c.d/m}} {}
@deffnx {RIP command} {no route @var{a.b.c.d/m}} {} @deffnx {RIP command} {no route @var{a.b.c.d/m}} {}
This command is specific to Quagga. The @code{route} command makes a static This command is specific to Frr. The @code{route} command makes a static
route only inside RIP. This command should be used only by advanced route only inside RIP. This command should be used only by advanced
users who are particularly knowledgeable about the RIP protocol. In users who are particularly knowledgeable about the RIP protocol. In
most cases, we recommend creating a static route in Quagga and most cases, we recommend creating a static route in Frr and
redistributing it in RIP using @code{redistribute static}. redistributing it in RIP using @code{redistribute static}.
@end deffn @end deffn
@ -399,7 +399,7 @@ redistribute connected [route-map MAP_NAME]
@end example @end example
Cisco applies route-map _before_ routes will exported to rip route table. Cisco applies route-map _before_ routes will exported to rip route table.
In current Quagga's test implementation, @command{ripd} applies route-map In current Frr's test implementation, @command{ripd} applies route-map
after routes are listed in the route table and before routes will be after routes are listed in the route table and before routes will be
announced to an interface (something like output filter). I think it is not announced to an interface (something like output filter). I think it is not
so clear, but it is draft and it may be changed at future. so clear, but it is draft and it may be changed at future.

View File

@ -1,7 +1,7 @@
@c -*-texinfo-*- @c -*-texinfo-*-
@c This is part of the Quagga Manual. @c This is part of the Frr Manual.
@c @value{COPYRIGHT_STR} @c @value{COPYRIGHT_STR}
@c See file quagga.texi for copying conditions. @c See file frr.texi for copying conditions.
@node RIPng @node RIPng
@chapter RIPng @chapter RIPng

View File

@ -1,12 +1,12 @@
@c -*-texinfo-*- @c -*-texinfo-*-
@c @value{COPYRIGHT_STR} @c @value{COPYRIGHT_STR}
@c See file quagga.texi for copying conditions. @c See file frr.texi for copying conditions.
@c @c
@c This file is a modified version of Jose Luis Rubio's TeX sources @c This file is a modified version of Jose Luis Rubio's TeX sources
@c of his RS-Manual document @c of his RS-Manual document
@node Configuring Quagga as a Route Server @node Configuring Frr as a Route Server
@chapter Configuring Quagga as a Route Server @chapter Configuring Frr as a Route Server
The purpose of a Route Server is to centralize the peerings between BGP The purpose of a Route Server is to centralize the peerings between BGP
speakers. For example if we have an exchange point scenario with four BGP speakers. For example if we have an exchange point scenario with four BGP
@ -15,9 +15,9 @@ speakers, each of which maintaining a BGP peering with the other three
each of the four establishes a single BGP peering against the Route Server each of the four establishes a single BGP peering against the Route Server
(@pxref{fig:route-server}). (@pxref{fig:route-server}).
We will first describe briefly the Route Server model implemented by Quagga. We will first describe briefly the Route Server model implemented by Frr.
We will explain the commands that have been added for configuring that We will explain the commands that have been added for configuring that
model. And finally we will show a full example of Quagga configured as Route model. And finally we will show a full example of Frr configured as Route
Server. Server.
@menu @menu
@ -148,7 +148,7 @@ It is also common to demand from a route server that it does not
modify some BGP attributes (next-hop, as-path and MED) that are usually modify some BGP attributes (next-hop, as-path and MED) that are usually
modified by standard BGP speakers before announcing a route. modified by standard BGP speakers before announcing a route.
The announcement processing model implemented by Quagga is shown in The announcement processing model implemented by Frr is shown in
@ref{fig:rs-processing}. The figure shows a mixture of RS-clients (B, C and D) @ref{fig:rs-processing}. The figure shows a mixture of RS-clients (B, C and D)
with normal BGP peers (A). There are some details that worth additional with normal BGP peers (A). There are some details that worth additional
comments: comments:
@ -180,7 +180,7 @@ they do not hurt anybody (they can always be left empty).
@node Commands for configuring a Route Server @node Commands for configuring a Route Server
@section Commands for configuring a Route Server @section Commands for configuring a Route Server
Now we will describe the commands that have been added to quagga Now we will describe the commands that have been added to frr
in order to support the route server features. in order to support the route server features.
@deffn {Route-Server} {neighbor @var{peer-group} route-server-client} {} @deffn {Route-Server} {neighbor @var{peer-group} route-server-client} {}
@ -189,7 +189,7 @@ in order to support the route server features.
This command configures the peer given by @var{peer}, @var{A.B.C.D} or This command configures the peer given by @var{peer}, @var{A.B.C.D} or
@var{X:X::X:X} as an RS-client. @var{X:X::X:X} as an RS-client.
Actually this command is not new, it already existed in standard Quagga. It Actually this command is not new, it already existed in standard Frr. It
enables the transparent mode for the specified peer. This means that some enables the transparent mode for the specified peer. This means that some
BGP attributes (as-path, next-hop and MED) of the routes announced to that BGP attributes (as-path, next-hop and MED) of the routes announced to that
peer are not modified. peer are not modified.
@ -235,7 +235,7 @@ any normal (in or out) route-map.
@node Example of Route Server Configuration @node Example of Route Server Configuration
@section Example of Route Server Configuration @section Example of Route Server Configuration
Finally we are going to show how to configure a Quagga daemon to act as a Finally we are going to show how to configure a Frr daemon to act as a
Route Server. For this purpose we are going to present a scenario without Route Server. For this purpose we are going to present a scenario without
route server, and then we will show how to use the configurations of the BGP route server, and then we will show how to use the configurations of the BGP
routers to generate the configuration of the route server. routers to generate the configuration of the route server.

View File

@ -3,7 +3,7 @@
@acronym{SNMP,Simple Network Managing Protocol} is a widely implemented @acronym{SNMP,Simple Network Managing Protocol} is a widely implemented
feature for collecting network information from router and/or host. feature for collecting network information from router and/or host.
Quagga itself does not support SNMP agent (server daemon) functionality Frr itself does not support SNMP agent (server daemon) functionality
but is able to connect to a SNMP agent using the SMUX protocol but is able to connect to a SNMP agent using the SMUX protocol
(@cite{RFC1227}) or the AgentX protocol (@cite{RFC2741}) and make the (@cite{RFC1227}) or the AgentX protocol (@cite{RFC2741}) and make the
routing protocol MIBs available through it. routing protocol MIBs available through it.
@ -24,7 +24,7 @@ version of @code{net-snmp} which was formerly known as @code{ucd-snmp}.
It is free and open software and available at @uref{http://www.net-snmp.org/} It is free and open software and available at @uref{http://www.net-snmp.org/}
and as binary package for most Linux distributions. and as binary package for most Linux distributions.
@code{net-snmp} has to be compiled with @code{--with-mib-modules=agentx} to @code{net-snmp} has to be compiled with @code{--with-mib-modules=agentx} to
be able to accept connections from Quagga using AgentX protocol or with be able to accept connections from Frr using AgentX protocol or with
@code{--with-mib-modules=smux} to use SMUX protocol. @code{--with-mib-modules=smux} to use SMUX protocol.
Nowadays, SMUX is a legacy protocol. The AgentX protocol should be Nowadays, SMUX is a legacy protocol. The AgentX protocol should be
@ -33,11 +33,11 @@ preferred for any new deployment. Both protocols have the same coverage.
@node AgentX configuration @node AgentX configuration
@section AgentX configuration @section AgentX configuration
To enable AgentX protocol support, Quagga must have been build with the To enable AgentX protocol support, Frr must have been build with the
@code{--enable-snmp} or @code{--enable-snmp=agentx} option. Both the @code{--enable-snmp} or @code{--enable-snmp=agentx} option. Both the
master SNMP agent (snmpd) and each of the Quagga daemons must be master SNMP agent (snmpd) and each of the Frr daemons must be
configured. In @code{/etc/snmp/snmpd.conf}, @code{master agentx} configured. In @code{/etc/snmp/snmpd.conf}, @code{master agentx}
directive should be added. In each of the Quagga daemons, @code{agentx} directive should be added. In each of the Frr daemons, @code{agentx}
command will enable AgentX support. command will enable AgentX support.
@example @example
@ -54,7 +54,7 @@ command will enable AgentX support.
# #
master agentx master agentx
/etc/quagga/ospfd.conf: /etc/frr/ospfd.conf:
! ... the rest of ospfd.conf has been omitted for clarity ... ! ... the rest of ospfd.conf has been omitted for clarity ...
! !
agentx agentx
@ -62,7 +62,7 @@ command will enable AgentX support.
@end example @end example
Upon successful connection, you should get something like this in the Upon successful connection, you should get something like this in the
log of each Quagga daemons: log of each Frr daemons:
@example @example
2012/05/25 11:39:08 ZEBRA: snmp[info]: NET-SNMP version 5.4.3 AgentX subagent connected 2012/05/25 11:39:08 ZEBRA: snmp[info]: NET-SNMP version 5.4.3 AgentX subagent connected
@ -78,11 +78,11 @@ OSPF-MIB::ospfRouterId.0 = IpAddress: 192.168.42.109
The AgentX protocol can be transported over a Unix socket or using TCP The AgentX protocol can be transported over a Unix socket or using TCP
or UDP. It usually defaults to a Unix socket and depends on how NetSNMP or UDP. It usually defaults to a Unix socket and depends on how NetSNMP
was built. If need to configure Quagga to use another transport, you can was built. If need to configure Frr to use another transport, you can
configure it through @code{/etc/snmp/quagga.conf}: configure it through @code{/etc/snmp/frr.conf}:
@example @example
/etc/snmp/quagga.conf: /etc/snmp/frr.conf:
[snmpd] [snmpd]
# Use a remote master agent # Use a remote master agent
agentXSocket tcp:192.168.15.12:705 agentXSocket tcp:192.168.15.12:705
@ -91,17 +91,17 @@ configure it through @code{/etc/snmp/quagga.conf}:
@node SMUX configuration @node SMUX configuration
@section SMUX configuration @section SMUX configuration
To enable SMUX protocol support, Quagga must have been build with the To enable SMUX protocol support, Frr must have been build with the
@code{--enable-snmp=smux} option. @code{--enable-snmp=smux} option.
A separate connection has then to be established between the A separate connection has then to be established between the
SNMP agent (snmpd) and each of the Quagga daemons. This connections SNMP agent (snmpd) and each of the Frr daemons. This connections
each use different OID numbers and passwords. Be aware that this OID each use different OID numbers and passwords. Be aware that this OID
number is not the one that is used in queries by clients, it is solely number is not the one that is used in queries by clients, it is solely
used for the intercommunication of the daemons. used for the intercommunication of the daemons.
In the following example the ospfd daemon will be connected to the In the following example the ospfd daemon will be connected to the
snmpd daemon using the password "quagga_ospfd". For testing it is snmpd daemon using the password "frr_ospfd". For testing it is
recommending to take exactly the below snmpd.conf as wrong access recommending to take exactly the below snmpd.conf as wrong access
restrictions can be hard to debug. restrictions can be hard to debug.
@ -115,24 +115,24 @@ restrictions can be hard to debug.
view all included .1 80 view all included .1 80
access MyROGroup "" any noauth exact all none none access MyROGroup "" any noauth exact all none none
# #
# the following line is relevant for Quagga # the following line is relevant for Frr
# #
smuxpeer .1.3.6.1.4.1.3317.1.2.5 quagga_ospfd smuxpeer .1.3.6.1.4.1.3317.1.2.5 frr_ospfd
/etc/quagga/ospf: /etc/frr/ospf:
! ... the rest of ospfd.conf has been omitted for clarity ... ! ... the rest of ospfd.conf has been omitted for clarity ...
! !
smux peer .1.3.6.1.4.1.3317.1.2.5 quagga_ospfd smux peer .1.3.6.1.4.1.3317.1.2.5 frr_ospfd
! !
@end example @end example
After restarting snmpd and quagga, a successful connection can be verified in After restarting snmpd and frr, a successful connection can be verified in
the syslog and by querying the SNMP daemon: the syslog and by querying the SNMP daemon:
@example @example
snmpd[12300]: [smux_accept] accepted fd 12 from 127.0.0.1:36255 snmpd[12300]: [smux_accept] accepted fd 12 from 127.0.0.1:36255
snmpd[12300]: accepted smux peer: \ snmpd[12300]: accepted smux peer: \
oid GNOME-PRODUCT-ZEBRA-MIB::ospfd, quagga-0.96.5 oid GNOME-PRODUCT-ZEBRA-MIB::ospfd, frr-0.96.5
# snmpwalk -c public -v1 localhost .1.3.6.1.2.1.14.1.1 # snmpwalk -c public -v1 localhost .1.3.6.1.2.1.14.1.1
OSPF-MIB::ospfRouterId.0 = IpAddress: 192.168.42.109 OSPF-MIB::ospfRouterId.0 = IpAddress: 192.168.42.109
@ -148,7 +148,7 @@ troublesome @code{snmp_log()} line in the function
@section MIB and command reference @section MIB and command reference
The following OID numbers are used for the interprocess communication of snmpd and The following OID numbers are used for the interprocess communication of snmpd and
the Quagga daemons with SMUX only. the Frr daemons with SMUX only.
@example @example
(OIDs below .iso.org.dod.internet.private.enterprises) (OIDs below .iso.org.dod.internet.private.enterprises)
zebra .1.3.6.1.4.1.3317.1.2.1 .gnome.gnomeProducts.zebra.zserv zebra .1.3.6.1.4.1.3317.1.2.1 .gnome.gnomeProducts.zebra.zserv
@ -168,7 +168,7 @@ ripd .1.3.6.1.2.1.23 .iso.org.dot.internet.mgmt.mib-2.rip2
ospf6d .1.3.6.1.3.102 .iso.org.dod.internet.experimental.ospfv3 ospf6d .1.3.6.1.3.102 .iso.org.dod.internet.experimental.ospfv3
@end example @end example
The following syntax is understood by the Quagga daemons for configuring SNMP using SMUX: The following syntax is understood by the Frr daemons for configuring SNMP using SMUX:
@deffn {Command} {smux peer @var{oid}} {} @deffn {Command} {smux peer @var{oid}} {}
@deffnx {Command} {no smux peer @var{oid}} {} @deffnx {Command} {no smux peer @var{oid}} {}
@end deffn @end deffn

View File

@ -1,11 +1,11 @@
@c Documentation on configuring Quagga and snmpd for SNMP traps @c Documentation on configuring Frr and snmpd for SNMP traps
@c contributed by Jeroen Simonetti, jsimonetti@denit.net @c contributed by Jeroen Simonetti, jsimonetti@denit.net
@node Handling SNMP Traps @node Handling SNMP Traps
@section Handling SNMP Traps @section Handling SNMP Traps
To handle snmp traps make sure your snmp setup of quagga works To handle snmp traps make sure your snmp setup of frr works
correctly as described in the quagga documentation in @xref{SNMP Support}. correctly as described in the frr documentation in @xref{SNMP Support}.
The BGP4 mib will send traps on peer up/down events. These should be The BGP4 mib will send traps on peer up/down events. These should be
visible in your snmp logs with a message similar to: visible in your snmp logs with a message similar to:

View File

@ -1,7 +1,7 @@
@c -*-texinfo-*- @c -*-texinfo-*-
@c This is part of the Quagga Manual. @c This is part of the Frr Manual.
@c @value{COPYRIGHT_STR} @c @value{COPYRIGHT_STR}
@c See file quagga.texi for copying conditions. @c See file frr.texi for copying conditions.
@node VNC and VNC-GW @node VNC and VNC-GW
@chapter VNC and VNC-GW @chapter VNC and VNC-GW
@ -97,8 +97,8 @@ configured. The default is @code{encap-attr}.
The protocol that is used to communicate routing and Ethernet / L2 The protocol that is used to communicate routing and Ethernet / L2
forwarding information between NVAs and NVEs is referred to as the forwarding information between NVAs and NVEs is referred to as the
Remote Forwarder Protocol (RFP). Currently, only a simple example RFP Remote Forwarder Protocol (RFP). Currently, only a simple example RFP
is included in Quagga. Developers may use this example as a starting is included in Frr. Developers may use this example as a starting
point to integrate Quagga with an RFP of their choosing, e.g., point to integrate Frr with an RFP of their choosing, e.g.,
@code{OpenFlow}. The example code includes the following sample @code{OpenFlow}. The example code includes the following sample
configuration: configuration:
@ -966,7 +966,7 @@ Print the number of memory items allocated by the NVA.
@menu @menu
* Mesh NVA Configuration:: * Mesh NVA Configuration::
* Mesh NVA and VNC-GW Configuration:: * Mesh NVA and VNC-GW Configuration::
* VNC with Quagga Route Reflector Configuration:: * VNC with Frr Route Reflector Configuration::
* VNC with Commercial Route Reflector Configuration:: * VNC with Commercial Route Reflector Configuration::
* VNC with Redundant Route Reflectors Configuration:: * VNC with Redundant Route Reflectors Configuration::
@c * Interfacing VNC to an IGP:: @c * Interfacing VNC to an IGP::
@ -1090,10 +1090,10 @@ VNC-GWs, each supporting two CE routers physically attached to the four
NVEs. Note that this example is showing a more complex configuration NVEs. Note that this example is showing a more complex configuration
where VNC-GW is separated from normal NVA functions; it is equally where VNC-GW is separated from normal NVA functions; it is equally
possible to simplify the configuration and combine NVA and VNC-GW possible to simplify the configuration and combine NVA and VNC-GW
functions in a single quagga instance. functions in a single frr instance.
@float Figure,fig:fig-vnc-gw @float Figure,fig:fig-vnc-gw
@center @image{fig-vnc-gw,400pt,,Quagga VNC Gateway} @center @image{fig-vnc-gw,400pt,,Frr VNC Gateway}
@caption{Meshed NVEs and VNC-GWs} @caption{Meshed NVEs and VNC-GWs}
@end float @end float
@ -1177,7 +1177,7 @@ router bgp 64512
@c TBD make this its own example: @c TBD make this its own example:
@c @c
@c @float Figure,fig:fig-vnc-gw-rr @c @float Figure,fig:fig-vnc-gw-rr
@c @center @image{fig-vnc-gw-rr,400pt,,Quagga VNC Gateway with RR} @c @center @image{fig-vnc-gw-rr,400pt,,Frr VNC Gateway with RR}
@c @end float @c @end float
@c An NVA can also import unicast routes from BGP without advertising the @c An NVA can also import unicast routes from BGP without advertising the
@c imported routes as VPN routes. Such imported routes, while not @c imported routes as VPN routes. Such imported routes, while not
@ -1195,17 +1195,17 @@ router bgp 64512
@c vnc redistribute ipv4 bgp-direct-to-nve-groups @c vnc redistribute ipv4 bgp-direct-to-nve-groups
@c @end verbatim @c @end verbatim
@node VNC with Quagga Route Reflector Configuration @node VNC with Frr Route Reflector Configuration
@subsection VNC with Quagga Route Reflector Configuration @subsection VNC with Frr Route Reflector Configuration
A route reflector eliminates the need for a fully meshed NVA A route reflector eliminates the need for a fully meshed NVA
network by acting as the hub between NVAs. network by acting as the hub between NVAs.
@ref{fig:fig-vnc-quagga-route-reflector} shows BGP route reflector @ref{fig:fig-vnc-frr-route-reflector} shows BGP route reflector
@code{BGP Route Reflector 1} (192.168.1.100) as a route reflector for @code{BGP Route Reflector 1} (192.168.1.100) as a route reflector for
NVAs @code{NVA 2}(192.168.1.101) and @code{NVA 3} NVAs @code{NVA 2}(192.168.1.101) and @code{NVA 3}
(192.168.1.102). (192.168.1.102).
@float Figure,fig:fig-vnc-quagga-route-reflector @float Figure,fig:fig-vnc-frr-route-reflector
@center @image{fig-vnc-quagga-route-reflector,400pt,,Quagga Route Reflector} @center @image{fig-vnc-frr-route-reflector,400pt,,Frr Route Reflector}
@caption{Two NVAs and a BGP Route Reflector} @caption{Two NVAs and a BGP Route Reflector}
@end float @end float
@ -1298,7 +1298,7 @@ While not shown, an NVA can also be configured as a route reflector.
@node VNC with Commercial Route Reflector Configuration @node VNC with Commercial Route Reflector Configuration
@subsection VNC with Commercial Route Reflector Configuration @subsection VNC with Commercial Route Reflector Configuration
This example is identical to @ref{VNC with Quagga Route Reflector This example is identical to @ref{VNC with Frr Route Reflector
Configuration} with the exception that the route reflector is a Configuration} with the exception that the route reflector is a
commercial router. Only the commercial router. Only the
VNC-relevant configuration is provided. VNC-relevant configuration is provided.
@ -1408,7 +1408,7 @@ exit
@node VNC with Redundant Route Reflectors Configuration @node VNC with Redundant Route Reflectors Configuration
@subsection VNC with Redundant Route Reflectors Configuration @subsection VNC with Redundant Route Reflectors Configuration
This example combines the previous two (@ref{VNC with Quagga Route This example combines the previous two (@ref{VNC with Frr Route
Reflector Configuration} and @ref{VNC with Commercial Route Reflector Reflector Configuration} and @ref{VNC with Commercial Route Reflector
Configuration}) into a redundant route reflector configuration. BGP Configuration}) into a redundant route reflector configuration. BGP
route reflectors @code{BGP Route Reflector 1} and @code{Commercial Router} route reflectors @code{BGP Route Reflector 1} and @code{Commercial Router}
@ -1418,7 +1418,7 @@ route reflectors.
@float Figure,fig:fig-vnc-redundant-route-reflectors @float Figure,fig:fig-vnc-redundant-route-reflectors
@center @image{fig-vnc-redundant-route-reflectors,400pt,,Redundant Route Reflectors} @center @image{fig-vnc-redundant-route-reflectors,400pt,,Redundant Route Reflectors}
@caption{Quagga-based NVA with redundant route reflectors} @caption{Frr-based NVA with redundant route reflectors}
@end float @end float
@file{bgpd.conf} for @code{Bgpd Route Reflector 1} on 192.168.1.100: @file{bgpd.conf} for @code{Bgpd Route Reflector 1} on 192.168.1.100:

View File

@ -54,7 +54,7 @@ specifying '-d ospfd' will connect only to ospfd. This can be particularly
useful inside scripts with -c where the command is targeted for a single daemon. useful inside scripts with -c where the command is targeted for a single daemon.
.IP "\fB\-e, \-\-execute \fIcommand\fP" .IP "\fB\-e, \-\-execute \fIcommand\fP"
Alias for -c. It's here only for compatibility with Zebra routing software and Alias for -c. It's here only for compatibility with Zebra routing software and
older Quagga versions. This will be removed in future. older Frr versions. This will be removed in future.
.IP "\fB\-E, \-\-echo\fP" .IP "\fB\-E, \-\-echo\fP"
When the -c option is being used, this flag will cause the standard When the -c option is being used, this flag will cause the standard
.B vtysh .B vtysh
@ -73,11 +73,11 @@ The default location of the
.B vtysh .B vtysh
config file. config file.
.TP .TP
.BI @CFG_SYSCONF@/Quagga.conf .BI @CFG_SYSCONF@/Frr.conf
The default location of the integrated @PACKAGE_FULLNAME@ routing engine config file The default location of the integrated @PACKAGE_FULLNAME@ routing engine config file
if integrated config file is in use (not default). if integrated config file is in use (not default).
.TP .TP
.BI ${HOME}/.history_quagga .BI ${HOME}/.history_frr
Location of history of commands entered via cli Location of history of commands entered via cli
.SH WARNING .SH WARNING
This man page is intended to be a quick reference for command line This man page is intended to be a quick reference for command line

View File

@ -5,7 +5,7 @@
* Integrated configuration mode:: * Integrated configuration mode::
@end menu @end menu
@command{vtysh} provides a combined frontend to all Quagga daemons in a @command{vtysh} provides a combined frontend to all Frr daemons in a
single combined session. It is enabled by default at build time, but can single combined session. It is enabled by default at build time, but can
be disabled through the @option{--disable-vtysh} option to be disabled through the @option{--disable-vtysh} option to
@command{./configure}. @command{./configure}.
@ -30,7 +30,7 @@ that directory, plus membership in the @emph{@value{INSTALL_VTY_GROUP}}
group (which is the group that the daemons will change ownership of their group (which is the group that the daemons will change ownership of their
sockets to). sockets to).
To restrict access to Quagga configuration, make sure no unauthorized users To restrict access to Frr configuration, make sure no unauthorized users
are members of the @emph{@value{INSTALL_VTY_GROUP}} group. are members of the @emph{@value{INSTALL_VTY_GROUP}} group.
@subsection PAM support (experimental) @subsection PAM support (experimental)
@ -61,13 +61,13 @@ at all.
@section Integrated configuration mode @section Integrated configuration mode
Integrated configuration mode uses a single configuration file, Integrated configuration mode uses a single configuration file,
@file{Quagga.conf}, for all daemons. This replaces the individual files like @file{Frr.conf}, for all daemons. This replaces the individual files like
@file{zebra.conf} or @file{bgpd.conf}. @file{zebra.conf} or @file{bgpd.conf}.
@file{Quagga.conf} is located in @file{@value{INSTALL_PREFIX_ETC}}. All @file{Frr.conf} is located in @file{@value{INSTALL_PREFIX_ETC}}. All
daemons check for the existence of this file at startup, and if it exists daemons check for the existence of this file at startup, and if it exists
will not load their individual configuration files. Instead, will not load their individual configuration files. Instead,
@command{vtysh -b} must be invoked to process @file{Quagga.conf} and apply @command{vtysh -b} must be invoked to process @file{Frr.conf} and apply
its settings to the individual daemons. its settings to the individual daemons.
@quotation Warning @quotation Warning
@ -76,7 +76,7 @@ its settings to the individual daemons.
@subsection Configuration saving, file ownership and permissions @subsection Configuration saving, file ownership and permissions
The @file{Quagga.conf} file is not written by any of the daemons; instead The @file{Frr.conf} file is not written by any of the daemons; instead
@command{vtysh} contains the neccessary logic to collect configuration from @command{vtysh} contains the neccessary logic to collect configuration from
all of the daemons, combine it and write it out. all of the daemons, combine it and write it out.
@ -87,22 +87,22 @@ lost after doing a configuration save.
@end quotation @end quotation
Since the @command{vtysh} command may be running as ordinary user on the Since the @command{vtysh} command may be running as ordinary user on the
system, configuration writes will be tried through @command{watchquagga}, system, configuration writes will be tried through @command{watchfrr},
using the @command{write integrated} command internally. Since using the @command{write integrated} command internally. Since
@command{watchquagga} is running as superuser, @command{vtysh} is able to @command{watchfrr} is running as superuser, @command{vtysh} is able to
ensure correct ownership and permissions on @file{Quagga.conf}. ensure correct ownership and permissions on @file{Frr.conf}.
If @command{watchquagga} is not running or the configuration write fails, If @command{watchfrr} is not running or the configuration write fails,
@command{vtysh} will attempt to directly write to the file. This is likely @command{vtysh} will attempt to directly write to the file. This is likely
to fail if running as unprivileged user; alternatively it may leave the to fail if running as unprivileged user; alternatively it may leave the
file with incorrect owner or permissions. file with incorrect owner or permissions.
Writing the configuration can be triggered directly by invoking Writing the configuration can be triggered directly by invoking
@command{vtysh -w}. This may be useful for scripting. Note this command @command{vtysh -w}. This may be useful for scripting. Note this command
should be run as either the superuser or the Quagga user. should be run as either the superuser or the Frr user.
We recommend you do not mix the use of the two types of files. Further, it We recommend you do not mix the use of the two types of files. Further, it
is better not to use the integrated Quagga.conf file, as any syntax error in is better not to use the integrated Frr.conf file, as any syntax error in
it can lead to /all/ of your daemons being unable to start up. Per daemon it can lead to /all/ of your daemons being unable to start up. Per daemon
files are more robust as impact of errors in configuration are limited to files are more robust as impact of errors in configuration are limited to
the daemon in whose file the error is made. the daemon in whose file the error is made.
@ -110,11 +110,11 @@ the daemon in whose file the error is made.
@deffn {Command} {service integrated-vtysh-config} {} @deffn {Command} {service integrated-vtysh-config} {}
@deffnx {Command} {no service integrated-vtysh-config} {} @deffnx {Command} {no service integrated-vtysh-config} {}
Control whether integrated @file{Quagga.conf} file is written when Control whether integrated @file{Frr.conf} file is written when
'write file' is issued. 'write file' is issued.
These commands need to be placed in @file{vtysh.conf} to have any effect. These commands need to be placed in @file{vtysh.conf} to have any effect.
Note that since @file{vtysh.conf} is not written by Quagga itself, they Note that since @file{vtysh.conf} is not written by Frr itself, they
therefore need to be manually placed in that file. therefore need to be manually placed in that file.
This command has 3 states: This command has 3 states:
@ -122,18 +122,18 @@ This command has 3 states:
@item @item
@command{service integrated-vtysh-config} @command{service integrated-vtysh-config}
@command{vtysh} will always write @file{Quagga.conf}. @command{vtysh} will always write @file{Frr.conf}.
@item @item
@command{no service integrated-vtysh-config} @command{no service integrated-vtysh-config}
@command{vtysh} will never write @file{Quagga.conf}; instead it will ask @command{vtysh} will never write @file{Frr.conf}; instead it will ask
daemons to write their individual configuration files. daemons to write their individual configuration files.
@item @item
Neither option present (default) Neither option present (default)
@command{vtysh} will check whether @file{Quagga.conf} exists. If it does, @command{vtysh} will check whether @file{Frr.conf} exists. If it does,
configuration writes will update that file. Otherwise, writes are performed configuration writes will update that file. Otherwise, writes are performed
through the individual daemons. through the individual daemons.
@end itemize @end itemize
@ -146,8 +146,8 @@ installations.
@deffn {Command} {write integrated} {} @deffn {Command} {write integrated} {}
Unconditionally (regardless of @command{service integrated-vtysh-config} Unconditionally (regardless of @command{service integrated-vtysh-config}
setting) write out integrated @file{Quagga.conf} file through setting) write out integrated @file{Frr.conf} file through
@command{watchquagga}. If @command{watchquagga} is not running, this command @command{watchfrr}. If @command{watchfrr} is not running, this command
is unavailable. is unavailable.
@end deffn @end deffn
@ -156,6 +156,6 @@ is unavailable.
Configuration changes made while some daemon is not running will be invisible Configuration changes made while some daemon is not running will be invisible
to that daemon. The daemon will start up with its saved configuration to that daemon. The daemon will start up with its saved configuration
(either in its individual configuration file, or in @file{Quagga.conf}). (either in its individual configuration file, or in @file{Frr.conf}).
This is particularly troublesome for route-maps and prefix lists, which would This is particularly troublesome for route-maps and prefix lists, which would
otherwise be synchronized between daemons. otherwise be synchronized between daemons.

View File

@ -1,37 +1,37 @@
.\" This file was originally generated by help2man 1.36. .\" This file was originally generated by help2man 1.36.
.TH WATCHQUAGGA 8 "July 2010" .TH WATCHFRR 8 "July 2010"
.SH NAME .SH NAME
watchquagga \- a program to monitor the status of quagga daemons watchfrr \- a program to monitor the status of frr daemons
.SH SYNOPSIS .SH SYNOPSIS
.B watchquagga .B watchfrr
.RI [ option ...] .RI [ option ...]
.IR daemon ... .IR daemon ...
.br .br
.B watchquagga .B watchfrr
.BR \-h " | " \-v .BR \-h " | " \-v
.SH DESCRIPTION .SH DESCRIPTION
.B watchquagga .B watchfrr
is a watchdog program that monitors the status of supplied quagga is a watchdog program that monitors the status of supplied frr
.IR daemon s .IR daemon s
and tries to restart them in case they become unresponsive or shut down. and tries to restart them in case they become unresponsive or shut down.
.PP .PP
To determine whether a daemon is running, it tries to connect to the To determine whether a daemon is running, it tries to connect to the
daemon's VTY UNIX stream socket, and send echo commands to ensure the daemon's VTY UNIX stream socket, and send echo commands to ensure the
daemon responds. When the daemon crashes, EOF is received from the socket, daemon responds. When the daemon crashes, EOF is received from the socket,
so that watchquagga can react immediately. so that watchfrr can react immediately.
.PP .PP
This program can run in one of the following 5 modes: This program can run in one of the following 5 modes:
.TP .TP
.B Mode 0: monitor .B Mode 0: monitor
In this mode, the program serves as a monitor and reports status changes. In this mode, the program serves as a monitor and reports status changes.
.IP .IP
Example usage: watchquagga \-d zebra ospfd bgpd Example usage: watchfrr \-d zebra ospfd bgpd
.TP .TP
.B Mode 1: global restart .B Mode 1: global restart
In this mode, whenever a daemon hangs or crashes, the given command is used In this mode, whenever a daemon hangs or crashes, the given command is used
to restart all watched daemons. to restart all watched daemons.
.IP .IP
Example usage: watchquagga \-dz \e Example usage: watchfrr \-dz \e
.br .br
-R '/sbin/service zebra restart; /sbin/service ospfd restart' \e -R '/sbin/service zebra restart; /sbin/service ospfd restart' \e
.br .br
@ -41,7 +41,7 @@ zebra ospfd
In this mode, whenever a single daemon hangs or crashes, the given command In this mode, whenever a single daemon hangs or crashes, the given command
is used to restart this daemon only. is used to restart this daemon only.
.IP .IP
Example usage: watchquagga \-dz \-r '/sbin/service %s restart' \e Example usage: watchfrr \-dz \-r '/sbin/service %s restart' \e
.br .br
zebra ospfd bgpd zebra ospfd bgpd
.TP .TP
@ -52,7 +52,7 @@ daemon; in this case, the following steps are taken: (1) all other daemons
are stopped, (2) zebra is restarted, and (3) other daemons are started are stopped, (2) zebra is restarted, and (3) other daemons are started
again. again.
.IP .IP
Example usage: watchquagga \-adz \-r '/sbin/service %s restart' \e Example usage: watchfrr \-adz \-r '/sbin/service %s restart' \e
.br .br
\-s '/sbin/service %s start' \e \-s '/sbin/service %s start' \e
.br .br
@ -63,7 +63,7 @@ In this mode, whenever a single daemon hangs or crashes, the following
steps are taken: (1) all other daemons are stopped, (2) zebra is restarted, steps are taken: (1) all other daemons are stopped, (2) zebra is restarted,
and (3) other daemons are started again. and (3) other daemons are started again.
.IP .IP
Example usage: watchquagga \-Adz \-r '/sbin/service %s restart' \e Example usage: watchfrr \-Adz \-r '/sbin/service %s restart' \e
.br .br
\-s '/sbin/service %s start' \e \-s '/sbin/service %s start' \e
.br .br
@ -95,7 +95,7 @@ instead of standard output (stdout).
.BI \-S " directory" "\fR, \fB\-\-statedir " directory .BI \-S " directory" "\fR, \fB\-\-statedir " directory
Set the VTY socket Set the VTY socket
.I directory .I directory
(the default value is "/var/run/quagga"). (the default value is "/var/run/frr").
.TP .TP
.BR \-e ", " \-\-no\-echo .BR \-e ", " \-\-no\-echo
Do not ping the daemons to test whether they respond. This option is Do not ping the daemons to test whether they respond. This option is
@ -196,7 +196,7 @@ options to be specified.
.BI \-p " filename" "\fR, \fB\-\-pid\-file " filename .BI \-p " filename" "\fR, \fB\-\-pid\-file " filename
Set the process identifier Set the process identifier
.I filename .I filename
(the default value is "/var/run/quagga/watchquagga.pid"). (the default value is "/var/run/frr/watchfrr.pid").
.TP .TP
.BI \-b " string" "\fR, \fB\-\-blank\-string " string .BI \-b " string" "\fR, \fB\-\-blank\-string " string
When the supplied When the supplied

View File

@ -4220,7 +4220,7 @@ install_default (enum node_type node)
* *
* terminal = 0 -- vtysh / no logging, no config control * terminal = 0 -- vtysh / no logging, no config control
* terminal = 1 -- normal daemon * terminal = 1 -- normal daemon
* terminal = -1 -- watchquagga / no logging, but minimal config control */ * terminal = -1 -- watchfrr / no logging, but minimal config control */
void void
cmd_init (int terminal) cmd_init (int terminal)
{ {

View File

@ -59,7 +59,7 @@ const char *zlog_proto_names[] =
"ISIS", "ISIS",
"PIM", "PIM",
"RFP", "RFP",
"WATCHQUAGGA", "WATCHFRR",
NULL, NULL,
}; };

View File

@ -59,7 +59,7 @@ typedef enum
ZLOG_ISIS, ZLOG_ISIS,
ZLOG_PIM, ZLOG_PIM,
ZLOG_RFP, ZLOG_RFP,
ZLOG_WATCHQUAGGA, ZLOG_WATCHFRR,
} zlog_proto_t; } zlog_proto_t;
/* If maxlvl is set to ZLOG_DISABLED, then no messages will be sent /* If maxlvl is set to ZLOG_DISABLED, then no messages will be sent

View File

@ -2240,7 +2240,7 @@ vtysh_read (struct thread *thread)
if (ret == CMD_SUSPEND) if (ret == CMD_SUSPEND)
break; break;
/* warning: watchquagga hardcodes this result write */ /* warning: watchfrr hardcodes this result write */
header[3] = ret; header[3] = ret;
buffer_put(vty->obuf, header, 4); buffer_put(vty->obuf, header, 4);

View File

@ -123,7 +123,7 @@ struct zserv_header
* always set to 255 in new zserv. * always set to 255 in new zserv.
*/ */
uint8_t version; uint8_t version;
#define ZSERV_VERSION 3 #define ZSERV_VERSION 4
vrf_id_t vrf_id; vrf_id_t vrf_id;
uint16_t command; uint16_t command;
}; };

View File

@ -411,7 +411,7 @@ typedef enum {
* the command value in the old zserv header. To allow old and new * the command value in the old zserv header. To allow old and new
* Zserv headers to be distinguished from each other. * Zserv headers to be distinguished from each other.
*/ */
#define ZEBRA_HEADER_MARKER 255 #define ZEBRA_HEADER_MARKER 254
/* Zebra route's types are defined in route_types.h */ /* Zebra route's types are defined in route_types.h */
#include "route_types.h" #include "route_types.h"

View File

@ -3,6 +3,6 @@ EXTRA_DIST = bgpd.init isisd.init \
ospf6d.init ospfd.init ldpd.init \ ospf6d.init ospfd.init ldpd.init \
quagga.logrotate quagga.pam quagga.spec \ quagga.logrotate quagga.pam quagga.spec \
quagga.sysconfig ripd.init ripngd.init \ quagga.sysconfig ripd.init ripngd.init \
watchquagga.init pimd.init zebra.init \ watchfrr.init pimd.init zebra.init \
README.rpm_build.md README.rpm_build.md

View File

@ -59,7 +59,7 @@ Building your own Quagga RPM
%{!?quagga_user: %global quagga_user quagga } %{!?quagga_user: %global quagga_user quagga }
%{!?vty_group: %global vty_group quaggavt } %{!?vty_group: %global vty_group quaggavt }
%{!?with_fpm: %global with_fpm 0 } %{!?with_fpm: %global with_fpm 0 }
%{!?with_watchquagga: %global with_watchquagga 1 } %{!?with_watchfrr: %global with_watchfrr 1 }
6. Build the RPM 6. Build the RPM
@ -84,11 +84,11 @@ Enabling daemons after installation of the package:
chkconfig bgpd on chkconfig bgpd on
... etc ... etc
2. If you want to run `watchquagga`, then configure `/etc/sysconfig/quagga` 2. If you want to run `watchfrr`, then configure `/etc/sysconfig/quagga`
and uncomment the line with the daemons for `watchquagga` to monitor, and uncomment the line with the daemons for `watchfrr` to monitor,
then enable watchquagga then enable watchfrr
chkconfig watchquagga on chkconfig watchfrr on
3. Check your firewall / IPtables to make sure the routing protocols are 3. Check your firewall / IPtables to make sure the routing protocols are
allowed. allowed.
@ -113,7 +113,7 @@ Configuration is stored in `/etc/quagga/*.conf` files.
systemctl enable bgpd systemctl enable bgpd
... etc ... etc
Note: There is no watchquagga on systemd based systems. Systemd contains Note: There is no watchfrr on systemd based systems. Systemd contains
the functionality of monitoring and restarting daemons. the functionality of monitoring and restarting daemons.
2. Check your firewall / IPtables to make sure the routing protocols are 2. Check your firewall / IPtables to make sure the routing protocols are

View File

@ -23,7 +23,7 @@
%{!?quagga_user: %global quagga_user quagga } %{!?quagga_user: %global quagga_user quagga }
%{!?vty_group: %global vty_group quaggavty } %{!?vty_group: %global vty_group quaggavty }
%{!?with_fpm: %global with_fpm 0 } %{!?with_fpm: %global with_fpm 0 }
%{!?with_watchquagga: %global with_watchquagga 1 } %{!?with_watchfrr: %global with_watchfrr 1 }
%{!?with_bgp_vnc: %global with_bgp_vnc 0 } %{!?with_bgp_vnc: %global with_bgp_vnc 0 }
# path defines # path defines
@ -52,13 +52,13 @@
# Check for init.d (upstart) as used in CentOS 6 or systemd (ie CentOS 7) # Check for init.d (upstart) as used in CentOS 6 or systemd (ie CentOS 7)
%{expand: %%global initsystem %(if [[ `/sbin/init --version 2> /dev/null` =~ upstart ]]; then echo upstart; elif [[ `systemctl` =~ -\.mount ]]; then echo systemd; fi)} %{expand: %%global initsystem %(if [[ `/sbin/init --version 2> /dev/null` =~ upstart ]]; then echo upstart; elif [[ `systemctl` =~ -\.mount ]]; then echo systemd; fi)}
# #
# If init system is systemd, then always disable watchquagga # If init system is systemd, then always disable watchfrr
# #
%if "%{initsystem}" == "systemd" %if "%{initsystem}" == "systemd"
# Note: For systems with systemd, watchquagga will NOT be built. Systemd # Note: For systems with systemd, watchfrr will NOT be built. Systemd
# takes over the role of restarting crashed processes. Value will # takes over the role of restarting crashed processes. Value will
# be overwritten with 0 below for systemd independent on the setting here # be overwritten with 0 below for systemd independent on the setting here
%global with_watchquagga 1 %global with_watchfrr 1
%endif %endif
# if FPM is enabled, then enable tcp_zebra as well # if FPM is enabled, then enable tcp_zebra as well
@ -80,13 +80,13 @@
%define daemon_ldpd "" %define daemon_ldpd ""
%endif %endif
%if %{with_watchquagga} %if %{with_watchfrr}
%define daemon_watchquagga watchquagga %define daemon_watchfrr watchfrr
%else %else
%define daemon_watchquagga "" %define daemon_watchfrr ""
%endif %endif
%define all_daemons %{daemon_list} %{daemon_ldpd} %{daemon_watchquagga} %define all_daemons %{daemon_list} %{daemon_ldpd} %{daemon_watchfrr}
# allow build dir to be kept # allow build dir to be kept
%{!?keep_build: %global keep_build 0 } %{!?keep_build: %global keep_build 0 }
@ -232,10 +232,10 @@ developing OSPF-API and quagga applications.
%else %else
--disable-fpm \ --disable-fpm \
%endif %endif
%if %{with_watchquagga} %if %{with_watchfrr}
--enable-watchquagga \ --enable-watchfrr \
%else %else
--disable-watchquagga \ --disable-watchfrr \
%endif %endif
%if %{with_bgp_vnc} %if %{with_bgp_vnc}
--enable-bgp-vnc \ --enable-bgp-vnc \
@ -269,8 +269,8 @@ rm -rf %{buildroot}/usr/share/info/dir
# install /etc sources # install /etc sources
%if "%{initsystem}" == "systemd" %if "%{initsystem}" == "systemd"
mkdir -p %{buildroot}%{_unitdir} mkdir -p %{buildroot}%{_unitdir}
install %{quagga_tools}/quagga.service \ install %{quagga_tools}/frr.service \
%{buildroot}%{_unitdir}/quagga.service %{buildroot}%{_unitdir}/frr.service
%else %else
mkdir -p %{buildroot}/etc/rc.d/init.d mkdir -p %{buildroot}/etc/rc.d/init.d
for daemon in %{all_daemons} ; do for daemon in %{all_daemons} ; do
@ -345,7 +345,7 @@ zebra_spec_add_service ldpd 2612/tcp "LDPd vty"
%if "%{initsystem}" == "systemd" %if "%{initsystem}" == "systemd"
for daemon in %all_daemons ; do for daemon in %all_daemons ; do
%systemd_post quagga.service %systemd_post frr.service
done done
%else %else
for daemon in %all_daemons ; do for daemon in %all_daemons ; do
@ -371,9 +371,9 @@ for daemon in %{all_daemons} ; do
%endif %endif
fi fi
done done
%if %{with_watchquagga} %if %{with_watchfrr}
# No config for watchquagga - this is part of /etc/sysconfig/quagga # No config for watchfrr - this is part of /etc/sysconfig/quagga
rm -f %{_sysconfdir}/watchquagga.* rm -f %{_sysconfdir}/watchfrr.*
%endif %endif
if [ ! -e %{_sysconfdir}/vtysh.conf ]; then if [ ! -e %{_sysconfdir}/vtysh.conf ]; then
@ -397,16 +397,16 @@ if [ "$1" -ge 1 ]; then
# Rename restart flags for daemons handled specially. # Rename restart flags for daemons handled specially.
running_zebra="$restart_zebra" running_zebra="$restart_zebra"
restart_zebra=no restart_zebra=no
%if %{with_watchquagga} %if %{with_watchfrr}
running_watchquagga="$restart_watchquagga" running_watchfrr="$restart_watchfrr"
restart_watchquagga=no restart_watchfrr=no
%endif %endif
%if "%{initsystem}" == "systemd" %if "%{initsystem}" == "systemd"
## ##
## Systemd Version ## Systemd Version
## ##
# No watchquagga for systemd version # No watchfrr for systemd version
# #
# Stop all daemons other than zebra. # Stop all daemons other than zebra.
for daemon in %all_daemons ; do for daemon in %all_daemons ; do
@ -427,12 +427,12 @@ if [ "$1" -ge 1 ]; then
## ##
## init.d Version ## init.d Version
## ##
%if %{with_watchquagga} %if %{with_watchfrr}
# Stop watchquagga first. # Stop watchfrr first.
[ "$running_watchquagga" = yes ] && \ [ "$running_watchfrr" = yes ] && \
/etc/rc.d/init.d/watchquagga stop >/dev/null 2>&1 /etc/rc.d/init.d/watchfrr stop >/dev/null 2>&1
%endif %endif
# Stop all daemons other than zebra and watchquagga. # Stop all daemons other than zebra and watchfrr.
for daemon in %all_daemons ; do for daemon in %all_daemons ; do
eval restart=\$restart_${daemon} eval restart=\$restart_${daemon}
[ "$restart" = yes ] && \ [ "$restart" = yes ] && \
@ -441,18 +441,18 @@ if [ "$1" -ge 1 ]; then
# Restart zebra. # Restart zebra.
[ "$running_zebra" = yes ] && \ [ "$running_zebra" = yes ] && \
/etc/rc.d/init.d/zebra restart >/dev/null 2>&1 /etc/rc.d/init.d/zebra restart >/dev/null 2>&1
# Start all daemons other than zebra and watchquagga. # Start all daemons other than zebra and watchfrr.
for daemon in %all_daemons ; do for daemon in %all_daemons ; do
eval restart=\$restart_${daemon} eval restart=\$restart_${daemon}
[ "$restart" = yes ] && \ [ "$restart" = yes ] && \
/etc/rc.d/init.d/${daemon} start >/dev/null 2>&1 /etc/rc.d/init.d/${daemon} start >/dev/null 2>&1
done done
%if %{with_watchquagga} %if %{with_watchfrr}
# Start watchquagga last. # Start watchfrr last.
# Avoid postun scriptlet error if watchquagga is not running. # Avoid postun scriptlet error if watchfrr is not running.
[ "$running_watchquagga" = yes ] && \ [ "$running_watchfrr" = yes ] && \
/etc/rc.d/init.d/watchquagga start >/dev/null 2>&1 || : /etc/rc.d/init.d/watchfrr start >/dev/null 2>&1 || :
%endif %endif
%endif %endif
fi fi
@ -510,11 +510,11 @@ rm -rf %{buildroot}
%{_sbindir}/bgpd %{_sbindir}/bgpd
%{_sbindir}/ssd %{_sbindir}/ssd
%{_sbindir}/quagga %{_sbindir}/quagga
%{_sbindir}/quagga-reload.py %{_sbindir}/frr-reload.py
%{_sbindir}/quagga-reload.pyc %{_sbindir}/frr-reload.pyc
%{_sbindir}/quagga-reload.pyo %{_sbindir}/frr-reload.pyo
%if %{with_watchquagga} %if %{with_watchfrr}
%{_sbindir}/watchquagga %{_sbindir}/watchfrr
%endif %endif
%{_sbindir}/ripngd %{_sbindir}/ripngd
%{_sbindir}/ospf6d %{_sbindir}/ospf6d
@ -530,11 +530,11 @@ rm -rf %{buildroot}
%{_bindir}/* %{_bindir}/*
%config /etc/quagga/[!v]* %config /etc/quagga/[!v]*
%if "%{initsystem}" == "systemd" %if "%{initsystem}" == "systemd"
%config %{_unitdir}/quagga.service %config %{_unitdir}/frr.service
%else %else
%config /etc/rc.d/init.d/zebra %config /etc/rc.d/init.d/zebra
%if %{with_watchquagga} %if %{with_watchfrr}
%config /etc/rc.d/init.d/watchquagga %config /etc/rc.d/init.d/watchfrr
%endif %endif
%config /etc/rc.d/init.d/ripd %config /etc/rc.d/init.d/ripd
%config /etc/rc.d/init.d/ospfd %config /etc/rc.d/init.d/ospfd
@ -586,7 +586,7 @@ rm -rf %{buildroot}
- Add conditional logic to only build tex footnotes with supported texi2html - Add conditional logic to only build tex footnotes with supported texi2html
- Added pimd to files section and fix double listing of /var/lib*/quagga - Added pimd to files section and fix double listing of /var/lib*/quagga
- Numerous fixes to unify upstart/systemd startup into same spec file - Numerous fixes to unify upstart/systemd startup into same spec file
- Only allow use of watchquagga for non-systemd systems. no need with systemd - Only allow use of watchfrr for non-systemd systems. no need with systemd
* Fri Sep 4 2015 Paul Jakma <paul@jakma.org> * Fri Sep 4 2015 Paul Jakma <paul@jakma.org>
- buildreq updates - buildreq updates
@ -607,7 +607,7 @@ rm -rf %{buildroot}
- daemonv6_list should contain only IPv6 daemons - daemonv6_list should contain only IPv6 daemons
* Wed Dec 22 2004 Andrew J. Schorr <ajschorr@alumni.princeton.edu> * Wed Dec 22 2004 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
- watchquagga added - watchfrr added
- on upgrade, all daemons should be condrestart'ed - on upgrade, all daemons should be condrestart'ed
- on removal, all daemons should be stopped - on removal, all daemons should be stopped

View File

@ -11,7 +11,7 @@ ZEBRA_OPTS="-A 127.0.0.1"
PIMD_OPTS="-A 127.0.0.1" PIMD_OPTS="-A 127.0.0.1"
LDPD_OPTS="-A 127.0.0.1" LDPD_OPTS="-A 127.0.0.1"
# Watchquagga configuration for LSB initscripts # Watchfrr configuration for LSB initscripts
# #
# (Not needed with systemd: the service files are configured to automatically # (Not needed with systemd: the service files are configured to automatically
# restart any daemon on failure. If zebra fails, all running daemons will be # restart any daemon on failure. If zebra fails, all running daemons will be

View File

@ -2,9 +2,9 @@
# chkconfig: 2345 17 83 # chkconfig: 2345 17 83
### BEGIN INIT INFO ### BEGIN INIT INFO
# Provides: watchquagga # Provides: watchfrr
# Short-Description: Quagga watchdog # Short-Description: Frr watchdog
# Description: Quagga watchdog for use with Zebra # Description: Frr watchdog for use with Zebra
### END INIT INFO ### END INIT INFO
# source function library # source function library
@ -13,13 +13,13 @@
# Get network config # Get network config
. /etc/sysconfig/network . /etc/sysconfig/network
# quagga command line options # frr command line options
. /etc/sysconfig/quagga . /etc/sysconfig/quagga
RETVAL=0 RETVAL=0
PROG="watchquagga" PROG="watchfrr"
cmd=watchquagga cmd=watchfrr
LOCK_FILE=/var/lock/subsys/watchquagga LOCK_FILE=/var/lock/subsys/watchfrr
case "$1" in case "$1" in
start) start)

View File

@ -8,7 +8,7 @@ f none @sbindir@/ripd=$DESTDIR/@sbindir@/ripd 0755 root bin
f none @sbindir@/ripngd=$DESTDIR/@sbindir@/ripngd 0755 root bin f none @sbindir@/ripngd=$DESTDIR/@sbindir@/ripngd 0755 root bin
f none @sbindir@/ospfd=$DESTDIR/@sbindir@/ospfd 0755 root bin f none @sbindir@/ospfd=$DESTDIR/@sbindir@/ospfd 0755 root bin
f none @sbindir@/ospf6d=$DESTDIR/@sbindir@/ospf6d 0755 root bin f none @sbindir@/ospf6d=$DESTDIR/@sbindir@/ospf6d 0755 root bin
f none @sbindir@/watchquagga=$DESTDIR/@sbindir@/watchquagga 0755 root bin f none @sbindir@/watchfrr=$DESTDIR/@sbindir@/watchfrr 0755 root bin
d none @sysconfdir@=$DESTDIR/@sysconfdir@ 0711 @enable_user@ @enable_group@ d none @sysconfdir@=$DESTDIR/@sysconfdir@ 0711 @enable_user@ @enable_group@
f none @sysconfdir@/zebra.conf.sample=$DESTDIR/@sysconfdir@/zebra.conf.sample 0644 root bin f none @sysconfdir@/zebra.conf.sample=$DESTDIR/@sysconfdir@/zebra.conf.sample 0644 root bin
f none @sysconfdir@/bgpd.conf.sample=$DESTDIR/@sysconfdir@/bgpd.conf.sample 0644 root bin f none @sysconfdir@/bgpd.conf.sample=$DESTDIR/@sysconfdir@/bgpd.conf.sample 0644 root bin

View File

@ -1,4 +1,4 @@
sbin_SCRIPTS = quagga-reload.py quagga sbin_SCRIPTS = frr-reload.py frr
EXTRA_DIST = quagga.service quagga-reload.py quagga EXTRA_DIST = frr.service frr-reload.py frr

View File

@ -1,34 +1,34 @@
#!/bin/bash #!/bin/bash
# #
### BEGIN INIT INFO ### BEGIN INIT INFO
# Provides: quagga # Provides: frr
# Required-Start: $local_fs $network $remote_fs $syslog # Required-Start: $local_fs $network $remote_fs $syslog
# Required-Stop: $local_fs $network $remote_fs $syslog # Required-Stop: $local_fs $network $remote_fs $syslog
# Default-Start: 2 3 4 5 # Default-Start: 2 3 4 5
# Default-Stop: 0 1 6 # Default-Stop: 0 1 6
# Short-Description: start and stop the Quagga routing suite # Short-Description: start and stop the Frr routing suite
# Description: Quagga is a routing suite for IP routing protocols like # Description: Frr is a routing suite for IP routing protocols like
# BGP, OSPF, RIP and others. This script contols the main # BGP, OSPF, RIP and others. This script contols the main
# daemon "quagga" as well as the individual protocol daemons. # daemon "frr" as well as the individual protocol daemons.
### END INIT INFO ### END INIT INFO
# #
PATH=/bin:/usr/bin:/sbin:/usr/sbin PATH=/bin:/usr/bin:/sbin:/usr/sbin
D_PATH=/usr/lib/quagga D_PATH=/usr/lib/frr
C_PATH=/etc/quagga C_PATH=/etc/frr
V_PATH=/var/run/quagga V_PATH=/var/run/frr
# Local Daemon selection may be done by using /etc/quagga/daemons. # Local Daemon selection may be done by using /etc/frr/daemons.
# See /usr/share/doc/quagga/README.Debian.gz for further information. # See /usr/share/doc/frr/README.Debian.gz for further information.
# Keep zebra first and do not list watchquagga! # Keep zebra first and do not list watchfrr!
DAEMONS="zebra bgpd ripd ripngd ospfd ospf6d isisd babeld pimd" DAEMONS="zebra bgpd ripd ripngd ospfd ospf6d isisd babeld pimd"
MAX_INSTANCES=5 MAX_INSTANCES=5
RELOAD_SCRIPT=/usr/lib/quagga/quagga-reload.py RELOAD_SCRIPT=/usr/lib/frr/frr-reload.py
. /lib/lsb/init-functions . /lib/lsb/init-functions
if [ -f /usr/lib/quagga/ssd ]; then if [ -f /usr/lib/frr/ssd ]; then
SSD=/usr/lib/quagga/ssd SSD=/usr/lib/frr/ssd
else else
SSD=`which start-stop-daemon` SSD=`which start-stop-daemon`
fi fi
@ -61,7 +61,7 @@ started()
vtysh_b () vtysh_b ()
{ {
# Rember, that all variables have been incremented by 1 in convert_daemon_prios() # Rember, that all variables have been incremented by 1 in convert_daemon_prios()
if [ "$vtysh_enable" = 2 -a -f $C_PATH/Quagga.conf ]; then if [ "$vtysh_enable" = 2 -a -f $C_PATH/Frr.conf ]; then
/usr/bin/vtysh -b -n /usr/bin/vtysh -b -n
fi fi
} }
@ -73,13 +73,13 @@ vtysh_b ()
check_daemon() check_daemon()
{ {
# If the integrated config file is used the others are not checked. # If the integrated config file is used the others are not checked.
if [ -r "$C_PATH/Quagga.conf" ]; then if [ -r "$C_PATH/Frr.conf" ]; then
return 0 return 0
fi fi
# vtysh_enable has no config file nor binary so skip check. # vtysh_enable has no config file nor binary so skip check.
# (Not sure why vtysh_enable is in this list but does not hurt) # (Not sure why vtysh_enable is in this list but does not hurt)
if [ $1 != "watchquagga" -a $1 != "vtysh_enable" ]; then if [ $1 != "watchfrr" -a $1 != "vtysh_enable" ]; then
# check for daemon binary # check for daemon binary
if [ ! -x "$D_PATH/$1" ]; then return 1; fi if [ ! -x "$D_PATH/$1" ]; then return 1; fi
@ -87,44 +87,44 @@ check_daemon()
if [ -n "$2" ]; then if [ -n "$2" ]; then
if [ ! -r "$C_PATH/$1-$2.conf" ]; then if [ ! -r "$C_PATH/$1-$2.conf" ]; then
touch "$C_PATH/$1-$2.conf" touch "$C_PATH/$1-$2.conf"
chown quagga:quagga "$C_PATH/$1-$2.conf" chown frr:frr "$C_PATH/$1-$2.conf"
fi fi
elif [ ! -r "$C_PATH/$1.conf" ]; then elif [ ! -r "$C_PATH/$1.conf" ]; then
touch "$C_PATH/$1.conf" touch "$C_PATH/$1.conf"
chown quagga:quagga "$C_PATH/$1.conf" chown frr:frr "$C_PATH/$1.conf"
fi fi
fi fi
return 0 return 0
} }
# Starts the server if it's not alrady running according to the pid file. # Starts the server if it's not alrady running according to the pid file.
# The Quagga daemons creates the pidfile when starting. # The Frr daemons creates the pidfile when starting.
start() start()
{ {
ulimit -n $MAX_FDS ulimit -n $MAX_FDS
if [ "$1" = "watchquagga" ]; then if [ "$1" = "watchfrr" ]; then
# We may need to restart watchquagga if new daemons are added and/or # We may need to restart watchfrr if new daemons are added and/or
# removed # removed
if started "$1" ; then if started "$1" ; then
stop watchquagga stop watchfrr
else else
# Echo only once. watchquagga is printed in the stop above # Echo only once. watchfrr is printed in the stop above
echo -n " $1" echo -n " $1"
fi fi
if [ -e /var/run/quagga/watchquagga.started ] ; then if [ -e /var/run/frr/watchfrr.started ] ; then
rm /var/run/quagga/watchquagga.started rm /var/run/frr/watchfrr.started
fi fi
${SSD} \ ${SSD} \
--start \ --start \
--pidfile=`pidfile $1` \ --pidfile=`pidfile $1` \
--exec "$D_PATH/$1" \ --exec "$D_PATH/$1" \
-- \ -- \
"${watchquagga_options[@]}" "${watchfrr_options[@]}"
for i in `seq 1 10`; for i in `seq 1 10`;
do do
if [ -e /var/run/quagga/watchquagga.started ] ; then if [ -e /var/run/frr/watchfrr.started ] ; then
break break
else else
sleep 1 sleep 1
@ -200,10 +200,10 @@ stop()
fi fi
} }
# Converts values from /etc/quagga/daemons to all-numeric values. # Converts values from /etc/frr/daemons to all-numeric values.
convert_daemon_prios() convert_daemon_prios()
{ {
for name in $DAEMONS zebra vtysh_enable watchquagga_enable; do for name in $DAEMONS zebra vtysh_enable watchfrr_enable; do
# First, assign the value set by the user to $value # First, assign the value set by the user to $value
eval value=\${${name}:0:3} eval value=\${${name}:0:3}
@ -224,8 +224,8 @@ convert_daemon_prios()
done done
} }
# Starts watchquagga for all wanted daemons. # Starts watchfrr for all wanted daemons.
start_watchquagga() start_watchfrr()
{ {
local daemon_name local daemon_name
local daemon_prio local daemon_prio
@ -233,14 +233,14 @@ start_watchquagga()
local daemon_inst local daemon_inst
# Start the monitor daemon only if desired. # Start the monitor daemon only if desired.
if [ 0 -eq "$watchquagga_enable" ]; then if [ 0 -eq "$watchfrr_enable" ]; then
return return
fi fi
# Check variable type # Check variable type
if ! declare -p watchquagga_options | grep -q '^declare \-a'; then if ! declare -p watchfrr_options | grep -q '^declare \-a'; then
echo echo
echo "ERROR: The variable watchquagga_options from /etc/quagga/debian.cnf must be a BASH array!" echo "ERROR: The variable watchfrr_options from /etc/frr/debian.cnf must be a BASH array!"
echo "ERROR: Please convert config file and restart!" echo "ERROR: Please convert config file and restart!"
exit 1 exit 1
fi fi
@ -256,13 +256,13 @@ start_watchquagga()
eval "inst_disable=\${${daemon_name}_${inst}}" eval "inst_disable=\${${daemon_name}_${inst}}"
if [ -z ${inst_disable} ] || [ ${inst_disable} != 0 ]; then if [ -z ${inst_disable} ] || [ ${inst_disable} != 0 ]; then
if check_daemon $daemon_name $inst; then if check_daemon $daemon_name $inst; then
watchquagga_options+=("${daemon_name}-${inst}") watchfrr_options+=("${daemon_name}-${inst}")
fi fi
fi fi
done done
else else
if check_daemon $daemon_name; then if check_daemon $daemon_name; then
watchquagga_options+=($daemon_name) watchfrr_options+=($daemon_name)
fi fi
fi fi
found_one=1 found_one=1
@ -271,17 +271,17 @@ start_watchquagga()
# Start if at least one daemon is activated. # Start if at least one daemon is activated.
if [ $found_one -eq 1 ]; then if [ $found_one -eq 1 ]; then
echo -n "Starting Quagga monitor daemon:" echo -n "Starting Frr monitor daemon:"
start watchquagga start watchfrr
echo "." echo "."
fi fi
} }
# Stopps watchquagga. # Stopps watchfrr.
stop_watchquagga() stop_watchfrr()
{ {
echo -n "Stopping Quagga monitor daemon:" echo -n "Stopping Frr monitor daemon:"
stop watchquagga stop watchfrr
echo "." echo "."
} }
@ -305,7 +305,7 @@ stop_prio()
wanted_prio=$1 wanted_prio=$1
daemon_list=${daemon:-$DAEMONS} daemon_list=${daemon:-$DAEMONS}
echo -n "Stopping Quagga daemons (prio:$wanted_prio):" echo -n "Stopping Frr daemons (prio:$wanted_prio):"
for prio_i in `seq 10 -1 $wanted_prio`; do for prio_i in `seq 10 -1 $wanted_prio`; do
for daemon_name in $daemon_list; do for daemon_name in $daemon_list; do
@ -331,7 +331,7 @@ stop_prio()
echo "." echo "."
if [ -z "$inst" ]; then if [ -z "$inst" ]; then
# Now stop other daemons that're prowling, coz the daemons file changed # Now stop other daemons that're prowling, coz the daemons file changed
echo -n "Stopping other quagga daemons" echo -n "Stopping other frr daemons"
if [ -n "$daemon" ]; then if [ -n "$daemon" ]; then
eval "file_list_suffix="$V_PATH"/"$daemon*"" eval "file_list_suffix="$V_PATH"/"$daemon*""
else else
@ -374,7 +374,7 @@ start_prio()
wanted_prio=$1 wanted_prio=$1
daemon_list=${daemon:-$DAEMONS} daemon_list=${daemon:-$DAEMONS}
echo -n "Starting Quagga daemons (prio:$wanted_prio):" echo -n "Starting Frr daemons (prio:$wanted_prio):"
for prio_i in `seq 1 $wanted_prio`; do for prio_i in `seq 1 $wanted_prio`; do
for daemon_name in $daemon_list; do for daemon_name in $daemon_list; do
@ -479,7 +479,7 @@ check_status()
. "$C_PATH/debian.conf" . "$C_PATH/debian.conf"
# Read configuration variable file if it is present # Read configuration variable file if it is present
[ -r /etc/default/quagga ] && . /etc/default/quagga [ -r /etc/default/frr ] && . /etc/default/frr
MAX_INSTANCES=${MAX_INSTANCES:=5} MAX_INSTANCES=${MAX_INSTANCES:=5}
@ -489,7 +489,7 @@ convert_daemon_prios
if [ ! -d $V_PATH ]; then if [ ! -d $V_PATH ]; then
echo "Creating $V_PATH" echo "Creating $V_PATH"
mkdir -p $V_PATH mkdir -p $V_PATH
chown quagga:quagga $V_PATH chown frr:frr $V_PATH
chmod 755 /$V_PATH chmod 755 /$V_PATH
fi fi
@ -509,10 +509,10 @@ case "$1" in
# Start all daemons # Start all daemons
cd $C_PATH/ cd $C_PATH/
if [ "$2" != "watchquagga" ]; then if [ "$2" != "watchfrr" ]; then
start_prio 10 $dmn start_prio 10 $dmn
fi fi
start_watchquagga start_watchfrr
vtysh_b vtysh_b
;; ;;
@ -525,8 +525,8 @@ case "$1" in
stop|0) stop|0)
# Stop all daemons at level '0' or 'stop' # Stop all daemons at level '0' or 'stop'
stop_watchquagga stop_watchfrr
if [ "$dmn" != "watchquagga" ]; then if [ "$dmn" != "watchfrr" ]; then
[ -n "${dmn}" ] && eval "${dmn/-/_}=0" [ -n "${dmn}" ] && eval "${dmn/-/_}=0"
stop_prio 0 $dmn stop_prio 0 $dmn
fi fi
@ -536,17 +536,17 @@ case "$1" in
ip route flush proto zebra ip route flush proto zebra
else else
[ -n "$dmn" ] && eval "${dmn/-/_}=0" [ -n "$dmn" ] && eval "${dmn/-/_}=0"
start_watchquagga start_watchfrr
fi fi
;; ;;
reload) reload)
# Just apply the commands that have changed, no restart necessary # Just apply the commands that have changed, no restart necessary
[ ! -x "$RELOAD_SCRIPT" ] && echo "quagga-reload script not available" && exit 0 [ ! -x "$RELOAD_SCRIPT" ] && echo "frr-reload script not available" && exit 0
NEW_CONFIG_FILE="${2:-$C_PATH/Quagga.conf}" NEW_CONFIG_FILE="${2:-$C_PATH/Frr.conf}"
[ ! -r $NEW_CONFIG_FILE ] && echo "Unable to read new configuration file $NEW_CONFIG_FILE" && exit 1 [ ! -r $NEW_CONFIG_FILE ] && echo "Unable to read new configuration file $NEW_CONFIG_FILE" && exit 1
echo "Applying only incremental changes to running configuration from Quagga.conf" echo "Applying only incremental changes to running configuration from Frr.conf"
"$RELOAD_SCRIPT" --reload /etc/quagga/Quagga.conf "$RELOAD_SCRIPT" --reload /etc/frr/Frr.conf
exit $? exit $?
;; ;;
@ -562,11 +562,11 @@ case "$1" in
;; ;;
*) *)
echo "Usage: /etc/init.d/quagga {start|stop|status|reload|restart|force-reload|<priority>} [daemon]" echo "Usage: /etc/init.d/frr {start|stop|status|reload|restart|force-reload|<priority>} [daemon]"
echo " E.g. '/etc/init.d/quagga 5' would start all daemons with a prio 1-5." echo " E.g. '/etc/init.d/frr 5' would start all daemons with a prio 1-5."
echo " reload applies only modifications from the running config to all daemons." echo " reload applies only modifications from the running config to all daemons."
echo " reload neither restarts starts any daemon nor starts any new ones." echo " reload neither restarts starts any daemon nor starts any new ones."
echo " Read /usr/share/doc/quagga/README.Debian for details." echo " Read /usr/share/doc/frr/README.Debian for details."
exit 1 exit 1
;; ;;
esac esac

View File

@ -1,30 +1,30 @@
#!/usr/bin/python #!/usr/bin/python
# Quagga Reloader # Frr Reloader
# Copyright (C) 2014 Cumulus Networks, Inc. # Copyright (C) 2014 Cumulus Networks, Inc.
# #
# This file is part of Quagga. # This file is part of Frr.
# #
# Quagga is free software; you can redistribute it and/or modify it # Frr is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the # under the terms of the GNU General Public License as published by the
# Free Software Foundation; either version 2, or (at your option) any # Free Software Foundation; either version 2, or (at your option) any
# later version. # later version.
# #
# Quagga is distributed in the hope that it will be useful, but # Frr is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of # WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details. # General Public License for more details.
# #
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with Quagga; see the file COPYING. If not, write to the Free # along with Frr; see the file COPYING. If not, write to the Free
# Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA. # 02111-1307, USA.
# #
""" """
This program This program
- reads a quagga configuration text file - reads a frr configuration text file
- reads quagga's current running configuration via "vtysh -c 'show running'" - reads frr's current running configuration via "vtysh -c 'show running'"
- compares the two configs and determines what commands to execute to - compares the two configs and determines what commands to execute to
synchronize quagga's running configuration with the configuation in the synchronize frr's running configuration with the configuation in the
text file text file
""" """
@ -52,7 +52,7 @@ class VtyshMarkException(Exception):
class Context(object): class Context(object):
""" """
A Context object represents a section of quagga configuration such as: A Context object represents a section of frr configuration such as:
! !
interface swp3 interface swp3
description swp3 -> r8's swp1 description swp3 -> r8's swp1
@ -91,7 +91,7 @@ ip forwarding
class Config(object): class Config(object):
""" """
A quagga configuration is stored in a Config object. A Config object A frr configuration is stored in a Config object. A Config object
contains a dictionary of Context objects where the Context keys contains a dictionary of Context objects where the Context keys
('router ospf' for example) are our dictionary key. ('router ospf' for example) are our dictionary key.
""" """
@ -394,7 +394,7 @@ def line_to_vtysh_conft(ctx_keys, line, delete):
def line_for_vtysh_file(ctx_keys, line, delete): def line_for_vtysh_file(ctx_keys, line, delete):
""" """
Return the command as it would appear in Quagga.conf Return the command as it would appear in Frr.conf
""" """
cmd = [] cmd = []
@ -435,7 +435,7 @@ def line_for_vtysh_file(ctx_keys, line, delete):
def get_normalized_ipv6_line(line): def get_normalized_ipv6_line(line):
""" """
Return a normalized IPv6 line as produced by quagga, Return a normalized IPv6 line as produced by frr,
with all letters in lower case and trailing and leading with all letters in lower case and trailing and leading
zeros removed zeros removed
""" """
@ -473,14 +473,14 @@ def ignore_delete_re_add_lines(lines_to_add, lines_to_del):
if ctx_keys[0].startswith('router bgp') and line and line.startswith('neighbor '): if ctx_keys[0].startswith('router bgp') and line and line.startswith('neighbor '):
""" """
BGP changed how it displays swpX peers that are part of peer-group. Older BGP changed how it displays swpX peers that are part of peer-group. Older
versions of quagga would display these on separate lines: versions of frr would display these on separate lines:
neighbor swp1 interface neighbor swp1 interface
neighbor swp1 peer-group FOO neighbor swp1 peer-group FOO
but today we display via a single line but today we display via a single line
neighbor swp1 interface peer-group FOO neighbor swp1 interface peer-group FOO
This change confuses quagga-reload.py so check to see if we are deleting This change confuses frr-reload.py so check to see if we are deleting
neighbor swp1 interface peer-group FOO neighbor swp1 interface peer-group FOO
and adding and adding
@ -531,7 +531,7 @@ def ignore_delete_re_add_lines(lines_to_add, lines_to_del):
""" """
In 3.0.1 we changed how we display neighbor interface command. Older In 3.0.1 we changed how we display neighbor interface command. Older
versions of quagga would display the following: versions of frr would display the following:
neighbor swp1 interface neighbor swp1 interface
neighbor swp1 remote-as external neighbor swp1 remote-as external
neighbor swp1 capability extended-nexthop neighbor swp1 capability extended-nexthop
@ -542,7 +542,7 @@ def ignore_delete_re_add_lines(lines_to_add, lines_to_del):
and capability extended-nexthop is no longer needed because we and capability extended-nexthop is no longer needed because we
automatically enable it when the neighbor is of type interface. automatically enable it when the neighbor is of type interface.
This change confuses quagga-reload.py so check to see if we are deleting This change confuses frr-reload.py so check to see if we are deleting
neighbor swp1 interface remote-as (external|internal|ASNUM) neighbor swp1 interface remote-as (external|internal|ASNUM)
and adding and adding
@ -689,19 +689,19 @@ def compare_context_objects(newconf, running):
if __name__ == '__main__': if __name__ == '__main__':
# Command line options # Command line options
parser = argparse.ArgumentParser(description='Dynamically apply diff in quagga configs') parser = argparse.ArgumentParser(description='Dynamically apply diff in frr configs')
parser.add_argument('--input', help='Read running config from file instead of "show running"') parser.add_argument('--input', help='Read running config from file instead of "show running"')
group = parser.add_mutually_exclusive_group(required=True) group = parser.add_mutually_exclusive_group(required=True)
group.add_argument('--reload', action='store_true', help='Apply the deltas', default=False) group.add_argument('--reload', action='store_true', help='Apply the deltas', default=False)
group.add_argument('--test', action='store_true', help='Show the deltas', default=False) group.add_argument('--test', action='store_true', help='Show the deltas', default=False)
parser.add_argument('--debug', action='store_true', help='Enable debugs', default=False) parser.add_argument('--debug', action='store_true', help='Enable debugs', default=False)
parser.add_argument('--stdout', action='store_true', help='Log to STDOUT', default=False) parser.add_argument('--stdout', action='store_true', help='Log to STDOUT', default=False)
parser.add_argument('filename', help='Location of new quagga config file') parser.add_argument('filename', help='Location of new frr config file')
args = parser.parse_args() args = parser.parse_args()
# Logging # Logging
# For --test log to stdout # For --test log to stdout
# For --reload log to /var/log/quagga/quagga-reload.log # For --reload log to /var/log/frr/frr-reload.log
if args.test or args.stdout: if args.test or args.stdout:
logging.basicConfig(level=logging.INFO, logging.basicConfig(level=logging.INFO,
format='%(asctime)s %(levelname)5s: %(message)s') format='%(asctime)s %(levelname)5s: %(message)s')
@ -711,10 +711,10 @@ if __name__ == '__main__':
logging.addLevelName(logging.WARNING, "\033[91m%s\033[0m" % logging.getLevelName(logging.WARNING)) logging.addLevelName(logging.WARNING, "\033[91m%s\033[0m" % logging.getLevelName(logging.WARNING))
elif args.reload: elif args.reload:
if not os.path.isdir('/var/log/quagga/'): if not os.path.isdir('/var/log/frr/'):
os.makedirs('/var/log/quagga/') os.makedirs('/var/log/frr/')
logging.basicConfig(filename='/var/log/quagga/quagga-reload.log', logging.basicConfig(filename='/var/log/frr/frr-reload.log',
level=logging.INFO, level=logging.INFO,
format='%(asctime)s %(levelname)5s: %(message)s') format='%(asctime)s %(levelname)5s: %(message)s')
@ -733,7 +733,7 @@ if __name__ == '__main__':
sys.exit(1) sys.exit(1)
# Verify that 'service integrated-vtysh-config' is configured # Verify that 'service integrated-vtysh-config' is configured
vtysh_filename = '/etc/quagga/vtysh.conf' vtysh_filename = '/etc/frr/vtysh.conf'
service_integrated_vtysh_config = True service_integrated_vtysh_config = True
if os.path.isfile(vtysh_filename): if os.path.isfile(vtysh_filename):
@ -746,7 +746,7 @@ if __name__ == '__main__':
break break
if not service_integrated_vtysh_config: if not service_integrated_vtysh_config:
print "'service integrated-vtysh-config' is not configured, this is required for 'service quagga reload'" print "'service integrated-vtysh-config' is not configured, this is required for 'service frr reload'"
sys.exit(1) sys.exit(1)
if args.debug: if args.debug:
@ -799,7 +799,7 @@ if __name__ == '__main__':
elif args.reload: elif args.reload:
log.debug('New Quagga Config\n%s', newconf.get_lines()) log.debug('New Frr Config\n%s', newconf.get_lines())
# This looks a little odd but we have to do this twice...here is why # This looks a little odd but we have to do this twice...here is why
# If the user had this running bgp config: # If the user had this running bgp config:
@ -826,7 +826,7 @@ if __name__ == '__main__':
for x in range(2): for x in range(2):
running = Config() running = Config()
running.load_from_show_running() running.load_from_show_running()
log.debug('Running Quagga Config (Pass #%d)\n%s', x, running.get_lines()) log.debug('Running Frr Config (Pass #%d)\n%s', x, running.get_lines())
(lines_to_add, lines_to_del) = compare_context_objects(newconf, running) (lines_to_add, lines_to_del) = compare_context_objects(newconf, running)
@ -842,19 +842,19 @@ if __name__ == '__main__':
cmd = line_to_vtysh_conft(ctx_keys, line, True) cmd = line_to_vtysh_conft(ctx_keys, line, True)
original_cmd = cmd original_cmd = cmd
# Some commands in quagga are picky about taking a "no" of the entire line. # Some commands in frr are picky about taking a "no" of the entire line.
# OSPF is bad about this, you can't "no" the entire line, you have to "no" # OSPF is bad about this, you can't "no" the entire line, you have to "no"
# only the beginning. If we hit one of these command an exception will be # only the beginning. If we hit one of these command an exception will be
# thrown. Catch it and remove the last '-c', 'FOO' from cmd and try again. # thrown. Catch it and remove the last '-c', 'FOO' from cmd and try again.
# #
# Example: # Example:
# quagga(config-if)# ip ospf authentication message-digest 1.1.1.1 # frr(config-if)# ip ospf authentication message-digest 1.1.1.1
# quagga(config-if)# no ip ospf authentication message-digest 1.1.1.1 # frr(config-if)# no ip ospf authentication message-digest 1.1.1.1
# % Unknown command. # % Unknown command.
# quagga(config-if)# no ip ospf authentication message-digest # frr(config-if)# no ip ospf authentication message-digest
# % Unknown command. # % Unknown command.
# quagga(config-if)# no ip ospf authentication # frr(config-if)# no ip ospf authentication
# quagga(config-if)# # frr(config-if)#
while True: while True:
try: try:
@ -895,7 +895,7 @@ if __name__ == '__main__':
string.ascii_uppercase + string.ascii_uppercase +
string.digits) for _ in range(6)) string.digits) for _ in range(6))
filename = "/var/run/quagga/reload-%s.txt" % random_string filename = "/var/run/frr/reload-%s.txt" % random_string
log.info("%s content\n%s" % (filename, pformat(lines_to_configure))) log.info("%s content\n%s" % (filename, pformat(lines_to_configure)))
with open(filename, 'w') as fh: with open(filename, 'w') as fh:

View File

@ -1,11 +1,11 @@
[Unit] [Unit]
Description=Cumulus Linux Quagga Description=Cumulus Linux FRR
After=syslog.target networking.service After=syslog.target networking.service
OnFailure=heartbeat-failed@%n.service OnFailure=heartbeat-failed@%n.service
[Service] [Service]
Nice=-5 Nice=-5
EnvironmentFile=/etc/default/quagga EnvironmentFile=/etc/default/frr
Type=forking Type=forking
NotifyAccess=all NotifyAccess=all
StartLimitInterval=3m StartLimitInterval=3m
@ -15,8 +15,8 @@ WatchdogSec=60s
RestartSec=5 RestartSec=5
Restart=on-abnormal Restart=on-abnormal
LimitNOFILE=1024 LimitNOFILE=1024
ExecStart=/usr/lib/quagga/quagga start ExecStart=/usr/lib/frr/frr start
ExecStop=/usr/lib/quagga/quagga stop ExecStop=/usr/lib/frr/frr stop
ExecReload=/usr/lib/quagga/quagga-reload.py --reload /etc/quagga/Quagga.conf ExecReload=/usr/lib/frr/frr-reload.py --reload /etc/frr/Frr.conf
[Install] [Install]
WantedBy=network-online.target WantedBy=network-online.target

View File

@ -86,7 +86,7 @@ vtysh_cmd_FILES = $(vtysh_scan) \
$(top_srcdir)/zebra/zebra_fpm.c \ $(top_srcdir)/zebra/zebra_fpm.c \
$(top_srcdir)/zebra/zebra_ptm.c \ $(top_srcdir)/zebra/zebra_ptm.c \
$(top_srcdir)/zebra/zebra_mpls_vty.c \ $(top_srcdir)/zebra/zebra_mpls_vty.c \
$(top_srcdir)/watchquagga/watchquagga_vty.c \ $(top_srcdir)/watchfrr/watchfrr_vty.c \
$(BGP_VNC_RFAPI_SRC) $(BGP_VNC_RFP_SRC) $(BGP_VNC_RFAPI_SRC) $(BGP_VNC_RFP_SRC)
vtysh_cmd.c: $(vtysh_cmd_FILES) extract.pl vtysh_cmd.c: $(vtysh_cmd_FILES) extract.pl

View File

@ -73,7 +73,7 @@ struct vtysh_client vtysh_client[] =
{ .fd = -1, .name = "bgpd", .flag = VTYSH_BGPD, .path = BGP_VTYSH_PATH, .next = NULL}, { .fd = -1, .name = "bgpd", .flag = VTYSH_BGPD, .path = BGP_VTYSH_PATH, .next = NULL},
{ .fd = -1, .name = "isisd", .flag = VTYSH_ISISD, .path = ISIS_VTYSH_PATH, .next = NULL}, { .fd = -1, .name = "isisd", .flag = VTYSH_ISISD, .path = ISIS_VTYSH_PATH, .next = NULL},
{ .fd = -1, .name = "pimd", .flag = VTYSH_PIMD, .path = PIM_VTYSH_PATH, .next = NULL}, { .fd = -1, .name = "pimd", .flag = VTYSH_PIMD, .path = PIM_VTYSH_PATH, .next = NULL},
{ .fd = -1, .name = "watchquagga", .flag = VTYSH_WATCHQUAGGA, .path = WATCHQUAGGA_VTYSH_PATH, .next = NULL}, { .fd = -1, .name = "watchfrr", .flag = VTYSH_WATCHFRR, .path = WATCHFRR_VTYSH_PATH, .next = NULL},
}; };
enum vtysh_write_integrated vtysh_write_integrated = WRITE_INTEGRATED_UNSPECIFIED; enum vtysh_write_integrated vtysh_write_integrated = WRITE_INTEGRATED_UNSPECIFIED;
@ -2592,7 +2592,7 @@ DEFUN (vtysh_write_memory,
{ {
ret = CMD_WARNING; ret = CMD_WARNING;
for (i = 0; i < array_size(vtysh_client); i++) for (i = 0; i < array_size(vtysh_client); i++)
if (vtysh_client[i].flag == VTYSH_WATCHQUAGGA) if (vtysh_client[i].flag == VTYSH_WATCHFRR)
break; break;
if (i < array_size(vtysh_client) && vtysh_client[i].fd != -1) if (i < array_size(vtysh_client) && vtysh_client[i].fd != -1)
ret = vtysh_client_execute (&vtysh_client[i], "write integrated", stdout); ret = vtysh_client_execute (&vtysh_client[i], "write integrated", stdout);
@ -2600,7 +2600,7 @@ DEFUN (vtysh_write_memory,
if (ret != CMD_SUCCESS) if (ret != CMD_SUCCESS)
{ {
printf("\nWarning: attempting direct configuration write without " printf("\nWarning: attempting direct configuration write without "
"watchquagga.\nFile permissions and ownership may be " "watchfrr.\nFile permissions and ownership may be "
"incorrect, or write may fail.\n\n"); "incorrect, or write may fail.\n\n");
ret = vtysh_write_config_integrated(); ret = vtysh_write_config_integrated();
} }

View File

@ -34,11 +34,11 @@ DECLARE_MGROUP(MVTYSH)
#define VTYSH_ISISD 0x40 #define VTYSH_ISISD 0x40
#define VTYSH_PIMD 0x100 #define VTYSH_PIMD 0x100
#define VTYSH_LDPD 0x200 #define VTYSH_LDPD 0x200
#define VTYSH_WATCHQUAGGA 0x400 #define VTYSH_WATCHFRR 0x400
/* commands in REALLYALL are crucial to correct vtysh operation */ /* commands in REALLYALL are crucial to correct vtysh operation */
#define VTYSH_REALLYALL ~0U #define VTYSH_REALLYALL ~0U
/* watchquagga is not in ALL since library CLI functions should not be /* watchfrr is not in ALL since library CLI functions should not be
* run on it (logging & co. should stay in a fixed/frozen config, and * run on it (logging & co. should stay in a fixed/frozen config, and
* things like prefix lists are not even initialised) */ * things like prefix lists are not even initialised) */
#define VTYSH_ALL VTYSH_ZEBRA|VTYSH_RIPD|VTYSH_RIPNGD|VTYSH_OSPFD|VTYSH_OSPF6D|VTYSH_LDPD|VTYSH_BGPD|VTYSH_ISISD|VTYSH_PIMD #define VTYSH_ALL VTYSH_ZEBRA|VTYSH_RIPD|VTYSH_RIPNGD|VTYSH_OSPFD|VTYSH_OSPF6D|VTYSH_LDPD|VTYSH_BGPD|VTYSH_ISISD|VTYSH_PIMD

View File

@ -1,7 +1,7 @@
Makefile Makefile
Makefile.in Makefile.in
*.o *.o
watchquagga watchfrr
tags tags
TAGS TAGS
.deps .deps

View File

@ -5,9 +5,9 @@ DEFS = @DEFS@ -DSTATEDIR=\"$(localstatedir)/\"
AM_CFLAGS = $(WERROR) AM_CFLAGS = $(WERROR)
sbin_PROGRAMS = watchquagga sbin_PROGRAMS = watchfrr
noinst_HEADERS = watchquagga.h noinst_HEADERS = watchfrr.h
watchquagga_SOURCES = watchquagga.c watchquagga_vty.c watchfrr_SOURCES = watchfrr.c watchfrr_vty.c
watchquagga_LDADD = ../lib/libzebra.la @LIBCAP@ watchfrr_LDADD = ../lib/libzebra.la @LIBCAP@

View File

@ -1,5 +1,5 @@
/* /*
Monitor status of quagga daemons and restart if necessary. Monitor status of frr daemons and restart if necessary.
Copyright (C) 2004 Andrew J. Schorr Copyright (C) 2004 Andrew J. Schorr
@ -33,7 +33,7 @@
#include <memory.h> #include <memory.h>
#include <systemd.h> #include <systemd.h>
#include "watchquagga.h" #include "watchfrr.h"
#ifndef MIN #ifndef MIN
#define MIN(X,Y) (((X) <= (Y)) ? (X) : (Y)) #define MIN(X,Y) (((X) <= (Y)) ? (X) : (Y))
@ -49,10 +49,10 @@
#define DEFAULT_LOGLEVEL LOG_INFO #define DEFAULT_LOGLEVEL LOG_INFO
#define DEFAULT_MIN_RESTART 60 #define DEFAULT_MIN_RESTART 60
#define DEFAULT_MAX_RESTART 600 #define DEFAULT_MAX_RESTART 600
#ifdef PATH_WATCHQUAGGA_PID #ifdef PATH_WATCHFRR_PID
#define DEFAULT_PIDFILE PATH_WATCHQUAGGA_PID #define DEFAULT_PIDFILE PATH_WATCHFRR_PID
#else #else
#define DEFAULT_PIDFILE STATEDIR "/watchquagga.pid" #define DEFAULT_PIDFILE STATEDIR "/watchfrr.pid"
#endif #endif
#ifdef DAEMON_VTY_DIR #ifdef DAEMON_VTY_DIR
#define VTYDIR DAEMON_VTY_DIR #define VTYDIR DAEMON_VTY_DIR
@ -223,7 +223,7 @@ usage(const char *progname, int status)
else else
{ {
printf("Usage : %s [OPTION...] <daemon name> ...\n\n\ printf("Usage : %s [OPTION...] <daemon name> ...\n\n\
Watchdog program to monitor status of quagga daemons and try to restart\n\ Watchdog program to monitor status of frr daemons and try to restart\n\
them if they are down or unresponsive. It determines whether a daemon is\n\ them if they are down or unresponsive. It determines whether a daemon is\n\
up based on whether it can connect to the daemon's vty unix stream socket.\n\ up based on whether it can connect to the daemon's vty unix stream socket.\n\
It then repeatedly sends echo commands over that socket to determine whether\n\ It then repeatedly sends echo commands over that socket to determine whether\n\
@ -706,10 +706,10 @@ daemon_send_ready (void)
#if defined (HAVE_CUMULUS) #if defined (HAVE_CUMULUS)
FILE *fp; FILE *fp;
fp = fopen(DAEMON_VTY_DIR "/watchquagga.started", "w"); fp = fopen(DAEMON_VTY_DIR "/watchfrr.started", "w");
fclose(fp); fclose(fp);
#endif #endif
zlog_notice ("Watchquagga: Notifying Systemd we are up and running"); zlog_notice ("Watchfrr: Notifying Systemd we are up and running");
systemd_send_started(master, 0); systemd_send_started(master, 0);
sent = 1; sent = 1;
} }
@ -1062,7 +1062,7 @@ translate_blanks(const char *cmd, const char *blankstr)
return res; return res;
} }
struct zebra_privs_t watchquagga_privs = struct zebra_privs_t watchfrr_privs =
{ {
#ifdef VTY_GROUP #ifdef VTY_GROUP
.vty_group = VTY_GROUP, .vty_group = VTY_GROUP,
@ -1325,14 +1325,14 @@ main(int argc, char **argv)
gs.restart.interval = gs.min_restart_interval; gs.restart.interval = gs.min_restart_interval;
zprivs_init (&watchquagga_privs); zprivs_init (&watchfrr_privs);
master = thread_master_create(); master = thread_master_create();
cmd_init(-1); cmd_init(-1);
memory_init(); memory_init();
vty_init(master); vty_init(master);
watchquagga_vty_init(); watchfrr_vty_init();
vty_serv_sock(NULL, 0, WATCHQUAGGA_VTYSH_PATH); vty_serv_sock(NULL, 0, WATCHFRR_VTYSH_PATH);
signal_init (master, array_size(my_signals), my_signals); signal_init (master, array_size(my_signals), my_signals);
srandom(time(NULL)); srandom(time(NULL));
@ -1384,7 +1384,7 @@ main(int argc, char **argv)
return usage(progname,1); return usage(progname,1);
} }
zlog_default = openzlog(progname, ZLOG_WATCHQUAGGA, 0, zlog_default = openzlog(progname, ZLOG_WATCHFRR, 0,
LOG_CONS|LOG_NDELAY|LOG_PID, LOG_DAEMON); LOG_CONS|LOG_NDELAY|LOG_PID, LOG_DAEMON);
zlog_set_level(NULL, ZLOG_DEST_MONITOR, ZLOG_DISABLED); zlog_set_level(NULL, ZLOG_DEST_MONITOR, ZLOG_DISABLED);
if (daemon_mode) if (daemon_mode)
@ -1392,7 +1392,7 @@ main(int argc, char **argv)
zlog_set_level(NULL, ZLOG_DEST_SYSLOG, MIN(gs.loglevel,LOG_DEBUG)); zlog_set_level(NULL, ZLOG_DEST_SYSLOG, MIN(gs.loglevel,LOG_DEBUG));
if (daemon (0, 0) < 0) if (daemon (0, 0) < 0)
{ {
fprintf(stderr, "Watchquagga daemon failed: %s", strerror(errno)); fprintf(stderr, "Watchfrr daemon failed: %s", strerror(errno));
exit (1); exit (1);
} }
} }

View File

@ -1,5 +1,5 @@
/* /*
Common definitions for watchquagga API socket. Common definitions for watchfrr API socket.
Copyright (C) 2016 David Lamparter for NetDEF, Inc. Copyright (C) 2016 David Lamparter for NetDEF, Inc.
@ -18,12 +18,12 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/ */
#ifndef QUAGGA_WATCHQUAGGA_H #ifndef FRR_WATCHFRR_H
#define QUAGGA_WATCHQUAGGA_H #define FRR_WATCHFRR_H
extern void watchquagga_vty_init(void); extern void watchfrr_vty_init(void);
extern pid_t integrated_write_pid; extern pid_t integrated_write_pid;
extern void integrated_write_sigchld(int status); extern void integrated_write_sigchld(int status);
#endif /* QUAGGA_WATCHQUAGGA_H */ #endif /* FRR_WATCHFRR_H */

View File

@ -1,5 +1,5 @@
/* /*
watchquagga CLI functions. watchfrr CLI functions.
Copyright (C) 2016 David Lamparter for NetDEF, Inc. Copyright (C) 2016 David Lamparter for NetDEF, Inc.
@ -26,7 +26,7 @@
#include "vty.h" #include "vty.h"
#include "command.h" #include "command.h"
#include "watchquagga.h" #include "watchfrr.h"
pid_t integrated_write_pid; pid_t integrated_write_pid;
static int integrated_result_fd; static int integrated_result_fd;
@ -35,7 +35,7 @@ DEFUN (config_write_integrated,
config_write_integrated_cmd, config_write_integrated_cmd,
"write integrated", "write integrated",
"Write running configuration to memory, network, or terminal\n" "Write running configuration to memory, network, or terminal\n"
"Write integrated all-daemon Quagga.conf file\n") "Write integrated all-daemon Frr.conf file\n")
{ {
pid_t child; pid_t child;
sigset_t oldmask, sigmask; sigset_t oldmask, sigmask;
@ -69,7 +69,7 @@ DEFUN (config_write_integrated,
/* note: the VTY won't write a command return value to vtysh; the /* note: the VTY won't write a command return value to vtysh; the
* session temporarily enters an intentional "hang" state. This is * session temporarily enters an intentional "hang" state. This is
* to make sure latency in vtysh doing the config write (several * to make sure latency in vtysh doing the config write (several
* seconds is not rare to see) does not interfere with watchquagga's * seconds is not rare to see) does not interfere with watchfrr's
* supervisor job. * supervisor job.
* *
* The fd is duplicated here so we don't need to hold a vty pointer * The fd is duplicated here so we don't need to hold a vty pointer
@ -127,7 +127,7 @@ void integrated_write_sigchld(int status)
integrated_write_pid = -1; integrated_write_pid = -1;
} }
void watchquagga_vty_init(void) void watchfrr_vty_init(void)
{ {
integrated_write_pid = -1; integrated_write_pid = -1;
install_element(ENABLE_NODE, &config_write_integrated_cmd); install_element(ENABLE_NODE, &config_write_integrated_cmd);