diff options
Diffstat (limited to 'server/fsm.go')
-rw-r--r-- | server/fsm.go | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/server/fsm.go b/server/fsm.go index 872f8b8c..98c2518c 100644 --- a/server/fsm.go +++ b/server/fsm.go @@ -708,6 +708,12 @@ func (h *FSMHandler) opensent() (bgp.FSMState, FsmStateReason) { fsm.pConf.Timers.State.NegotiatedHoldTime = holdTime } + keepalive := fsm.pConf.Timers.Config.KeepaliveInterval + if n := fsm.pConf.Timers.State.NegotiatedHoldTime; n < myHoldTime { + keepalive = n / 3 + } + fsm.pConf.Timers.State.KeepaliveInterval = keepalive + msg := bgp.NewBGPKeepAliveMessage() b, _ := msg.Serialize() fsm.conn.Write(b) @@ -761,10 +767,7 @@ func keepaliveTicker(fsm *FSM) *time.Ticker { if negotiatedTime == 0 { return &time.Ticker{} } - sec := time.Second * time.Duration(fsm.pConf.Timers.Config.KeepaliveInterval) - if negotiatedTime < fsm.pConf.Timers.Config.HoldTime { - sec = time.Second * time.Duration(negotiatedTime) / 3 - } + sec := time.Second * time.Duration(fsm.pConf.Timers.State.KeepaliveInterval) if sec == 0 { sec = 1 } |