mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-07-26 23:23:35 +00:00
Merge pull request #41 from donaldsharp/quagga_to_frr
Quagga to frr - Rename of Quagga to FRR (FreeRangeRouting)
This commit is contained in:
commit
7d53a49360
@ -2,11 +2,11 @@
|
||||
|
||||
SUBDIRS = lib qpb fpm @ZEBRA@ @LIBRFP@ @RFPTEST@ \
|
||||
@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
|
||||
|
||||
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
|
||||
|
||||
EXTRA_DIST = aclocal.m4 SERVICES REPORTING-BUGS \
|
||||
|
24
configure.ac
24
configure.ac
@ -213,8 +213,8 @@ AC_ARG_ENABLE(ospf6d,
|
||||
AS_HELP_STRING([--disable-ospf6d], [do not build ospf6d]))
|
||||
AC_ARG_ENABLE(ldpd,
|
||||
AS_HELP_STRING([--enable-ldpd], [build ldpd]))
|
||||
AC_ARG_ENABLE(watchquagga,
|
||||
AS_HELP_STRING([--disable-watchquagga], [do not build watchquagga]))
|
||||
AC_ARG_ENABLE(watchfrr,
|
||||
AS_HELP_STRING([--disable-watchfrr], [do not build watchfrr]))
|
||||
AC_ARG_ENABLE(isisd,
|
||||
AS_HELP_STRING([--disable-isisd], [do not build isisd]))
|
||||
AC_ARG_ENABLE(pimd,
|
||||
@ -1170,12 +1170,12 @@ else
|
||||
fi
|
||||
AM_CONDITIONAL(LDPD, test "x$LDPD" = "xldpd")
|
||||
|
||||
if test "${enable_watchquagga}" = "no";then
|
||||
WATCHQUAGGA=""
|
||||
if test "${enable_watchfrr}" = "no";then
|
||||
WATCHFRR=""
|
||||
else
|
||||
WATCHQUAGGA="watchquagga"
|
||||
WATCHFRR="watchfrr"
|
||||
fi
|
||||
AM_CONDITIONAL(WATCHQUAGGA, test "x$WATCHQUAGGA" = "xwatchquagga")
|
||||
AM_CONDITIONAL(WATCHFRR, test "x$WATCHFRR" = "xwatchfrr")
|
||||
|
||||
OSPFCLIENT=""
|
||||
if test "${enable_ospfapi}" != "no";then
|
||||
@ -1250,7 +1250,7 @@ AC_SUBST(RIPNGD)
|
||||
AC_SUBST(OSPFD)
|
||||
AC_SUBST(OSPF6D)
|
||||
AC_SUBST(LDPD)
|
||||
AC_SUBST(WATCHQUAGGA)
|
||||
AC_SUBST(WATCHFRR)
|
||||
AC_SUBST(ISISD)
|
||||
AC_SUBST(PIMD)
|
||||
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(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_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_VTYSH_PATH, "$frr_statedir/zebra.vty",zebra 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(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(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)
|
||||
|
||||
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_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
|
||||
doc/Makefile ospfclient/Makefile tests/Makefile m4/Makefile
|
||||
pimd/Makefile
|
||||
@ -1629,9 +1629,9 @@ AC_CONFIG_FILES([Makefile lib/Makefile qpb/Makefile zebra/Makefile ripd/Makefile
|
||||
doc/ripngd.8
|
||||
doc/pimd.8
|
||||
doc/vtysh.1
|
||||
doc/watchquagga.8
|
||||
doc/watchfrr.8
|
||||
doc/zebra.8
|
||||
doc/quagga.1
|
||||
doc/frr.1
|
||||
pkgsrc/bgpd.sh pkgsrc/ospf6d.sh pkgsrc/ospfd.sh
|
||||
pkgsrc/ripd.sh pkgsrc/ripngd.sh pkgsrc/zebra.sh])
|
||||
|
||||
|
@ -18,7 +18,7 @@
|
||||
# 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.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
zebra=no
|
||||
|
@ -14,5 +14,5 @@ isisd_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.
|
||||
watchquagga_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_enable=yes
|
||||
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
50
debian/README.Debian
vendored
@ -2,34 +2,34 @@
|
||||
==================
|
||||
|
||||
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
|
||||
dpkg --get-selections | grep 'hold$'
|
||||
|
||||
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
|
||||
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/
|
||||
> Quagga is a routing software suite, providing implementations of OSPFv2,
|
||||
http://www.freerangerouting.net/
|
||||
> Frr is a routing software suite, providing implementations of OSPFv2,
|
||||
> 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
|
||||
> 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
|
||||
> changes made to the zebra.org tree. Ultimately, this tree hopes to revitalise
|
||||
> 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
|
||||
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.
|
||||
|
||||
-- Christian Hammers <ch@debian.org>, Jul/Aug 2003
|
||||
@ -37,16 +37,16 @@ orphaned zebra.
|
||||
|
||||
* 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
|
||||
to provide crypto support for SNMPv3 among others.
|
||||
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.gnu.org/licenses/gpl-faq.html#GPLIncompatibleLibs
|
||||
Updating the licence to explecitly allow linking against OpenSSL
|
||||
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
|
||||
version of NetSNMP without OpenSSL or convincing the NetSNMP people
|
||||
to change to GnuTLS are maybe good solutions but not reachable
|
||||
@ -55,17 +55,17 @@ during the last days before the Sarge release :-(
|
||||
*BUT*
|
||||
|
||||
It is allowed by the used licence mix that you fetch the sources and
|
||||
build Quagga yourself with SNMP with
|
||||
<remove the "grep ^smux" block at the end of debian/quagga.preinst>
|
||||
build Frr yourself with SNMP with
|
||||
<remove the "grep ^smux" block at the end of debian/frr.preinst>
|
||||
# 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.
|
||||
|
||||
|
||||
* 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
|
||||
<daemon>=<yes|no|priority>
|
||||
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.
|
||||
|
||||
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
|
||||
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
|
||||
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'
|
||||
means 'start all'
|
||||
@ -96,15 +96,15 @@ into the kernel.
|
||||
=====================================================================
|
||||
|
||||
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_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:
|
||||
===========================
|
||||
|
||||
Check /etc/pam.d/quagga, it probably denies access to your user. The passwords
|
||||
configured in /etc/quagga/Quagga.conf are only for telnet access.
|
||||
Check /etc/pam.d/frr, it probably denies access to your user. The passwords
|
||||
configured in /etc/frr/Frr.conf are only for telnet access.
|
||||
|
||||
|
16
debian/README.Maintainer
vendored
16
debian/README.Maintainer
vendored
@ -4,19 +4,19 @@
|
||||
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
|
||||
/usr/bin/vtysh
|
||||
|
||||
Files that got an -pj suffix
|
||||
/etc/default/zebra -> /etc/quagga/debian.conf
|
||||
/etc/init.d/zebra -> /etc/init.d/quagga
|
||||
/etc/zebra/ -> /etc/quagga/
|
||||
/usr/share/doc/zebra/ -> /usr/share/doc/quagga/
|
||||
/var/log/zebra/ -> /var/log/quagga/
|
||||
/var/run/ -> /var/run/quagga/
|
||||
/etc/default/zebra -> /etc/frr/debian.conf
|
||||
/etc/init.d/zebra -> /etc/init.d/frr
|
||||
/etc/zebra/ -> /etc/frr/
|
||||
/usr/share/doc/zebra/ -> /usr/share/doc/frr/
|
||||
/var/log/zebra/ -> /var/log/frr/
|
||||
/var/run/ -> /var/run/frr/
|
||||
|
||||
Files that were moved
|
||||
/usr/sbin/* -> /usr/lib/quagga/
|
||||
/usr/sbin/* -> /usr/lib/frr/
|
||||
|
4
debian/changelog
vendored
4
debian/changelog
vendored
@ -1,3 +1,7 @@
|
||||
frr (2.0) Released; urgency=medium
|
||||
|
||||
* Switchover to FRR
|
||||
|
||||
quagga (0.99.24+cl3u5) RELEASED; urgency=medium
|
||||
|
||||
* Closes: CM-12846 - Resolve Memory leaks in 'show ip bgp neighbor json'
|
||||
|
30
debian/control
vendored
30
debian/control
vendored
@ -1,14 +1,14 @@
|
||||
Source: quagga
|
||||
Source: frr
|
||||
Section: net
|
||||
Priority: optional
|
||||
Maintainer: Christian Hammers <ch@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
|
||||
Standards-Version: 3.9.6
|
||||
Homepage: http://www.quagga.net/
|
||||
Homepage: http://www.frr.net/
|
||||
XS-Testsuite: autopkgtest
|
||||
|
||||
Package: quagga
|
||||
Package: frr
|
||||
Architecture: any
|
||||
Depends: ${shlibs:Depends}, logrotate (>= 3.2-11), iproute, ${misc:Depends}
|
||||
Pre-Depends: adduser
|
||||
@ -16,37 +16,33 @@ Conflicts: zebra, zebra-pj
|
||||
Replaces: zebra, zebra-pj
|
||||
Suggests: snmpd
|
||||
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
|
||||
well as the IPv6 versions of these.
|
||||
.
|
||||
As the precessor Zebra has been considered orphaned, the Quagga project
|
||||
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
|
||||
Frr uses threading if the kernel supports it, but can also run on
|
||||
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
|
||||
a Route Reflector.
|
||||
|
||||
Package: quagga-dbg
|
||||
Package: frr-dbg
|
||||
Architecture: any
|
||||
Depends: ${shlibs:Depends}, ${misc:Depends}, quagga (= ${binary:Version})
|
||||
Depends: ${shlibs:Depends}, ${misc:Depends}, frr (= ${binary:Version})
|
||||
Priority: extra
|
||||
Section: debug
|
||||
Description: BGP/OSPF/RIP routing daemon (debug symbols)
|
||||
This package provides debugging symbols for all binary packages built from
|
||||
quagga source package. It's highly recommended to have this package installed
|
||||
before reporting any Quagga crashes to either Quagga developers or Debian
|
||||
frr source package. It's highly recommended to have this package installed
|
||||
before reporting any Frr crashes to either Frr developers or Debian
|
||||
package maintainers.
|
||||
|
||||
Package: quagga-doc
|
||||
Package: frr-doc
|
||||
Section: net
|
||||
Architecture: all
|
||||
Depends: ${misc:Depends}
|
||||
Suggests: quagga
|
||||
Description: documentation files for quagga
|
||||
This package includes info files for quagga, a free software which manages
|
||||
Suggests: frr
|
||||
Description: documentation files for frr
|
||||
This package includes info files for frr, a free software which manages
|
||||
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.
|
||||
|
6
debian/copyright
vendored
6
debian/copyright
vendored
@ -1,7 +1,7 @@
|
||||
Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
|
||||
Upstream-Name: Quagga
|
||||
Upstream-Contact: maintainers@quagga.net, security@quagga.net
|
||||
Source: http://www.quagga.net/
|
||||
Upstream-Name: Frr
|
||||
Upstream-Contact: maintainers@freerangerouting.net, security@freerangerouting.net
|
||||
Source: http://www.freerangerouting.net/
|
||||
|
||||
Files: *
|
||||
Copyright: 1996-2003 by the original Zebra authors:
|
||||
|
1
debian/frr-doc.info
vendored
Normal file
1
debian/frr-doc.info
vendored
Normal file
@ -0,0 +1 @@
|
||||
doc/frr.info*
|
1
debian/frr-doc.lintian-overrides
vendored
Normal file
1
debian/frr-doc.lintian-overrides
vendored
Normal file
@ -0,0 +1 @@
|
||||
frr-doc: wrong-section-according-to-package-name frr-doc => doc
|
2
debian/frr.conf
vendored
Normal file
2
debian/frr.conf
vendored
Normal 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
7
debian/frr.dirs
vendored
Normal 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/
|
0
debian/quagga.docs → debian/frr.docs
vendored
0
debian/quagga.docs → debian/frr.docs
vendored
16
debian/quagga.install → debian/frr.install
vendored
16
debian/quagga.install → debian/frr.install
vendored
@ -1,12 +1,12 @@
|
||||
etc/quagga/
|
||||
etc/frr/
|
||||
usr/bin/vtysh
|
||||
usr/include/quagga/
|
||||
usr/include/frr/
|
||||
usr/lib/
|
||||
tools/quagga-reload.py usr/lib/quagga/
|
||||
tools/quagga usr/lib/quagga
|
||||
usr/share/doc/quagga/
|
||||
tools/frr-reload.py usr/lib/frr/
|
||||
tools/frr usr/lib/frr
|
||||
usr/share/doc/frr/
|
||||
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/bgpd.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/zebra.8
|
||||
usr/share/man/man8/isisd.8
|
||||
usr/share/man/man8/watchquagga.8
|
||||
usr/share/man/man8/watchfrr.8
|
||||
usr/share/snmp/mibs/
|
||||
cumulus/etc/* etc/
|
||||
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
4
debian/frr.lintian-overrides
vendored
Normal 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
|
@ -1,15 +1,15 @@
|
||||
/var/log/quagga/*.log {
|
||||
/var/log/frr/*.log {
|
||||
size 500k
|
||||
sharedscripts
|
||||
missingok
|
||||
compress
|
||||
rotate 14
|
||||
create 640 quagga quaggavty
|
||||
create 640 frr frrvty
|
||||
|
||||
postrotate
|
||||
for i in zebra bgpd ripd ospfd ripngd ospf6d isisd pimd; do
|
||||
if [ -e /var/run/quagga/$i.pid ] ; then
|
||||
kill -USR1 `cat /var/run/quagga/$i.pid`
|
||||
if [ -e /var/run/frr/$i.pid ] ; then
|
||||
kill -USR1 `cat /var/run/frr/$i.pid`
|
||||
fi
|
||||
|
||||
done
|
2
debian/quagga.manpages → debian/frr.manpages
vendored
2
debian/quagga.manpages → debian/frr.manpages
vendored
@ -6,4 +6,4 @@ doc/ripngd.8
|
||||
doc/vtysh.1
|
||||
doc/zebra.8
|
||||
doc/isisd.8
|
||||
doc/watchquagga.8
|
||||
doc/watchfrr.8
|
2
debian/quagga.pam → debian/frr.pam
vendored
2
debian/quagga.pam → debian/frr.pam
vendored
@ -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.
|
||||
auth sufficient pam_permit.so
|
41
debian/frr.postinst
vendored
Normal file
41
debian/frr.postinst
vendored
Normal 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#
|
||||
|
4
debian/quagga.postrm → debian/frr.postrm
vendored
4
debian/quagga.postrm → debian/frr.postrm
vendored
@ -5,8 +5,8 @@ ${DEBIAN_SCRIPT_TRACE:+ echo "#42#DEBUG# RUNNING $0 $*"}
|
||||
# set -u not because of debhelper
|
||||
|
||||
if [ "$1" = "purge" ]; then
|
||||
rm -rf /etc/quagga /var/run/quagga /var/log/quagga
|
||||
userdel quagga >/dev/null 2>&1 || true
|
||||
rm -rf /etc/frr /var/run/frr /var/log/frr
|
||||
userdel frr >/dev/null 2>&1 || true
|
||||
fi
|
||||
|
||||
#DEBHELPER#
|
54
debian/quagga.preinst → debian/frr.preinst
vendored
54
debian/quagga.preinst → debian/frr.preinst
vendored
@ -5,73 +5,73 @@ ${DEBIAN_SCRIPT_TRACE:+ echo "#42#DEBUG# RUNNING $0 $*"}
|
||||
set -e
|
||||
set -u
|
||||
|
||||
# creating quaggavty group if it isn't already there
|
||||
if ! getent group quaggavty >/dev/null; then
|
||||
addgroup --system quaggavty >/dev/null
|
||||
# creating frrvty group if it isn't already there
|
||||
if ! getent group frrvty >/dev/null; then
|
||||
addgroup --system frrvty >/dev/null
|
||||
fi
|
||||
|
||||
# creating quagga group if it isn't already there
|
||||
if ! getent group quagga >/dev/null; then
|
||||
addgroup --system quagga >/dev/null
|
||||
# creating frr group if it isn't already there
|
||||
if ! getent group frr >/dev/null; then
|
||||
addgroup --system frr >/dev/null
|
||||
fi
|
||||
|
||||
# creating quagga user if he isn't already there
|
||||
if ! getent passwd quagga >/dev/null; then
|
||||
# creating frr user if he isn't already there
|
||||
if ! getent passwd frr >/dev/null; then
|
||||
adduser \
|
||||
--system \
|
||||
--ingroup quagga \
|
||||
--home /var/run/quagga/ \
|
||||
--gecos "Quagga routing suite" \
|
||||
--ingroup frr \
|
||||
--home /var/run/frr/ \
|
||||
--gecos "Frr routing suite" \
|
||||
--shell /bin/false \
|
||||
quagga >/dev/null
|
||||
frr >/dev/null
|
||||
fi
|
||||
|
||||
# We may be installing over an older version of
|
||||
# quagga and as such we need to intelligently
|
||||
# check to see if the quagga user is in the quaggavty
|
||||
# frr and as such we need to intelligently
|
||||
# check to see if the frr user is in the frrvty
|
||||
# group.
|
||||
if ! /usr/bin/id quagga | grep &>/dev/null 'quaggavty'; then
|
||||
usermod -a -G quaggavty quagga >/dev/null
|
||||
if ! /usr/bin/id frr | grep &>/dev/null 'frrvty'; then
|
||||
usermod -a -G frrvty frr >/dev/null
|
||||
fi
|
||||
|
||||
# Do not change permissions when upgrading as it would violate policy.
|
||||
if [ "$1" = "install" ]; then
|
||||
# Logfiles are group readable in case users were put into the quagga group.
|
||||
d=/var/log/quagga/
|
||||
# Logfiles are group readable in case users were put into the frr group.
|
||||
d=/var/log/frr/
|
||||
mkdir -p $d
|
||||
chown -R quagga:quagga $d
|
||||
chown -R frr:frr $d
|
||||
chmod u=rwx,go=rx $d
|
||||
find $d -type f -print0 | xargs -0 --no-run-if-empty chmod u=rw,g=r,o=
|
||||
|
||||
# Strict permissions for the sockets.
|
||||
d=/var/run/quagga/
|
||||
d=/var/run/frr/
|
||||
mkdir -p $d
|
||||
chown -R quagga:quagga $d
|
||||
chown -R frr:frr $d
|
||||
chmod u=rwx,go=rx $d
|
||||
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
|
||||
d=/etc/quagga/
|
||||
d=/etc/frr/
|
||||
mkdir -p $d
|
||||
chown quagga:quaggavty $d
|
||||
chown frr:frrvty $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=
|
||||
|
||||
# Exceptions for vtysh.
|
||||
f=$d/vtysh.conf
|
||||
if [ -f $f ]; then
|
||||
chown quagga:quaggavty $f
|
||||
chown frr:frrvty $f
|
||||
chmod u=rw,g=r,o= $f
|
||||
fi
|
||||
|
||||
# Exceptions for vtysh.
|
||||
f=$d/Quagga.conf
|
||||
f=$d/Frr.conf
|
||||
if [ -f $d/Zebra.conf ]; then
|
||||
mv $d/Zebra.conf $f
|
||||
fi
|
||||
if [ -f $f ]; then
|
||||
chown quagga:quaggavty $f
|
||||
chown frr:frrvty $f
|
||||
chmod u=rw,g=r,o= $f
|
||||
fi
|
||||
fi
|
2
debian/quagga.prerm → debian/frr.prerm
vendored
2
debian/quagga.prerm → debian/frr.prerm
vendored
@ -15,7 +15,7 @@ case $1 in
|
||||
;;
|
||||
|
||||
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.
|
||||
exit 1
|
||||
;;
|
1
debian/quagga-doc.info
vendored
1
debian/quagga-doc.info
vendored
@ -1 +0,0 @@
|
||||
doc/quagga.info*
|
1
debian/quagga-doc.lintian-overrides
vendored
1
debian/quagga-doc.lintian-overrides
vendored
@ -1 +0,0 @@
|
||||
quagga-doc: wrong-section-according-to-package-name quagga-doc => doc
|
2
debian/quagga.conf
vendored
2
debian/quagga.conf
vendored
@ -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
7
debian/quagga.dirs
vendored
@ -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/
|
4
debian/quagga.lintian-overrides
vendored
4
debian/quagga.lintian-overrides
vendored
@ -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
|
41
debian/quagga.postinst
vendored
41
debian/quagga.postinst
vendored
@ -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
38
debian/rules
vendored
@ -20,10 +20,10 @@ MAKEFLAGS += -j$(DEBIAN_JOBS)
|
||||
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:
|
||||
# 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
|
||||
# IPCTL_FORWARDING is an undefined symbol which is not very helpful.
|
||||
@if ! [ -d /proc/1 ]; then \
|
||||
@ -33,18 +33,18 @@ override_dh_auto_configure:
|
||||
|
||||
if ! [ -e config.status ]; then \
|
||||
dh_auto_configure -- \
|
||||
--enable-exampledir=/usr/share/doc/quagga/examples/ \
|
||||
--localstatedir=/var/run/quagga \
|
||||
--sbindir=/usr/lib/quagga \
|
||||
--sysconfdir=/etc/quagga \
|
||||
--enable-exampledir=/usr/share/doc/frr/examples/ \
|
||||
--localstatedir=/var/run/frr \
|
||||
--sbindir=/usr/lib/frr \
|
||||
--sysconfdir=/etc/frr \
|
||||
$(USE_SNMP) \
|
||||
--enable-ospfapi=yes \
|
||||
--enable-vtysh=yes \
|
||||
--enable-isisd=yes \
|
||||
--enable-multipath=256 \
|
||||
--enable-user=quagga \
|
||||
--enable-group=quagga \
|
||||
--enable-vty-group=quaggavty \
|
||||
--enable-user=frr \
|
||||
--enable-group=frr \
|
||||
--enable-vty-group=frrvty \
|
||||
--enable-configfile-mask=0640 \
|
||||
--enable-logfile-mask=0640 \
|
||||
--enable-werror \
|
||||
@ -53,7 +53,7 @@ override_dh_auto_configure:
|
||||
--enable-systemd=yes \
|
||||
--enable-poll=yes \
|
||||
--enable-cumulus=yes \
|
||||
--enable-pimd=no \
|
||||
--enable-pimd=yes \
|
||||
--enable-dependency-tracking \
|
||||
--enable-bgp-vnc=no; \
|
||||
fi
|
||||
@ -66,11 +66,11 @@ override_dh_auto_build:
|
||||
|
||||
# doc/ is a bit crazy
|
||||
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
|
||||
rm -vf doc/quagga.info
|
||||
dh_auto_build -- -C doc quagga.info
|
||||
rm -vf doc/quagga.info.html*
|
||||
rm -vf doc/frr.info
|
||||
dh_auto_build -- -C doc frr.info
|
||||
rm -vf doc/frr.info.html*
|
||||
|
||||
override_dh_auto_test:
|
||||
|
||||
@ -81,18 +81,18 @@ override_dh_auto_install:
|
||||
rm -f debian/tmp/usr/share/info/dir*
|
||||
|
||||
# install config files
|
||||
mkdir -p debian/tmp/etc/quagga/
|
||||
perl -pi -e 's#^!log file #!log file /var/log/quagga/#' debian/tmp/usr/share/doc/quagga/examples/*sample*
|
||||
mkdir -p debian/tmp/etc/frr/
|
||||
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
|
||||
|
||||
# cleaning .la files
|
||||
sed -i "/dependency_libs/ s/'.*'/''/" debian/tmp/usr/lib/*.la
|
||||
|
||||
override_dh_systemd_start:
|
||||
dh_systemd_start quagga.service
|
||||
dh_systemd_start frr.service
|
||||
|
||||
override_dh_systemd_enable:
|
||||
dh_systemd_enable quagga.service
|
||||
dh_systemd_enable frr.service
|
||||
|
||||
|
2
debian/tests/control
vendored
2
debian/tests/control
vendored
@ -1,3 +1,3 @@
|
||||
Tests: daemons
|
||||
Depends: quagga
|
||||
Depends: frr
|
||||
Restrictions: needs-root
|
||||
|
10
debian/tests/daemons
vendored
10
debian/tests/daemons
vendored
@ -1,21 +1,21 @@
|
||||
#!/bin/bash
|
||||
#---------------
|
||||
# Testing quagga
|
||||
# Testing frr
|
||||
#---------------
|
||||
set -e
|
||||
|
||||
# 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")
|
||||
|
||||
for daemon in "${DAEMONS[@]}"
|
||||
do
|
||||
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
|
||||
|
||||
# reload quagga
|
||||
/etc/init.d/quagga restart > /dev/null 2>&1
|
||||
# reload frr
|
||||
/etc/init.d/frr restart > /dev/null 2>&1
|
||||
|
||||
# check daemons
|
||||
for daemon in "${DAEMONS[@]}"
|
||||
|
2
debian/watch
vendored
2
debian/watch
vendored
@ -4,5 +4,5 @@
|
||||
# Site Directory Pattern Version Script
|
||||
version=3
|
||||
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
|
||||
|
4
debian/watchfrr.rc
vendored
Normal file
4
debian/watchfrr.rc
vendored
Normal 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
|
4
debian/watchquagga.rc
vendored
4
debian/watchquagga.rc
vendored
@ -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
12
doc/.gitignore
vendored
@ -2,17 +2,17 @@ Makefile
|
||||
Makefile.in
|
||||
mdate-sh
|
||||
draft-zebra-00.txt
|
||||
quagga.info-*
|
||||
frr.info-*
|
||||
zebra.html
|
||||
defines.texi
|
||||
version.texi
|
||||
texinfo.tex
|
||||
quagga.html
|
||||
quagga.info
|
||||
frr.html
|
||||
frr.info
|
||||
*.pdf
|
||||
*.eps
|
||||
quagga.ps
|
||||
quagga.dvi
|
||||
frr.ps
|
||||
frr.dvi
|
||||
stamp-vti
|
||||
.nfs*
|
||||
*.aux
|
||||
@ -28,6 +28,8 @@ stamp-vti
|
||||
*.toc
|
||||
*.tp
|
||||
*.vr
|
||||
*.8
|
||||
*.1
|
||||
.arch-inventory
|
||||
.arch-ids
|
||||
*~
|
||||
|
@ -7,7 +7,7 @@
|
||||
#
|
||||
# Here we use 'convert' from the well known 'ImageMagick' package
|
||||
# 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.
|
||||
#
|
||||
@ -20,7 +20,7 @@ PNGTOPDF = $(PNGTOEPS)
|
||||
EPSTOPDF = epstopdf
|
||||
|
||||
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-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)
|
||||
|
||||
# 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
|
||||
# provided by automake. If you are an automake wizard, please feel free to
|
||||
# compact it somehow.
|
||||
@ -48,16 +48,16 @@ figures_txt = $(figures_names_parts:%=fig%.txt)
|
||||
# Built from defines.texi.in
|
||||
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
|
||||
# because it cant just work from the png's directly it seems - contrary
|
||||
# to the documentation...
|
||||
quagga.pdf: $(info_TEXINFOS) $(figures_pdf) $(quagga_TEXINFOS)
|
||||
frr.pdf: $(info_TEXINFOS) $(figures_pdf) $(frr_TEXINFOS)
|
||||
$(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 \
|
||||
install.texi ipv6.texi kernel.texi main.texi ospf6d.texi ospfd.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:
|
||||
$(DIATOPNG) "$@" $<
|
||||
|
||||
man_MANS = quagga.1
|
||||
man_MANS = frr.1
|
||||
|
||||
if PIMD
|
||||
man_MANS += pimd.8
|
||||
@ -115,8 +115,8 @@ if VTYSH
|
||||
man_MANS += vtysh.1
|
||||
endif
|
||||
|
||||
if WATCHQUAGGA
|
||||
man_MANS += watchquagga.8
|
||||
if WATCHFRR
|
||||
man_MANS += watchfrr.8
|
||||
endif
|
||||
|
||||
if ZEBRA
|
||||
@ -135,9 +135,9 @@ EXTRA_DIST = BGP-TypeCode draft-zebra-00.ms draft-zebra-00.txt \
|
||||
ripngd.8.in \
|
||||
pimd.8.in \
|
||||
vtysh.1.in \
|
||||
watchquagga.8.in \
|
||||
watchfrr.8.in \
|
||||
zebra.8.in \
|
||||
quagga.1.in \
|
||||
frr.1.in \
|
||||
\
|
||||
mpls/ChangeLog.opaque.txt mpls/cli_summary.txt \
|
||||
mpls/opaque_lsa.txt mpls/ospfd.conf \
|
||||
|
@ -110,7 +110,7 @@ with severity @code{errors}.
|
||||
If you want to log into a file, please specify @code{filename} as
|
||||
in this example:
|
||||
@example
|
||||
log file /var/log/quagga/bgpd.log informational
|
||||
log file /var/log/frr/bgpd.log informational
|
||||
@end example
|
||||
If the optional second argument specifying the
|
||||
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
|
||||
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
|
||||
it is important to delete the file after reporting the crash information.
|
||||
@end deffn
|
||||
|
@ -1,9 +1,9 @@
|
||||
@c -*-texinfo-*-
|
||||
@c This is part of the Quagga Manual.
|
||||
@c This is part of the Frr Manual.
|
||||
@c @value{COPYRIGHT_STR}
|
||||
@c Portions:
|
||||
@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
|
||||
@chapter BGP
|
||||
|
||||
@ -114,7 +114,7 @@ This command set distance value to
|
||||
@node 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
|
||||
@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
|
||||
have proven to be hard to understand, at least historically, and may still
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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
|
||||
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
|
||||
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.
|
||||
That number is often low enough to not cause any issues, but where there are
|
||||
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
|
||||
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.
|
||||
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
|
||||
overridden by setting @ref{bgp bestpath compare-routerid}, and see also
|
||||
@ref{BGP decision process}, .
|
||||
@ -480,7 +480,7 @@ with MED may be determined largely by the order that routes were received
|
||||
in.
|
||||
|
||||
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
|
||||
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
|
||||
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
|
||||
multicast capabilitie and remote router has unicast capability. In
|
||||
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.
|
||||
|
||||
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
|
||||
``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
|
||||
|
||||
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
|
||||
|
||||
Community attribute handling is also different. If there is no
|
||||
@ -1615,7 +1615,7 @@ router bgp 1
|
||||
@end example
|
||||
|
||||
@deffn {Command} {bgp config-type zebra} {}
|
||||
Quagga style BGP configuration. This is default.
|
||||
Frr style BGP configuration. This is default.
|
||||
@end deffn
|
||||
|
||||
@node BGP instance and view
|
||||
|
Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 49 KiB |
@ -2,7 +2,7 @@
|
||||
@comment node-name, next, previous, up
|
||||
@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
|
||||
defined, it can be applied in any direction.
|
||||
|
||||
|
@ -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
|
||||
quagga \- a systemd interaction script
|
||||
frr \- a systemd interaction script
|
||||
.SH SYNOPSIS
|
||||
.B quagga
|
||||
.B frr
|
||||
[
|
||||
.B start
|
||||
]
|
||||
.br
|
||||
.B quagga
|
||||
.B frr
|
||||
[
|
||||
.B stop
|
||||
]
|
||||
.br
|
||||
.B quagga
|
||||
.B frr
|
||||
[
|
||||
.B reload
|
||||
]
|
||||
.br
|
||||
.B quagga
|
||||
.B frr
|
||||
[
|
||||
.B restart
|
||||
]
|
||||
.br
|
||||
.B quagga
|
||||
.B frr
|
||||
[
|
||||
.B status
|
||||
]
|
||||
@ -34,12 +34,12 @@ is a systemd interaction script for the
|
||||
routing engine.
|
||||
.SH OPTIONS
|
||||
Options available for the
|
||||
.B quagga
|
||||
.B frr
|
||||
command:
|
||||
.IP start
|
||||
Start enabled Quagga daemons
|
||||
Start enabled Frr daemons
|
||||
.IP stop
|
||||
Stop enabled Quagga daemons
|
||||
Stop enabled Frr daemons
|
||||
.IP reload
|
||||
Reload modified configuration files
|
||||
.IP restart
|
||||
@ -55,7 +55,7 @@ Status of all the daemons
|
||||
.BR isisd (8),
|
||||
.BR zebra (8)
|
||||
.SH BUGS
|
||||
.B quagga
|
||||
.B frr
|
||||
eats bugs for breakfast. If you have food for the maintainers try
|
||||
.BI @PACKAGE_BUGREPORT@
|
||||
.SH AUTHORS
|
@ -4,10 +4,10 @@
|
||||
@include defines.texi
|
||||
|
||||
@c %**start of header
|
||||
@setfilename quagga.info
|
||||
@setfilename frr.info
|
||||
@c Set variables - sourced from 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 automake will automatically generate version.texi
|
||||
@ -38,26 +38,26 @@ approved by Kunihiro Ishiguro.
|
||||
@c Info entry
|
||||
@dircategory Routing Software:
|
||||
@direntry
|
||||
* @value{PACKAGE_NAME}: (quagga). The Quagga Software Routing Suite
|
||||
* @value{PACKAGE_NAME}: (frr). The Frr Suite
|
||||
@end direntry
|
||||
|
||||
@c @smallbook
|
||||
|
||||
@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.
|
||||
|
||||
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}.
|
||||
|
||||
@insertcopying
|
||||
@end ifinfo
|
||||
|
||||
@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 @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}
|
||||
@author @value{AUTHORS}
|
||||
|
||||
@ -70,12 +70,12 @@ Version @value{VERSION}.
|
||||
|
||||
@ifnottex
|
||||
@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
|
||||
for @value{PACKAGE_STRING}. @uref{http://www.quagga.net,,Quagga} is a fork of
|
||||
@uref{http://www.zebra.org,,GNU Zebra}.
|
||||
for @value{PACKAGE_STRING}. @uref{http://www.freerangerouting.net,,Frr} is a fork of
|
||||
@uref{http://www.quagga.net,,Quagga}.
|
||||
|
||||
@insertcopying
|
||||
@end ifnottex
|
||||
@ -91,7 +91,7 @@ for @value{PACKAGE_STRING}. @uref{http://www.quagga.net,,Quagga} is a fork of
|
||||
* OSPFv3::
|
||||
* ISIS::
|
||||
* BGP::
|
||||
* Configuring Quagga as a Route Server::
|
||||
* Configuring Frr as a Route Server::
|
||||
* VNC and VNC-GW::
|
||||
* VTY shell::
|
||||
* Filtering::
|
@ -1,11 +1,11 @@
|
||||
@node Installation
|
||||
@chapter Installation
|
||||
|
||||
@cindex How to install Quagga
|
||||
@cindex How to install Frr
|
||||
@cindex Installation
|
||||
@cindex Installing Quagga
|
||||
@cindex Installing Frr
|
||||
@cindex Building the system
|
||||
@cindex Making Quagga
|
||||
@cindex Making Frr
|
||||
|
||||
There are three steps for installing the software: configuration,
|
||||
compilation, and installation.
|
||||
@ -16,7 +16,7 @@ compilation, and installation.
|
||||
* Install the Software::
|
||||
@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:
|
||||
|
||||
@example
|
||||
@ -43,7 +43,7 @@ commands:
|
||||
@cindex Distribution configuration
|
||||
@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
|
||||
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
|
||||
@subsection Least-Privilege support
|
||||
|
||||
@cindex Quagga Least-Privileges
|
||||
@cindex Quagga Privileges
|
||||
@cindex Frr Least-Privileges
|
||||
@cindex Frr Privileges
|
||||
|
||||
Additionally, you may configure zebra to drop its elevated privileges
|
||||
shortly after startup and switch to another user. The configure script will
|
||||
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
|
||||
@item --enable-user=@var{user}
|
||||
@ -145,29 +145,29 @@ delegate this group to individual users, or to run vtysh setgid to
|
||||
this group.
|
||||
@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
|
||||
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
|
||||
configuration, to the configuration directory (see --sysconfdir).
|
||||
|
||||
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
|
||||
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.
|
||||
|
||||
@node Linux notes
|
||||
@subsection Linux Notes
|
||||
|
||||
@cindex Configuring Quagga
|
||||
@cindex Configuring Frr
|
||||
@cindex Building on Linux boxes
|
||||
@cindex Linux configurations
|
||||
|
||||
There are several options available only to @sc{gnu}/Linux systems:
|
||||
@footnote{@sc{gnu}/Linux has very flexible kernel configuration features}. If
|
||||
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.
|
||||
|
||||
@table @var
|
||||
@ -190,7 +190,7 @@ This option should be specified when you use @command{ripd} (@pxref{RIP}) or
|
||||
@end table
|
||||
|
||||
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
|
||||
these libraries will not be needed when you uses @sc{gnu} C library 2.1
|
||||
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
|
||||
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}.
|
||||
|
||||
@example
|
||||
@ -253,7 +253,7 @@ prompt: @command{make install}.
|
||||
%
|
||||
@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
|
||||
them. Please add the following entries to @file{/etc/services}.
|
||||
|
||||
|
@ -1,14 +1,14 @@
|
||||
@node 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
|
||||
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
|
||||
auto configuration}. To do it, the router must send router advertisement
|
||||
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.
|
||||
|
||||
@menu
|
||||
|
@ -31,7 +31,7 @@ information.
|
||||
@item netlink
|
||||
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 between kernel and Quagga possible, similar to a routing
|
||||
communication between kernel and Frr possible, similar to a routing
|
||||
socket on BSD systems.
|
||||
|
||||
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
|
||||
communication is done by reading/writing over netlink socket.
|
||||
|
||||
After the kernel configuration, please reconfigure and rebuild Quagga.
|
||||
You can use netlink as a dynamic routing update channel between Quagga
|
||||
After the kernel configuration, please reconfigure and rebuild Frr.
|
||||
You can use netlink as a dynamic routing update channel between Frr
|
||||
and the kernel.
|
||||
@end table
|
||||
|
@ -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
|
||||
```
|
||||
|
||||
6 - Edit /etc/quagga/ospfd.conf:
|
||||
6 - Edit /etc/frr/ospfd.conf:
|
||||
```
|
||||
router ospf
|
||||
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 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
|
||||
```
|
||||
|
||||
6 - Edit /etc/quagga/ospfd.conf:
|
||||
6 - Edit /etc/frr/ospfd.conf:
|
||||
```
|
||||
router ospf
|
||||
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 sent
|
||||
|
@ -258,7 +258,7 @@ addresses but unicast addresses.
|
||||
This table is fully separate from the default unicast table. However,
|
||||
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
|
||||
unicast topology!
|
||||
|
||||
@ -330,7 +330,7 @@ Multicast RIB instead of the Unicast RIB.
|
||||
@node zebra Route Filtering
|
||||
@section zebra Route Filtering
|
||||
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
|
||||
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
|
||||
|
||||
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.
|
||||
|
||||
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 computes the best route across protocols for each prefix. This
|
||||
latter information makes up the Forwarding Information Base
|
||||
(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
|
||||
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
|
||||
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.
|
||||
|
||||
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
|
||||
being the default.
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
0. Introduction
|
||||
|
||||
This is the design specification for next hop tracking feature in
|
||||
Quagga.
|
||||
Frr.
|
||||
|
||||
1. Background
|
||||
|
||||
@ -259,7 +259,7 @@ rnh table:
|
||||
|
||||
5. User interface changes
|
||||
|
||||
quagga# show ip nht
|
||||
frr# show ip nht
|
||||
3.3.3.3
|
||||
resolved via kernel
|
||||
via 11.0.0.6, swp1
|
||||
@ -277,7 +277,7 @@ quagga# show ip nht
|
||||
via 10.0.1.2, eth0
|
||||
Client list: bgp(fd 12)
|
||||
|
||||
quagga# show ip bgp nexthop
|
||||
frr# show ip bgp nexthop
|
||||
Current BGP nexthop cache:
|
||||
3.3.3.3 valid [IGP metric 0], #paths 3
|
||||
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
|
||||
Last update: Wed Oct 16 04:43:47 2013
|
||||
|
||||
quagga# show ipv6 nht
|
||||
quagga# show ip bgp nexthop detail
|
||||
frr# show ipv6 nht
|
||||
frr# show ip bgp nexthop detail
|
||||
|
||||
quagga# debug bgp nht
|
||||
quagga# debug zebra nht
|
||||
frr# debug bgp nht
|
||||
frr# debug zebra nht
|
||||
|
||||
6. Sample test cases
|
||||
|
||||
|
@ -77,7 +77,7 @@ which still can reach the backbone - this restriction exists primarily
|
||||
to ensure routing-loops are avoided.
|
||||
|
||||
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
|
||||
route via non-backbone areas as a last resort when, and only when,
|
||||
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
|
||||
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.
|
||||
@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
|
||||
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.
|
||||
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
|
||||
@group
|
||||
@ -784,7 +784,7 @@ of networks between the areas:
|
||||
@group
|
||||
!
|
||||
password ABCDEF
|
||||
log file /var/log/quagga/ospfd.log
|
||||
log file /var/log/frr/ospfd.log
|
||||
service advanced-vty
|
||||
!
|
||||
interface eth0
|
||||
|
@ -2,73 +2,73 @@
|
||||
@chapter 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
|
||||
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
|
||||
behavior. In addition to traditional IPv4 routing protocols, Quagga also
|
||||
RFCs}). Frr also supports special BGP Route Reflector and Route Server
|
||||
behavior. In addition to traditional IPv4 routing protocols, Frr also
|
||||
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
|
||||
quality, multi server routing engine. Quagga has an interactive user
|
||||
Frr uses an advanced software architecture to provide you with a high
|
||||
quality, multi server routing engine. Frr has an interactive user
|
||||
interface for each routing protocol and supports common client commands.
|
||||
Due to this design, you can add new protocol daemons to Quagga easily. You
|
||||
can use Quagga library as your program's client user interface.
|
||||
Due to this design, you can add new protocol daemons to Frr easily. You
|
||||
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
|
||||
* About Quagga:: Basic information about Quagga
|
||||
* System Architecture:: The Quagga system architecture
|
||||
* About Frr:: Basic information about Frr
|
||||
* System Architecture:: The Frr system architecture
|
||||
* Supported Platforms:: Supported platforms and future plans
|
||||
* Supported RFCs:: Supported RFCs
|
||||
* How to get Quagga::
|
||||
* How to get Frr::
|
||||
* Mailing List:: Mailing list information
|
||||
* Bug Reports:: Mail address for bug data
|
||||
@end menu
|
||||
|
||||
@node About Quagga
|
||||
@node About Frr
|
||||
@comment node-name, next, previous, up
|
||||
@section About Quagga
|
||||
@cindex About Quagga
|
||||
@section About Frr
|
||||
@cindex About Frr
|
||||
|
||||
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
|
||||
connect to the Internet your packet will pass many routers which have TCP/IP
|
||||
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
|
||||
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
|
||||
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.
|
||||
|
||||
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,
|
||||
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
|
||||
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
|
||||
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.
|
||||
|
||||
Traditionally, UNIX based router configuration is done by
|
||||
@command{ifconfig} and @command{route} commands. Status of routing
|
||||
table is displayed by @command{netstat} utility. Almost of these commands
|
||||
work only if the user has root privileges. Quagga has a different system
|
||||
administration method. There are two user modes in Quagga. One is normal
|
||||
work only if the user has root privileges. Frr has a different system
|
||||
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
|
||||
status, enable mode user can change system configuration. This UNIX account
|
||||
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
|
||||
currently being prepared for merging. Implementations of BFD and PIM-SSM
|
||||
(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.
|
||||
|
||||
@node System Architecture
|
||||
@ -79,7 +79,7 @@ TCP/IP routing software package.
|
||||
@cindex Software internals
|
||||
|
||||
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
|
||||
work together to build the routing table. There may be several
|
||||
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 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
|
||||
@command{zebra} configuration file. When you configure BGP network it must
|
||||
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
|
||||
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
|
||||
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.
|
||||
@ -136,18 +136,18 @@ events.
|
||||
@section Supported Platforms
|
||||
|
||||
@cindex Supported platforms
|
||||
@cindex Quagga on other systems
|
||||
@cindex Frr on 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
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
@sp 1
|
||||
@ -176,7 +176,7 @@ Mac OSX
|
||||
@end itemize
|
||||
|
||||
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:
|
||||
|
||||
@sp 1
|
||||
@ -269,39 +269,39 @@ November 1995.}
|
||||
|
||||
@end table
|
||||
|
||||
@node How to get Quagga
|
||||
@node How to get Frr
|
||||
@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
|
||||
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:
|
||||
|
||||
@uref{http://www.zebra.org/}.
|
||||
@uref{http://www.quagga.net/}.
|
||||
|
||||
@node Mailing List
|
||||
@comment node-name, next, previous, up
|
||||
@section Mailing List
|
||||
@cindex How to get in touch with Quagga
|
||||
@cindex Mailing Quagga
|
||||
@cindex How to get in touch with Frr
|
||||
@cindex Mailing Frr
|
||||
@cindex Contact information
|
||||
@cindex Mailing lists
|
||||
|
||||
There is a mailing list for discussions about Quagga. If you have any
|
||||
comments or suggestions to Quagga, please subscribe to:
|
||||
There is a mailing list for discussions about Frr. If you have any
|
||||
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:
|
||||
|
||||
@uref{http://www.quagga.net/lists.php}
|
||||
@uref{http://lists.nox.tf/lists.php}
|
||||
|
||||
@node 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:
|
||||
|
||||
@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.
|
||||
|
||||
@ -332,6 +332,6 @@ Please send your configuration file with the report. If you specify
|
||||
arguments to the configure script please note that too.
|
||||
@end itemize
|
||||
|
||||
Bug reports are very important for us to improve the quality of Quagga.
|
||||
Quagga is still in the development stage, but please don't hesitate to
|
||||
send a bug report to @uref{http://bugzilla.quagga.net}.
|
||||
Bug reports are very important for us to improve the quality of Frr.
|
||||
Frr is still in the development stage, but please don't hesitate to
|
||||
send a bug report to @uref{http://github.com/freerangerouting/frr/issues}.
|
||||
|
@ -25,8 +25,11 @@ enough to allow for future extensions to done compatibly through
|
||||
seperate commands.
|
||||
|
||||
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
|
||||
used as of Quagga 1.0.
|
||||
versions of Quagga up to and including Quagga 0.98. Version 2 was created
|
||||
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
|
||||
@appendixsubsec Zebra Protocol Header (version 0)
|
||||
|
@ -1,7 +1,7 @@
|
||||
@c -*-texinfo-*-
|
||||
@c This is part of the Quagga Manual.
|
||||
@c This is part of the Frr Manual.
|
||||
@c @value{COPYRIGHT_STR}
|
||||
@c See file quagga.texi for copying conditions.
|
||||
@c See file frr.texi for copying conditions.
|
||||
@node 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
|
||||
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
|
||||
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.
|
||||
|
||||
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}} {}
|
||||
@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
|
||||
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}.
|
||||
@end deffn
|
||||
|
||||
@ -399,7 +399,7 @@ redistribute connected [route-map MAP_NAME]
|
||||
@end example
|
||||
|
||||
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
|
||||
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.
|
||||
|
@ -1,7 +1,7 @@
|
||||
@c -*-texinfo-*-
|
||||
@c This is part of the Quagga Manual.
|
||||
@c This is part of the Frr Manual.
|
||||
@c @value{COPYRIGHT_STR}
|
||||
@c See file quagga.texi for copying conditions.
|
||||
@c See file frr.texi for copying conditions.
|
||||
@node RIPng
|
||||
@chapter RIPng
|
||||
|
||||
|
@ -1,12 +1,12 @@
|
||||
@c -*-texinfo-*-
|
||||
@c @value{COPYRIGHT_STR}
|
||||
@c See file quagga.texi for copying conditions.
|
||||
@c See file frr.texi for copying conditions.
|
||||
@c
|
||||
@c This file is a modified version of Jose Luis Rubio's TeX sources
|
||||
@c of his RS-Manual document
|
||||
|
||||
@node Configuring Quagga as a Route Server
|
||||
@chapter Configuring Quagga as a Route Server
|
||||
@node Configuring Frr as a Route Server
|
||||
@chapter Configuring Frr as a Route Server
|
||||
|
||||
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
|
||||
@ -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
|
||||
(@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
|
||||
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.
|
||||
|
||||
@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
|
||||
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)
|
||||
with normal BGP peers (A). There are some details that worth additional
|
||||
comments:
|
||||
@ -180,7 +180,7 @@ they do not hurt anybody (they can always be left empty).
|
||||
@node 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.
|
||||
|
||||
@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
|
||||
@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
|
||||
BGP attributes (as-path, next-hop and MED) of the routes announced to that
|
||||
peer are not modified.
|
||||
@ -235,7 +235,7 @@ any normal (in or out) route-map.
|
||||
@node 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, and then we will show how to use the configurations of the BGP
|
||||
routers to generate the configuration of the route server.
|
||||
|
@ -3,7 +3,7 @@
|
||||
|
||||
@acronym{SNMP,Simple Network Managing Protocol} is a widely implemented
|
||||
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
|
||||
(@cite{RFC1227}) or the AgentX protocol (@cite{RFC2741}) and make the
|
||||
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/}
|
||||
and as binary package for most Linux distributions.
|
||||
@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.
|
||||
|
||||
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
|
||||
@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
|
||||
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}
|
||||
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.
|
||||
|
||||
@example
|
||||
@ -54,7 +54,7 @@ command will enable AgentX support.
|
||||
#
|
||||
master agentx
|
||||
|
||||
/etc/quagga/ospfd.conf:
|
||||
/etc/frr/ospfd.conf:
|
||||
! ... the rest of ospfd.conf has been omitted for clarity ...
|
||||
!
|
||||
agentx
|
||||
@ -62,7 +62,7 @@ command will enable AgentX support.
|
||||
@end example
|
||||
|
||||
Upon successful connection, you should get something like this in the
|
||||
log of each Quagga daemons:
|
||||
log of each Frr daemons:
|
||||
|
||||
@example
|
||||
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
|
||||
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
|
||||
configure it through @code{/etc/snmp/quagga.conf}:
|
||||
was built. If need to configure Frr to use another transport, you can
|
||||
configure it through @code{/etc/snmp/frr.conf}:
|
||||
|
||||
@example
|
||||
/etc/snmp/quagga.conf:
|
||||
/etc/snmp/frr.conf:
|
||||
[snmpd]
|
||||
# Use a remote master agent
|
||||
agentXSocket tcp:192.168.15.12:705
|
||||
@ -91,17 +91,17 @@ configure it through @code{/etc/snmp/quagga.conf}:
|
||||
@node 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.
|
||||
|
||||
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
|
||||
number is not the one that is used in queries by clients, it is solely
|
||||
used for the intercommunication of the daemons.
|
||||
|
||||
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
|
||||
restrictions can be hard to debug.
|
||||
|
||||
@ -115,24 +115,24 @@ restrictions can be hard to debug.
|
||||
view all included .1 80
|
||||
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 ...
|
||||
!
|
||||
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
|
||||
|
||||
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:
|
||||
|
||||
@example
|
||||
snmpd[12300]: [smux_accept] accepted fd 12 from 127.0.0.1:36255
|
||||
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
|
||||
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
|
||||
|
||||
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
|
||||
(OIDs below .iso.org.dod.internet.private.enterprises)
|
||||
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
|
||||
@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}} {}
|
||||
@deffnx {Command} {no smux peer @var{oid}} {}
|
||||
@end deffn
|
||||
|
@ -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
|
||||
|
||||
@node Handling SNMP Traps
|
||||
@section Handling SNMP Traps
|
||||
|
||||
To handle snmp traps make sure your snmp setup of quagga works
|
||||
correctly as described in the quagga documentation in @xref{SNMP Support}.
|
||||
To handle snmp traps make sure your snmp setup of frr works
|
||||
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
|
||||
visible in your snmp logs with a message similar to:
|
||||
|
32
doc/vnc.texi
32
doc/vnc.texi
@ -1,7 +1,7 @@
|
||||
@c -*-texinfo-*-
|
||||
@c This is part of the Quagga Manual.
|
||||
@c This is part of the Frr Manual.
|
||||
@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
|
||||
@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
|
||||
forwarding information between NVAs and NVEs is referred to as the
|
||||
Remote Forwarder Protocol (RFP). Currently, only a simple example RFP
|
||||
is included in Quagga. Developers may use this example as a starting
|
||||
point to integrate Quagga with an RFP of their choosing, e.g.,
|
||||
is included in Frr. Developers may use this example as a starting
|
||||
point to integrate Frr with an RFP of their choosing, e.g.,
|
||||
@code{OpenFlow}. The example code includes the following sample
|
||||
configuration:
|
||||
|
||||
@ -966,7 +966,7 @@ Print the number of memory items allocated by the NVA.
|
||||
@menu
|
||||
* Mesh NVA 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 Redundant Route Reflectors Configuration::
|
||||
@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
|
||||
where VNC-GW is separated from normal NVA functions; it is equally
|
||||
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
|
||||
@center @image{fig-vnc-gw,400pt,,Quagga VNC Gateway}
|
||||
@center @image{fig-vnc-gw,400pt,,Frr VNC Gateway}
|
||||
@caption{Meshed NVEs and VNC-GWs}
|
||||
@end float
|
||||
|
||||
@ -1177,7 +1177,7 @@ router bgp 64512
|
||||
@c TBD make this its own example:
|
||||
@c
|
||||
@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 An NVA can also import unicast routes from BGP without advertising the
|
||||
@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 @end verbatim
|
||||
|
||||
@node VNC with Quagga Route Reflector Configuration
|
||||
@subsection VNC with Quagga Route Reflector Configuration
|
||||
@node VNC with Frr Route Reflector Configuration
|
||||
@subsection VNC with Frr Route Reflector Configuration
|
||||
A route reflector eliminates the need for a fully meshed NVA
|
||||
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
|
||||
NVAs @code{NVA 2}(192.168.1.101) and @code{NVA 3}
|
||||
(192.168.1.102).
|
||||
|
||||
@float Figure,fig:fig-vnc-quagga-route-reflector
|
||||
@center @image{fig-vnc-quagga-route-reflector,400pt,,Quagga Route Reflector}
|
||||
@float Figure,fig:fig-vnc-frr-route-reflector
|
||||
@center @image{fig-vnc-frr-route-reflector,400pt,,Frr Route Reflector}
|
||||
@caption{Two NVAs and a BGP Route Reflector}
|
||||
@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
|
||||
@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
|
||||
commercial router. Only the
|
||||
VNC-relevant configuration is provided.
|
||||
@ -1408,7 +1408,7 @@ exit
|
||||
|
||||
@node 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
|
||||
Configuration}) into a redundant route reflector configuration. BGP
|
||||
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
|
||||
@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
|
||||
|
||||
@file{bgpd.conf} for @code{Bgpd Route Reflector 1} on 192.168.1.100:
|
||||
|
@ -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.
|
||||
.IP "\fB\-e, \-\-execute \fIcommand\fP"
|
||||
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"
|
||||
When the -c option is being used, this flag will cause the standard
|
||||
.B vtysh
|
||||
@ -73,11 +73,11 @@ The default location of the
|
||||
.B vtysh
|
||||
config file.
|
||||
.TP
|
||||
.BI @CFG_SYSCONF@/Quagga.conf
|
||||
.BI @CFG_SYSCONF@/Frr.conf
|
||||
The default location of the integrated @PACKAGE_FULLNAME@ routing engine config file
|
||||
if integrated config file is in use (not default).
|
||||
.TP
|
||||
.BI ${HOME}/.history_quagga
|
||||
.BI ${HOME}/.history_frr
|
||||
Location of history of commands entered via cli
|
||||
.SH WARNING
|
||||
This man page is intended to be a quick reference for command line
|
||||
|
@ -5,7 +5,7 @@
|
||||
* Integrated configuration mode::
|
||||
@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
|
||||
be disabled through the @option{--disable-vtysh} option to
|
||||
@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
|
||||
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.
|
||||
|
||||
@subsection PAM support (experimental)
|
||||
@ -61,13 +61,13 @@ at all.
|
||||
@section Integrated configuration mode
|
||||
|
||||
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{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
|
||||
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.
|
||||
|
||||
@quotation Warning
|
||||
@ -76,7 +76,7 @@ its settings to the individual daemons.
|
||||
|
||||
@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
|
||||
all of the daemons, combine it and write it out.
|
||||
|
||||
@ -87,22 +87,22 @@ lost after doing a configuration save.
|
||||
@end quotation
|
||||
|
||||
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
|
||||
@command{watchquagga} is running as superuser, @command{vtysh} is able to
|
||||
ensure correct ownership and permissions on @file{Quagga.conf}.
|
||||
@command{watchfrr} is running as superuser, @command{vtysh} is able to
|
||||
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
|
||||
to fail if running as unprivileged user; alternatively it may leave the
|
||||
file with incorrect owner or permissions.
|
||||
|
||||
Writing the configuration can be triggered directly by invoking
|
||||
@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
|
||||
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
|
||||
files are more robust as impact of errors in configuration are limited to
|
||||
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} {}
|
||||
@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.
|
||||
|
||||
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.
|
||||
|
||||
This command has 3 states:
|
||||
@ -122,18 +122,18 @@ This command has 3 states:
|
||||
@item
|
||||
@command{service integrated-vtysh-config}
|
||||
|
||||
@command{vtysh} will always write @file{Quagga.conf}.
|
||||
@command{vtysh} will always write @file{Frr.conf}.
|
||||
|
||||
@item
|
||||
@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.
|
||||
|
||||
@item
|
||||
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
|
||||
through the individual daemons.
|
||||
@end itemize
|
||||
@ -146,8 +146,8 @@ installations.
|
||||
@deffn {Command} {write integrated} {}
|
||||
|
||||
Unconditionally (regardless of @command{service integrated-vtysh-config}
|
||||
setting) write out integrated @file{Quagga.conf} file through
|
||||
@command{watchquagga}. If @command{watchquagga} is not running, this command
|
||||
setting) write out integrated @file{Frr.conf} file through
|
||||
@command{watchfrr}. If @command{watchfrr} is not running, this command
|
||||
is unavailable.
|
||||
|
||||
@end deffn
|
||||
@ -156,6 +156,6 @@ is unavailable.
|
||||
|
||||
Configuration changes made while some daemon is not running will be invisible
|
||||
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
|
||||
otherwise be synchronized between daemons.
|
||||
|
@ -1,37 +1,37 @@
|
||||
.\" This file was originally generated by help2man 1.36.
|
||||
.TH WATCHQUAGGA 8 "July 2010"
|
||||
.TH WATCHFRR 8 "July 2010"
|
||||
.SH NAME
|
||||
watchquagga \- a program to monitor the status of quagga daemons
|
||||
watchfrr \- a program to monitor the status of frr daemons
|
||||
.SH SYNOPSIS
|
||||
.B watchquagga
|
||||
.B watchfrr
|
||||
.RI [ option ...]
|
||||
.IR daemon ...
|
||||
.br
|
||||
.B watchquagga
|
||||
.B watchfrr
|
||||
.BR \-h " | " \-v
|
||||
.SH DESCRIPTION
|
||||
.B watchquagga
|
||||
is a watchdog program that monitors the status of supplied quagga
|
||||
.B watchfrr
|
||||
is a watchdog program that monitors the status of supplied frr
|
||||
.IR daemon s
|
||||
and tries to restart them in case they become unresponsive or shut down.
|
||||
.PP
|
||||
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 responds. When the daemon crashes, EOF is received from the socket,
|
||||
so that watchquagga can react immediately.
|
||||
so that watchfrr can react immediately.
|
||||
.PP
|
||||
This program can run in one of the following 5 modes:
|
||||
.TP
|
||||
.B Mode 0: monitor
|
||||
In this mode, the program serves as a monitor and reports status changes.
|
||||
.IP
|
||||
Example usage: watchquagga \-d zebra ospfd bgpd
|
||||
Example usage: watchfrr \-d zebra ospfd bgpd
|
||||
.TP
|
||||
.B Mode 1: global restart
|
||||
In this mode, whenever a daemon hangs or crashes, the given command is used
|
||||
to restart all watched daemons.
|
||||
.IP
|
||||
Example usage: watchquagga \-dz \e
|
||||
Example usage: watchfrr \-dz \e
|
||||
.br
|
||||
-R '/sbin/service zebra restart; /sbin/service ospfd restart' \e
|
||||
.br
|
||||
@ -41,7 +41,7 @@ zebra ospfd
|
||||
In this mode, whenever a single daemon hangs or crashes, the given command
|
||||
is used to restart this daemon only.
|
||||
.IP
|
||||
Example usage: watchquagga \-dz \-r '/sbin/service %s restart' \e
|
||||
Example usage: watchfrr \-dz \-r '/sbin/service %s restart' \e
|
||||
.br
|
||||
zebra ospfd bgpd
|
||||
.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
|
||||
again.
|
||||
.IP
|
||||
Example usage: watchquagga \-adz \-r '/sbin/service %s restart' \e
|
||||
Example usage: watchfrr \-adz \-r '/sbin/service %s restart' \e
|
||||
.br
|
||||
\-s '/sbin/service %s start' \e
|
||||
.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,
|
||||
and (3) other daemons are started again.
|
||||
.IP
|
||||
Example usage: watchquagga \-Adz \-r '/sbin/service %s restart' \e
|
||||
Example usage: watchfrr \-Adz \-r '/sbin/service %s restart' \e
|
||||
.br
|
||||
\-s '/sbin/service %s start' \e
|
||||
.br
|
||||
@ -95,7 +95,7 @@ instead of standard output (stdout).
|
||||
.BI \-S " directory" "\fR, \fB\-\-statedir " directory
|
||||
Set the VTY socket
|
||||
.I directory
|
||||
(the default value is "/var/run/quagga").
|
||||
(the default value is "/var/run/frr").
|
||||
.TP
|
||||
.BR \-e ", " \-\-no\-echo
|
||||
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
|
||||
Set the process identifier
|
||||
.I filename
|
||||
(the default value is "/var/run/quagga/watchquagga.pid").
|
||||
(the default value is "/var/run/frr/watchfrr.pid").
|
||||
.TP
|
||||
.BI \-b " string" "\fR, \fB\-\-blank\-string " string
|
||||
When the supplied
|
@ -4220,7 +4220,7 @@ install_default (enum node_type node)
|
||||
*
|
||||
* terminal = 0 -- vtysh / no logging, no config control
|
||||
* terminal = 1 -- normal daemon
|
||||
* terminal = -1 -- watchquagga / no logging, but minimal config control */
|
||||
* terminal = -1 -- watchfrr / no logging, but minimal config control */
|
||||
void
|
||||
cmd_init (int terminal)
|
||||
{
|
||||
|
@ -59,7 +59,7 @@ const char *zlog_proto_names[] =
|
||||
"ISIS",
|
||||
"PIM",
|
||||
"RFP",
|
||||
"WATCHQUAGGA",
|
||||
"WATCHFRR",
|
||||
NULL,
|
||||
};
|
||||
|
||||
|
@ -59,7 +59,7 @@ typedef enum
|
||||
ZLOG_ISIS,
|
||||
ZLOG_PIM,
|
||||
ZLOG_RFP,
|
||||
ZLOG_WATCHQUAGGA,
|
||||
ZLOG_WATCHFRR,
|
||||
} zlog_proto_t;
|
||||
|
||||
/* If maxlvl is set to ZLOG_DISABLED, then no messages will be sent
|
||||
|
@ -2240,7 +2240,7 @@ vtysh_read (struct thread *thread)
|
||||
if (ret == CMD_SUSPEND)
|
||||
break;
|
||||
|
||||
/* warning: watchquagga hardcodes this result write */
|
||||
/* warning: watchfrr hardcodes this result write */
|
||||
header[3] = ret;
|
||||
buffer_put(vty->obuf, header, 4);
|
||||
|
||||
|
@ -123,7 +123,7 @@ struct zserv_header
|
||||
* always set to 255 in new zserv.
|
||||
*/
|
||||
uint8_t version;
|
||||
#define ZSERV_VERSION 3
|
||||
#define ZSERV_VERSION 4
|
||||
vrf_id_t vrf_id;
|
||||
uint16_t command;
|
||||
};
|
||||
|
@ -411,7 +411,7 @@ typedef enum {
|
||||
* the command value in the old zserv header. To allow old and new
|
||||
* 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 */
|
||||
#include "route_types.h"
|
||||
|
@ -3,6 +3,6 @@ EXTRA_DIST = bgpd.init isisd.init \
|
||||
ospf6d.init ospfd.init ldpd.init \
|
||||
quagga.logrotate quagga.pam quagga.spec \
|
||||
quagga.sysconfig ripd.init ripngd.init \
|
||||
watchquagga.init pimd.init zebra.init \
|
||||
watchfrr.init pimd.init zebra.init \
|
||||
README.rpm_build.md
|
||||
|
||||
|
@ -59,7 +59,7 @@ Building your own Quagga RPM
|
||||
%{!?quagga_user: %global quagga_user quagga }
|
||||
%{!?vty_group: %global vty_group quaggavt }
|
||||
%{!?with_fpm: %global with_fpm 0 }
|
||||
%{!?with_watchquagga: %global with_watchquagga 1 }
|
||||
%{!?with_watchfrr: %global with_watchfrr 1 }
|
||||
|
||||
6. Build the RPM
|
||||
|
||||
@ -84,11 +84,11 @@ Enabling daemons after installation of the package:
|
||||
chkconfig bgpd on
|
||||
... etc
|
||||
|
||||
2. If you want to run `watchquagga`, then configure `/etc/sysconfig/quagga`
|
||||
and uncomment the line with the daemons for `watchquagga` to monitor,
|
||||
then enable watchquagga
|
||||
2. If you want to run `watchfrr`, then configure `/etc/sysconfig/quagga`
|
||||
and uncomment the line with the daemons for `watchfrr` to monitor,
|
||||
then enable watchfrr
|
||||
|
||||
chkconfig watchquagga on
|
||||
chkconfig watchfrr on
|
||||
|
||||
3. Check your firewall / IPtables to make sure the routing protocols are
|
||||
allowed.
|
||||
@ -113,7 +113,7 @@ Configuration is stored in `/etc/quagga/*.conf` files.
|
||||
systemctl enable bgpd
|
||||
... 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.
|
||||
|
||||
2. Check your firewall / IPtables to make sure the routing protocols are
|
||||
|
@ -23,7 +23,7 @@
|
||||
%{!?quagga_user: %global quagga_user quagga }
|
||||
%{!?vty_group: %global vty_group quaggavty }
|
||||
%{!?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 }
|
||||
|
||||
# path defines
|
||||
@ -52,13 +52,13 @@
|
||||
# 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)}
|
||||
#
|
||||
# If init system is systemd, then always disable watchquagga
|
||||
# If init system is systemd, then always disable watchfrr
|
||||
#
|
||||
%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
|
||||
# be overwritten with 0 below for systemd independent on the setting here
|
||||
%global with_watchquagga 1
|
||||
%global with_watchfrr 1
|
||||
%endif
|
||||
|
||||
# if FPM is enabled, then enable tcp_zebra as well
|
||||
@ -80,13 +80,13 @@
|
||||
%define daemon_ldpd ""
|
||||
%endif
|
||||
|
||||
%if %{with_watchquagga}
|
||||
%define daemon_watchquagga watchquagga
|
||||
%if %{with_watchfrr}
|
||||
%define daemon_watchfrr watchfrr
|
||||
%else
|
||||
%define daemon_watchquagga ""
|
||||
%define daemon_watchfrr ""
|
||||
%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
|
||||
%{!?keep_build: %global keep_build 0 }
|
||||
@ -232,10 +232,10 @@ developing OSPF-API and quagga applications.
|
||||
%else
|
||||
--disable-fpm \
|
||||
%endif
|
||||
%if %{with_watchquagga}
|
||||
--enable-watchquagga \
|
||||
%if %{with_watchfrr}
|
||||
--enable-watchfrr \
|
||||
%else
|
||||
--disable-watchquagga \
|
||||
--disable-watchfrr \
|
||||
%endif
|
||||
%if %{with_bgp_vnc}
|
||||
--enable-bgp-vnc \
|
||||
@ -269,8 +269,8 @@ rm -rf %{buildroot}/usr/share/info/dir
|
||||
# install /etc sources
|
||||
%if "%{initsystem}" == "systemd"
|
||||
mkdir -p %{buildroot}%{_unitdir}
|
||||
install %{quagga_tools}/quagga.service \
|
||||
%{buildroot}%{_unitdir}/quagga.service
|
||||
install %{quagga_tools}/frr.service \
|
||||
%{buildroot}%{_unitdir}/frr.service
|
||||
%else
|
||||
mkdir -p %{buildroot}/etc/rc.d/init.d
|
||||
for daemon in %{all_daemons} ; do
|
||||
@ -345,7 +345,7 @@ zebra_spec_add_service ldpd 2612/tcp "LDPd vty"
|
||||
|
||||
%if "%{initsystem}" == "systemd"
|
||||
for daemon in %all_daemons ; do
|
||||
%systemd_post quagga.service
|
||||
%systemd_post frr.service
|
||||
done
|
||||
%else
|
||||
for daemon in %all_daemons ; do
|
||||
@ -371,9 +371,9 @@ for daemon in %{all_daemons} ; do
|
||||
%endif
|
||||
fi
|
||||
done
|
||||
%if %{with_watchquagga}
|
||||
# No config for watchquagga - this is part of /etc/sysconfig/quagga
|
||||
rm -f %{_sysconfdir}/watchquagga.*
|
||||
%if %{with_watchfrr}
|
||||
# No config for watchfrr - this is part of /etc/sysconfig/quagga
|
||||
rm -f %{_sysconfdir}/watchfrr.*
|
||||
%endif
|
||||
|
||||
if [ ! -e %{_sysconfdir}/vtysh.conf ]; then
|
||||
@ -397,16 +397,16 @@ if [ "$1" -ge 1 ]; then
|
||||
# Rename restart flags for daemons handled specially.
|
||||
running_zebra="$restart_zebra"
|
||||
restart_zebra=no
|
||||
%if %{with_watchquagga}
|
||||
running_watchquagga="$restart_watchquagga"
|
||||
restart_watchquagga=no
|
||||
%if %{with_watchfrr}
|
||||
running_watchfrr="$restart_watchfrr"
|
||||
restart_watchfrr=no
|
||||
%endif
|
||||
|
||||
%if "%{initsystem}" == "systemd"
|
||||
##
|
||||
## Systemd Version
|
||||
##
|
||||
# No watchquagga for systemd version
|
||||
# No watchfrr for systemd version
|
||||
#
|
||||
# Stop all daemons other than zebra.
|
||||
for daemon in %all_daemons ; do
|
||||
@ -427,12 +427,12 @@ if [ "$1" -ge 1 ]; then
|
||||
##
|
||||
## init.d Version
|
||||
##
|
||||
%if %{with_watchquagga}
|
||||
# Stop watchquagga first.
|
||||
[ "$running_watchquagga" = yes ] && \
|
||||
/etc/rc.d/init.d/watchquagga stop >/dev/null 2>&1
|
||||
%if %{with_watchfrr}
|
||||
# Stop watchfrr first.
|
||||
[ "$running_watchfrr" = yes ] && \
|
||||
/etc/rc.d/init.d/watchfrr stop >/dev/null 2>&1
|
||||
%endif
|
||||
# Stop all daemons other than zebra and watchquagga.
|
||||
# Stop all daemons other than zebra and watchfrr.
|
||||
for daemon in %all_daemons ; do
|
||||
eval restart=\$restart_${daemon}
|
||||
[ "$restart" = yes ] && \
|
||||
@ -441,17 +441,17 @@ if [ "$1" -ge 1 ]; then
|
||||
# Restart zebra.
|
||||
[ "$running_zebra" = yes ] && \
|
||||
/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
|
||||
eval restart=\$restart_${daemon}
|
||||
[ "$restart" = yes ] && \
|
||||
/etc/rc.d/init.d/${daemon} start >/dev/null 2>&1
|
||||
done
|
||||
%if %{with_watchquagga}
|
||||
# Start watchquagga last.
|
||||
# Avoid postun scriptlet error if watchquagga is not running.
|
||||
[ "$running_watchquagga" = yes ] && \
|
||||
/etc/rc.d/init.d/watchquagga start >/dev/null 2>&1 || :
|
||||
%if %{with_watchfrr}
|
||||
# Start watchfrr last.
|
||||
# Avoid postun scriptlet error if watchfrr is not running.
|
||||
[ "$running_watchfrr" = yes ] && \
|
||||
/etc/rc.d/init.d/watchfrr start >/dev/null 2>&1 || :
|
||||
%endif
|
||||
%endif
|
||||
fi
|
||||
@ -510,11 +510,11 @@ rm -rf %{buildroot}
|
||||
%{_sbindir}/bgpd
|
||||
%{_sbindir}/ssd
|
||||
%{_sbindir}/quagga
|
||||
%{_sbindir}/quagga-reload.py
|
||||
%{_sbindir}/quagga-reload.pyc
|
||||
%{_sbindir}/quagga-reload.pyo
|
||||
%if %{with_watchquagga}
|
||||
%{_sbindir}/watchquagga
|
||||
%{_sbindir}/frr-reload.py
|
||||
%{_sbindir}/frr-reload.pyc
|
||||
%{_sbindir}/frr-reload.pyo
|
||||
%if %{with_watchfrr}
|
||||
%{_sbindir}/watchfrr
|
||||
%endif
|
||||
%{_sbindir}/ripngd
|
||||
%{_sbindir}/ospf6d
|
||||
@ -530,11 +530,11 @@ rm -rf %{buildroot}
|
||||
%{_bindir}/*
|
||||
%config /etc/quagga/[!v]*
|
||||
%if "%{initsystem}" == "systemd"
|
||||
%config %{_unitdir}/quagga.service
|
||||
%config %{_unitdir}/frr.service
|
||||
%else
|
||||
%config /etc/rc.d/init.d/zebra
|
||||
%if %{with_watchquagga}
|
||||
%config /etc/rc.d/init.d/watchquagga
|
||||
%if %{with_watchfrr}
|
||||
%config /etc/rc.d/init.d/watchfrr
|
||||
%endif
|
||||
%config /etc/rc.d/init.d/ripd
|
||||
%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
|
||||
- Added pimd to files section and fix double listing of /var/lib*/quagga
|
||||
- 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>
|
||||
- buildreq updates
|
||||
@ -607,7 +607,7 @@ rm -rf %{buildroot}
|
||||
- daemonv6_list should contain only IPv6 daemons
|
||||
|
||||
* Wed Dec 22 2004 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
|
||||
- watchquagga added
|
||||
- watchfrr added
|
||||
- on upgrade, all daemons should be condrestart'ed
|
||||
- on removal, all daemons should be stopped
|
||||
|
||||
|
@ -11,7 +11,7 @@ ZEBRA_OPTS="-A 127.0.0.1"
|
||||
PIMD_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
|
||||
# restart any daemon on failure. If zebra fails, all running daemons will be
|
||||
|
@ -2,9 +2,9 @@
|
||||
# chkconfig: 2345 17 83
|
||||
|
||||
### BEGIN INIT INFO
|
||||
# Provides: watchquagga
|
||||
# Short-Description: Quagga watchdog
|
||||
# Description: Quagga watchdog for use with Zebra
|
||||
# Provides: watchfrr
|
||||
# Short-Description: Frr watchdog
|
||||
# Description: Frr watchdog for use with Zebra
|
||||
### END INIT INFO
|
||||
|
||||
# source function library
|
||||
@ -13,13 +13,13 @@
|
||||
# Get network config
|
||||
. /etc/sysconfig/network
|
||||
|
||||
# quagga command line options
|
||||
# frr command line options
|
||||
. /etc/sysconfig/quagga
|
||||
|
||||
RETVAL=0
|
||||
PROG="watchquagga"
|
||||
cmd=watchquagga
|
||||
LOCK_FILE=/var/lock/subsys/watchquagga
|
||||
PROG="watchfrr"
|
||||
cmd=watchfrr
|
||||
LOCK_FILE=/var/lock/subsys/watchfrr
|
||||
|
||||
case "$1" in
|
||||
start)
|
||||
|
@ -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@/ospfd=$DESTDIR/@sbindir@/ospfd 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@
|
||||
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
|
||||
|
@ -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
|
||||
|
||||
|
@ -1,34 +1,34 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
### BEGIN INIT INFO
|
||||
# Provides: quagga
|
||||
# Provides: frr
|
||||
# Required-Start: $local_fs $network $remote_fs $syslog
|
||||
# Required-Stop: $local_fs $network $remote_fs $syslog
|
||||
# Default-Start: 2 3 4 5
|
||||
# Default-Stop: 0 1 6
|
||||
# Short-Description: start and stop the Quagga routing suite
|
||||
# Description: Quagga is a routing suite for IP routing protocols like
|
||||
# Short-Description: start and stop the Frr routing suite
|
||||
# Description: Frr is a routing suite for IP routing protocols like
|
||||
# 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
|
||||
#
|
||||
|
||||
PATH=/bin:/usr/bin:/sbin:/usr/sbin
|
||||
D_PATH=/usr/lib/quagga
|
||||
C_PATH=/etc/quagga
|
||||
V_PATH=/var/run/quagga
|
||||
D_PATH=/usr/lib/frr
|
||||
C_PATH=/etc/frr
|
||||
V_PATH=/var/run/frr
|
||||
|
||||
# Local Daemon selection may be done by using /etc/quagga/daemons.
|
||||
# See /usr/share/doc/quagga/README.Debian.gz for further information.
|
||||
# Keep zebra first and do not list watchquagga!
|
||||
# Local Daemon selection may be done by using /etc/frr/daemons.
|
||||
# See /usr/share/doc/frr/README.Debian.gz for further information.
|
||||
# Keep zebra first and do not list watchfrr!
|
||||
DAEMONS="zebra bgpd ripd ripngd ospfd ospf6d isisd babeld pimd"
|
||||
MAX_INSTANCES=5
|
||||
RELOAD_SCRIPT=/usr/lib/quagga/quagga-reload.py
|
||||
RELOAD_SCRIPT=/usr/lib/frr/frr-reload.py
|
||||
|
||||
. /lib/lsb/init-functions
|
||||
|
||||
if [ -f /usr/lib/quagga/ssd ]; then
|
||||
SSD=/usr/lib/quagga/ssd
|
||||
if [ -f /usr/lib/frr/ssd ]; then
|
||||
SSD=/usr/lib/frr/ssd
|
||||
else
|
||||
SSD=`which start-stop-daemon`
|
||||
fi
|
||||
@ -61,7 +61,7 @@ started()
|
||||
vtysh_b ()
|
||||
{
|
||||
# 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
|
||||
fi
|
||||
}
|
||||
@ -73,13 +73,13 @@ vtysh_b ()
|
||||
check_daemon()
|
||||
{
|
||||
# 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
|
||||
fi
|
||||
|
||||
# vtysh_enable has no config file nor binary so skip check.
|
||||
# (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
|
||||
if [ ! -x "$D_PATH/$1" ]; then return 1; fi
|
||||
|
||||
@ -87,44 +87,44 @@ check_daemon()
|
||||
if [ -n "$2" ]; then
|
||||
if [ ! -r "$C_PATH/$1-$2.conf" ]; then
|
||||
touch "$C_PATH/$1-$2.conf"
|
||||
chown quagga:quagga "$C_PATH/$1-$2.conf"
|
||||
chown frr:frr "$C_PATH/$1-$2.conf"
|
||||
fi
|
||||
elif [ ! -r "$C_PATH/$1.conf" ]; then
|
||||
touch "$C_PATH/$1.conf"
|
||||
chown quagga:quagga "$C_PATH/$1.conf"
|
||||
chown frr:frr "$C_PATH/$1.conf"
|
||||
fi
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
# 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()
|
||||
{
|
||||
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
|
||||
if started "$1" ; then
|
||||
stop watchquagga
|
||||
stop watchfrr
|
||||
else
|
||||
# Echo only once. watchquagga is printed in the stop above
|
||||
# Echo only once. watchfrr is printed in the stop above
|
||||
echo -n " $1"
|
||||
fi
|
||||
|
||||
if [ -e /var/run/quagga/watchquagga.started ] ; then
|
||||
rm /var/run/quagga/watchquagga.started
|
||||
if [ -e /var/run/frr/watchfrr.started ] ; then
|
||||
rm /var/run/frr/watchfrr.started
|
||||
fi
|
||||
${SSD} \
|
||||
--start \
|
||||
--pidfile=`pidfile $1` \
|
||||
--exec "$D_PATH/$1" \
|
||||
-- \
|
||||
"${watchquagga_options[@]}"
|
||||
"${watchfrr_options[@]}"
|
||||
for i in `seq 1 10`;
|
||||
do
|
||||
if [ -e /var/run/quagga/watchquagga.started ] ; then
|
||||
if [ -e /var/run/frr/watchfrr.started ] ; then
|
||||
break
|
||||
else
|
||||
sleep 1
|
||||
@ -200,10 +200,10 @@ stop()
|
||||
fi
|
||||
}
|
||||
|
||||
# Converts values from /etc/quagga/daemons to all-numeric values.
|
||||
# Converts values from /etc/frr/daemons to all-numeric values.
|
||||
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
|
||||
eval value=\${${name}:0:3}
|
||||
|
||||
@ -224,8 +224,8 @@ convert_daemon_prios()
|
||||
done
|
||||
}
|
||||
|
||||
# Starts watchquagga for all wanted daemons.
|
||||
start_watchquagga()
|
||||
# Starts watchfrr for all wanted daemons.
|
||||
start_watchfrr()
|
||||
{
|
||||
local daemon_name
|
||||
local daemon_prio
|
||||
@ -233,14 +233,14 @@ start_watchquagga()
|
||||
local daemon_inst
|
||||
|
||||
# Start the monitor daemon only if desired.
|
||||
if [ 0 -eq "$watchquagga_enable" ]; then
|
||||
if [ 0 -eq "$watchfrr_enable" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
# 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 "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!"
|
||||
exit 1
|
||||
fi
|
||||
@ -256,13 +256,13 @@ start_watchquagga()
|
||||
eval "inst_disable=\${${daemon_name}_${inst}}"
|
||||
if [ -z ${inst_disable} ] || [ ${inst_disable} != 0 ]; then
|
||||
if check_daemon $daemon_name $inst; then
|
||||
watchquagga_options+=("${daemon_name}-${inst}")
|
||||
watchfrr_options+=("${daemon_name}-${inst}")
|
||||
fi
|
||||
fi
|
||||
done
|
||||
else
|
||||
if check_daemon $daemon_name; then
|
||||
watchquagga_options+=($daemon_name)
|
||||
watchfrr_options+=($daemon_name)
|
||||
fi
|
||||
fi
|
||||
found_one=1
|
||||
@ -271,17 +271,17 @@ start_watchquagga()
|
||||
|
||||
# Start if at least one daemon is activated.
|
||||
if [ $found_one -eq 1 ]; then
|
||||
echo -n "Starting Quagga monitor daemon:"
|
||||
start watchquagga
|
||||
echo -n "Starting Frr monitor daemon:"
|
||||
start watchfrr
|
||||
echo "."
|
||||
fi
|
||||
}
|
||||
|
||||
# Stopps watchquagga.
|
||||
stop_watchquagga()
|
||||
# Stopps watchfrr.
|
||||
stop_watchfrr()
|
||||
{
|
||||
echo -n "Stopping Quagga monitor daemon:"
|
||||
stop watchquagga
|
||||
echo -n "Stopping Frr monitor daemon:"
|
||||
stop watchfrr
|
||||
echo "."
|
||||
}
|
||||
|
||||
@ -305,7 +305,7 @@ stop_prio()
|
||||
wanted_prio=$1
|
||||
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 daemon_name in $daemon_list; do
|
||||
@ -331,7 +331,7 @@ stop_prio()
|
||||
echo "."
|
||||
if [ -z "$inst" ]; then
|
||||
# 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
|
||||
eval "file_list_suffix="$V_PATH"/"$daemon*""
|
||||
else
|
||||
@ -374,7 +374,7 @@ start_prio()
|
||||
wanted_prio=$1
|
||||
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 daemon_name in $daemon_list; do
|
||||
@ -479,7 +479,7 @@ check_status()
|
||||
. "$C_PATH/debian.conf"
|
||||
|
||||
# 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}
|
||||
|
||||
@ -489,7 +489,7 @@ convert_daemon_prios
|
||||
if [ ! -d $V_PATH ]; then
|
||||
echo "Creating $V_PATH"
|
||||
mkdir -p $V_PATH
|
||||
chown quagga:quagga $V_PATH
|
||||
chown frr:frr $V_PATH
|
||||
chmod 755 /$V_PATH
|
||||
fi
|
||||
|
||||
@ -509,10 +509,10 @@ case "$1" in
|
||||
|
||||
# Start all daemons
|
||||
cd $C_PATH/
|
||||
if [ "$2" != "watchquagga" ]; then
|
||||
if [ "$2" != "watchfrr" ]; then
|
||||
start_prio 10 $dmn
|
||||
fi
|
||||
start_watchquagga
|
||||
start_watchfrr
|
||||
vtysh_b
|
||||
;;
|
||||
|
||||
@ -525,8 +525,8 @@ case "$1" in
|
||||
|
||||
stop|0)
|
||||
# Stop all daemons at level '0' or 'stop'
|
||||
stop_watchquagga
|
||||
if [ "$dmn" != "watchquagga" ]; then
|
||||
stop_watchfrr
|
||||
if [ "$dmn" != "watchfrr" ]; then
|
||||
[ -n "${dmn}" ] && eval "${dmn/-/_}=0"
|
||||
stop_prio 0 $dmn
|
||||
fi
|
||||
@ -536,17 +536,17 @@ case "$1" in
|
||||
ip route flush proto zebra
|
||||
else
|
||||
[ -n "$dmn" ] && eval "${dmn/-/_}=0"
|
||||
start_watchquagga
|
||||
start_watchfrr
|
||||
fi
|
||||
;;
|
||||
|
||||
reload)
|
||||
# Just apply the commands that have changed, no restart necessary
|
||||
[ ! -x "$RELOAD_SCRIPT" ] && echo "quagga-reload script not available" && exit 0
|
||||
NEW_CONFIG_FILE="${2:-$C_PATH/Quagga.conf}"
|
||||
[ ! -x "$RELOAD_SCRIPT" ] && echo "frr-reload script not available" && exit 0
|
||||
NEW_CONFIG_FILE="${2:-$C_PATH/Frr.conf}"
|
||||
[ ! -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"
|
||||
"$RELOAD_SCRIPT" --reload /etc/quagga/Quagga.conf
|
||||
echo "Applying only incremental changes to running configuration from Frr.conf"
|
||||
"$RELOAD_SCRIPT" --reload /etc/frr/Frr.conf
|
||||
exit $?
|
||||
;;
|
||||
|
||||
@ -562,11 +562,11 @@ case "$1" in
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Usage: /etc/init.d/quagga {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 "Usage: /etc/init.d/frr {start|stop|status|reload|restart|force-reload|<priority>} [daemon]"
|
||||
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 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
|
||||
;;
|
||||
esac
|
@ -1,30 +1,30 @@
|
||||
#!/usr/bin/python
|
||||
# Quagga Reloader
|
||||
# Frr Reloader
|
||||
# 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
|
||||
# Free Software Foundation; either version 2, or (at your option) any
|
||||
# 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
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# General Public License for more details.
|
||||
#
|
||||
# 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
|
||||
# 02111-1307, USA.
|
||||
#
|
||||
"""
|
||||
This program
|
||||
- reads a quagga configuration text file
|
||||
- reads quagga's current running configuration via "vtysh -c 'show running'"
|
||||
- reads a frr configuration text file
|
||||
- reads frr's current running configuration via "vtysh -c 'show running'"
|
||||
- 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
|
||||
"""
|
||||
|
||||
@ -52,7 +52,7 @@ class VtyshMarkException(Exception):
|
||||
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
|
||||
description swp3 -> r8's swp1
|
||||
@ -91,7 +91,7 @@ ip forwarding
|
||||
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
|
||||
('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):
|
||||
"""
|
||||
Return the command as it would appear in Quagga.conf
|
||||
Return the command as it would appear in Frr.conf
|
||||
"""
|
||||
cmd = []
|
||||
|
||||
@ -435,7 +435,7 @@ def line_for_vtysh_file(ctx_keys, line, delete):
|
||||
|
||||
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
|
||||
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 '):
|
||||
"""
|
||||
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 peer-group FOO
|
||||
|
||||
but today we display via a single line
|
||||
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
|
||||
|
||||
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
|
||||
versions of quagga would display the following:
|
||||
versions of frr would display the following:
|
||||
neighbor swp1 interface
|
||||
neighbor swp1 remote-as external
|
||||
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
|
||||
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)
|
||||
|
||||
and adding
|
||||
@ -689,19 +689,19 @@ def compare_context_objects(newconf, running):
|
||||
|
||||
if __name__ == '__main__':
|
||||
# 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"')
|
||||
group = parser.add_mutually_exclusive_group(required=True)
|
||||
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)
|
||||
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('filename', help='Location of new quagga config file')
|
||||
parser.add_argument('filename', help='Location of new frr config file')
|
||||
args = parser.parse_args()
|
||||
|
||||
# Logging
|
||||
# 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:
|
||||
logging.basicConfig(level=logging.INFO,
|
||||
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))
|
||||
|
||||
elif args.reload:
|
||||
if not os.path.isdir('/var/log/quagga/'):
|
||||
os.makedirs('/var/log/quagga/')
|
||||
if not os.path.isdir('/var/log/frr/'):
|
||||
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,
|
||||
format='%(asctime)s %(levelname)5s: %(message)s')
|
||||
|
||||
@ -733,7 +733,7 @@ if __name__ == '__main__':
|
||||
sys.exit(1)
|
||||
|
||||
# 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
|
||||
|
||||
if os.path.isfile(vtysh_filename):
|
||||
@ -746,7 +746,7 @@ if __name__ == '__main__':
|
||||
break
|
||||
|
||||
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)
|
||||
|
||||
if args.debug:
|
||||
@ -799,7 +799,7 @@ if __name__ == '__main__':
|
||||
|
||||
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
|
||||
# If the user had this running bgp config:
|
||||
@ -826,7 +826,7 @@ if __name__ == '__main__':
|
||||
for x in range(2):
|
||||
running = Config()
|
||||
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)
|
||||
|
||||
@ -842,19 +842,19 @@ if __name__ == '__main__':
|
||||
cmd = line_to_vtysh_conft(ctx_keys, line, True)
|
||||
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"
|
||||
# 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.
|
||||
#
|
||||
# Example:
|
||||
# quagga(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)# ip ospf authentication message-digest 1.1.1.1
|
||||
# frr(config-if)# no ip ospf authentication message-digest 1.1.1.1
|
||||
# % Unknown command.
|
||||
# quagga(config-if)# no ip ospf authentication message-digest
|
||||
# frr(config-if)# no ip ospf authentication message-digest
|
||||
# % Unknown command.
|
||||
# quagga(config-if)# no ip ospf authentication
|
||||
# quagga(config-if)#
|
||||
# frr(config-if)# no ip ospf authentication
|
||||
# frr(config-if)#
|
||||
|
||||
while True:
|
||||
try:
|
||||
@ -895,7 +895,7 @@ if __name__ == '__main__':
|
||||
string.ascii_uppercase +
|
||||
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)))
|
||||
|
||||
with open(filename, 'w') as fh:
|
@ -1,11 +1,11 @@
|
||||
[Unit]
|
||||
Description=Cumulus Linux Quagga
|
||||
Description=Cumulus Linux FRR
|
||||
After=syslog.target networking.service
|
||||
OnFailure=heartbeat-failed@%n.service
|
||||
|
||||
[Service]
|
||||
Nice=-5
|
||||
EnvironmentFile=/etc/default/quagga
|
||||
EnvironmentFile=/etc/default/frr
|
||||
Type=forking
|
||||
NotifyAccess=all
|
||||
StartLimitInterval=3m
|
||||
@ -15,8 +15,8 @@ WatchdogSec=60s
|
||||
RestartSec=5
|
||||
Restart=on-abnormal
|
||||
LimitNOFILE=1024
|
||||
ExecStart=/usr/lib/quagga/quagga start
|
||||
ExecStop=/usr/lib/quagga/quagga stop
|
||||
ExecReload=/usr/lib/quagga/quagga-reload.py --reload /etc/quagga/Quagga.conf
|
||||
ExecStart=/usr/lib/frr/frr start
|
||||
ExecStop=/usr/lib/frr/frr stop
|
||||
ExecReload=/usr/lib/frr/frr-reload.py --reload /etc/frr/Frr.conf
|
||||
[Install]
|
||||
WantedBy=network-online.target
|
@ -86,7 +86,7 @@ vtysh_cmd_FILES = $(vtysh_scan) \
|
||||
$(top_srcdir)/zebra/zebra_fpm.c \
|
||||
$(top_srcdir)/zebra/zebra_ptm.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)
|
||||
|
||||
vtysh_cmd.c: $(vtysh_cmd_FILES) extract.pl
|
||||
|
@ -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 = "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 = "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;
|
||||
@ -2592,7 +2592,7 @@ DEFUN (vtysh_write_memory,
|
||||
{
|
||||
ret = CMD_WARNING;
|
||||
for (i = 0; i < array_size(vtysh_client); i++)
|
||||
if (vtysh_client[i].flag == VTYSH_WATCHQUAGGA)
|
||||
if (vtysh_client[i].flag == VTYSH_WATCHFRR)
|
||||
break;
|
||||
if (i < array_size(vtysh_client) && vtysh_client[i].fd != -1)
|
||||
ret = vtysh_client_execute (&vtysh_client[i], "write integrated", stdout);
|
||||
@ -2600,7 +2600,7 @@ DEFUN (vtysh_write_memory,
|
||||
if (ret != CMD_SUCCESS)
|
||||
{
|
||||
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");
|
||||
ret = vtysh_write_config_integrated();
|
||||
}
|
||||
|
@ -34,11 +34,11 @@ DECLARE_MGROUP(MVTYSH)
|
||||
#define VTYSH_ISISD 0x40
|
||||
#define VTYSH_PIMD 0x100
|
||||
#define VTYSH_LDPD 0x200
|
||||
#define VTYSH_WATCHQUAGGA 0x400
|
||||
#define VTYSH_WATCHFRR 0x400
|
||||
|
||||
/* commands in REALLYALL are crucial to correct vtysh operation */
|
||||
#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
|
||||
* 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
|
||||
|
2
watchquagga/.gitignore → watchfrr/.gitignore
vendored
2
watchquagga/.gitignore → watchfrr/.gitignore
vendored
@ -1,7 +1,7 @@
|
||||
Makefile
|
||||
Makefile.in
|
||||
*.o
|
||||
watchquagga
|
||||
watchfrr
|
||||
tags
|
||||
TAGS
|
||||
.deps
|
@ -5,9 +5,9 @@ DEFS = @DEFS@ -DSTATEDIR=\"$(localstatedir)/\"
|
||||
|
||||
AM_CFLAGS = $(WERROR)
|
||||
|
||||
sbin_PROGRAMS = watchquagga
|
||||
sbin_PROGRAMS = watchfrr
|
||||
|
||||
noinst_HEADERS = watchquagga.h
|
||||
noinst_HEADERS = watchfrr.h
|
||||
|
||||
watchquagga_SOURCES = watchquagga.c watchquagga_vty.c
|
||||
watchquagga_LDADD = ../lib/libzebra.la @LIBCAP@
|
||||
watchfrr_SOURCES = watchfrr.c watchfrr_vty.c
|
||||
watchfrr_LDADD = ../lib/libzebra.la @LIBCAP@
|
@ -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
|
||||
|
||||
@ -33,7 +33,7 @@
|
||||
#include <memory.h>
|
||||
#include <systemd.h>
|
||||
|
||||
#include "watchquagga.h"
|
||||
#include "watchfrr.h"
|
||||
|
||||
#ifndef MIN
|
||||
#define MIN(X,Y) (((X) <= (Y)) ? (X) : (Y))
|
||||
@ -49,10 +49,10 @@
|
||||
#define DEFAULT_LOGLEVEL LOG_INFO
|
||||
#define DEFAULT_MIN_RESTART 60
|
||||
#define DEFAULT_MAX_RESTART 600
|
||||
#ifdef PATH_WATCHQUAGGA_PID
|
||||
#define DEFAULT_PIDFILE PATH_WATCHQUAGGA_PID
|
||||
#ifdef PATH_WATCHFRR_PID
|
||||
#define DEFAULT_PIDFILE PATH_WATCHFRR_PID
|
||||
#else
|
||||
#define DEFAULT_PIDFILE STATEDIR "/watchquagga.pid"
|
||||
#define DEFAULT_PIDFILE STATEDIR "/watchfrr.pid"
|
||||
#endif
|
||||
#ifdef DAEMON_VTY_DIR
|
||||
#define VTYDIR DAEMON_VTY_DIR
|
||||
@ -223,7 +223,7 @@ usage(const char *progname, int status)
|
||||
else
|
||||
{
|
||||
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\
|
||||
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\
|
||||
@ -706,10 +706,10 @@ daemon_send_ready (void)
|
||||
#if defined (HAVE_CUMULUS)
|
||||
FILE *fp;
|
||||
|
||||
fp = fopen(DAEMON_VTY_DIR "/watchquagga.started", "w");
|
||||
fp = fopen(DAEMON_VTY_DIR "/watchfrr.started", "w");
|
||||
fclose(fp);
|
||||
#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);
|
||||
sent = 1;
|
||||
}
|
||||
@ -1062,7 +1062,7 @@ translate_blanks(const char *cmd, const char *blankstr)
|
||||
return res;
|
||||
}
|
||||
|
||||
struct zebra_privs_t watchquagga_privs =
|
||||
struct zebra_privs_t watchfrr_privs =
|
||||
{
|
||||
#ifdef VTY_GROUP
|
||||
.vty_group = VTY_GROUP,
|
||||
@ -1325,14 +1325,14 @@ main(int argc, char **argv)
|
||||
|
||||
gs.restart.interval = gs.min_restart_interval;
|
||||
|
||||
zprivs_init (&watchquagga_privs);
|
||||
zprivs_init (&watchfrr_privs);
|
||||
|
||||
master = thread_master_create();
|
||||
cmd_init(-1);
|
||||
memory_init();
|
||||
vty_init(master);
|
||||
watchquagga_vty_init();
|
||||
vty_serv_sock(NULL, 0, WATCHQUAGGA_VTYSH_PATH);
|
||||
watchfrr_vty_init();
|
||||
vty_serv_sock(NULL, 0, WATCHFRR_VTYSH_PATH);
|
||||
|
||||
signal_init (master, array_size(my_signals), my_signals);
|
||||
srandom(time(NULL));
|
||||
@ -1384,7 +1384,7 @@ main(int argc, char **argv)
|
||||
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);
|
||||
zlog_set_level(NULL, ZLOG_DEST_MONITOR, ZLOG_DISABLED);
|
||||
if (daemon_mode)
|
||||
@ -1392,7 +1392,7 @@ main(int argc, char **argv)
|
||||
zlog_set_level(NULL, ZLOG_DEST_SYSLOG, MIN(gs.loglevel,LOG_DEBUG));
|
||||
if (daemon (0, 0) < 0)
|
||||
{
|
||||
fprintf(stderr, "Watchquagga daemon failed: %s", strerror(errno));
|
||||
fprintf(stderr, "Watchfrr daemon failed: %s", strerror(errno));
|
||||
exit (1);
|
||||
}
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
Common definitions for watchquagga API socket.
|
||||
Common definitions for watchfrr API socket.
|
||||
|
||||
Copyright (C) 2016 David Lamparter for NetDEF, Inc.
|
||||
|
||||
@ -18,12 +18,12 @@
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#ifndef QUAGGA_WATCHQUAGGA_H
|
||||
#define QUAGGA_WATCHQUAGGA_H
|
||||
#ifndef FRR_WATCHFRR_H
|
||||
#define FRR_WATCHFRR_H
|
||||
|
||||
extern void watchquagga_vty_init(void);
|
||||
extern void watchfrr_vty_init(void);
|
||||
|
||||
extern pid_t integrated_write_pid;
|
||||
extern void integrated_write_sigchld(int status);
|
||||
|
||||
#endif /* QUAGGA_WATCHQUAGGA_H */
|
||||
#endif /* FRR_WATCHFRR_H */
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
watchquagga CLI functions.
|
||||
watchfrr CLI functions.
|
||||
|
||||
Copyright (C) 2016 David Lamparter for NetDEF, Inc.
|
||||
|
||||
@ -26,7 +26,7 @@
|
||||
#include "vty.h"
|
||||
#include "command.h"
|
||||
|
||||
#include "watchquagga.h"
|
||||
#include "watchfrr.h"
|
||||
|
||||
pid_t integrated_write_pid;
|
||||
static int integrated_result_fd;
|
||||
@ -35,7 +35,7 @@ DEFUN (config_write_integrated,
|
||||
config_write_integrated_cmd,
|
||||
"write integrated",
|
||||
"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;
|
||||
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
|
||||
* session temporarily enters an intentional "hang" state. This is
|
||||
* 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.
|
||||
*
|
||||
* 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;
|
||||
}
|
||||
|
||||
void watchquagga_vty_init(void)
|
||||
void watchfrr_vty_init(void)
|
||||
{
|
||||
integrated_write_pid = -1;
|
||||
install_element(ENABLE_NODE, &config_write_integrated_cmd);
|
Loading…
Reference in New Issue
Block a user