Skip to content

Commit

Permalink
Allow graceful restart for dynamic neighbors
Browse files Browse the repository at this point in the history
  • Loading branch information
Foivos Filippopoulos committed Jan 17, 2019
1 parent 61d7a5e commit 318a91e
Showing 1 changed file with 17 additions and 8 deletions.
25 changes: 17 additions & 8 deletions pkg/server/server.go
Expand Up @@ -1150,6 +1150,18 @@ func (s *BgpServer) propagateUpdateToNeighbors(source *peer, newPath *table.Path
}
}

func (s *BgpServer) deleteDynamicNeighbor(peer *peer, oldState bgp.FSMState, e *fsmMsg) {
if peer.isDynamicNeighbor() {
peer.stopPeerRestarting()
go peer.stopFSM()
peer.fsm.lock.RLock()
delete(s.neighborMap, peer.fsm.pConf.State.NeighborAddress)
peer.fsm.lock.RUnlock()
s.broadcastPeerState(peer, oldState, e)
return
}
}

func (s *BgpServer) handleFSMMessage(peer *peer, e *fsmMsg) {
switch e.MsgType {
case fsmMsgStateChange:
Expand Down Expand Up @@ -1196,15 +1208,10 @@ func (s *BgpServer) handleFSMMessage(peer *peer, e *fsmMsg) {
}
peer.fsm.lock.Unlock()

if peer.isDynamicNeighbor() {
peer.stopPeerRestarting()
go peer.stopFSM()
peer.fsm.lock.RLock()
delete(s.neighborMap, peer.fsm.pConf.State.NeighborAddress)
peer.fsm.lock.RUnlock()
s.broadcastPeerState(peer, oldState, e)
return
if !graceful {
s.deleteDynamicNeighbor(peer, oldState, e)
}

} else if nextStateIdle {
peer.fsm.lock.RLock()
longLivedEnabled := peer.fsm.pConf.GracefulRestart.State.LongLivedEnabled
Expand Down Expand Up @@ -1274,6 +1281,8 @@ func (s *BgpServer) handleFSMMessage(peer *peer, e *fsmMsg) {
peer.fsm.lock.Unlock()
peer.DropAll(peer.configuredRFlist())
s.dropPeerAllRoutes(peer, peer.configuredRFlist())

s.deleteDynamicNeighbor(peer, oldState, e)
}
}

Expand Down

0 comments on commit 318a91e

Please sign in to comment.