diff options
author | Vladislav Grishenko <themiron@yandex-team.ru> | 2024-02-20 11:58:01 +0500 |
---|---|---|
committer | Neale Ranns <neale@graphiant.com> | 2024-03-04 07:51:16 +0000 |
commit | dea806da536b8f1b49af9a852441d5f772f14486 (patch) | |
tree | 94daccd1dacd48c7851c9103399503b42491c963 /test/test_ip4.py | |
parent | eb5a08e91d3d7d0f9fc97aeedcbcc02b7a8b753a (diff) |
fib: fix crash while adding intf-rx routes
Fix crash while adding intf-rx ip4 and ip6 routes via api due
invalid exporting of interface rx routes as attached.
Also, add missed route path via rx-ip6 cli support.
Type: fix
Signed-off-by: Vladislav Grishenko <themiron@yandex-team.ru>
Change-Id: I15711c8c0787398dd7e3baa4787019bb1f317666
Diffstat (limited to 'test/test_ip4.py')
-rw-r--r-- | test/test_ip4.py | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/test/test_ip4.py b/test/test_ip4.py index a2a84711110..926ca77a5f8 100644 --- a/test/test_ip4.py +++ b/test/test_ip4.py @@ -3295,5 +3295,138 @@ class TestIPv4ItfRebind(VppTestCase): i.admin_down() +class TestIP4InterfaceRx(VppTestCase): + """IPv4 Interface Receive""" + + @classmethod + def setUpClass(cls): + super(TestIP4InterfaceRx, cls).setUpClass() + + @classmethod + def tearDownClass(cls): + super(TestIP4InterfaceRx, cls).tearDownClass() + + def setUp(self): + super(TestIP4InterfaceRx, self).setUp() + + self.create_pg_interfaces(range(3)) + + table_id = 0 + + for i in self.pg_interfaces: + i.admin_up() + + if table_id != 0: + table = VppIpTable(self, table_id) + table.add_vpp_config() + + i.set_table_ip4(table_id) + i.config_ip4() + i.resolve_arp() + table_id += 1 + + def tearDown(self): + for i in self.pg_interfaces: + i.unconfig_ip4() + i.admin_down() + i.set_table_ip4(0) + + super(TestIP4InterfaceRx, self).tearDown() + + def test_interface_rx(self): + """IPv4 Interface Receive""" + + # + # add a route in the default table to receive ... + # + route_to_dst = VppIpRoute( + self, + "1.1.1.0", + 24, + [ + VppRoutePath( + "0.0.0.0", + self.pg1.sw_if_index, + type=FibPathType.FIB_PATH_TYPE_INTERFACE_RX, + ) + ], + ) + route_to_dst.add_vpp_config() + + # + # packets to these destination are dropped, since they'll + # hit the respective default routes in table 1 + # + p_dst = ( + Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) + / IP(src="5.5.5.5", dst="1.1.1.1") + / TCP(sport=1234, dport=1234) + / Raw(b"\xa5" * 100) + ) + pkts_dst = p_dst * 10 + + self.send_and_assert_no_replies(self.pg0, pkts_dst, "IP in table 1") + + # + # add a route in the dst table to forward via pg1 + # + route_in_dst = VppIpRoute( + self, + "1.1.1.1", + 32, + [VppRoutePath(self.pg1.remote_ip4, self.pg1.sw_if_index)], + table_id=1, + ) + route_in_dst.add_vpp_config() + + self.send_and_expect(self.pg0, pkts_dst, self.pg1) + + # + # add a route in the default table to receive ... + # + route_to_dst = VppIpRoute( + self, + "1.1.1.0", + 24, + [ + VppRoutePath( + "0.0.0.0", + self.pg2.sw_if_index, + type=FibPathType.FIB_PATH_TYPE_INTERFACE_RX, + ) + ], + table_id=1, + ) + route_to_dst.add_vpp_config() + + # + # packets to these destination are dropped, since they'll + # hit the respective default routes in table 2 + # + p_dst = ( + Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) + / IP(src="6.6.6.6", dst="1.1.1.2") + / TCP(sport=1234, dport=1234) + / Raw(b"\xa5" * 100) + ) + pkts_dst = p_dst * 10 + + self.send_and_assert_no_replies(self.pg0, pkts_dst, "IP in table 2") + + # + # add a route in the table 2 to forward via pg2 + # + route_in_dst = VppIpRoute( + self, + "1.1.1.2", + 32, + [VppRoutePath(self.pg2.remote_ip4, self.pg2.sw_if_index)], + table_id=2, + ) + route_in_dst.add_vpp_config() + + self.send_and_expect(self.pg0, pkts_dst, self.pg2) + + if __name__ == "__main__": unittest.main(testRunner=VppTestRunner) |