From: Donald Sharp Date: Thu, 29 Mar 2018 15:43:49 +0000 (-0400) Subject: bgpd: Only supply ifindex for a v6 nexthop if LL X-Git-Tag: frr-5.0-dev~103^2 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=d4f8783d9575c86b6ae829cb27ee6118895edd0c;p=matthieu%2Ffrr.git bgpd: Only supply ifindex for a v6 nexthop if LL 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 --- diff --git a/bgpd/bgp_zebra.c b/bgpd/bgp_zebra.c index 77416e3cfd..bd2711f1de 100644 --- a/bgpd/bgp_zebra.c +++ b/bgpd/bgp_zebra.c @@ -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