IP forwarding: In check it the Ethernet MAC address is in the ARP/Neighbor table, add an additional check to skip in the case of CONFIG_NET_MULTILINK and the devices is not an Ethernet device.
This commit is contained in:
parent
10f5f8f192
commit
edf16c5805
@ -44,6 +44,7 @@
|
|||||||
#include <net/if.h>
|
#include <net/if.h>
|
||||||
|
|
||||||
#include <nuttx/mm/iob.h>
|
#include <nuttx/mm/iob.h>
|
||||||
|
#include <nuttx/net/net.h>
|
||||||
#include <nuttx/net/netdev.h>
|
#include <nuttx/net/netdev.h>
|
||||||
#include <nuttx/net/ip.h>
|
#include <nuttx/net/ip.h>
|
||||||
#include <nuttx/net/netstats.h>
|
#include <nuttx/net/netstats.h>
|
||||||
@ -51,6 +52,8 @@
|
|||||||
#include "devif/ip_forward.h"
|
#include "devif/ip_forward.h"
|
||||||
#include "devif/devif.h"
|
#include "devif/devif.h"
|
||||||
#include "netdev/netdev.h"
|
#include "netdev/netdev.h"
|
||||||
|
#include "arp/arp.h"
|
||||||
|
#include "neighbor/neighbor.h"
|
||||||
#include "icmpv6/icmpv6.h"
|
#include "icmpv6/icmpv6.h"
|
||||||
|
|
||||||
#if defined(CONFIG_NET_IPFORWARD) && defined(CONFIG_NET_ICMPv6) && \
|
#if defined(CONFIG_NET_IPFORWARD) && defined(CONFIG_NET_ICMPv6) && \
|
||||||
@ -82,7 +85,8 @@
|
|||||||
* fwd - The forwarding state structure
|
* fwd - The forwarding state structure
|
||||||
*
|
*
|
||||||
* Returned Value:
|
* Returned Value:
|
||||||
* None
|
* true - The Ethernet MAC address is in the ARP or Neighbor table (OR
|
||||||
|
* the network device is not Ethernet).
|
||||||
*
|
*
|
||||||
* Assumptions:
|
* Assumptions:
|
||||||
* The network is locked.
|
* The network is locked.
|
||||||
@ -92,6 +96,15 @@
|
|||||||
#ifdef CONFIG_NET_ETHERNET
|
#ifdef CONFIG_NET_ETHERNET
|
||||||
static inline bool icmpv6_forward_addrchck(FAR struct forward_s *fwd)
|
static inline bool icmpv6_forward_addrchck(FAR struct forward_s *fwd)
|
||||||
{
|
{
|
||||||
|
/* REVISIT: Could the MAC address not also be in a routing table? */
|
||||||
|
|
||||||
|
#ifdef CONFIG_NET_MULTILINK
|
||||||
|
if (fwd->f_dev->d_lltype != NET_LL_ETHERNET)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_NET_IPv4
|
#ifdef CONFIG_NET_IPv4
|
||||||
#ifdef CONFIG_NET_IPv6
|
#ifdef CONFIG_NET_IPv6
|
||||||
if (conn->domain == PF_INET)
|
if (conn->domain == PF_INET)
|
||||||
|
@ -45,6 +45,7 @@
|
|||||||
#include <net/if.h>
|
#include <net/if.h>
|
||||||
|
|
||||||
#include <nuttx/mm/iob.h>
|
#include <nuttx/mm/iob.h>
|
||||||
|
#include <nuttx/net/net.h>
|
||||||
#include <nuttx/net/netdev.h>
|
#include <nuttx/net/netdev.h>
|
||||||
#include <nuttx/net/ip.h>
|
#include <nuttx/net/ip.h>
|
||||||
#include <nuttx/net/netstats.h>
|
#include <nuttx/net/netstats.h>
|
||||||
@ -52,6 +53,8 @@
|
|||||||
#include "devif/ip_forward.h"
|
#include "devif/ip_forward.h"
|
||||||
#include "devif/devif.h"
|
#include "devif/devif.h"
|
||||||
#include "netdev/netdev.h"
|
#include "netdev/netdev.h"
|
||||||
|
#include "arp/arp.h"
|
||||||
|
#include "neighbor/neighbor.h"
|
||||||
#include "tcp/tcp.h"
|
#include "tcp/tcp.h"
|
||||||
|
|
||||||
#if defined(CONFIG_NET_IPFORWARD) && defined(CONFIG_NET_TCP) && \
|
#if defined(CONFIG_NET_IPFORWARD) && defined(CONFIG_NET_TCP) && \
|
||||||
@ -124,7 +127,8 @@ static inline void forward_ipselect(FAR struct forward_s *fwd)
|
|||||||
* fwd - The forwarding state structure
|
* fwd - The forwarding state structure
|
||||||
*
|
*
|
||||||
* Returned Value:
|
* Returned Value:
|
||||||
* None
|
* true - The Ethernet MAC address is in the ARP or Neighbor table (OR
|
||||||
|
* the network device is not Ethernet).
|
||||||
*
|
*
|
||||||
* Assumptions:
|
* Assumptions:
|
||||||
* The network is locked.
|
* The network is locked.
|
||||||
@ -136,6 +140,15 @@ static inline bool tcp_forward_addrchck(FAR struct forward_s *fwd)
|
|||||||
{
|
{
|
||||||
FAR struct tcp_conn_s *conn = &fwd->f_conn.tcp;
|
FAR struct tcp_conn_s *conn = &fwd->f_conn.tcp;
|
||||||
|
|
||||||
|
/* REVISIT: Could the MAC address not also be in a routing table? */
|
||||||
|
|
||||||
|
#ifdef CONFIG_NET_MULTILINK
|
||||||
|
if (fwd->f_dev->d_lltype != NET_LL_ETHERNET)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_NET_IPv4
|
#ifdef CONFIG_NET_IPv4
|
||||||
#ifdef CONFIG_NET_IPv6
|
#ifdef CONFIG_NET_IPv6
|
||||||
if (conn->domain == PF_INET)
|
if (conn->domain == PF_INET)
|
||||||
|
@ -270,7 +270,8 @@ static inline void send_ipselect(FAR struct net_driver_s *dev,
|
|||||||
* conn - The TCP connection structure
|
* conn - The TCP connection structure
|
||||||
*
|
*
|
||||||
* Returned Value:
|
* Returned Value:
|
||||||
* None
|
* true - The Ethernet MAC address is in the ARP or Neighbor table (OR
|
||||||
|
* the network device is not Ethernet).
|
||||||
*
|
*
|
||||||
* Assumptions:
|
* Assumptions:
|
||||||
* Running at the interrupt level
|
* Running at the interrupt level
|
||||||
@ -280,6 +281,15 @@ 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)
|
||||||
{
|
{
|
||||||
|
/* REVISIT: Could the MAC address not also be in a routing table? */
|
||||||
|
|
||||||
|
#ifdef CONFIG_NET_MULTILINK
|
||||||
|
if (conn->dev->d_lltype != NET_LL_ETHERNET)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_NET_IPv4
|
#ifdef CONFIG_NET_IPv4
|
||||||
#ifdef CONFIG_NET_IPv6
|
#ifdef CONFIG_NET_IPv6
|
||||||
if (conn->domain == PF_INET)
|
if (conn->domain == PF_INET)
|
||||||
|
@ -221,7 +221,8 @@ static inline void tcpsend_ipselect(FAR struct net_driver_s *dev,
|
|||||||
* conn - The TCP connection structure
|
* conn - The TCP connection structure
|
||||||
*
|
*
|
||||||
* Returned Value:
|
* Returned Value:
|
||||||
* None
|
* true - The Ethernet MAC address is in the ARP or Neighbor table (OR
|
||||||
|
* the network device is not Ethernet).
|
||||||
*
|
*
|
||||||
* Assumptions:
|
* Assumptions:
|
||||||
* The network is locked.
|
* The network is locked.
|
||||||
@ -231,6 +232,15 @@ 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)
|
||||||
{
|
{
|
||||||
|
/* REVISIT: Could the MAC address not also be in a routing table? */
|
||||||
|
|
||||||
|
#ifdef CONFIG_NET_MULTILINK
|
||||||
|
if (conn->dev->d_lltype != NET_LL_ETHERNET)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_NET_IPv4
|
#ifdef CONFIG_NET_IPv4
|
||||||
#ifdef CONFIG_NET_IPv6
|
#ifdef CONFIG_NET_IPv6
|
||||||
if (conn->domain == PF_INET)
|
if (conn->domain == PF_INET)
|
||||||
|
@ -44,6 +44,7 @@
|
|||||||
#include <net/if.h>
|
#include <net/if.h>
|
||||||
|
|
||||||
#include <nuttx/mm/iob.h>
|
#include <nuttx/mm/iob.h>
|
||||||
|
#include <nuttx/net/net.h>
|
||||||
#include <nuttx/net/netdev.h>
|
#include <nuttx/net/netdev.h>
|
||||||
#include <nuttx/net/ip.h>
|
#include <nuttx/net/ip.h>
|
||||||
#include <nuttx/net/netstats.h>
|
#include <nuttx/net/netstats.h>
|
||||||
@ -51,6 +52,8 @@
|
|||||||
#include "devif/ip_forward.h"
|
#include "devif/ip_forward.h"
|
||||||
#include "devif/devif.h"
|
#include "devif/devif.h"
|
||||||
#include "netdev/netdev.h"
|
#include "netdev/netdev.h"
|
||||||
|
#include "arp/arp.h"
|
||||||
|
#include "neighbor/neighbor.h"
|
||||||
#include "udp/udp.h"
|
#include "udp/udp.h"
|
||||||
|
|
||||||
#if defined(CONFIG_NET_IPFORWARD) && defined(CONFIG_NET_UDP) && \
|
#if defined(CONFIG_NET_IPFORWARD) && defined(CONFIG_NET_UDP) && \
|
||||||
@ -118,7 +121,8 @@ static inline void forward_ipselect(FAR struct forward_s *fwd)
|
|||||||
* fwd - The forwarding state structure
|
* fwd - The forwarding state structure
|
||||||
*
|
*
|
||||||
* Returned Value:
|
* Returned Value:
|
||||||
* None
|
* true - The Ethernet MAC address is in the ARP or Neighbor table (OR
|
||||||
|
* the network device is not Ethernet).
|
||||||
*
|
*
|
||||||
* Assumptions:
|
* Assumptions:
|
||||||
* The network is locked.
|
* The network is locked.
|
||||||
@ -128,6 +132,15 @@ static inline void forward_ipselect(FAR struct forward_s *fwd)
|
|||||||
#ifdef CONFIG_NET_ETHERNET
|
#ifdef CONFIG_NET_ETHERNET
|
||||||
static inline bool udp_forward_addrchk(FAR struct forward_s *fwd)
|
static inline bool udp_forward_addrchk(FAR struct forward_s *fwd)
|
||||||
{
|
{
|
||||||
|
/* REVISIT: Could the MAC address not also be in a routing table? */
|
||||||
|
|
||||||
|
#ifdef CONFIG_NET_MULTILINK
|
||||||
|
if (fwd->f_dev->d_lltype != NET_LL_ETHERNET)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_NET_IPv4
|
#ifdef CONFIG_NET_IPv4
|
||||||
#ifdef CONFIG_NET_IPv6
|
#ifdef CONFIG_NET_IPv6
|
||||||
if (conn->domain == PF_INET)
|
if (conn->domain == PF_INET)
|
||||||
|
Loading…
Reference in New Issue
Block a user