tcp_conn: Check if the remote address is unspecified
Change-Id: I6f547bb4bfb3bb621573db9097a531ce2260e794 Signed-off-by: chao.an <anchao@xiaomi.com>
This commit is contained in:
parent
87cf5c58ae
commit
8dd4b27973
@ -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 */
|
||||
|
||||
@ -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
|
||||
@ -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 */
|
||||
|
||||
@ -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
|
||||
@ -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 */
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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 */
|
||||
|
||||
@ -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 */
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user