net: ipv4: set NET_ADDR_PREFERRED before network event if !ACD
Set NET_ADDR_PREFERRED before network event is generated, so that conn_mgr
properly generates NET_EVENT_L4_CONNECTED and NET_EVENT_L4_IPV4_CONNECTED
events.
Fixes: 1a5e13a79b98 ("net: if: Release the interface lock early when
starting IPv4 ACD")
Signed-off-by: Marcin Niestroj <m.niestroj@emb.dev>
diff --git a/subsys/net/ip/net_if.c b/subsys/net/ip/net_if.c
index 1e5156e..adafd15 100644
--- a/subsys/net/ip/net_if.c
+++ b/subsys/net/ip/net_if.c
@@ -4366,13 +4366,7 @@
net_if_unlock(iface);
}
#else
-void net_if_ipv4_start_acd(struct net_if *iface, struct net_if_addr *ifaddr)
-{
- ARG_UNUSED(iface);
-
- ifaddr->addr_state = NET_ADDR_PREFERRED;
-}
-
+#define net_if_ipv4_start_acd(...)
#define net_if_start_acd(...)
#endif /* CONFIG_NET_IPV4_ACD */
@@ -4453,7 +4447,8 @@
net_sprint_ipv4_addr(addr),
net_addr_type2str(addr_type));
- if (!(l2_flags_get(iface) & NET_L2_POINT_TO_POINT) &&
+ if (IS_ENABLED(CONFIG_NET_IPV4_ACD) &&
+ !(l2_flags_get(iface) & NET_L2_POINT_TO_POINT) &&
!net_ipv4_is_addr_loopback(addr)) {
/* ACD is started after the lock is released. */
;