summaryrefslogtreecommitdiffstats
path: root/src/vnet/ip/lookup.c
diff options
context:
space:
mode:
authorJon Loeliger <jdl@netgate.com>2017-09-28 13:54:16 -0500
committerFlorin Coras <florin.coras@gmail.com>2017-10-04 18:48:52 +0000
commitde6c03c0f104114d43a53776839600ce792731de (patch)
tree0a447fc26eb98d2ed3bd605be676b73700646098 /src/vnet/ip/lookup.c
parent77d7dcba32516b3353dc075ca2753f5532178137 (diff)
Propagate duplicate IF addr add/del error up to API.
Identify and complain when the same IP prefix is assigned to two different SW interfaces: vpp# set int ip address TenGigabitEthernet6/0/0 1.2.3.4/32 vpp# set int ip address TenGigabitEthernet6/0/1 1.2.3.4/32 set interface ip address: Prefix 1.2.3.4/32 already found on interface TenGigabitEthernet6/0/0 Change-Id: I1aee1b6a7ddd00d3109a53d8e1b6ce97bf45e372 Signed-off-by: Jon Loeliger <jdl@netgate.com> (cherry picked from commit 35ffa3e8f6b032f6e324234d495f769049d8feea)
Diffstat (limited to 'src/vnet/ip/lookup.c')
-rw-r--r--[-rwxr-xr-x]src/vnet/ip/lookup.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/vnet/ip/lookup.c b/src/vnet/ip/lookup.c
index d9922f46453..856c4942ea4 100755..100644
--- a/src/vnet/ip/lookup.c
+++ b/src/vnet/ip/lookup.c
@@ -165,11 +165,21 @@ ip_interface_address_add_del (ip_lookup_main_t * lm,
}
else
{
+ if (sw_if_index != a->sw_if_index)
+ {
+ if (result_if_address_index)
+ *result_if_address_index = ~0;
+ vnm->api_errno = VNET_API_ERROR_DUPLICATE_IF_ADDRESS;
+ return clib_error_create
+ ("Prefix %U already found on interface %U",
+ lm->format_address_and_length, addr_fib, address_length,
+ format_vnet_sw_if_index_name, vnm, a->sw_if_index);
+ }
+
if (result_if_address_index)
*result_if_address_index = a - lm->if_address_pool;
}
-
return /* no error */ 0;
}