From 95fdcd8a793d6c271996da221c4030d8ee277891 Mon Sep 17 00:00:00 2001 From: Paul Jakma Date: Fri, 8 Dec 2006 00:31:22 +0000 Subject: [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. --- bgpd/ChangeLog | 10 ++++++++++ bgpd/bgp_fsm.c | 13 ++++++++----- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/bgpd/ChangeLog b/bgpd/ChangeLog index 7ad200a1..97f78caa 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 ef8dfea4..d704c297 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); } -- cgit v1.2.1