net: ip: on synack copy local/remote data prior to net_tcp_register

When TCP SYNACK is received we register the connection via the
net_tcp_register function.  During this call several errors are
generated concerning local and remote address information not
being set.

Let's copy the local and remote address data prior to this call.

Change-Id: I17cd83f7b4b7e65e45fec1810fb38f745653bdc7
Signed-off-by: Michael Scott <michael.scott@linaro.org>
This commit is contained in:
Michael Scott 2017-01-10 08:45:02 -08:00 committed by Tomasz Bursztyka
commit a2464d049f

View file

@ -868,12 +868,32 @@ static enum net_verdict tcp_synack_received(struct net_conn *conn,
if (net_nbuf_family(buf) == AF_INET6) {
laddr = (struct sockaddr *)&l6addr;
raddr = (struct sockaddr *)&r6addr;
r6addr.sin6_family = AF_INET6;
r6addr.sin6_port = NET_TCP_BUF(buf)->src_port;
net_ipaddr_copy(&r6addr.sin6_addr,
&NET_IPV6_BUF(buf)->src);
l6addr.sin6_family = AF_INET6;
l6addr.sin6_port = NET_TCP_BUF(buf)->dst_port;
net_ipaddr_copy(&l6addr.sin6_addr,
&NET_IPV6_BUF(buf)->dst);
} else
#endif
#if defined(CONFIG_NET_IPV4)
if (net_nbuf_family(buf) == AF_INET) {
laddr = (struct sockaddr *)&l4addr;
raddr = (struct sockaddr *)&r4addr;
r4addr.sin_family = AF_INET;
r4addr.sin_port = NET_TCP_BUF(buf)->src_port;
net_ipaddr_copy(&r4addr.sin_addr,
&NET_IPV4_BUF(buf)->src);
l4addr.sin_family = AF_INET;
l4addr.sin_port = NET_TCP_BUF(buf)->dst_port;
net_ipaddr_copy(&l4addr.sin_addr,
&NET_IPV4_BUF(buf)->dst);
} else
#endif
{