]> git.puffer.fish Git - mirror/frr.git/commitdiff
zebra: Allow blackhole singleton nexthops to be v6 16689/head
authorDonald Sharp <sharpd@nvidia.com>
Thu, 29 Aug 2024 19:06:31 +0000 (15:06 -0400)
committerDonald Sharp <sharpd@nvidia.com>
Thu, 29 Aug 2024 19:06:31 +0000 (15:06 -0400)
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>
zebra/zebra_nhg.c

index 27b7f6340befcbc91ff47a5abda9ce92562d2f3c..ffcdcdd6ff9baeca756c3a7e968548046befc671 100644 (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;