From 95993c64a375887120466d750c750a27861fca96 Mon Sep 17 00:00:00 2001 From: Klement Sekera Date: Fri, 17 Jan 2020 10:01:52 +0000 Subject: bfd: reset peer discriminator on timeout More RFC compliance. Ticket: VPP-1816 BFD: peer discriminator not reset on timeout Type: fix Change-Id: I68063c18097d282b3527e3fb485c1d0d1fd1b0c8 Signed-off-by: Klement Sekera --- src/vnet/bfd/bfd_main.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'src/vnet') diff --git a/src/vnet/bfd/bfd_main.c b/src/vnet/bfd/bfd_main.c index 0cc7d72c600..ef6ada8823f 100644 --- a/src/vnet/bfd/bfd_main.c +++ b/src/vnet/bfd/bfd_main.c @@ -1054,6 +1054,19 @@ bfd_check_rx_timeout (bfd_main_t * bm, bfd_session_t * bs, u64 now, now + bm->wheel_inaccuracy) { BFD_DBG ("Rx timeout, session goes down"); + /* + * RFC 5880 6.8.1. State Variables + + * bfd.RemoteDiscr + + * The remote discriminator for this BFD session. This is the + * discriminator chosen by the remote system, and is totally opaque + * to the local system. This MUST be initialized to zero. If a + * period of a Detection Time passes without the receipt of a valid, + * authenticated BFD packet from the remote system, this variable + * MUST be set to zero. + */ + bs->remote_discr = 0; bfd_set_diag (bs, BFD_DIAG_CODE_det_time_exp); bfd_set_state (bm, bs, BFD_STATE_down, handling_wakeup); /* -- cgit 1.2.3-korg