Hi Ye, Thanks for the report and fix. Could you please push that patch to gerrit?
Regards, neale From: <vpp-dev@lists.fd.io> on behalf of 叶东岗 <y...@wangsu.com> Date: Wednesday 13 May 2020 at 16:11 To: "vpp-dev@lists.fd.io" <vpp-dev@lists.fd.io> Subject: [vpp-dev] assert when set ip addr at an interface and delete it at another interface root@ac15b50ac370:/# /usr/local/vpp20/bin/vppctl _______ _ _ _____ ___ __/ __/ _ \ (_)__ | | / / _ \/ _ \ _/ _// // / / / _ \ | |/ / ___/ ___/ /_/ /____(_)_/\___/ |___/_/ /_/ DBGvpp# create tap tap0 DBGvpp# create tap tap1 DBGvpp# set interface ip addr tap0 1.1.1.1/24 DBGvpp# set interface ip addr del tap1 1.1.1.1/24 /usr/local/vpp20/bin/vpp[17762]: /work/vpp/src/vnet/ip/ip4_forward.c:656 (ip4_sw_interface_enable_disable) assertion `im->ip_enabled_by_sw_if_index[sw_if_index] > 0' fails /usr/local/vpp20/bin/vpp[17762]: received signal SIGWINCH, PC 0x7f9c3421899d /usr/local/vpp20/bin/vpp[17762]: #0 0x00007f9c34ad7ca8 unix_signal_handler + 0x26f /usr/local/vpp20/bin/vpp[17762]: #1 0x00007f9c347fd890 0x7f9c347fd890 /usr/local/vpp20/bin/vpp[17762]: #2 0x00007f9c34135e97 gsignal + 0xc7 /usr/local/vpp20/bin/vpp[17762]: #3 0x00007f9c34137801 abort + 0x141 /usr/local/vpp20/bin/vpp[17762]: #4 0x0000556ba0b8641a 0x556ba0b8641a /usr/local/vpp20/bin/vpp[17762]: #5 0x00007f9c3451ae02 debugger + 0x9 /usr/local/vpp20/bin/vpp[17762]: #6 0x00007f9c3451b1e5 _clib_error + 0x2d4 /usr/local/vpp20/bin/vpp[17762]: #7 0x00007f9c3526bf3b ip4_sw_interface_enable_disable + 0x1ad /usr/local/vpp20/bin/vpp[17762]: #8 0x00007f9c3526cda7 ip4_add_del_interface_address_internal + 0xd6c /usr/local/vpp20/bin/vpp[17762]: #9 0x00007f9c3526d077 ip4_add_del_interface_address + 0x36 /usr/local/vpp20/bin/vpp[17762]: #10 0x00007f9c352555ba add_del_ip_address + 0x157 /usr/local/vpp20/bin/vpp[17762]: #11 0x00007f9c34a2ad2e vlib_cli_dispatch_sub_commands + 0xc41 /usr/local/vpp20/bin/vpp[17762]: #12 0x00007f9c34a2abac vlib_cli_dispatch_sub_commands + 0xabf /usr/local/vpp20/bin/vpp[17762]: #13 0x00007f9c34a2abac vlib_cli_dispatch_sub_commands + 0xabf /usr/local/vpp20/bin/vpp[17762]: #14 0x00007f9c34a2abac vlib_cli_dispatch_sub_commands + 0xabf git diff 1d61c2 diff --git a/src/vnet/ip/ip4_forward.c b/src/vnet/ip/ip4_forward.c index ea78d5507..5d8be3621 100644 --- a/src/vnet/ip/ip4_forward.c +++ b/src/vnet/ip/ip4_forward.c @@ -779,7 +779,10 @@ ip4_add_del_interface_address_internal (vlib_main_t * vm, goto done; } - ip_interface_address_del (lm, if_address_index, addr_fib); + error = ip_interface_address_del (lm, if_address_index, addr_fib, + address_length, sw_if_index); + if (error) + goto done; } else { diff --git a/src/vnet/ip/ip6_forward.c b/src/vnet/ip/ip6_forward.c index 1d6c1b7f1..6b596dc69 100644 --- a/src/vnet/ip/ip6_forward.c +++ b/src/vnet/ip/ip6_forward.c @@ -428,7 +428,10 @@ ip6_add_del_interface_address (vlib_main_t * vm, goto done; } - ip_interface_address_del (lm, if_address_index, addr_fib); + error = ip_interface_address_del (lm, if_address_index, addr_fib, + address_length, sw_if_index); + if (error) + goto done; } else { diff --git a/src/vnet/ip/ip_interface.c b/src/vnet/ip/ip_interface.c index 23c3df816..c6181ec68 100644 --- a/src/vnet/ip/ip_interface.c +++ b/src/vnet/ip/ip_interface.c @@ -90,14 +90,22 @@ 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) + 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) { + 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 +129,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 diff --git a/src/vnet/ip/ip_interface.h b/src/vnet/ip/ip_interface.h index f95b8deb0..95393381c 100644 --- a/src/vnet/ip/ip_interface.h +++ b/src/vnet/ip/ip_interface.h @@ -28,8 +28,9 @@ clib_error_t *ip_interface_address_add (ip_lookup_main_t * lm, void *address, u32 address_length, u32 * result_index); -void ip_interface_address_del (ip_lookup_main_t * lm, - u32 addr_index, void *address); +clib_error_t *ip_interface_address_del (ip_lookup_main_t * lm, + u32 addr_index, void *address, u32 address_len, + u32 sw_if_index); void *ip_interface_get_first_ip (u32 sw_if_index, u8 is_ip4); void ip_interface_address_mark (void); void ip_interface_address_sweep (void); Best, Ye Donggang y...@wangsu.com +86-15345978478
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#16358): https://lists.fd.io/g/vpp-dev/message/16358 Mute This Topic: https://lists.fd.io/mt/74182356/21656 Group Owner: vpp-dev+ow...@lists.fd.io Unsubscribe: https://lists.fd.io/g/vpp-dev/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-