Go to file
Daniel Walton bb74427585 bgpd: multipath change for VRF route is not updated in zebra
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>

If you are doing multipath in a VRF and bounce one of the multipaths for
a prefix, bgp is not updating the zebra entry for that prefix with the
new multipaths. We start with:

cel-redxp-10# show bgp vrf RED  ipv4 unicast 6.0.0.16/32
BGP routing table entry for 6.0.0.16/32
Paths: (4 available, best #4, table RED)
  Advertised to non peer-group peers:
  spine-1(swp1) spine-2(swp2) spine-3(swp3) spine-4(swp4)
  104 65104 65002
    fe80::202:ff:fe00:2d from spine-4(swp4) (6.0.0.12)
    (fe80::202:ff:fe00:2d) (used)
      Origin incomplete, localpref 100, valid, external, multipath, bestpath-from-AS 104
      AddPath ID: RX 0, TX 21
      Last update: Tue Aug  1 18:28:33 2017

  102 65104 65002
    fe80::202:ff:fe00:25 from spine-2(swp2) (6.0.0.10)
    (fe80::202:ff:fe00:25) (used)
      Origin incomplete, localpref 100, valid, external, multipath, bestpath-from-AS 102
      AddPath ID: RX 0, TX 20
      Last update: Tue Aug  1 18:28:33 2017

  103 65104 65002
    fe80::202:ff:fe00:29 from spine-3(swp3) (6.0.0.11)
    (fe80::202:ff:fe00:29) (used)
      Origin incomplete, localpref 100, valid, external, multipath, bestpath-from-AS 103
      AddPath ID: RX 0, TX 17
      Last update: Tue Aug  1 18:28:33 2017

  101 65104 65002
    fe80::202:ff:fe00:21 from spine-1(swp1) (6.0.0.9)
    (fe80::202:ff:fe00:21) (used)
      Origin incomplete, localpref 100, valid, external, multipath, bestpath-from-AS 101, best
      AddPath ID: RX 0, TX 8
      Last update: Tue Aug  1 18:28:33 2017

cel-redxp-10#
cel-redxp-10# show ip route vrf RED 6.0.0.16/32
Routing entry for 6.0.0.16/32
  Known via "bgp", distance 20, metric 0, vrf RED, best
  Last update 00:00:25 ago
  * fe80::202:ff:fe00:21, via swp1
  * fe80::202:ff:fe00:25, via swp2
  * fe80::202:ff:fe00:29, via swp3
  * fe80::202:ff:fe00:2d, via swp4

cel-redxp-10#

And then on spine-1 we bounce all peers

spine-1# clear ip bgp *
spine-1#

On the leaf (cel-redxp-10) we remove the route from spine-1

cel-redxp-10# show ip route vrf RED 6.0.0.16/32
Routing entry for 6.0.0.16/32
  Known via "bgp", distance 20, metric 0, vrf RED, best
  Last update 00:00:01 ago
  * fe80::202:ff:fe00:25, via swp2
  * fe80::202:ff:fe00:29, via swp3
  * fe80::202:ff:fe00:2d, via swp4

cel-redxp-10#

So far so good. The problem is when the session to spine-1 comes back up
bgp will mark the flag from spine-1 as `multipath` but does not update
zebra. We end up in a state where BGP has 4 paths flags as multipath but
only 3 paths are in the RIB.
2017-08-01 18:31:56 +00:00
babeld babeld: remove redundant startup message 2017-07-26 11:54:52 -03:00
bgpd bgpd: multipath change for VRF route is not updated in zebra 2017-08-01 18:31:56 +00:00
debian debian: python3-dev is now a build requirement for main package 2017-06-27 18:09:38 -07:00
doc redhat: Update documentation about frr-reload 2017-07-26 11:47:07 -04:00
eigrpd eigrpd: minor fix in the redistribute command 2017-07-26 11:51:00 -03:00
fpm protobuf: fix build 2017-07-31 23:03:30 +02:00
gdb gdb: Add a directory of files with gdb macros 2016-05-26 15:33:30 +00:00
init build: delete .cvsignore files 2011-12-13 14:27:01 +04:00
isisd Revert "*: reindent pt. 2" 2017-07-22 14:52:33 +02:00
ldpd ldpd: update .gitignore 2017-07-31 08:56:44 -03:00
lib Merge pull request #882 from opensourcerouting/safi-cleanup 2017-08-01 14:21:26 -04:00
m4 build: non-recursive auxiliary directories 2017-07-31 23:03:30 +02:00
nhrpd nhrpd: enable -Werror 2017-07-14 16:59:44 +02:00
ospf6d ospf6d: New version of GCC with new warnings 2017-07-27 18:19:31 -04:00
ospfclient *: reindent 2017-07-17 14:04:07 +02:00
ospfd Merge pull request #839 from Orange-OpenSource/TE 2017-08-01 07:34:41 -04:00
pimd Revert "*: reindent pt. 2" 2017-07-22 14:52:33 +02:00
pkgsrc build: non-recursive auxiliary directories 2017-07-31 23:03:30 +02:00
ports pimd: merge pimd as of 2015-01-19 2016-05-25 20:38:32 -04:00
python build: non-recursive auxiliary directories 2017-07-31 23:03:30 +02:00
qpb protobuf: fix build 2017-07-31 23:03:30 +02:00
redhat build: non-recursive auxiliary directories 2017-07-31 23:03:30 +02:00
ripd ripd: Fix debug config failures 2017-07-24 16:00:20 -04:00
ripngd ripngd: Fix failure returned with some debug commands 2017-07-24 15:59:36 -04:00
snapcraft build: non-recursive auxiliary directories 2017-07-31 23:03:30 +02:00
solaris gitignore: update references to FRR 2017-07-12 11:55:04 -05:00
tests tests: fix small typo 2017-07-31 23:45:03 -03:00
tools Revert "*: reindent pt. 2" 2017-07-22 14:52:33 +02:00
vtysh Merge pull request #881 from donaldsharp/ping_traceroute 2017-07-31 20:06:57 +02:00
watchfrr *: reindent 2017-07-17 14:04:07 +02:00
zebra build: fix/improve clippy dependencies 2017-08-01 07:09:45 +02:00
.clang-format *: add indent control files 2017-07-17 14:00:23 +02:00
.gitignore gitignore: update references to FRR 2017-07-12 11:55:04 -05: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 config: switch a few references to say FRR 2017-07-12 11:25:33 -05:00
ChangeLog Rename: freerangerouting --> frrouting 2017-03-30 14:24:05 -04:00
common.am build: fix/improve clippy dependencies 2017-08-01 07:09:45 +02:00
COMMUNITY.md COMMUNITY.md: rewrap paragraphs, update PR section 2017-07-25 15:53:05 -04:00
configure.ac build: non-recursive auxiliary directories 2017-07-31 23:03:30 +02:00
COPYING *: make consistent & update GPLv2 file headers 2017-05-15 16:37:41 +02:00
COPYING-LGPLv2.1 build: remove LGPL v2.0, add LGPL v2.1 2016-11-15 17:19:38 +09:00
defaults.h *: reindent 2017-07-17 14:04:07 +02:00
git-reindent-branch.py *: fix git-reindent-branch.py reversing order 2017-07-22 18:00:44 +02:00
indent.py *: add indent control files 2017-07-17 14:00:23 +02:00
Makefile.am build: non-recursive auxiliary directories 2017-07-31 23:03:30 +02:00
NEWS release: 0.99.24 2016-06-03 15:56:44 -04:00
README README: add references to EIGRP and NHRP. 2017-05-12 22:51:45 +02:00
README.NetBSD config: switch a few references to say FRR 2017-07-12 11:25:33 -05:00
render_md.py build: number sections in COMMUNITY.md HTML 2016-12-05 19:08:00 +01:00
REPORTING-BUGS config: switch a few references to say FRR 2017-07-12 11:25:33 -05:00
SERVICES babeld/eigrpd: flip VTY ports & fix rpm 2017-06-13 14:36:55 +02:00
stamp-h.in Initial revision 2002-12-13 20:15:29 +00:00
update-autotools * README.NetBSD: use update-autotools instead of autoreconf 2007-02-02 16:52:38 +00:00

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

Currently FRRouting supports BGP4, BGP4+, OSPFv2, OSPFv3, RIPv1,
RIPv2, RIPng, PIM-SM/MSDP and LDP as well as very early support for IS-IS,
EIGRP and NHRP.

See the file REPORTING-BUGS to report bugs.

Free RRRouting is free software. See the file COPYING for copying conditions.

Public email discussion can be found at https://lists.frrouting.org/listinfo

Our public slack channel is at https://frrouting.slack.com