diff options
| author | Russ White <russ@riw.us> | 2021-12-07 06:38:15 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-12-07 06:38:15 -0500 |
| commit | 46565af731054804576ea0fd364a32776860ec92 (patch) | |
| tree | 188b1fe24fee3de161307dc00d5c87c8b8c5cf5d /bfdd/bfd_packet.c | |
| parent | 10d77aab86d62074b01ba919d054c527d237f491 (diff) | |
| parent | 074f76812bb1961a5d8a4e7b01d7f70f5da1978b (diff) | |
Merge pull request #10120 from idryzhov/bfd-detect-to
bfdd: fix detection timeout update
Diffstat (limited to 'bfdd/bfd_packet.c')
| -rw-r--r-- | bfdd/bfd_packet.c | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/bfdd/bfd_packet.c b/bfdd/bfd_packet.c index 5b1329fa37..652b914118 100644 --- a/bfdd/bfd_packet.c +++ b/bfdd/bfd_packet.c @@ -697,11 +697,26 @@ int bfd_recv_cb(struct thread *t) /* Handle poll finalization. */ bs_final_handler(bfd); - } else { - /* Received a packet, lets update the receive timer. */ - bfd_recvtimer_update(bfd); } + /* + * Detection timeout calculation: + * The minimum detection timeout is the remote detection + * multipler (number of packets to be missed) times the agreed + * transmission interval. + * + * RFC 5880, Section 6.8.4. + */ + if (bfd->cur_timers.required_min_rx > bfd->remote_timers.desired_min_tx) + bfd->detect_TO = bfd->remote_detect_mult + * bfd->cur_timers.required_min_rx; + else + bfd->detect_TO = bfd->remote_detect_mult + * bfd->remote_timers.desired_min_tx; + + /* Apply new receive timer immediately. */ + bfd_recvtimer_update(bfd); + /* Handle echo timers changes. */ bs_echo_timer_handler(bfd); |
