Go to file
Pradosh Mohapatra 8da8689d91 bgpd: fix fast external fallover behavior
ISSUES

1. When an interface goes down, the zclient callbacks are invoked
   in the following order: (a) address_delete() that removes the
   connected address list: ifp->connected, (b) interface_down()
   that performs "fast external fallover" operation. The operation
   relies on ifp->connected to look for peers that should be brought
   down. That's a cyclic dependency.

2. 'ttl-security' configuration handler sets peer->ttl to
   MAXTTL (so that BGP packets are sent with TTL=255, as per the
   requirement of ttl-security). This, however, is incompatible
   with 'fast external fallover' as the fallover operation checks
   for (ttl == 1) to determine directly connected peers.

3. The current fallover operation does not work for IPv6 address family.

PATCH

1. The patch removes the dependency on 'ifp->connected' list for fast
   fallover. The peer already contains a nexthop structure that reflects
   the peering address. The nexthop structure has a pointer to the
   interface (ifp) that peering address resolves to. Everytime the TCP
   connection succeeds, the ifp is updated. The patch uses this ifp in
   the interface_down() callback for a match for the peers that should be
   brought down.

2. The evaluation for directly connected peering is enhanced as
   'peer->ttl == 1' OR 'peer->gtsm_hops == 1'. Thus a ttl-security
   configuration on the peer with one hop is directly connected and
   should be brought down under 'fast external fallover'.

3. Because of fix (1), IPv6 address family works automatically.

Signed-off-by: Pradosh Mohapatra <pmohapat@cumulusnetworks.com>
Reviewed-by: Dinesh G Dutt <ddutt@cumulusnetworks.com>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2014-05-19 23:25:39 +02:00
babeld lib/command.c: rewrite command matching/parsing 2014-04-01 20:21:41 +02:00
bgpd bgpd: fix fast external fallover behavior 2014-05-19 23:25:39 +02:00
doc bgpd: add 'bgp bestpath as-path multipath-relax' 2014-05-15 19:15:22 +02:00
fpm fpm: Add public header for Forwarding Plane Manager 2012-11-30 21:41:17 +01:00
init build: delete .cvsignore files 2011-12-13 14:27:01 +04:00
isisd lib/command.c: rewrite command matching/parsing 2014-04-01 20:21:41 +02:00
lib ospfd: For an ABR, ensure the right LSID is MaxAge'd 2014-05-14 16:46:41 +02:00
m4 build: fix "pragma weak" mixups 2013-02-09 03:00:12 +01:00
ospf6d lib/command.c: rewrite command matching/parsing 2014-04-01 20:21:41 +02:00
ospfclient build: correct libtool parameter used within Makefiles 2012-09-25 05:56:00 +02:00
ospfd ospfd: add debug messages for router lsa-generation 2014-05-14 16:47:30 +02:00
pkgsrc build: delete .cvsignore files 2011-12-13 14:27:01 +04:00
ports build: delete .cvsignore files 2011-12-13 14:27:01 +04:00
redhat build: update quagga.spec.in 2013-02-23 19:43:18 +01:00
ripd lib/command.c: rewrite command matching/parsing 2014-04-01 20:21:41 +02:00
ripngd lib/command.c: rewrite command matching/parsing 2014-04-01 20:21:41 +02:00
solaris build: delete .cvsignore files 2011-12-13 14:27:01 +04:00
tests tests: Add tests for timers 2014-04-22 21:15:11 +02:00
tools tools: use standard interpreter path in all Perl scripts 2012-04-30 16:13:47 +02:00
vtysh lib/command.c: rewrite command matching/parsing 2014-04-01 20:21:41 +02:00
watchquagga *: use array_size() helper macro 2012-10-25 10:15:59 -07:00
zebra zebra: Change the mechanism for comparing route ID's. 2014-04-22 21:17:26 +02:00
.gitignore testzebra: pragma weak: detect systems with weak alias and provide alternative 2013-01-11 21:50:06 +01:00
AUTHORS Initial revision 2002-12-13 20:15:29 +00:00
bootstrap.sh autoreconf -i 2007-02-06 19:28:28 +00:00
buildtest.sh tests: add DejaGNU framework 2013-04-14 16:01:05 +02:00
ChangeLog [trivia] Make 'make dist' happy about ChangeLog expunge 2008-08-23 08:36:42 +01:00
configure.ac build: remove now-useless --{en, dis}able-tests 2014-04-01 17:23:21 +02:00
COPYING Initial revision 2002-12-13 20:15:29 +00:00
COPYING.LIB Initial revision 2002-12-13 20:15:29 +00:00
HACKING.pending HACKING.pending: Add Quagga-RE details 2012-03-02 11:56:38 +00:00
HACKING.tex HACKING.tex: Change to a LaTeX version of HACKING 2012-03-08 16:14:13 +00:00
INSTALL.quagga.txt build: improve backtrace support/detection 2014-04-01 17:20:44 +02:00
Makefile.am build: remove now-useless --{en, dis}able-tests 2014-04-01 17:23:21 +02:00
NEWS doc: update NEWS for 0.99.22 changes 2013-02-01 17:55:05 +01:00
README 2004-11-12 Paul Jakma <paul@dishone.st> 2004-11-12 10:30:21 +00:00
README.NetBSD Omit --opaque-lsa from build (now default). 2011-06-28 15:05:05 -04:00
REPORTING-BUGS Update for git and emphasize asking for good reports. 2010-05-05 07:51:26 -04:00
SERVICES 2607/tcp is already used by ospfapi. 2003-12-23 10:42:45 +00:00
stamp-h.in Initial revision 2002-12-13 20:15:29 +00:00
TODO doc: update TODO for ospf6d work & bgp multipath 2013-04-16 11:56:11 +02:00
update-autotools * README.NetBSD: use update-autotools instead of autoreconf 2007-02-02 16:52:38 +00:00

Quagga is free software that manages various IPv4 and IPv6 routing
protocols.

Currently Quagga supports BGP4, BGP4+, OSPFv2, OSPFv3, RIPv1,
RIPv2, and RIPng as well as very early support for IS-IS.
  
See the file INSTALL.quagga.txt for building and installation instructions.
  
See the file REPORTING-BUGS to report bugs.
  
Quagga is free software. See the file COPYING for copying conditions.