ip: fix interface ip address del sw_if_index check
[vpp.git] / src / vnet / ip / ip_interface.c
index 23c3df8..48c20a6 100644 (file)
@@ -90,14 +90,26 @@ ip_interface_address_add (ip_lookup_main_t * lm,
   return (NULL);
 }
 
-void
+clib_error_t *
 ip_interface_address_del (ip_lookup_main_t * lm,
-                         u32 address_index, void *addr_fib)
+                         vnet_main_t * vnm,
+                         u32 address_index, void *addr_fib,
+                         u32 address_length, u32 sw_if_index)
 {
   ip_interface_address_t *a, *prev, *next;
 
   a = pool_elt_at_index (lm->if_address_pool, address_index);
 
+  if (a->sw_if_index != sw_if_index)
+    {
+      vnm->api_errno = VNET_API_ERROR_ADDRESS_NOT_FOUND_FOR_INTERFACE;
+      return clib_error_create ("%U not found for interface %U",
+                               lm->format_address_and_length,
+                               addr_fib, address_length,
+                               format_vnet_sw_if_index_name,
+                               vnet_get_main (), sw_if_index);
+    }
+
   if (a->prev_this_sw_interface != ~0)
     {
       prev = pool_elt_at_index (lm->if_address_pool,
@@ -121,6 +133,7 @@ ip_interface_address_del (ip_lookup_main_t * lm,
   mhash_unset (&lm->address_to_if_address_index, addr_fib,
               /* old_value */ 0);
   pool_put (lm->if_address_pool, a);
+  return NULL;
 }
 
 u8