+ def test_immediate_remote_min_rx_reduce(self):
+ """ immediately honor remote min rx reduction """
+ self.vpp_session.remove_vpp_config()
+ self.vpp_session = VppBFDUDPSession(
+ self, self.pg0, self.pg0.remote_ip4, desired_min_tx=10000)
+ self.vpp_session.add_vpp_config()
+ self.test_session.update(desired_min_tx_interval=1000000,
+ required_min_rx_interval=1000000)
+ self.bfd_session_up()
+ self.wait_for_bfd_packet()
+ interval = 100000
+ self.test_session.update(required_min_rx_interval=interval)
+ self.test_session.send_packet()
+ p, ttp = self.wait_for_bfd_packet()
+ # allow extra 10% to work around timing issues, first packet is special
+ self.assert_in_range(ttp, 0, 1.10 * interval / us_in_sec,
+ "time between BFD packets")
+ p, ttp = self.wait_for_bfd_packet()
+ self.assert_in_range(ttp, .9 * .75 * interval / us_in_sec,
+ 1.10 * interval / us_in_sec,
+ "time between BFD packets")
+ p, ttp = self.wait_for_bfd_packet()
+ self.assert_in_range(ttp, .9 * .75 * interval / us_in_sec,
+ 1.10 * interval / us_in_sec,
+ "time between BFD packets")
+
+
+class BFD6TestCase(VppTestCase, BFDCommonCode):
+ """Bidirectional Forwarding Detection (BFD) (IPv6) """
+
+ @classmethod
+ def setUpClass(cls):
+ super(BFD6TestCase, cls).setUpClass()
+ try:
+ cls.create_pg_interfaces([0])
+ cls.pg0.config_ip6()
+ cls.pg0.configure_ipv6_neighbors()
+ cls.pg0.admin_up()
+ cls.pg0.resolve_ndp()
+
+ except Exception:
+ super(BFD6TestCase, cls).tearDownClass()
+ raise
+
+ def setUp(self):
+ super(BFD6TestCase, self).setUp()
+ self.vapi.want_bfd_events()
+ try:
+ self.vpp_session = VppBFDUDPSession(self, self.pg0,
+ self.pg0.remote_ip6,
+ af=AF_INET6)
+ self.vpp_session.add_vpp_config()
+ self.vpp_session.admin_up()
+ self.test_session = BFDTestSession(self, self.pg0, AF_INET6)
+ self.logger.debug(self.vapi.cli("show adj nbr"))
+ except:
+ self.vapi.want_bfd_events(enable_disable=0)
+ raise
+
+ def tearDown(self):
+ BFDCommonCode.tearDown(self)
+ super(BFD6TestCase, self).tearDown()