diff --git a/include/net/if.h b/include/net/if.h index 9c1f2a5517..eae6bcb3fc 100644 --- a/include/net/if.h +++ b/include/net/if.h @@ -55,6 +55,7 @@ #define IFF_DOWN (1 << 0) #define IFF_UP (1 << 1) #define IFF_RUNNING (1 << 2) +#define IFF_NOARP (1 << 7) /******************************************************************************************* diff --git a/net/arp/arp_inout.c b/net/arp/arp_inout.c index 78bebae6d0..18a1483cad 100644 --- a/net/arp/arp_inout.c +++ b/net/arp/arp_inout.c @@ -327,6 +327,17 @@ void arp_out(struct uip_driver_s *dev) in_addr_t ipaddr; in_addr_t destipaddr; +#ifdef CONFIG_NET_PKT + /* Skip sending ARP requests when the frame to be transmitted was + * written into a packet socket. + */ + + if ((dev->d_flags & IFF_NOARP) == IFF_NOARP) + { + return; + } +#endif + /* Find the destination IP address in the ARP table and construct * the Ethernet header. If the destination IP address isn't on the * local network, we use the default router's IP address instead.