net/tcp: tcp_send_[un]buffered.c: Check routing table in psock_send_addrchck(). Previously only ARP table was considered when determining if the data will actually be sent.
This commit is contained in:
parent
5f83631a97
commit
c065f0fd49
@ -285,6 +285,7 @@ static inline void send_ipselect(FAR struct net_driver_s *dev,
|
|||||||
#ifdef CONFIG_NET_ETHERNET
|
#ifdef CONFIG_NET_ETHERNET
|
||||||
static inline bool psock_send_addrchck(FAR struct tcp_conn_s *conn)
|
static inline bool psock_send_addrchck(FAR struct tcp_conn_s *conn)
|
||||||
{
|
{
|
||||||
|
/* Only Ethernet drivers are supported by this function */
|
||||||
/* REVISIT: Could the MAC address not also be in a routing table? */
|
/* REVISIT: Could the MAC address not also be in a routing table? */
|
||||||
|
|
||||||
if (conn->dev->d_lltype != NET_LL_ETHERNET)
|
if (conn->dev->d_lltype != NET_LL_ETHERNET)
|
||||||
@ -297,11 +298,41 @@ static inline bool psock_send_addrchck(FAR struct tcp_conn_s *conn)
|
|||||||
if (conn->domain == PF_INET)
|
if (conn->domain == PF_INET)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
#if !defined(CONFIG_NET_ARP_IPIN) && !defined(CONFIG_NET_ARP_SEND)
|
/* For historical reasons, we will return true if both the ARP and the
|
||||||
return (arp_find(conn->u.ipv4.raddr) != NULL);
|
* routing table are disabled.
|
||||||
#else
|
*/
|
||||||
return true;
|
|
||||||
|
bool ret = true;
|
||||||
|
#ifdef CONFIG_NET_ROUTE
|
||||||
|
in_addr_t router;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if !defined(CONFIG_NET_ARP_IPIN) && !defined(CONFIG_NET_ARP_SEND)
|
||||||
|
if (arp_find(conn->u.ipv4.raddr) != NULL)
|
||||||
|
{
|
||||||
|
/* Return true if the address was found in the ARP table */
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Otherwise, return false */
|
||||||
|
|
||||||
|
ret = false;
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_NET_ROUTE
|
||||||
|
if (net_ipv4_router(conn->u.ipv4.raddr, &router) == OK)
|
||||||
|
{
|
||||||
|
/* Return true if the address was found in the routing table */
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Otherwise, return false */
|
||||||
|
|
||||||
|
ret = false;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_NET_IPv4 */
|
#endif /* CONFIG_NET_IPv4 */
|
||||||
|
|
||||||
|
@ -233,10 +233,13 @@ static inline void tcpsend_ipselect(FAR struct net_driver_s *dev,
|
|||||||
#ifdef CONFIG_NET_ETHERNET
|
#ifdef CONFIG_NET_ETHERNET
|
||||||
static inline bool psock_send_addrchck(FAR struct tcp_conn_s *conn)
|
static inline bool psock_send_addrchck(FAR struct tcp_conn_s *conn)
|
||||||
{
|
{
|
||||||
|
/* Only Ethernet drivers are supported by this function */
|
||||||
/* REVISIT: Could the MAC address not also be in a routing table? */
|
/* REVISIT: Could the MAC address not also be in a routing table? */
|
||||||
|
|
||||||
if (conn->dev->d_lltype != NET_LL_ETHERNET)
|
if (conn->dev->d_lltype != NET_LL_ETHERNET)
|
||||||
{
|
{
|
||||||
|
/* Return true for non-Ethernet devices. */
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -245,11 +248,41 @@ static inline bool psock_send_addrchck(FAR struct tcp_conn_s *conn)
|
|||||||
if (conn->domain == PF_INET)
|
if (conn->domain == PF_INET)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
#if !defined(CONFIG_NET_ARP_IPIN) && !defined(CONFIG_NET_ARP_SEND)
|
/* For historical reasons, we will return true if both the ARP and the
|
||||||
return (arp_find(conn->u.ipv4.raddr) != NULL);
|
* routing table are disabled.
|
||||||
#else
|
*/
|
||||||
return true;
|
|
||||||
|
bool ret = true;
|
||||||
|
#ifdef CONFIG_NET_ROUTE
|
||||||
|
in_addr_t router;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if !defined(CONFIG_NET_ARP_IPIN) && !defined(CONFIG_NET_ARP_SEND)
|
||||||
|
if (arp_find(conn->u.ipv4.raddr) != NULL)
|
||||||
|
{
|
||||||
|
/* Return true if the address was found in the ARP table */
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Otherwise, return false */
|
||||||
|
|
||||||
|
ret = false;
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_NET_ROUTE
|
||||||
|
if (net_ipv4_router(conn->u.ipv4.raddr, &router) == OK)
|
||||||
|
{
|
||||||
|
/* Return true if the address was found in the routing table */
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Otherwise, return false */
|
||||||
|
|
||||||
|
ret = false;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_NET_IPv4 */
|
#endif /* CONFIG_NET_IPv4 */
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user