session goes down if echo function fails
(self)
| 1731 | ) |
| 1732 | |
| 1733 | def test_echo_fail(self): |
| 1734 | """session goes down if echo function fails""" |
| 1735 | |
| 1736 | if self.multihop: |
| 1737 | self.skipTest( |
| 1738 | f"Skipping because echo functionality is not supported with multihop" |
| 1739 | ) |
| 1740 | |
| 1741 | bfd_session_up(self) |
| 1742 | self.test_session.update(required_min_echo_rx=150000) |
| 1743 | self.test_session.send_packet() |
| 1744 | detection_time = ( |
| 1745 | self.test_session.detect_mult |
| 1746 | * self.vpp_session.required_min_rx |
| 1747 | / USEC_IN_SEC |
| 1748 | ) |
| 1749 | self.vapi.bfd_udp_set_echo_source(sw_if_index=self.loopback0.sw_if_index) |
| 1750 | # echo function should be used now, but we will drop the echo packets |
| 1751 | verified_diag = False |
| 1752 | for dummy in range(3): |
| 1753 | loop_until = time.time() + 0.75 * detection_time |
| 1754 | while time.time() < loop_until: |
| 1755 | p = self.pg0.wait_for_packet(1) |
| 1756 | self.logger.debug(ppp("Got packet:", p)) |
| 1757 | if p[UDP].dport == BFD.udp_dport_echo: |
| 1758 | # dropped |
| 1759 | pass |
| 1760 | elif p.haslayer(BFD): |
| 1761 | if "P" in p.sprintf("%BFD.flags%"): |
| 1762 | self.assertGreaterEqual( |
| 1763 | p[BFD].required_min_rx_interval, 1000000 |
| 1764 | ) |
| 1765 | final = self.test_session.create_packet() |
| 1766 | final[BFD].flags = "F" |
| 1767 | self.test_session.send_packet(final) |
| 1768 | if p[BFD].state == BFDState.down: |
| 1769 | self.assert_equal( |
| 1770 | p[BFD].diag, BFDDiagCode.echo_function_failed, BFDDiagCode |
| 1771 | ) |
| 1772 | verified_diag = True |
| 1773 | else: |
| 1774 | raise Exception(ppp("Received unknown packet:", p)) |
| 1775 | self.test_session.send_packet() |
| 1776 | events = self.vapi.collect_events() |
| 1777 | self.assert_equal(len(events), 1, "number of bfd events") |
| 1778 | self.assert_equal(events[0].state, BFDState.down, BFDState) |
| 1779 | self.assertTrue(verified_diag, "Incorrect diagnostics code received") |
| 1780 | |
| 1781 | def test_echo_stop(self): |
| 1782 | """echo function stops if peer sets required min echo rx zero""" |
nothing calls this directly
no test coverage detected