]> git.puffer.fish Git - mirror/frr.git/commitdiff
zebra: allow multiple connected routes for the same prefix 1127/head
authorRenato Westphal <renato@opensourcerouting.org>
Thu, 7 Sep 2017 02:54:06 +0000 (23:54 -0300)
committerRenato Westphal <renato@opensourcerouting.org>
Thu, 7 Sep 2017 18:00:42 +0000 (15:00 -0300)
With unnumbered interfaces on Linux we have the same IP address configured
on several different interfaces and hence multiple connected routes for
the same prefix.

With that said, add an exception in rib_add() to allow zebra to keep
track of all connected routes. We don't need to worry about the bugs
reported in a3d18ce because connected routes are always added from the
connected_up() function, and connected_update() already takes care of
handling duplicate addresses per interface.

Fixes #1112.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
zebra/zebra_rib.c

index d74f84a1f689d84a17e76050a59ad2b545b87562..c4c80b156b796c9c0188b5e027c6ade99feab422 100644 (file)
@@ -2475,10 +2475,11 @@ int rib_add(afi_t afi, safi_t safi, vrf_id_t vrf_id, int type, u_short instance,
                        return 0;
                /*
                 * Nexthop is different. Remove the old route unless it's
-                * a link-local route.
+                * a connected route. This exception is necessary because
+                * of IPv6 link-local routes and unnumbered interfaces on
+                * Linux.
                 */
-               else if (afi != AFI_IP6
-                        || !IN6_IS_ADDR_LINKLOCAL(&p->u.prefix6))
+               else if (type != ZEBRA_ROUTE_CONNECT)
                        same = re;
        }