From: Paul Jakma Date: Fri, 8 Dec 2006 00:31:22 +0000 (+0000) Subject: [bgpd] Bug #302, bgpd can get stuck in state Clearing X-Git-Tag: frr-2.0-rc1~2576 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=95fdcd8a793d6c271996da221c4030d8ee277891;p=mirror%2Ffrr.git [bgpd] Bug #302, bgpd can get stuck in state Clearing 2006-12-07 Paul Jakma * bgp_fsm.c: Bug #302 fix, diagnosis, suggestions and testing by Juergen Kammer . Fix follows from his suggested fix, just made in a slightly different way. (bgp_event) Transitions into Clearing always must call bgp_clear_route_all(). (bgp_stop) No need to clear routes here, BGP FSM should do it. --- diff --git a/bgpd/ChangeLog b/bgpd/ChangeLog index 7ad200a133..97f78caa4f 100644 --- a/bgpd/ChangeLog +++ b/bgpd/ChangeLog @@ -1,3 +1,13 @@ +2006-12-07 Paul Jakma + + * bgp_fsm.c: Bug #302 fix, diagnosis, suggestions and testing + by Juergen Kammer . Fix follows from + his suggested fix, just made in a slightly different way. + (bgp_event) Transitions into Clearing always must call + bgp_clear_route_all(). + (bgp_stop) No need to clear routes here, BGP FSM should do + it. + 2006-11-30 Andrew J. Schorr * bgp_debug.h: Declare new bgp_debug_zebra conf and term flags, diff --git a/bgpd/bgp_fsm.c b/bgpd/bgp_fsm.c index ef8dfea43e..d704c29758 100644 --- a/bgpd/bgp_fsm.c +++ b/bgpd/bgp_fsm.c @@ -483,9 +483,6 @@ bgp_stop (struct peer *peer) /* Reset uptime. */ bgp_uptime_reset (peer); - /* Need of clear of peer. */ - bgp_clear_route_all (peer); - /* Reset peer synctime */ peer->synctime = 0; } @@ -1092,8 +1089,14 @@ bgp_event (struct thread *thread) { /* If status is changed. */ if (next != peer->status) - bgp_fsm_change_status (peer, next); - + { + /* Transition into Clearing must /always/ clear all routes.. */ + if (next == Clearing) + bgp_clear_route_all (peer); + + bgp_fsm_change_status (peer, next); + } + /* Make sure timer is set. */ bgp_timer_set (peer); }