summaryrefslogtreecommitdiffstats
path: root/bfdd
diff options
context:
space:
mode:
authorIgor Ryzhov <iryzhov@nfware.com>2021-11-24 13:01:41 +0100
committerIgor Ryzhov <iryzhov@nfware.com>2021-12-03 16:30:24 +0100
commit074f76812bb1961a5d8a4e7b01d7f70f5da1978b (patch)
treed6f26f0b9cf72add9be23cc16ae278cd41d43cd3 /bfdd
parentMerge pull request #10112 from ton31337/feature/route-map_autocomplete (diff)
downloadfrr-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.c21
-rw-r--r--bfdd/bfd_packet.c21
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);