]> git.puffer.fish Git - matthieu/frr.git/commitdiff
bgpd: Put dest into work queue when the path is really withdrawn by dampening
authorDonatas Abraitis <donatas@opensourcerouting.org>
Wed, 24 Apr 2024 14:13:48 +0000 (17:13 +0300)
committerDonatas Abraitis <donatas@opensourcerouting.org>
Fri, 3 May 2024 06:30:33 +0000 (09:30 +0300)
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
bgpd/bgp_damp.c

index 6b9b12dd4d6a0128ae97f9415d67bb8d71c332a3..339bfae56d4c16de66fc84010f38eb087fc2e06f 100644 (file)
@@ -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);
 }