From ee1986f1b5ae6b94b446b12e1b77cc30d8f5f46d Mon Sep 17 00:00:00 2001 From: Donatas Abraitis Date: Tue, 30 Jan 2024 15:44:38 +0200 Subject: [PATCH] bgpd: Reinstall aggregated routes if using route-maps and it was changed Without this change when we change the route-map, we never reinstall the route if the route-map has changed. We checked only some attributes like aspath, communities, large-communities, extended-communities, but ignoring the rest of attributes. With this change, let's check if the route-map has changed. bgp_route_map_process_update() is triggered on route-map change, and we set `changed` to true, which treats aggregated route as not the same as it was before. Signed-off-by: Donatas Abraitis --- bgpd/bgp_route.c | 6 ++++-- bgpd/bgp_route.h | 1 + bgpd/bgp_routemap.c | 1 + 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c index 8bcbd3dd8c..518e848258 100644 --- a/bgpd/bgp_route.c +++ b/bgpd/bgp_route.c @@ -7369,8 +7369,9 @@ static void bgp_aggregate_install( * If the aggregate information has not changed * no need to re-install it again. */ - if (pi && bgp_aggregate_info_same(pi, origin, aspath, community, - ecommunity, lcommunity)) { + if (pi && (!aggregate->rmap.changed && + bgp_aggregate_info_same(pi, origin, aspath, community, + ecommunity, lcommunity))) { bgp_dest_unlock_node(dest); if (aspath) @@ -8377,6 +8378,7 @@ static int bgp_aggregate_set(struct vty *vty, const char *prefix_str, afi_t afi, aggregate->rmap.name = XSTRDUP(MTYPE_ROUTE_MAP_NAME, rmap); aggregate->rmap.map = route_map_lookup_by_name(rmap); + aggregate->rmap.changed = true; route_map_counter_increment(aggregate->rmap.map); } diff --git a/bgpd/bgp_route.h b/bgpd/bgp_route.h index 0599e8dce1..935dafccf2 100644 --- a/bgpd/bgp_route.h +++ b/bgpd/bgp_route.h @@ -419,6 +419,7 @@ struct bgp_aggregate { struct { char *name; struct route_map *map; + bool changed; } rmap; /* Suppress-count. */ diff --git a/bgpd/bgp_routemap.c b/bgpd/bgp_routemap.c index 382e8ae409..36e04c5e68 100644 --- a/bgpd/bgp_routemap.c +++ b/bgpd/bgp_routemap.c @@ -4596,6 +4596,7 @@ static void bgp_route_map_process_update(struct bgp *bgp, const char *rmap_name, route_map_counter_increment(map); aggregate->rmap.map = map; + aggregate->rmap.changed = true; matched = true; } -- 2.39.5