Commit cbd599fe authored by Cristian Bulacu's avatar Cristian Bulacu Committed by Fabio Baltieri
Browse files

net: sockets: Return mapped address from `sock_get_pkt_src_addr()` function



When an IPv4 packet is received on a dual-stack socket, return
the mapped v4 to v6 address as source address.

Signed-off-by: default avatarCristian Bulacu <cristian.bulacu@nxp.com>
parent 48897a90
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -817,6 +817,15 @@ static int sock_get_pkt_src_addr(struct net_context *ctx,
		ret = -ENOTSUP;
	}

	if (IS_ENABLED(CONFIG_NET_IPV4_MAPPING_TO_IPV6) && net_pkt_family(pkt) == AF_INET &&
	    net_context_get_family(ctx) == AF_INET6 && !net_context_is_v6only_set(ctx)) {
		struct sockaddr_in6 mapped_addr;

		net_ipv6_addr_create_v4_mapped(&net_sin(addr)->sin_addr, &(mapped_addr.sin6_addr));
		net_ipaddr_copy(&net_sin6(addr)->sin6_addr, &mapped_addr.sin6_addr);
		addr->sa_family = AF_INET6;
	}

error:
	net_pkt_cursor_restore(pkt, &backup);