ipv4: Inline neigh binding.
Get rid of all of the useless and costly indirection by doing the neigh hash table lookup directly inside of the neighbour binding. Rename from arp_bind_neighbour to rt_bind_neighbour. Use new helpers {__,}ipv4_neigh_lookup() In rt_bind_neighbour() get rid of useless tests which are never true in the context this function is called, namely dev is never NULL and the dst->neighbour is always NULL. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
e5b1de1f5e
commit
3769cffb1c
@@ -517,30 +517,6 @@ EXPORT_SYMBOL(arp_find);
|
||||
|
||||
/* END OF OBSOLETE FUNCTIONS */
|
||||
|
||||
int arp_bind_neighbour(struct dst_entry *dst)
|
||||
{
|
||||
struct net_device *dev = dst->dev;
|
||||
struct neighbour *n = dst->neighbour;
|
||||
|
||||
if (dev == NULL)
|
||||
return -EINVAL;
|
||||
if (n == NULL) {
|
||||
__be32 nexthop = ((struct rtable *)dst)->rt_gateway;
|
||||
if (dev->flags & (IFF_LOOPBACK | IFF_POINTOPOINT))
|
||||
nexthop = 0;
|
||||
n = __neigh_lookup_errno(
|
||||
#if defined(CONFIG_ATM_CLIP) || defined(CONFIG_ATM_CLIP_MODULE)
|
||||
dev->type == ARPHRD_ATM ?
|
||||
clip_tbl_hook :
|
||||
#endif
|
||||
&arp_tbl, &nexthop, dev);
|
||||
if (IS_ERR(n))
|
||||
return PTR_ERR(n);
|
||||
dst->neighbour = n;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Check if we can use proxy ARP for this path
|
||||
*/
|
||||
|
Reference in New Issue
Block a user