diff options
author | Igor Ryzhov <iryzhov@nfware.com> | 2021-11-24 13:01:41 +0100 |
---|---|---|
committer | Igor Ryzhov <iryzhov@nfware.com> | 2021-12-03 16:30:24 +0100 |
commit | 074f76812bb1961a5d8a4e7b01d7f70f5da1978b (patch) | |
tree | d6f26f0b9cf72add9be23cc16ae278cd41d43cd3 /bfdd | |
parent | Merge pull request #10112 from ton31337/feature/route-map_autocomplete (diff) | |
download | frr-074f76812bb1961a5d8a4e7b01d7f70f5da1978b.tar.xz frr-074f76812bb1961a5d8a4e7b01d7f70f5da1978b.zip |
bfdd: fix detection timeout update
Per RFC 5880 section 6.8.12, the use of a Poll Sequence is not necessary
when the Detect Multiplier is changed. Currently, we update the Detection
Timeout only when a Poll Sequence is terminated, therefore we ignore the
Detect Multiplier change if it's not accompanied with RX/TX timer change.
To fix the problem, we should update the Detection Timeout on every
received packet.
Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
Diffstat (limited to 'bfdd')
-rw-r--r-- | bfdd/bfd.c | 21 | ||||
-rw-r--r-- | bfdd/bfd_packet.c | 21 |
2 files changed, 18 insertions, 24 deletions
diff --git a/bfdd/bfd.c b/bfdd/bfd.c index f49748045..5ca109eef 100644 --- a/bfdd/bfd.c +++ b/bfdd/bfd.c @@ -1226,27 +1226,6 @@ void bs_final_handler(struct bfd_session *bs) /* Apply new transmission timer immediately. */ ptm_bfd_start_xmt_timer(bs, false); - /* - * 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. - * - * TODO: support sending/counting more packets inside detection - * timeout. - */ - if (bs->timers.required_min_rx > bs->remote_timers.desired_min_tx) - bs->detect_TO = bs->remote_detect_mult - * bs->timers.required_min_rx; - else - bs->detect_TO = bs->remote_detect_mult - * bs->remote_timers.desired_min_tx; - - /* Apply new receive timer immediately. */ - bfd_recvtimer_update(bs); - /* Notify watchers about changed timers. */ control_notify_config(BCM_NOTIFY_CONFIG_UPDATE, bs); } diff --git a/bfdd/bfd_packet.c b/bfdd/bfd_packet.c index 5b1329fa3..652b91411 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); |