mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-02 18:52:04 +00:00
Merge pull request #14013 from opensourcerouting/fix/backport_aggregate_memory_leaks_8.5
bgpd: Memory leaks for aggregate (backports)
This commit is contained in:
commit
cdbca826e2
@ -2169,11 +2169,15 @@ static void bgp_aggr_aspath_prepare(struct hash_bucket *hb, void *arg)
|
||||
{
|
||||
struct aspath *hb_aspath = hb->data;
|
||||
struct aspath **aggr_aspath = arg;
|
||||
struct aspath *aspath = NULL;
|
||||
|
||||
if (*aggr_aspath)
|
||||
*aggr_aspath = aspath_aggregate(*aggr_aspath, hb_aspath);
|
||||
else
|
||||
if (*aggr_aspath) {
|
||||
aspath = aspath_aggregate(*aggr_aspath, hb_aspath);
|
||||
aspath_free(*aggr_aspath);
|
||||
*aggr_aspath = aspath;
|
||||
} else {
|
||||
*aggr_aspath = aspath_dup(hb_aspath);
|
||||
}
|
||||
}
|
||||
|
||||
void bgp_aggr_aspath_remove(void *arg)
|
||||
|
@ -7252,7 +7252,7 @@ static struct bgp_aggregate *bgp_aggregate_new(void)
|
||||
return XCALLOC(MTYPE_BGP_AGGREGATE, sizeof(struct bgp_aggregate));
|
||||
}
|
||||
|
||||
static void bgp_aggregate_free(struct bgp_aggregate *aggregate)
|
||||
void bgp_aggregate_free(struct bgp_aggregate *aggregate)
|
||||
{
|
||||
XFREE(MTYPE_ROUTE_MAP_NAME, aggregate->suppress_map_name);
|
||||
route_map_counter_decrement(aggregate->suppress_map);
|
||||
@ -7652,7 +7652,7 @@ static void bgp_aggregate_med_update(struct bgp_aggregate *aggregate,
|
||||
}
|
||||
|
||||
/* Update an aggregate as routes are added/removed from the BGP table */
|
||||
void bgp_aggregate_route(struct bgp *bgp, const struct prefix *p, afi_t afi,
|
||||
bool bgp_aggregate_route(struct bgp *bgp, const struct prefix *p, afi_t afi,
|
||||
safi_t safi, struct bgp_aggregate *aggregate)
|
||||
{
|
||||
struct bgp_table *table;
|
||||
@ -7670,9 +7670,9 @@ void bgp_aggregate_route(struct bgp *bgp, const struct prefix *p, afi_t afi,
|
||||
/* If the bgp instance is being deleted or self peer is deleted
|
||||
* then do not create aggregate route
|
||||
*/
|
||||
if (CHECK_FLAG(bgp->flags, BGP_FLAG_DELETE_IN_PROGRESS)
|
||||
|| (bgp->peer_self == NULL))
|
||||
return;
|
||||
if (CHECK_FLAG(bgp->flags, BGP_FLAG_DELETE_IN_PROGRESS) ||
|
||||
bgp->peer_self == NULL)
|
||||
return false;
|
||||
|
||||
/* Initialize and test routes for MED difference. */
|
||||
if (aggregate->match_med)
|
||||
@ -7864,6 +7864,8 @@ void bgp_aggregate_route(struct bgp *bgp, const struct prefix *p, afi_t afi,
|
||||
bgp_aggregate_install(bgp, afi, safi, p, origin, aspath, community,
|
||||
ecommunity, lcommunity, atomic_aggregate,
|
||||
aggregate);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void bgp_aggregate_delete(struct bgp *bgp, const struct prefix *p, afi_t afi,
|
||||
@ -8454,7 +8456,10 @@ static int bgp_aggregate_set(struct vty *vty, const char *prefix_str, afi_t afi,
|
||||
bgp_dest_set_bgp_aggregate_info(dest, aggregate);
|
||||
|
||||
/* Aggregate address insert into BGP routing table. */
|
||||
bgp_aggregate_route(bgp, &p, afi, safi, aggregate);
|
||||
if (!bgp_aggregate_route(bgp, &p, afi, safi, aggregate)) {
|
||||
bgp_aggregate_free(aggregate);
|
||||
bgp_dest_unlock_node(dest);
|
||||
}
|
||||
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
@ -780,7 +780,7 @@ extern void bgp_config_write_distance(struct vty *, struct bgp *, afi_t,
|
||||
extern void bgp_aggregate_delete(struct bgp *bgp, const struct prefix *p,
|
||||
afi_t afi, safi_t safi,
|
||||
struct bgp_aggregate *aggregate);
|
||||
extern void bgp_aggregate_route(struct bgp *bgp, const struct prefix *p,
|
||||
extern bool bgp_aggregate_route(struct bgp *bgp, const struct prefix *p,
|
||||
afi_t afi, safi_t safi,
|
||||
struct bgp_aggregate *aggregate);
|
||||
extern void bgp_aggregate_increment(struct bgp *bgp, const struct prefix *p,
|
||||
@ -889,6 +889,7 @@ extern void bgp_path_info_free_with_caller(const char *caller,
|
||||
extern void bgp_path_info_add_with_caller(const char *caller,
|
||||
struct bgp_dest *dest,
|
||||
struct bgp_path_info *pi);
|
||||
extern void bgp_aggregate_free(struct bgp_aggregate *aggregate);
|
||||
#define bgp_path_info_add(A, B) \
|
||||
bgp_path_info_add_with_caller(__func__, (A), (B))
|
||||
#define bgp_path_info_free(B) bgp_path_info_free_with_caller(__func__, (B))
|
||||
|
@ -4211,8 +4211,8 @@ static void bgp_route_map_process_update(struct bgp *bgp, const char *rmap_name,
|
||||
inet_ntop(bn_p->family,
|
||||
&bn_p->u.prefix, buf,
|
||||
sizeof(buf)));
|
||||
bgp_aggregate_route(bgp, bn_p, afi, safi,
|
||||
aggregate);
|
||||
(void)bgp_aggregate_route(bgp, bn_p, afi, safi,
|
||||
aggregate);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user