MCPcopy Create free account
hub / github.com/FDio/vpp / test_stale_echo

Method test_stale_echo

test/test_bfd.py:1853–1916  ·  view source on GitHub ↗

stale echo packets don't keep a session up

(self)

Source from the content-addressed store, hash-verified

1851 self.assert_equal(len(events), 0, "number of bfd events")
1852
1853 def test_stale_echo(self):
1854 """stale echo packets don't keep a session up"""
1855
1856 if self.multihop:
1857 self.skipTest(
1858 f"Skipping because echo functionality is not supported with multihop"
1859 )
1860
1861 bfd_session_up(self)
1862 self.test_session.update(required_min_echo_rx=150000)
1863 self.vapi.bfd_udp_set_echo_source(sw_if_index=self.loopback0.sw_if_index)
1864 self.test_session.send_packet()
1865 # should be turned on - loopback echo packets
1866 echo_packet = None
1867 timeout_at = None
1868 timeout_ok = False
1869 for dummy in range(10 * self.vpp_session.detect_mult):
1870 p = self.pg0.wait_for_packet(1)
1871 if p[UDP].dport == BFD.udp_dport_echo:
1872 if echo_packet is None:
1873 self.logger.debug(ppp("Got first echo packet:", p))
1874 echo_packet = p
1875 timeout_at = (
1876 time.time()
1877 + self.vpp_session.detect_mult
1878 * self.test_session.required_min_echo_rx
1879 / USEC_IN_SEC
1880 )
1881 else:
1882 self.logger.debug(ppp("Got followup echo packet:", p))
1883 self.logger.debug(ppp("Looping back first echo packet:", p))
1884 echo_packet[Ether].dst = self.pg0.local_mac
1885 self.pg0.add_stream(echo_packet)
1886 self.pg_start()
1887 elif p.haslayer(BFD):
1888 self.logger.debug(ppp("Got packet:", p))
1889 if "P" in p.sprintf("%BFD.flags%"):
1890 final = self.test_session.create_packet()
1891 final[BFD].flags = "F"
1892 self.test_session.send_packet(final)
1893 if p[BFD].state == BFDState.down:
1894 self.assertIsNotNone(
1895 timeout_at,
1896 "Session went down before first echo packet received",
1897 )
1898 now = time.time()
1899 self.assertGreaterEqual(
1900 now,
1901 timeout_at,
1902 "Session timeout at %s, but is expected at %s"
1903 % (now, timeout_at),
1904 )
1905 self.assert_equal(
1906 p[BFD].diag, BFDDiagCode.echo_function_failed, BFDDiagCode
1907 )
1908 events = self.vapi.collect_events()
1909 self.assert_equal(len(events), 1, "number of bfd events")
1910 self.assert_equal(events[0].state, BFDState.down, BFDState)

Callers

nothing calls this directly

Calls 10

pppFunction · 0.90
bfd_session_upFunction · 0.85
pg_startMethod · 0.80
collect_eventsMethod · 0.80
updateMethod · 0.45
send_packetMethod · 0.45
wait_for_packetMethod · 0.45
add_streamMethod · 0.45
create_packetMethod · 0.45
assert_equalMethod · 0.45

Tested by

no test coverage detected