diff --git a/subsys/net/ip/net_if.c b/subsys/net/ip/net_if.c index 4c91f7b172118..f6a37a6a9c4f5 100644 --- a/subsys/net/ip/net_if.c +++ b/subsys/net/ip/net_if.c @@ -1562,7 +1562,11 @@ void net_if_start_rs(struct net_if *iface) ipv6->rs_start = k_uptime_get_32(); k_mutex_lock(&lock, K_FOREVER); + + /* Make sure that the RS timer is not in the list twice */ + (void)sys_slist_find_and_remove(&active_rs_timers, &ipv6->rs_node); sys_slist_append(&active_rs_timers, &ipv6->rs_node); + k_mutex_unlock(&lock); /* FUTURE: use schedule, not reschedule. */ @@ -3383,6 +3387,8 @@ static void iface_ipv6_stop(struct net_if *iface) IF_ENABLED(CONFIG_NET_IPV6_IID_STABLE, (ipv6->network_counter++)); IF_ENABLED(CONFIG_NET_IPV6_IID_STABLE, (ipv6->iid = NULL)); + net_if_stop_rs(iface); + /* Remove all autoconf addresses */ ARRAY_FOR_EACH(ipv6->unicast, i) { if (ipv6->unicast[i].is_used &&