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:
parent
ff1345dbaf
commit
a2464d049f
1 changed files with 20 additions and 0 deletions
|
@ -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
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue