diff options
| author | Ruslan Volodin <ntwman93@gmail.com> | 2026-06-16 14:17:37 +0300 |
|---|---|---|
| committer | Ruslan Volodin <ntwman93@gmail.com> | 2026-06-16 14:17:37 +0300 |
| commit | 43f4c41ded3fc9695e11c541069f89a137cd7a53 (patch) | |
| tree | 907fa52c7bb1779b7f9a574f9f9f4391e972e649 /smoketest/scripts | |
| parent | 4fb32bc179127691f40c8e93c55877aa76f10416 (diff) | |
| download | vyos-1x-43f4c41ded3fc9695e11c541069f89a137cd7a53.tar.gz vyos-1x-43f4c41ded3fc9695e11c541069f89a137cd7a53.zip | |
T8972: VPP: sync LCP interface VRF table binding
Diffstat (limited to 'smoketest/scripts')
| -rwxr-xr-x | smoketest/scripts/cli/test_vpp.py | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/smoketest/scripts/cli/test_vpp.py b/smoketest/scripts/cli/test_vpp.py index a506ad4f0..7c52dd10c 100755 --- a/smoketest/scripts/cli/test_vpp.py +++ b/smoketest/scripts/cli/test_vpp.py @@ -35,6 +35,7 @@ from vyos.utils.system import sysctl_read from vyos.utils.network import interface_exists from vyos.system import image from vyos.vpp import VPPControl +from vyos.vpp.utils import vpp_ip_addresses_by_index from vyos.vpp.utils import vpp_iface_name_transform from vyos.vpp.config_resource_checks.resource_defaults import default_resource_map @@ -1513,6 +1514,93 @@ class TestVPP(VyOSUnitTestSHIM.TestCase): list(acl_interfaces[0].acls)[: acl_interfaces[0].count], [acl_index] ) + def test_24_vpp_lcp_vrf_table_sync(self): + vlan = '20' + subif = f'{interface}.{vlan}' + address = '100.100.100.1/24' + fib_route = '100.100.100.1/32' + mgmt_vrf = 'mgmt' + test_vrf = 'test1' + + def assert_vpp_lcp_table(table_id): + vpp = VPPControl() + subif_index = vpp.get_sw_if_index(subif) + self.assertIsNotNone(subif_index) + self.assertEqual(vpp.get_interface_ip_table(subif), table_id) + self.assertIn(address, vpp_ip_addresses_by_index(vpp.api, subif_index)) + + def assert_fib_route(table_id, expected=True): + _, out = rc_cmd(f'sudo vppctl show ip fib table {table_id}') + if expected: + self.assertIn(fib_route, out) + else: + self.assertNotIn(fib_route, out) + + self.cli_set(['vrf', 'name', mgmt_vrf, 'table', '1000']) + self.cli_set( + ['interfaces', 'ethernet', interface, 'vif', vlan, 'address', address] + ) + self.cli_set( + ['interfaces', 'ethernet', interface, 'vif', vlan, 'vrf', mgmt_vrf] + ) + self.cli_commit() + + assert_vpp_lcp_table(1000) + assert_fib_route(0, expected=False) + assert_fib_route(1000) + + self.cli_delete(['interfaces', 'ethernet', interface, 'vif', vlan, 'address']) + self.cli_commit() + + vpp = VPPControl() + subif_index = vpp.get_sw_if_index(subif) + self.assertIsNotNone(subif_index) + self.assertEqual(vpp.get_interface_ip_table(subif), 1000) + self.assertNotIn(address, vpp_ip_addresses_by_index(vpp.api, subif_index)) + assert_fib_route(0, expected=False) + assert_fib_route(1000, expected=False) + + self.cli_set( + ['interfaces', 'ethernet', interface, 'vif', vlan, 'address', address] + ) + self.cli_commit() + + assert_vpp_lcp_table(1000) + assert_fib_route(0, expected=False) + assert_fib_route(1000) + + self.cli_delete(['interfaces', 'ethernet', interface, 'vif', vlan, 'vrf']) + self.cli_commit() + + assert_vpp_lcp_table(0) + assert_fib_route(0) + assert_fib_route(1000, expected=False) + + self.cli_set( + ['interfaces', 'ethernet', interface, 'vif', vlan, 'vrf', mgmt_vrf] + ) + self.cli_commit() + + assert_vpp_lcp_table(1000) + assert_fib_route(0, expected=False) + assert_fib_route(1000) + + self.cli_set(['vrf', 'name', test_vrf, 'table', '2000']) + self.cli_set( + ['interfaces', 'ethernet', interface, 'vif', vlan, 'vrf', test_vrf] + ) + self.cli_commit() + + assert_vpp_lcp_table(2000) + assert_fib_route(0, expected=False) + assert_fib_route(1000, expected=False) + assert_fib_route(2000) + + self.cli_delete(['interfaces', 'ethernet', interface, 'vif', vlan]) + self.cli_delete(['vrf', 'name', test_vrf]) + self.cli_delete(['vrf', 'name', mgmt_vrf]) + self.cli_commit() + if __name__ == '__main__': unittest.main(verbosity=2, failfast=VyOSUnitTestSHIM.TestCase.debug_on()) |
