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)) {
switch (nh->type) {
case NEXTHOP_TYPE_IFINDEX:
case NEXTHOP_TYPE_BLACKHOLE:
/*
* 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
* Family specific. If we get here, we will either use
* the AF of the route, or the one we got passed from
* here from the kernel.
* Family specific as that the kernel relies on these
* for some reason. blackholes can be v6 because the
* 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;
break;
case NEXTHOP_TYPE_BLACKHOLE:
nhe->afi = AFI_IP6;
break;
case NEXTHOP_TYPE_IPV4_IFINDEX:
case NEXTHOP_TYPE_IPV4:
nhe->afi = AFI_IP;