aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4/arp.c
diff options
context:
space:
mode:
authorDavid Miller <davem@davemloft.net>2011-07-11 18:44:24 -0400
committerDavid S. Miller <davem@davemloft.net>2011-07-13 04:12:28 -0400
commit3769cffb1c48f64640ffab7ce3bffe867342c0f0 (patch)
tree8f6fcf2d822bf3a170a534e8540faa34fe9258ef /net/ipv4/arp.c
parente5b1de1f5ebe0200e988e195fefb6c7396de6e20 (diff)
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>
Diffstat (limited to 'net/ipv4/arp.c')
-rw-r--r--net/ipv4/arp.c24
1 files changed, 0 insertions, 24 deletions
diff --git a/net/ipv4/arp.c b/net/ipv4/arp.c
index 4412b57f6ff6..3e5545675ccf 100644
--- a/net/ipv4/arp.c
+++ b/net/ipv4/arp.c
@@ -517,30 +517,6 @@ EXPORT_SYMBOL(arp_find);
517 517
518/* END OF OBSOLETE FUNCTIONS */ 518/* END OF OBSOLETE FUNCTIONS */
519 519
520int arp_bind_neighbour(struct dst_entry *dst)
521{
522 struct net_device *dev = dst->dev;
523 struct neighbour *n = dst->neighbour;
524
525 if (dev == NULL)
526 return -EINVAL;
527 if (n == NULL) {
528 __be32 nexthop = ((struct rtable *)dst)->rt_gateway;
529 if (dev->flags & (IFF_LOOPBACK | IFF_POINTOPOINT))
530 nexthop = 0;
531 n = __neigh_lookup_errno(
532#if defined(CONFIG_ATM_CLIP) || defined(CONFIG_ATM_CLIP_MODULE)
533 dev->type == ARPHRD_ATM ?
534 clip_tbl_hook :
535#endif
536 &arp_tbl, &nexthop, dev);
537 if (IS_ERR(n))
538 return PTR_ERR(n);
539 dst->neighbour = n;
540 }
541 return 0;
542}
543
544/* 520/*
545 * Check if we can use proxy ARP for this path 521 * Check if we can use proxy ARP for this path
546 */ 522 */