From b02fdbcde70dc5bee0a4f0edb86f7ffe0b5a2a3b Mon Sep 17 00:00:00 2001 From: Brendan O'Dea Date: Mon, 15 Nov 2004 06:49:56 +0000 Subject: [PATCH] Don't assume BGP peer sends back negotiated hold time, pick smallest --- Changes | 1 + bgp.c | 11 ++++++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/Changes b/Changes index 5ac335f..0cde786 100644 --- a/Changes +++ b/Changes @@ -1,5 +1,6 @@ * ? Brendan O'Dea 2.0.7 - Fix socket creation in host_unreachable() (thanks to Bjørn Augestad) +- Don't assume BGP peer sends back negotiated hold time, pick smallest * Thu Nov 11 2004 Brendan O'Dea 2.0.6 - Make BGP keepalive/hold time configurable diff --git a/bgp.c b/bgp.c index 77ecb2f..2d0954b 100644 --- a/bgp.c +++ b/bgp.c @@ -10,7 +10,7 @@ * nor RFC2385 (which requires a kernel patch on 2.4 kernels). */ -char const *cvs_id_bgp = "$Id: bgp.c,v 1.6 2004-11-11 03:07:42 bodea Exp $"; +char const *cvs_id_bgp = "$Id: bgp.c,v 1.7 2004-11-15 06:49:56 bodea Exp $"; #include #include @@ -857,6 +857,7 @@ static int bgp_handle_input(struct bgp_peer *peer) case BGP_MSG_OPEN: { struct bgp_data_open data; + int hold; int i; for (i = 0; i < sizeof(p->header.marker); i++) @@ -903,15 +904,19 @@ static int bgp_handle_input(struct bgp_peer *peer) return 0; } - if ((peer->hold = ntohs(data.hold_time)) < 3) + if ((hold = ntohs(data.hold_time)) < 3) { LOG(1, 0, 0, 0, "Bad hold time (%d) from BGP peer %s\n", - peer->hold, peer->name); + hold, peer->name); bgp_send_notification(peer, BGP_ERR_OPEN, BGP_ERR_OPN_HOLD_TIME); return 0; } + /* pick lowest hold time */ + if (hold < peer->hold) + peer->hold = hold; + /* adjust our keepalive based on negotiated hold value */ if (peer->keepalive * 3 > peer->hold) peer->keepalive = peer->hold / 3; -- 2.20.1