Commit f38ff343 authored by Marcin Niestroj's avatar Marcin Niestroj Committed by Benjamin Cabé
Browse files

net: ipv6: set NET_ADDR_PREFERRED before network event if !DAD

Set NET_ADDR_PREFERRED before network event is generated, so that conn_mgr
properly generates NET_EVENT_L4_CONNECTED and NET_EVENT_L4_IPV6_CONNECTED
events.

Fixes: 1a5e13a7 ("net: if: Release the interface lock early when
  starting IPv4 ACD")
Signed-off-by: default avatarMarcin Niestroj <m.niestroj@emb.dev>
(cherry picked from commit 7290dd2a)
parent 09e67860
Loading
Loading
Loading
Loading
+4 −12
Changes for subsys/net/ip/net_if.c: 4 added lines, 12 removed lines.
Original line number Diff line number Diff line
@@ -1469,12 +1469,7 @@ static inline void iface_ipv6_dad_init(void)
}

#else
static inline void net_if_ipv6_start_dad(struct net_if *iface,
					 struct net_if_addr *ifaddr)
{
	ifaddr->addr_state = NET_ADDR_PREFERRED;
}

#define net_if_ipv6_start_dad(...)
#define iface_ipv6_dad_init(...)
#endif /* CONFIG_NET_IPV6_DAD */

@@ -1816,11 +1811,7 @@ static void address_start_timer(struct net_if_addr *ifaddr, uint32_t vlifetime)
}
#else /* CONFIG_NET_NATIVE_IPV6 */
#define address_start_timer(...)
static inline void net_if_ipv6_start_dad(struct net_if *iface,
					 struct net_if_addr *ifaddr)
{
	ifaddr->addr_state = NET_ADDR_PREFERRED;
}
#define net_if_ipv6_start_dad(...)
#define join_mcast_nodes(...)
#endif /* CONFIG_NET_NATIVE_IPV6 */

@@ -2037,7 +2028,8 @@ struct net_if_addr *net_if_ipv6_addr_add(struct net_if *iface,
			net_sprint_ipv6_addr(addr),
			net_addr_type2str(addr_type));

		if (!(l2_flags_get(iface) & NET_L2_POINT_TO_POINT) &&
		if (IS_ENABLED(CONFIG_NET_IPV6_DAD) &&
		    !(l2_flags_get(iface) & NET_L2_POINT_TO_POINT) &&
		    !net_ipv6_is_addr_loopback(addr) &&
		    !net_if_flag_is_set(iface, NET_IF_IPV6_NO_ND)) {
			/* The groups are joined without locks held */