Skip to content

Commit

Permalink
tcp_conn: Check if the remote address is unspecified
Browse files Browse the repository at this point in the history
Change-Id: I6f547bb4bfb3bb621573db9097a531ce2260e794
Signed-off-by: chao.an <anchao@xiaomi.com>
  • Loading branch information
anchao authored and gregory-nutt committed Dec 24, 2019
1 parent 87cf5c5 commit 86cdfd5
Showing 1 changed file with 9 additions and 8 deletions.
17 changes: 9 additions & 8 deletions net/tcp/tcp_finddev.c
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,8 @@
****************************************************************************/

#ifdef CONFIG_NET_IPv4
static int tcp_find_ipv4_device(FAR struct tcp_conn_s *conn, in_addr_t addr)
static int tcp_find_ipv4_device(FAR struct tcp_conn_s *conn,
in_addr_t addr, bool local)
{
/* Do nothing if a device is already bound to the connection */

Expand All @@ -88,7 +89,7 @@ static int tcp_find_ipv4_device(FAR struct tcp_conn_s *conn, in_addr_t addr)

if (net_ipv4addr_cmp(addr, INADDR_ANY))
{
return OK;
return local ? OK : -EINVAL;
}

/* We need to select the device that is going to route the TCP packet
Expand Down Expand Up @@ -121,7 +122,7 @@ static int tcp_find_ipv4_device(FAR struct tcp_conn_s *conn, in_addr_t addr)

#ifdef CONFIG_NET_IPv6
static int tcp_find_ipv6_device(FAR struct tcp_conn_s *conn,
const net_ipv6addr_t addr)
const net_ipv6addr_t addr, bool local)
{
/* Do nothing if a device is already bound to the connection */

Expand All @@ -138,7 +139,7 @@ static int tcp_find_ipv6_device(FAR struct tcp_conn_s *conn,

if (net_ipv6addr_cmp(addr, g_ipv6_unspecaddr))
{
return OK;
return local ? OK : -EINVAL;
}

/* We need to select the device that is going to route the TCP packet
Expand Down Expand Up @@ -177,7 +178,7 @@ static int tcp_find_ipv6_device(FAR struct tcp_conn_s *conn,
#ifdef CONFIG_NET_IPv4
int tcp_local_ipv4_device(FAR struct tcp_conn_s *conn)
{
return tcp_find_ipv4_device(conn, conn->u.ipv4.laddr);
return tcp_find_ipv4_device(conn, conn->u.ipv4.laddr, true);
}
#endif /* CONFIG_NET_IPv4 */

Expand All @@ -201,7 +202,7 @@ int tcp_local_ipv4_device(FAR struct tcp_conn_s *conn)
#ifdef CONFIG_NET_IPv4
int tcp_remote_ipv4_device(FAR struct tcp_conn_s *conn)
{
return tcp_find_ipv4_device(conn, conn->u.ipv4.raddr);
return tcp_find_ipv4_device(conn, conn->u.ipv4.raddr, false);
}
#endif

Expand All @@ -224,7 +225,7 @@ int tcp_remote_ipv4_device(FAR struct tcp_conn_s *conn)
#ifdef CONFIG_NET_IPv6
int tcp_local_ipv6_device(FAR struct tcp_conn_s *conn)
{
return tcp_find_ipv6_device(conn, conn->u.ipv6.laddr);
return tcp_find_ipv6_device(conn, conn->u.ipv6.laddr, true);
}
#endif /* CONFIG_NET_IPv6 */

Expand All @@ -248,7 +249,7 @@ int tcp_local_ipv6_device(FAR struct tcp_conn_s *conn)
#ifdef CONFIG_NET_IPv6
int tcp_remote_ipv6_device(FAR struct tcp_conn_s *conn)
{
return tcp_find_ipv6_device(conn, conn->u.ipv6.raddr);
return tcp_find_ipv6_device(conn, conn->u.ipv6.raddr, false);
}
#endif /* CONFIG_NET_IPv6 */

Expand Down

0 comments on commit 86cdfd5

Please sign in to comment.