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 <ksekera@cisco.com>
This commit is contained in:

committed by
Andrew Yourtchenko

parent
a06f68556e
commit
95993c64a3
@ -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);
|
||||
/*
|
||||
|
@ -831,6 +831,16 @@ class BFD4TestCase(VppTestCase):
|
||||
e = self.vapi.wait_for_event(1, "bfd_udp_session_details")
|
||||
verify_event(self, e, expected_state=BFDState.down)
|
||||
|
||||
def test_peer_discr_reset_sess_down(self):
|
||||
""" peer discriminator reset after session goes down """
|
||||
bfd_session_up(self)
|
||||
detection_time = self.test_session.detect_mult *\
|
||||
self.vpp_session.required_min_rx / USEC_IN_SEC
|
||||
self.sleep(detection_time, "waiting for BFD session time-out")
|
||||
self.test_session.my_discriminator = 0
|
||||
wait_for_bfd_packet(self,
|
||||
pcap_time_min=time.time() - self.vpp_clock_offset)
|
||||
|
||||
@unittest.skipUnless(running_extended_tests, "part of extended tests")
|
||||
def test_large_required_min_rx(self):
|
||||
""" large remote required min rx interval """
|
||||
@ -2129,6 +2139,7 @@ class BFDSHA1TestCase(VppTestCase):
|
||||
self.test_session.vpp_seq_number = None
|
||||
# now throw away any pending packets
|
||||
self.pg0.enable_capture()
|
||||
self.test_session.my_discriminator = 0
|
||||
bfd_session_up(self)
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user