summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bgpd/bgp_route.c6
-rw-r--r--bgpd/bgp_route.h1
-rw-r--r--bgpd/bgp_routemap.c1
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;
}