summaryrefslogtreecommitdiff
path: root/bgpd/bgp_fsm.c
diff options
context:
space:
mode:
Diffstat (limited to 'bgpd/bgp_fsm.c')
-rw-r--r--bgpd/bgp_fsm.c13
1 files changed, 8 insertions, 5 deletions
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);
}