ip-neighbor: Allow to replace dynamic entry
[vpp.git] / test / test_neighbor.py
index 416241e..1045f4b 100644 (file)
@@ -1247,6 +1247,116 @@ class ARPTestCase(VppTestCase):
         static_arp.remove_vpp_config()
         self.pg2.set_table_ip4(0)
 
+    def test_arp_static_replace_dynamic_same_mac(self):
+        """ ARP Static can replace Dynamic (same mac) """
+        self.pg2.generate_remote_hosts(1)
+
+        dyn_arp = VppNeighbor(self,
+                              self.pg2.sw_if_index,
+                              self.pg2.remote_hosts[0].mac,
+                              self.pg2.remote_hosts[0].ip4)
+        static_arp = VppNeighbor(self,
+                                 self.pg2.sw_if_index,
+                                 self.pg2.remote_hosts[0].mac,
+                                 self.pg2.remote_hosts[0].ip4,
+                                 is_static=1)
+
+        #
+        # Add a dynamic ARP entry
+        #
+        dyn_arp.add_vpp_config()
+
+        #
+        # We should find the dynamic nbr
+        #
+        self.assertFalse(find_nbr(self,
+                                  self.pg2.sw_if_index,
+                                  self.pg2.remote_hosts[0].ip4,
+                                  is_static=1))
+        self.assertTrue(find_nbr(self,
+                                 self.pg2.sw_if_index,
+                                 self.pg2.remote_hosts[0].ip4,
+                                 is_static=0,
+                                 mac=self.pg2.remote_hosts[0].mac))
+
+        #
+        # Add a static ARP entry with the same mac
+        #
+        static_arp.add_vpp_config()
+
+        #
+        # We should now find the static nbr with the same mac
+        #
+        self.assertFalse(find_nbr(self,
+                                  self.pg2.sw_if_index,
+                                  self.pg2.remote_hosts[0].ip4,
+                                  is_static=0))
+        self.assertTrue(find_nbr(self,
+                                 self.pg2.sw_if_index,
+                                 self.pg2.remote_hosts[0].ip4,
+                                 is_static=1,
+                                 mac=self.pg2.remote_hosts[0].mac))
+
+        #
+        # clean-up
+        #
+        static_arp.remove_vpp_config()
+
+    def test_arp_static_replace_dynamic_diff_mac(self):
+        """ ARP Static can replace Dynamic (diff mac) """
+        self.pg2.generate_remote_hosts(2)
+
+        dyn_arp = VppNeighbor(self,
+                              self.pg2.sw_if_index,
+                              self.pg2.remote_hosts[0].mac,
+                              self.pg2.remote_hosts[0].ip4)
+        static_arp = VppNeighbor(self,
+                                 self.pg2.sw_if_index,
+                                 self.pg2.remote_hosts[1].mac,
+                                 self.pg2.remote_hosts[0].ip4,
+                                 is_static=1)
+
+        #
+        # Add a dynamic ARP entry
+        #
+        dyn_arp.add_vpp_config()
+
+        #
+        # We should find the dynamic nbr
+        #
+        self.assertFalse(find_nbr(self,
+                                  self.pg2.sw_if_index,
+                                  self.pg2.remote_hosts[0].ip4,
+                                  is_static=1))
+        self.assertTrue(find_nbr(self,
+                                 self.pg2.sw_if_index,
+                                 self.pg2.remote_hosts[0].ip4,
+                                 is_static=0,
+                                 mac=self.pg2.remote_hosts[0].mac))
+
+        #
+        # Add a static ARP entry with a changed mac
+        #
+        static_arp.add_vpp_config()
+
+        #
+        # We should now find the static nbr with a changed mac
+        #
+        self.assertFalse(find_nbr(self,
+                                  self.pg2.sw_if_index,
+                                  self.pg2.remote_hosts[0].ip4,
+                                  is_static=0))
+        self.assertTrue(find_nbr(self,
+                                 self.pg2.sw_if_index,
+                                 self.pg2.remote_hosts[0].ip4,
+                                 is_static=1,
+                                 mac=self.pg2.remote_hosts[1].mac))
+
+        #
+        # clean-up
+        #
+        static_arp.remove_vpp_config()
+
     def test_arp_incomplete(self):
         """ ARP Incomplete"""
         self.pg1.generate_remote_hosts(3)