]> git.puffer.fish Git - mirror/frr.git/commitdiff
bgpd: Only supply ifindex for a v6 nexthop if LL 1990/head
authorDonald Sharp <sharpd@cumulusnetworks.com>
Thu, 29 Mar 2018 15:43:49 +0000 (11:43 -0400)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Thu, 29 Mar 2018 15:48:43 +0000 (11:48 -0400)
BGP is calculating a v6 routes nexthop as the nexthop address
+ an ifindex.  The ifindex calculated comes from where we received
the route from as that we have to do this for LL addresses.

But a v6 address that is not a LL we do not need to provide
to zebra for nexthop resolution because a global address
by default can be looked up and resolved appropriately.

Modify the code so that we must have an ifindex for a v6 nexthop
if the address is LL, else don't pass the ifindex down to zebra.

Fixes: #1986
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
bgpd/bgp_zebra.c

index 77416e3cfd47b080f0ff9cbf4995513e5606116f..bd2711f1dea4a23719996490114b555d102e7d35 100644 (file)
@@ -1197,12 +1197,17 @@ void bgp_zebra_announce(struct bgp_node *rn, struct prefix *p,
                                        ifindex = mpinfo->peer->nexthop.ifp
                                                          ->ifindex;
                        }
-                       if (ifindex == 0)
-                               continue;
+
+                       if (IN6_IS_ADDR_LINKLOCAL(nexthop)) {
+                               if (ifindex == 0)
+                                       continue;
+                       } else
+                               ifindex = 0;
 
                        api_nh->gate.ipv6 = *nexthop;
                        api_nh->ifindex = ifindex;
-                       api_nh->type = NEXTHOP_TYPE_IPV6_IFINDEX;
+                       api_nh->type = ifindex ? NEXTHOP_TYPE_IPV6_IFINDEX
+                                              : NEXTHOP_TYPE_IPV6;
                }
 
                if (mpinfo->extra