api: Cleanup APIs interface.api
[vpp.git] / test / test_ip4.py
index a6920f8..60bc023 100644 (file)
@@ -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()