zebra: Allow recursive nexthop resolution to consider blackholes

When we get a route install for a route that needs to be recursively
resolved allow the blackhole to be considered and used if it is
available.

This allows bgp to install a route that will be blackholed.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
This commit is contained in:
Donald Sharp 2017-09-12 08:18:39 -04:00
parent 1f1d24a8f1
commit 59693377a9

View File

@ -357,6 +357,10 @@ static void nexthop_set_resolved(afi_t afi, struct nexthop *newhop,
resolved_hop->ifindex = newhop->ifindex;
}
if (newhop->type == NEXTHOP_TYPE_BLACKHOLE) {
resolved_hop->type = NEXTHOP_TYPE_BLACKHOLE;
resolved_hop->bh_type = nexthop->bh_type;
}
resolved_hop->rparent = nexthop;
nexthop_add(&nexthop->resolved, resolved_hop);
}
@ -484,8 +488,6 @@ static int nexthop_active(afi_t afi, struct route_entry *re,
} else if (CHECK_FLAG(re->flags, ZEBRA_FLAG_INTERNAL)) {
resolved = 0;
for (ALL_NEXTHOPS(match->nexthop, newhop)) {
if (newhop->type == NEXTHOP_TYPE_BLACKHOLE)
continue;
if (!CHECK_FLAG(newhop->flags,
NEXTHOP_FLAG_FIB))
continue;
@ -509,8 +511,6 @@ static int nexthop_active(afi_t afi, struct route_entry *re,
} else if (re->type == ZEBRA_ROUTE_STATIC) {
resolved = 0;
for (ALL_NEXTHOPS(match->nexthop, newhop)) {
if (newhop->type == NEXTHOP_TYPE_BLACKHOLE)
continue;
if (!CHECK_FLAG(newhop->flags,
NEXTHOP_FLAG_FIB))
continue;