diff options
| author | Russ White <russ@riw.us> | 2020-09-08 11:28:40 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-09-08 11:28:40 -0400 |
| commit | 5ceb842f455a9b5ec738f7f52aad3a33e1ebf67c (patch) | |
| tree | ab748ac03177a7b7face84b1c85cf47542544f6e /bgpd/bgp_packet.c | |
| parent | d6165cf5437cea776baa5dcbcdc0cb3877acc9e9 (diff) | |
| parent | 91052810f9df11b6858fbe01efbb1ea4d2590ba6 (diff) | |
Merge pull request #6969 from ton31337/feature/autoshutdown_if_rtt_higher_than_specified
bgpd: Add `neighbor <neigh> shutdown rtt` command
Diffstat (limited to 'bgpd/bgp_packet.c')
| -rw-r--r-- | bgpd/bgp_packet.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/bgpd/bgp_packet.c b/bgpd/bgp_packet.c index 0d81403803..15dba37667 100644 --- a/bgpd/bgp_packet.c +++ b/bgpd/bgp_packet.c @@ -1432,6 +1432,27 @@ static int bgp_keepalive_receive(struct peer *peer, bgp_size_t size) bgp_update_implicit_eors(peer); + peer->rtt = sockopt_tcp_rtt(peer->fd); + + /* If the peer's RTT is higher than expected, shutdown + * the peer automatically. + */ + if (CHECK_FLAG(peer->flags, PEER_FLAG_RTT_SHUTDOWN) + && peer->rtt > peer->rtt_expected) { + + peer->rtt_keepalive_rcv++; + + if (peer->rtt_keepalive_rcv > peer->rtt_keepalive_conf) { + zlog_warn( + "%s shutdown due to high round-trip-time (%dms > %dms)", + peer->host, peer->rtt, peer->rtt_expected); + peer_flag_set(peer, PEER_FLAG_SHUTDOWN); + } + } else { + if (peer->rtt_keepalive_rcv) + peer->rtt_keepalive_rcv--; + } + return Receive_KEEPALIVE_message; } |
