diff --git a/protocols/bgp/server/bmp_router.go b/protocols/bgp/server/bmp_router.go index 01a5952813210b610b4cc85213a3e954225469fc..df157adef2d043070b95f851c9e90192e47959d4 100644 --- a/protocols/bgp/server/bmp_router.go +++ b/protocols/bgp/server/bmp_router.go @@ -29,6 +29,7 @@ type Router struct { reconnectTimeMin int reconnectTimeMax int reconnectTime int + dialTimeout time.Duration reconnectTimer *time.Timer vrfRegistry *vrf.VRFRegistry neighborManager *neighborManager @@ -69,6 +70,7 @@ func newRouter(addr net.IP, port uint16) *Router { reconnectTimeMin: 30, // Suggested by RFC 7854 reconnectTimeMax: 720, // Suggested by RFC 7854 reconnectTimer: time.NewTimer(time.Duration(0)), + dialTimeout: time.Second * 5, vrfRegistry: vrf.NewVRFRegistry(), neighborManager: newNeighborManager(), logger: log.New(), diff --git a/protocols/bgp/server/bmp_server.go b/protocols/bgp/server/bmp_server.go index cc387a2c6e18399d62d3087f3cb882f06e312e46..68f33218f22e5d06620c146d169c113f7b77950d 100644 --- a/protocols/bgp/server/bmp_server.go +++ b/protocols/bgp/server/bmp_server.go @@ -56,7 +56,7 @@ func (b *BMPServer) AddRouter(addr net.IP, port uint16) { go func(r *Router) { for { <-r.reconnectTimer.C - c, err := net.Dial("tcp", fmt.Sprintf("%s:%d", r.address.String(), r.port)) + c, err := net.DialTimeout("tcp", fmt.Sprintf("%s:%d", r.address.String(), r.port), r.dialTimeout) if err != nil { log.Infof("Unable to connect to BMP router: %v", err) if r.reconnectTime == 0 { @@ -68,7 +68,8 @@ func (b *BMPServer) AddRouter(addr net.IP, port uint16) { continue } - r.reconnectTime = 0 + r.reconnectTime = r.reconnectTimeMin + r.reconnectTimer = time.NewTimer(time.Second * time.Duration(r.reconnectTime)) log.Infof("Connected to %s", r.address.String()) r.serve(c) }