diff options
Diffstat (limited to 'net/ipv4/route.c')
| -rw-r--r-- | net/ipv4/route.c | 7 | 
1 files changed, 6 insertions, 1 deletions
diff --git a/net/ipv4/route.c b/net/ipv4/route.c index bcacf54e541..0489cedc167 100644 --- a/net/ipv4/route.c +++ b/net/ipv4/route.c @@ -1117,12 +1117,17 @@ static struct neighbour *ipv4_neigh_lookup(const struct dst_entry *dst, const vo  	static const __be32 inaddr_any = 0;  	struct net_device *dev = dst->dev;  	const __be32 *pkey = daddr; +	const struct rtable *rt;  	struct neighbour *n; +	rt = (const struct rtable *) dst; +  	if (dev->flags & (IFF_LOOPBACK | IFF_POINTOPOINT))  		pkey = &inaddr_any; +	else if (rt->rt_gateway) +		pkey = (const __be32 *) &rt->rt_gateway; -	n = __ipv4_neigh_lookup(&arp_tbl, dev, *(__force u32 *)pkey); +	n = __ipv4_neigh_lookup(dev, *(__force u32 *)pkey);  	if (n)  		return n;  	return neigh_create(&arp_tbl, pkey, dev);  |