diff options
Diffstat (limited to 'net/core/neighbour.c')
-rw-r--r-- | net/core/neighbour.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/net/core/neighbour.c b/net/core/neighbour.c index d57a40a2598c..4af151e1bf5d 100644 --- a/net/core/neighbour.c +++ b/net/core/neighbour.c | |||
@@ -497,6 +497,13 @@ struct neighbour *neigh_create(struct neigh_table *tbl, const void *pkey, | |||
497 | } | 497 | } |
498 | } | 498 | } |
499 | 499 | ||
500 | /* Device specific setup. */ | ||
501 | if (n->parms->neigh_setup && | ||
502 | (error = n->parms->neigh_setup(n)) < 0) { | ||
503 | rc = ERR_PTR(error); | ||
504 | goto out_neigh_release; | ||
505 | } | ||
506 | |||
500 | n->confirmed = jiffies - (n->parms->base_reachable_time << 1); | 507 | n->confirmed = jiffies - (n->parms->base_reachable_time << 1); |
501 | 508 | ||
502 | write_lock_bh(&tbl->lock); | 509 | write_lock_bh(&tbl->lock); |
@@ -710,6 +717,9 @@ void neigh_destroy(struct neighbour *neigh) | |||
710 | skb_queue_purge(&neigh->arp_queue); | 717 | skb_queue_purge(&neigh->arp_queue); |
711 | neigh->arp_queue_len_bytes = 0; | 718 | neigh->arp_queue_len_bytes = 0; |
712 | 719 | ||
720 | if (dev->netdev_ops->ndo_neigh_destroy) | ||
721 | dev->netdev_ops->ndo_neigh_destroy(neigh); | ||
722 | |||
713 | dev_put(dev); | 723 | dev_put(dev); |
714 | neigh_parms_put(neigh->parms); | 724 | neigh_parms_put(neigh->parms); |
715 | 725 | ||