Loading include/linux/netdevice.h +1 −0 Original line number Diff line number Diff line Loading @@ -974,6 +974,7 @@ struct net_device_ops { int (*ndo_set_features)(struct net_device *dev, netdev_features_t features); int (*ndo_neigh_construct)(struct neighbour *n); void (*ndo_neigh_destroy)(struct neighbour *n); }; /* Loading include/net/neighbour.h +1 −0 Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ struct neigh_parms { #endif struct net_device *dev; struct neigh_parms *next; int (*neigh_setup)(struct neighbour *); void (*neigh_cleanup)(struct neighbour *); struct neigh_table *tbl; Loading net/core/neighbour.c +10 −0 Original line number Diff line number Diff line Loading @@ -497,6 +497,13 @@ struct neighbour *neigh_create(struct neigh_table *tbl, const void *pkey, } } /* Device specific setup. */ if (n->parms->neigh_setup && (error = n->parms->neigh_setup(n)) < 0) { rc = ERR_PTR(error); goto out_neigh_release; } n->confirmed = jiffies - (n->parms->base_reachable_time << 1); write_lock_bh(&tbl->lock); Loading Loading @@ -710,6 +717,9 @@ void neigh_destroy(struct neighbour *neigh) skb_queue_purge(&neigh->arp_queue); neigh->arp_queue_len_bytes = 0; if (dev->netdev_ops->ndo_neigh_destroy) dev->netdev_ops->ndo_neigh_destroy(neigh); dev_put(dev); neigh_parms_put(neigh->parms); Loading Loading
include/linux/netdevice.h +1 −0 Original line number Diff line number Diff line Loading @@ -974,6 +974,7 @@ struct net_device_ops { int (*ndo_set_features)(struct net_device *dev, netdev_features_t features); int (*ndo_neigh_construct)(struct neighbour *n); void (*ndo_neigh_destroy)(struct neighbour *n); }; /* Loading
include/net/neighbour.h +1 −0 Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ struct neigh_parms { #endif struct net_device *dev; struct neigh_parms *next; int (*neigh_setup)(struct neighbour *); void (*neigh_cleanup)(struct neighbour *); struct neigh_table *tbl; Loading
net/core/neighbour.c +10 −0 Original line number Diff line number Diff line Loading @@ -497,6 +497,13 @@ struct neighbour *neigh_create(struct neigh_table *tbl, const void *pkey, } } /* Device specific setup. */ if (n->parms->neigh_setup && (error = n->parms->neigh_setup(n)) < 0) { rc = ERR_PTR(error); goto out_neigh_release; } n->confirmed = jiffies - (n->parms->base_reachable_time << 1); write_lock_bh(&tbl->lock); Loading Loading @@ -710,6 +717,9 @@ void neigh_destroy(struct neighbour *neigh) skb_queue_purge(&neigh->arp_queue); neigh->arp_queue_len_bytes = 0; if (dev->netdev_ops->ndo_neigh_destroy) dev->netdev_ops->ndo_neigh_destroy(neigh); dev_put(dev); neigh_parms_put(neigh->parms); Loading