From 3921324346dae6665744fa854a082d1ce74fee32 Mon Sep 17 00:00:00 2001 From: Donatas Abraitis Date: Wed, 24 Apr 2024 17:13:48 +0300 Subject: [PATCH] bgpd: Put dest into work queue when the path is really withdrawn by dampening Signed-off-by: Donatas Abraitis --- bgpd/bgp_damp.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/bgpd/bgp_damp.c b/bgpd/bgp_damp.c index 6b9b12dd4d..339bfae56d 100644 --- a/bgpd/bgp_damp.c +++ b/bgpd/bgp_damp.c @@ -370,14 +370,22 @@ void bgp_damp_info_free(struct bgp_damp_info *bdi, struct reuselist *list, { assert(bdi); - bgp_damp_info_unclaim(bdi, list); + afi_t afi = bdi->afi; + safi_t safi = bdi->safi; + struct bgp_path_info *bpi = bdi->path; + struct bgp_dest *dest = bdi->dest; + struct bgp *bgp = bpi->peer->bgp; + const struct prefix *p = bgp_dest_get_prefix(bdi->dest); - bdi->path->extra->damp_info = NULL; - bgp_path_info_unset_flag(bdi->dest, bdi->path, - BGP_PATH_HISTORY | BGP_PATH_DAMPED); + bgp_damp_info_unclaim(bdi, list); - if (bdi->lastrecord == BGP_RECORD_WITHDRAW && withdraw) - bgp_path_info_delete(bdi->dest, bdi->path); + bpi->extra->damp_info = NULL; + bgp_path_info_unset_flag(dest, bpi, BGP_PATH_HISTORY | BGP_PATH_DAMPED); + if (bdi->lastrecord == BGP_RECORD_WITHDRAW && withdraw) { + bgp_aggregate_decrement(bgp, p, bpi, afi, SAFI_UNICAST); + bgp_path_info_delete(dest, bpi); + bgp_process(bgp, dest, bpi, afi, safi); + } XFREE(MTYPE_BGP_DAMP_INFO, bdi); } -- 2.39.5