Merge pull request #7444 from sudhanshukumar22/bgp-clean-dampening-issue

bgpd: clear ip bgp dampening was not triggering the route calculation…
This commit is contained in:
Donatas Abraitis 2021-02-22 09:37:04 +02:00 committed by GitHub
commit 2031dbf31c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 29 additions and 6 deletions

View File

@ -545,7 +545,8 @@ int bgp_damp_enable(struct bgp *bgp, afi_t afi, safi_t safi, time_t half,
} }
/* Clean all the bgp_damp_info stored in reuse_list and no_reuse_list. */ /* Clean all the bgp_damp_info stored in reuse_list and no_reuse_list. */
void bgp_damp_info_clean(struct bgp_damp_config *bdc, afi_t afi, safi_t safi) void bgp_damp_info_clean(struct bgp *bgp, struct bgp_damp_config *bdc,
afi_t afi, safi_t safi)
{ {
struct bgp_damp_info *bdi; struct bgp_damp_info *bdi;
struct reuselist_node *rn; struct reuselist_node *rn;
@ -557,6 +558,13 @@ void bgp_damp_info_clean(struct bgp_damp_config *bdc, afi_t afi, safi_t safi)
list = &bdc->reuse_list[i]; list = &bdc->reuse_list[i];
while ((rn = SLIST_FIRST(list)) != NULL) { while ((rn = SLIST_FIRST(list)) != NULL) {
bdi = rn->info; bdi = rn->info;
if (bdi->lastrecord == BGP_RECORD_UPDATE) {
bgp_aggregate_increment(bgp, &bdi->dest->p,
bdi->path, bdi->afi,
bdi->safi);
bgp_process(bgp, bdi->dest, bdi->afi,
bdi->safi);
}
bgp_reuselist_del(list, &rn); bgp_reuselist_del(list, &rn);
bgp_damp_info_free(&bdi, bdc, 1, afi, safi); bgp_damp_info_free(&bdi, bdc, 1, afi, safi);
} }
@ -607,7 +615,7 @@ int bgp_damp_disable(struct bgp *bgp, afi_t afi, safi_t safi)
thread_cancel(&bdc->t_reuse); thread_cancel(&bdc->t_reuse);
/* Clean BGP dampening information. */ /* Clean BGP dampening information. */
bgp_damp_info_clean(bdc, afi, safi); bgp_damp_info_clean(bgp, bdc, afi, safi);
UNSET_FLAG(bgp->af_flags[afi][safi], BGP_CONFIG_DAMPENING); UNSET_FLAG(bgp->af_flags[afi][safi], BGP_CONFIG_DAMPENING);
@ -896,7 +904,7 @@ void bgp_peer_damp_disable(struct peer *peer, afi_t afi, safi_t safi)
bdc = &peer->damp[afi][safi]; bdc = &peer->damp[afi][safi];
if (!bdc) if (!bdc)
return; return;
bgp_damp_info_clean(bdc, afi, safi); bgp_damp_info_clean(peer->bgp, bdc, afi, safi);
UNSET_FLAG(peer->af_flags[afi][safi], PEER_FLAG_CONFIG_DAMPENING); UNSET_FLAG(peer->af_flags[afi][safi], PEER_FLAG_CONFIG_DAMPENING);
} }

View File

@ -151,8 +151,8 @@ extern int bgp_damp_update(struct bgp_path_info *path, struct bgp_dest *dest,
extern void bgp_damp_info_free(struct bgp_damp_info **path, extern void bgp_damp_info_free(struct bgp_damp_info **path,
struct bgp_damp_config *bdc, int withdraw, struct bgp_damp_config *bdc, int withdraw,
afi_t afi, safi_t safi); afi_t afi, safi_t safi);
extern void bgp_damp_info_clean(struct bgp_damp_config *bdc, afi_t afi, extern void bgp_damp_info_clean(struct bgp *bgp, struct bgp_damp_config *bdc,
safi_t safi); afi_t afi, safi_t safi);
extern void bgp_damp_config_clean(struct bgp_damp_config *bdc); extern void bgp_damp_config_clean(struct bgp_damp_config *bdc);
extern int bgp_damp_decay(time_t, int, struct bgp_damp_config *damp); extern int bgp_damp_decay(time_t, int, struct bgp_damp_config *damp);
extern void bgp_config_write_damp(struct vty *vty, struct bgp *bgp, afi_t afi, extern void bgp_config_write_damp(struct vty *vty, struct bgp *bgp, afi_t afi,

View File

@ -14308,6 +14308,21 @@ static int bgp_clear_damp_route(struct vty *vty, const char *view_name,
while (pi) { while (pi) {
if (pi->extra && pi->extra->damp_info) { if (pi->extra && pi->extra->damp_info) {
pi_temp = pi->next; pi_temp = pi->next;
struct bgp_damp_info *bdi =
pi->extra->damp_info;
if (bdi->lastrecord
== BGP_RECORD_UPDATE) {
bgp_aggregate_increment(
bgp,
&bdi->dest->p,
bdi->path,
bdi->afi,
bdi->safi);
bgp_process(bgp,
bdi->dest,
bdi->afi,
bdi->safi);
}
bgp_damp_info_free( bgp_damp_info_free(
&pi->extra->damp_info, &pi->extra->damp_info,
&bgp->damp[afi][safi], &bgp->damp[afi][safi],
@ -14334,7 +14349,7 @@ DEFUN (clear_ip_bgp_dampening,
"Clear route flap dampening information\n") "Clear route flap dampening information\n")
{ {
VTY_DECLVAR_CONTEXT(bgp, bgp); VTY_DECLVAR_CONTEXT(bgp, bgp);
bgp_damp_info_clean(&bgp->damp[AFI_IP][SAFI_UNICAST], AFI_IP, bgp_damp_info_clean(bgp, &bgp->damp[AFI_IP][SAFI_UNICAST], AFI_IP,
SAFI_UNICAST); SAFI_UNICAST);
return CMD_SUCCESS; return CMD_SUCCESS;
} }