net: acd: Avoid removing auto IPv4 address twice

When the network interface goes down, we call
net_ipv4_autoconf_reset() which removes the autoaddress
from the network interface.
The net_ipv4_autoconf_reset() is also called when ACD is started
in which case we could see this error message

<dbg> net_if_start_acd: Starting ACD for iface 2
<err> net_if: iface 2 addr 169.254.174.230 (net_if_ipv4_addr_rm():4625)
<dbg> net_if_ipv4_addr_rm: Address 169.254.174.230 not found (-22)

This error is superfluous and not needed. So before trying to
remove the address, check if the interface already has it set and
only then remove it.

Signed-off-by: Jukka Rissanen <jukka.rissanen@nordicsemi.no>
This commit is contained in:
Jukka Rissanen 2025-06-09 13:47:45 +03:00 committed by Dan Kalowsky
commit bd4c0b746c

View file

@ -138,13 +138,18 @@ void net_ipv4_autoconf_start(struct net_if *iface)
void net_ipv4_autoconf_reset(struct net_if *iface) void net_ipv4_autoconf_reset(struct net_if *iface)
{ {
struct net_if_config *cfg; struct net_if_config *cfg;
struct net_if_addr *ifaddr;
struct net_if *ret;
cfg = net_if_get_config(iface); cfg = net_if_get_config(iface);
if (!cfg) { if (!cfg) {
return; return;
} }
ifaddr = net_if_ipv4_addr_lookup(&cfg->ipv4auto.requested_ip, &ret);
if (ifaddr != NULL && ret == iface) {
net_if_ipv4_addr_rm(iface, &cfg->ipv4auto.requested_ip); net_if_ipv4_addr_rm(iface, &cfg->ipv4auto.requested_ip);
}
NET_DBG("Autoconf reset for %p", iface); NET_DBG("Autoconf reset for %p", iface);
} }