bfdd: Only apply increased transmission interval after Poll Sequence

If bfd.DesiredMinTxInterval is increased and bfd.SessionState is Up, the actual transmission interval used MUST NOT change until the Poll Sequence described above has terminated.

Signed-off-by: zmw12306 <zmw12306@gmail.com>
This commit is contained in:
zmw12306 2025-04-06 01:47:57 -04:00
parent 44c4743e08
commit 27292c0dc1

View file

@ -1458,6 +1458,8 @@ void bs_echo_timer_handler(struct bfd_session *bs)
*/
void bs_final_handler(struct bfd_session *bs)
{
uint64_t old_xmt_TO = bs->xmt_TO;
/* Start using our new timers. */
bs->cur_timers.desired_min_tx = bs->timers.desired_min_tx;
bs->cur_timers.required_min_rx = bs->timers.required_min_rx;
@ -1485,6 +1487,12 @@ void bs_final_handler(struct bfd_session *bs)
bs->xmt_TO = bs->timers.desired_min_tx;
else
bs->xmt_TO = bs->remote_timers.required_min_rx;
/* Only apply increased transmission interval after Poll Sequence */
if (bs->ses_state == PTM_BFD_UP && bs->xmt_TO > old_xmt_TO) {
bs->xmt_TO = old_xmt_TO; /* Keep old timing until Poll Sequence done */
return;
}
/* Apply new transmission timer immediately. */
ptm_bfd_start_xmt_timer(bs, false);