Fix routing of muli-network UDP packets

This commit is contained in:
Gregory Nutt 2014-11-21 17:44:12 -06:00
parent 15c07e0d67
commit 2c2b5e6738
1 changed files with 8 additions and 0 deletions

View File

@ -350,6 +350,10 @@ FAR struct udp_conn_s *udp_active(FAR struct udp_iphdr_s *buf)
* number in the received packet. * number in the received packet.
* - The remote port number is checked if the connection is bound * - The remote port number is checked if the connection is bound
* to a remote port. * to a remote port.
* - If multiple network interfaces are supported, then the local
* IP address is available and we will insist that the
* destination IP matches the bound address (or the destination
* IP address is a broadcase address).
* - Finally, if the connection is bound to a remote IP address, * - Finally, if the connection is bound to a remote IP address,
* the source IP address of the packet is checked. Broadcast * the source IP address of the packet is checked. Broadcast
* addresses are also accepted. * addresses are also accepted.
@ -360,6 +364,10 @@ FAR struct udp_conn_s *udp_active(FAR struct udp_iphdr_s *buf)
if (conn->lport != 0 && buf->destport == conn->lport && if (conn->lport != 0 && buf->destport == conn->lport &&
(conn->rport == 0 || buf->srcport == conn->rport) && (conn->rport == 0 || buf->srcport == conn->rport) &&
#ifdef CONFIG_NETDEV_MULTINIC
(net_ipaddr_hdrcmp(buf->destipaddr, &g_alloneaddr) ||
net_ipaddr_hdrcmp(buf->destipaddr, &conn->lipaddr)) &&
#endif
(net_ipaddr_cmp(conn->ripaddr, g_allzeroaddr) || (net_ipaddr_cmp(conn->ripaddr, g_allzeroaddr) ||
net_ipaddr_cmp(conn->ripaddr, g_alloneaddr) || net_ipaddr_cmp(conn->ripaddr, g_alloneaddr) ||
net_ipaddr_hdrcmp(buf->srcipaddr, &conn->ripaddr))) net_ipaddr_hdrcmp(buf->srcipaddr, &conn->ripaddr)))