summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAcee <aceelindem@gmail.com>2024-05-28 10:02:27 -0400
committerton31337 <3352707+ton31337@users.noreply.github.com>2024-06-02 15:22:21 +0000
commita8a33a501070c570c3daaebd9f600a53e553a30c (patch)
treecf75c92d025cfa46d3d4a4d4a678a9ebe0a8d0c5
parentf98915a0a012160117d05360dae26c56229b4d5f (diff)
ospf6d: OSPFv3 route change comparision fixed for ASBR-only change
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)
-rw-r--r--ospf6d/ospf6_abr.c7
-rw-r--r--ospf6d/ospf6_route.h1
2 files changed, 5 insertions, 3 deletions
diff --git a/ospf6d/ospf6_abr.c b/ospf6d/ospf6_abr.c
index f4202a4a29..ef780af15b 100644
--- a/ospf6d/ospf6_abr.c
+++ b/ospf6d/ospf6_abr.c
@@ -1350,9 +1350,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;
}
diff --git a/ospf6d/ospf6_route.h b/ospf6d/ospf6_route.h
index 2c1d17efc3..c9486bc1cc 100644
--- a/ospf6d/ospf6_route.h
+++ b/ospf6d/ospf6_route.h
@@ -287,6 +287,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))