X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fip%2Fip_interface.c;h=48c20a6cf34e885c3d53fc99b75416193904f8b7;hb=dbd366b239c0506b0d9984e7481967e038f10a23;hp=23c3df81638b1ed12953fc7d8e0cb31db01afae2;hpb=b163bbb7482a0a4b4685016eda4d2b2d3a9fcbb4;p=vpp.git diff --git a/src/vnet/ip/ip_interface.c b/src/vnet/ip/ip_interface.c index 23c3df81638..48c20a6cf34 100644 --- a/src/vnet/ip/ip_interface.c +++ b/src/vnet/ip/ip_interface.c @@ -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