summaryrefslogtreecommitdiffstats
path: root/include/net/arp.h
diff options
context:
space:
mode:
authorJim Westfall <jwestfall@surrealistic.net>2018-01-14 13:18:51 +0100
committerDavid S. Miller <davem@davemloft.net>2018-01-15 20:53:43 +0100
commitcd9ff4de0107c65d69d02253bb25d6db93c3dbc1 (patch)
tree84e0e11399bdb5eb0f479497026f16d5a7259a8f /include/net/arp.h
parentnet: Allow neigh contructor functions ability to modify the primary_key (diff)
downloadlinux-cd9ff4de0107c65d69d02253bb25d6db93c3dbc1.tar.xz
linux-cd9ff4de0107c65d69d02253bb25d6db93c3dbc1.zip
ipv4: Make neigh lookup keys for loopback/point-to-point devices be INADDR_ANY
Map all lookup neigh keys to INADDR_ANY for loopback/point-to-point devices to avoid making an entry for every remote ip the device needs to talk to. This used the be the old behavior but became broken in a263b3093641f (ipv4: Make neigh lookups directly in output packet path) and later removed in 0bb4087cbec0 (ipv4: Fix neigh lookup keying over loopback/point-to-point devices) because it was broken. Signed-off-by: Jim Westfall <jwestfall@surrealistic.net> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/net/arp.h')
-rw-r--r--include/net/arp.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/include/net/arp.h b/include/net/arp.h
index dc8cd47f883b..977aabfcdc03 100644
--- a/include/net/arp.h
+++ b/include/net/arp.h
@@ -20,6 +20,9 @@ static inline u32 arp_hashfn(const void *pkey, const struct net_device *dev, u32
static inline struct neighbour *__ipv4_neigh_lookup_noref(struct net_device *dev, u32 key)
{
+ if (dev->flags & (IFF_LOOPBACK | IFF_POINTOPOINT))
+ key = INADDR_ANY;
+
return ___neigh_lookup_noref(&arp_tbl, neigh_key_eq32, arp_hashfn, &key, dev);
}