zebra: Allow blackhole singleton nexthops to be v6

A blackhole nexthop, according to the linux kernel,
can be v4 or v6.  A v4 blackhole nexthop cannot be
used on a v6 route, but a v6 blackhole nexthop can
be used with a v4 route.  Convert all blackhole
singleton nexthops to v6 and just use that.
Possibly reducing the number of active nexthops by 1.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
This commit is contained in:
Donald Sharp 2024-08-29 15:06:31 -04:00
parent c10cdcd79a
commit f90989d52a

View File

@ -356,18 +356,23 @@ void zebra_nhe_init(struct nhg_hash_entry *nhe, afi_t afi,
*/ */
if (nh && (nh->next == NULL)) { if (nh && (nh->next == NULL)) {
switch (nh->type) { switch (nh->type) {
case NEXTHOP_TYPE_IFINDEX:
case NEXTHOP_TYPE_BLACKHOLE:
/* /*
* This switch case handles setting the afi different * This switch case handles setting the afi different
* for ipv4/v6 routes. Ifindex/blackhole nexthop * for ipv4/v6 routes. Ifindex nexthop
* objects cannot be ambiguous, they must be Address * objects cannot be ambiguous, they must be Address
* Family specific. If we get here, we will either use * Family specific as that the kernel relies on these
* the AF of the route, or the one we got passed from * for some reason. blackholes can be v6 because the
* here from the kernel. * v4 kernel infrastructure allows the usage of v6
* blackholes in this case. if we get here, we will
* either use the AF of the route, or the one we got
* passed from here from the kernel.
*/ */
case NEXTHOP_TYPE_IFINDEX:
nhe->afi = afi; nhe->afi = afi;
break; break;
case NEXTHOP_TYPE_BLACKHOLE:
nhe->afi = AFI_IP6;
break;
case NEXTHOP_TYPE_IPV4_IFINDEX: case NEXTHOP_TYPE_IPV4_IFINDEX:
case NEXTHOP_TYPE_IPV4: case NEXTHOP_TYPE_IPV4:
nhe->afi = AFI_IP; nhe->afi = AFI_IP;