From 7bc731047d87bffa51581e3d08e21410858d2010 Mon Sep 17 00:00:00 2001 From: Wojciech Dec Date: Tue, 14 Feb 2017 16:24:28 +0100 Subject: Fix crash on deleting previously activated IPv6 interface - VPP-636 RADV Pool index was not getting updated Change-Id: I2d2f14c56f51034d39049d1c7e13c248180a865f Signed-off-by: Wojciech Dec --- src/vnet/ip/ip6_neighbor.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src/vnet/ip/ip6_neighbor.c') diff --git a/src/vnet/ip/ip6_neighbor.c b/src/vnet/ip/ip6_neighbor.c index 46d04769..7229591e 100644 --- a/src/vnet/ip/ip6_neighbor.c +++ b/src/vnet/ip/ip6_neighbor.c @@ -3257,6 +3257,7 @@ disable_ip6_interface (vlib_main_t * vm, u32 sw_if_index) radv_info = pool_elt_at_index (nm->if_radv_pool, ri); /* check radv_info ref count for other ip6 addresses on this interface */ + /* This implicitly excludes the link local address */ if (radv_info->ref_count == 0) { /* essentially "disables" ipv6 on this interface */ @@ -3749,6 +3750,7 @@ ip6_neighbor_add_del_interface_address (ip6_main_t * im, vec_validate_init_empty (nm->if_radv_pool_index_by_sw_if_index, sw_if_index, ~0); ri = nm->if_radv_pool_index_by_sw_if_index[sw_if_index]; + if (ri != ~0) { /* get radv_info */ @@ -3773,6 +3775,8 @@ ip6_neighbor_add_del_interface_address (ip6_main_t * im, if (!ip6_address_is_link_local_unicast (address)) radv_info->ref_count--; } + /* Ensure that IPv6 is disabled, and LL removed after ref_count reaches 0 */ + disable_ip6_interface (vm, sw_if_index); } } -- cgit 1.2.3-korg