X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=test%2Ftest_ip4.py;h=60bc023a28046ee12486694b4cca6aae42dbb2dc;hb=053204ab039d34a990ff0e14c32ce3b294fcce0e;hp=a6920f8dba543cdd7f443dfee52af6d5f28b38c4;hpb=88d29a9206bbaa70f7772fa157ec6b1ccaf567a8;p=vpp.git diff --git a/test/test_ip4.py b/test/test_ip4.py index a6920f8dba5..60bc023a280 100644 --- a/test/test_ip4.py +++ b/test/test_ip4.py @@ -13,9 +13,12 @@ from six import moves from framework import VppTestCase, VppTestRunner from util import ppp +from vpp_ip import VppIpPrefix from vpp_ip_route import VppIpRoute, VppRoutePath, VppIpMRoute, \ VppMRoutePath, MRouteItfFlags, MRouteEntryFlags, VppMplsIpBind, \ - VppMplsTable, VppIpTable, FibPathType, find_route + VppMplsTable, VppIpTable, FibPathType, find_route, \ + VppIpInterfaceAddress +from vpp_ip import VppIpAddress from vpp_sub_interface import VppSubInterface, VppDot1QSubint, VppDot1ADSubint from vpp_papi import VppEnum @@ -210,19 +213,19 @@ class TestIPv4(VppTestCase): self.verify_capture(i, pkts) -class TestIPV4IfAddrRoute(VppTestCase): +class TestIPv4IfAddrRoute(VppTestCase): """ IPv4 Interface Addr Route Test Case """ @classmethod def setUpClass(cls): - super(TestIPV4IfAddrRoute, cls).setUpClass() + super(TestIPv4IfAddrRoute, cls).setUpClass() @classmethod def tearDownClass(cls): - super(TestIPV4IfAddrRoute, cls).tearDownClass() + super(TestIPv4IfAddrRoute, cls).tearDownClass() def setUp(self): - super(TestIPV4IfAddrRoute, self).setUp() + super(TestIPv4IfAddrRoute, self).setUp() # create 1 pg interface self.create_pg_interfaces(range(1)) @@ -233,11 +236,62 @@ class TestIPV4IfAddrRoute(VppTestCase): i.resolve_arp() def tearDown(self): - super(TestIPV4IfAddrRoute, self).tearDown() + super(TestIPv4IfAddrRoute, self).tearDown() for i in self.pg_interfaces: i.unconfig_ip4() i.admin_down() + def test_ipv4_ifaddrs_same_prefix(self): + """ IPv4 Interface Addresses Same Prefix test + + Test scenario: + + - Verify no route in FIB for prefix 10.10.10.0/24 + - Configure IPv4 address 10.10.10.10/24 on an interface + - Verify route in FIB for prefix 10.10.10.0/24 + - Configure IPv4 address 10.10.10.20/24 on an interface + - Delete 10.10.10.10/24 from interface + - Verify route in FIB for prefix 10.10.10.0/24 + - Delete 10.10.10.20/24 from interface + - Verify no route in FIB for prefix 10.10.10.0/24 + """ + + # create two addresses, verify route not present + if_addr1 = VppIpInterfaceAddress(self, self.pg0, + VppIpAddress("10.10.10.10"), 24) + if_addr2 = VppIpInterfaceAddress(self, self.pg0, + VppIpAddress("10.10.10.20"), 24) + self.assertFalse(if_addr1.query_vpp_config()) # 10.10.10.0/24 + self.assertFalse(find_route(self, "10.10.10.10", 32)) + self.assertFalse(find_route(self, "10.10.10.20", 32)) + self.assertFalse(find_route(self, "10.10.10.255", 32)) + self.assertFalse(find_route(self, "10.10.10.0", 32)) + + # configure first address, verify route present + if_addr1.add_vpp_config() + self.assertTrue(if_addr1.query_vpp_config()) # 10.10.10.0/24 + self.assertTrue(find_route(self, "10.10.10.10", 32)) + self.assertFalse(find_route(self, "10.10.10.20", 32)) + self.assertTrue(find_route(self, "10.10.10.255", 32)) + self.assertTrue(find_route(self, "10.10.10.0", 32)) + + # configure second address, delete first, verify route not removed + if_addr2.add_vpp_config() + if_addr1.remove_vpp_config() + self.assertTrue(if_addr1.query_vpp_config()) # 10.10.10.0/24 + self.assertFalse(find_route(self, "10.10.10.10", 32)) + self.assertTrue(find_route(self, "10.10.10.20", 32)) + self.assertTrue(find_route(self, "10.10.10.255", 32)) + self.assertTrue(find_route(self, "10.10.10.0", 32)) + + # delete second address, verify route removed + if_addr2.remove_vpp_config() + self.assertFalse(if_addr1.query_vpp_config()) # 10.10.10.0/24 + self.assertFalse(find_route(self, "10.10.10.10", 32)) + self.assertFalse(find_route(self, "10.10.10.20", 32)) + self.assertFalse(find_route(self, "10.10.10.255", 32)) + self.assertFalse(find_route(self, "10.10.10.0", 32)) + def test_ipv4_ifaddr_route(self): """ IPv4 Interface Address Route test @@ -867,8 +921,8 @@ class TestIPSubNets(VppTestCase): ip_addr_n = socket.inet_pton(socket.AF_INET, "10.10.10.10") self.vapi.sw_interface_add_del_address( - sw_if_index=self.pg0.sw_if_index, address=ip_addr_n, - address_length=16) + sw_if_index=self.pg0.sw_if_index, + prefix=VppIpPrefix("10.10.10.10", 16).encode()) pn = (Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) / @@ -886,8 +940,9 @@ class TestIPSubNets(VppTestCase): # remove the sub-net and we are forwarding via the cover again self.vapi.sw_interface_add_del_address( - sw_if_index=self.pg0.sw_if_index, address=ip_addr_n, - address_length=16, is_add=0) + sw_if_index=self.pg0.sw_if_index, + prefix=VppIpPrefix("10.10.10.10", 16).encode(), is_add=0) + self.pg1.add_stream(pn) self.pg_enable_capture(self.pg_interfaces) self.pg_start() @@ -904,8 +959,8 @@ class TestIPSubNets(VppTestCase): ip_addr_n = socket.inet_pton(socket.AF_INET, "10.10.10.10") self.vapi.sw_interface_add_del_address( - sw_if_index=self.pg0.sw_if_index, address=ip_addr_n, - address_length=31) + sw_if_index=self.pg0.sw_if_index, + prefix=VppIpPrefix("10.10.10.10", 31).encode()) pn = (Ether(src=self.pg1.remote_mac, dst=self.pg1.local_mac) / @@ -921,8 +976,9 @@ class TestIPSubNets(VppTestCase): # remove the sub-net and we are forwarding via the cover again self.vapi.sw_interface_add_del_address( - sw_if_index=self.pg0.sw_if_index, address=ip_addr_n, - address_length=31, is_add=0) + sw_if_index=self.pg0.sw_if_index, + prefix=VppIpPrefix("10.10.10.10", 31).encode(), is_add=0) + self.pg1.add_stream(pn) self.pg_enable_capture(self.pg_interfaces) self.pg_start()