]> git.puffer.fish Git - matthieu/frr.git/commitdiff
ospf6d: OSPFv3 route change comparision fixed for ASBR-only change
authorAcee <aceelindem@gmail.com>
Tue, 28 May 2024 14:02:27 +0000 (10:02 -0400)
committerMergify <37929162+mergify[bot]@users.noreply.github.com>
Wed, 29 May 2024 13:01:18 +0000 (13:01 +0000)
When a router route already exists in the area border routers table
as an ABR and it solely changes its ABR or ASBR status, the change
was missed and border route is not updated. This fixes the comparison
for the router_bits in the ospf6_path structure.

This fixes issue https://github.com/FRRouting/frr/issues/16053 although
the actual problem is not the computing router (r2) and not the OSPFv3
redistribution (r3).

Signed-off-by: Acee <aceelindem@gmail.com>
(cherry picked from commit 772688d2d3c03d8eeeb711c2fe3735c9e0885498)

ospf6d/ospf6_abr.c
ospf6d/ospf6_route.h

index e9c42bb80c736f11586b545b8952a919d28fc755..b5d0ed2e7027c1bea5c3f06a085d60b3e748bc1f 100644 (file)
@@ -1356,9 +1356,10 @@ void ospf6_abr_examin_summary(struct ospf6_lsa *lsa, struct ospf6_area *oa)
         * does not match with the new entry then add the new route
         */
        if (old_entry_updated == false) {
-               if ((old == NULL) || (old->type != route->type)
-                   || (old->path.type != route->path.type)
-                   || (old->path.cost != route->path.cost))
+               if ((old == NULL) || (old->type != route->type) ||
+                   (old->path.type != route->path.type) ||
+                   (old->path.cost != route->path.cost) ||
+                   (old->path.router_bits != route->path.router_bits))
                        add_route = true;
        }
 
index c8411c015f86bf833fd816663aaec54658cf8eb8..506ebebeb090f42d368b32ad290b416e4be04114 100644 (file)
@@ -302,6 +302,7 @@ extern const char *const ospf6_path_type_substr[OSPF6_PATH_TYPE_MAX];
         prefix_same(&(ra)->prefix, &(rb)->prefix) &&                          \
         (ra)->path.type == (rb)->path.type &&                                 \
         (ra)->path.cost == (rb)->path.cost &&                                 \
+        (ra)->path.router_bits == (rb)->path.router_bits &&                   \
         (ra)->path.u.cost_e2 == (rb)->path.u.cost_e2 &&                       \
         listcount(ra->paths) == listcount(rb->paths) &&                       \
         ospf6_route_cmp_nexthops(ra, rb) == 0)