Lines Matching refs:n
55 static void __neigh_notify(struct neighbour *n, int type, int flags);
131 struct neighbour *n; in neigh_forced_gc() local
135 while ((n = rcu_dereference_protected(*np, in neigh_forced_gc()
141 write_lock(&n->lock); in neigh_forced_gc()
142 if (atomic_read(&n->refcnt) == 1 && in neigh_forced_gc()
143 !(n->nud_state & NUD_PERMANENT)) { in neigh_forced_gc()
145 rcu_dereference_protected(n->next, in neigh_forced_gc()
147 n->dead = 1; in neigh_forced_gc()
149 write_unlock(&n->lock); in neigh_forced_gc()
150 neigh_cleanup_and_release(n); in neigh_forced_gc()
153 write_unlock(&n->lock); in neigh_forced_gc()
154 np = &n->next; in neigh_forced_gc()
165 static void neigh_add_timer(struct neighbour *n, unsigned long when) in neigh_add_timer() argument
167 neigh_hold(n); in neigh_add_timer()
168 if (unlikely(mod_timer(&n->timer, when))) { in neigh_add_timer()
170 n->nud_state); in neigh_add_timer()
175 static int neigh_del_timer(struct neighbour *n) in neigh_del_timer() argument
177 if ((n->nud_state & NUD_IN_TIMER) && in neigh_del_timer()
178 del_timer(&n->timer)) { in neigh_del_timer()
179 neigh_release(n); in neigh_del_timer()
204 struct neighbour *n; in neigh_flush_dev() local
207 while ((n = rcu_dereference_protected(*np, in neigh_flush_dev()
209 if (dev && n->dev != dev) { in neigh_flush_dev()
210 np = &n->next; in neigh_flush_dev()
214 rcu_dereference_protected(n->next, in neigh_flush_dev()
216 write_lock(&n->lock); in neigh_flush_dev()
217 neigh_del_timer(n); in neigh_flush_dev()
218 n->dead = 1; in neigh_flush_dev()
220 if (atomic_read(&n->refcnt) != 1) { in neigh_flush_dev()
230 __skb_queue_purge(&n->arp_queue); in neigh_flush_dev()
231 n->arp_queue_len_bytes = 0; in neigh_flush_dev()
232 n->output = neigh_blackhole; in neigh_flush_dev()
233 if (n->nud_state & NUD_VALID) in neigh_flush_dev()
234 n->nud_state = NUD_NOARP; in neigh_flush_dev()
236 n->nud_state = NUD_NONE; in neigh_flush_dev()
237 neigh_dbg(2, "neigh %p is stray\n", n); in neigh_flush_dev()
239 write_unlock(&n->lock); in neigh_flush_dev()
240 neigh_cleanup_and_release(n); in neigh_flush_dev()
268 struct neighbour *n = NULL; in neigh_alloc() local
281 n = kzalloc(tbl->entry_size + dev->neigh_priv_len, GFP_ATOMIC); in neigh_alloc()
282 if (!n) in neigh_alloc()
285 __skb_queue_head_init(&n->arp_queue); in neigh_alloc()
286 rwlock_init(&n->lock); in neigh_alloc()
287 seqlock_init(&n->ha_lock); in neigh_alloc()
288 n->updated = n->used = now; in neigh_alloc()
289 n->nud_state = NUD_NONE; in neigh_alloc()
290 n->output = neigh_blackhole; in neigh_alloc()
291 seqlock_init(&n->hh.hh_lock); in neigh_alloc()
292 n->parms = neigh_parms_clone(&tbl->parms); in neigh_alloc()
293 setup_timer(&n->timer, neigh_timer_handler, (unsigned long)n); in neigh_alloc()
296 n->tbl = tbl; in neigh_alloc()
297 atomic_set(&n->refcnt, 1); in neigh_alloc()
298 n->dead = 1; in neigh_alloc()
300 return n; in neigh_alloc()
370 struct neighbour *n, *next; in neigh_hash_grow() local
372 for (n = rcu_dereference_protected(old_nht->hash_buckets[i], in neigh_hash_grow()
374 n != NULL; in neigh_hash_grow()
375 n = next) { in neigh_hash_grow()
376 hash = tbl->hash(n->primary_key, n->dev, in neigh_hash_grow()
380 next = rcu_dereference_protected(n->next, in neigh_hash_grow()
383 rcu_assign_pointer(n->next, in neigh_hash_grow()
387 rcu_assign_pointer(new_nht->hash_buckets[hash], n); in neigh_hash_grow()
399 struct neighbour *n; in neigh_lookup() local
404 n = __neigh_lookup_noref(tbl, pkey, dev); in neigh_lookup()
405 if (n) { in neigh_lookup()
406 if (!atomic_inc_not_zero(&n->refcnt)) in neigh_lookup()
407 n = NULL; in neigh_lookup()
412 return n; in neigh_lookup()
419 struct neighbour *n; in neigh_lookup_nodev() local
430 for (n = rcu_dereference_bh(nht->hash_buckets[hash_val]); in neigh_lookup_nodev()
431 n != NULL; in neigh_lookup_nodev()
432 n = rcu_dereference_bh(n->next)) { in neigh_lookup_nodev()
433 if (!memcmp(n->primary_key, pkey, key_len) && in neigh_lookup_nodev()
434 net_eq(dev_net(n->dev), net)) { in neigh_lookup_nodev()
435 if (!atomic_inc_not_zero(&n->refcnt)) in neigh_lookup_nodev()
436 n = NULL; in neigh_lookup_nodev()
443 return n; in neigh_lookup_nodev()
453 struct neighbour *n1, *rc, *n = neigh_alloc(tbl, dev); in __neigh_create() local
456 if (!n) { in __neigh_create()
461 memcpy(n->primary_key, pkey, key_len); in __neigh_create()
462 n->dev = dev; in __neigh_create()
466 if (tbl->constructor && (error = tbl->constructor(n)) < 0) { in __neigh_create()
472 error = dev->netdev_ops->ndo_neigh_construct(n); in __neigh_create()
480 if (n->parms->neigh_setup && in __neigh_create()
481 (error = n->parms->neigh_setup(n)) < 0) { in __neigh_create()
486 n->confirmed = jiffies - (NEIGH_VAR(n->parms, BASE_REACHABLE_TIME) << 1); in __neigh_create()
497 if (n->parms->dead) { in __neigh_create()
515 n->dead = 0; in __neigh_create()
517 neigh_hold(n); in __neigh_create()
518 rcu_assign_pointer(n->next, in __neigh_create()
521 rcu_assign_pointer(nht->hash_buckets[hash_val], n); in __neigh_create()
523 neigh_dbg(2, "neigh %p is created\n", n); in __neigh_create()
524 rc = n; in __neigh_create()
530 neigh_release(n); in __neigh_create()
545 static struct pneigh_entry *__pneigh_lookup_1(struct pneigh_entry *n, in __pneigh_lookup_1() argument
551 while (n) { in __pneigh_lookup_1()
552 if (!memcmp(n->key, pkey, key_len) && in __pneigh_lookup_1()
553 net_eq(pneigh_net(n), net) && in __pneigh_lookup_1()
554 (n->dev == dev || !n->dev)) in __pneigh_lookup_1()
555 return n; in __pneigh_lookup_1()
556 n = n->next; in __pneigh_lookup_1()
576 struct pneigh_entry *n; in pneigh_lookup() local
581 n = __pneigh_lookup_1(tbl->phash_buckets[hash_val], in pneigh_lookup()
585 if (n || !creat) in pneigh_lookup()
590 n = kmalloc(sizeof(*n) + key_len, GFP_KERNEL); in pneigh_lookup()
591 if (!n) in pneigh_lookup()
594 write_pnet(&n->net, net); in pneigh_lookup()
595 memcpy(n->key, pkey, key_len); in pneigh_lookup()
596 n->dev = dev; in pneigh_lookup()
600 if (tbl->pconstructor && tbl->pconstructor(n)) { in pneigh_lookup()
603 kfree(n); in pneigh_lookup()
604 n = NULL; in pneigh_lookup()
609 n->next = tbl->phash_buckets[hash_val]; in pneigh_lookup()
610 tbl->phash_buckets[hash_val] = n; in pneigh_lookup()
613 return n; in pneigh_lookup()
621 struct pneigh_entry *n, **np; in pneigh_delete() local
626 for (np = &tbl->phash_buckets[hash_val]; (n = *np) != NULL; in pneigh_delete()
627 np = &n->next) { in pneigh_delete()
628 if (!memcmp(n->key, pkey, key_len) && n->dev == dev && in pneigh_delete()
629 net_eq(pneigh_net(n), net)) { in pneigh_delete()
630 *np = n->next; in pneigh_delete()
633 tbl->pdestructor(n); in pneigh_delete()
634 if (n->dev) in pneigh_delete()
635 dev_put(n->dev); in pneigh_delete()
636 kfree(n); in pneigh_delete()
646 struct pneigh_entry *n, **np; in pneigh_ifdown() local
651 while ((n = *np) != NULL) { in pneigh_ifdown()
652 if (!dev || n->dev == dev) { in pneigh_ifdown()
653 *np = n->next; in pneigh_ifdown()
655 tbl->pdestructor(n); in pneigh_ifdown()
656 if (n->dev) in pneigh_ifdown()
657 dev_put(n->dev); in pneigh_ifdown()
658 kfree(n); in pneigh_ifdown()
661 np = &n->next; in pneigh_ifdown()
739 struct neighbour *n; in neigh_periodic_work() local
768 while ((n = rcu_dereference_protected(*np, in neigh_periodic_work()
772 write_lock(&n->lock); in neigh_periodic_work()
774 state = n->nud_state; in neigh_periodic_work()
776 write_unlock(&n->lock); in neigh_periodic_work()
780 if (time_before(n->used, n->confirmed)) in neigh_periodic_work()
781 n->used = n->confirmed; in neigh_periodic_work()
783 if (atomic_read(&n->refcnt) == 1 && in neigh_periodic_work()
785 time_after(jiffies, n->used + NEIGH_VAR(n->parms, GC_STALETIME)))) { in neigh_periodic_work()
786 *np = n->next; in neigh_periodic_work()
787 n->dead = 1; in neigh_periodic_work()
788 write_unlock(&n->lock); in neigh_periodic_work()
789 neigh_cleanup_and_release(n); in neigh_periodic_work()
792 write_unlock(&n->lock); in neigh_periodic_work()
795 np = &n->next; in neigh_periodic_work()
817 static __inline__ int neigh_max_probes(struct neighbour *n) in neigh_max_probes() argument
819 struct neigh_parms *p = n->parms; in neigh_max_probes()
821 (n->nud_state & NUD_PROBE ? NEIGH_VAR(p, MCAST_REPROBES) : in neigh_max_probes()
1265 static void neigh_hh_init(struct neighbour *n) in neigh_hh_init() argument
1267 struct net_device *dev = n->dev; in neigh_hh_init()
1268 __be16 prot = n->tbl->protocol; in neigh_hh_init()
1269 struct hh_cache *hh = &n->hh; in neigh_hh_init()
1271 write_lock_bh(&n->lock); in neigh_hh_init()
1277 dev->header_ops->cache(n, hh, prot); in neigh_hh_init()
1279 write_unlock_bh(&n->lock); in neigh_hh_init()
1353 struct sk_buff *skb, *n; in neigh_proxy_process() local
1357 skb_queue_walk_safe(&tbl->proxy_queue, skb, n) { in neigh_proxy_process()
2234 struct neighbour *n; in neigh_dump_table() local
2245 for (n = rcu_dereference_bh(nht->hash_buckets[h]), idx = 0; in neigh_dump_table()
2246 n != NULL; in neigh_dump_table()
2247 n = rcu_dereference_bh(n->next)) { in neigh_dump_table()
2248 if (!net_eq(dev_net(n->dev), net)) in neigh_dump_table()
2252 if (neigh_fill_info(skb, n, NETLINK_CB(cb->skb).portid, in neigh_dump_table()
2274 struct pneigh_entry *n; in pneigh_dump_table() local
2284 for (n = tbl->phash_buckets[h], idx = 0; n; n = n->next) { in pneigh_dump_table()
2285 if (pneigh_net(n) != net) in pneigh_dump_table()
2289 if (pneigh_fill_info(skb, n, NETLINK_CB(cb->skb).portid, in pneigh_dump_table()
2361 struct neighbour *n; in neigh_for_each() local
2363 for (n = rcu_dereference_bh(nht->hash_buckets[chain]); in neigh_for_each()
2364 n != NULL; in neigh_for_each()
2365 n = rcu_dereference_bh(n->next)) in neigh_for_each()
2366 cb(n, cookie); in neigh_for_each()
2383 struct neighbour *n; in __neigh_for_each_release() local
2387 while ((n = rcu_dereference_protected(*np, in __neigh_for_each_release()
2391 write_lock(&n->lock); in __neigh_for_each_release()
2392 release = cb(n); in __neigh_for_each_release()
2395 rcu_dereference_protected(n->next, in __neigh_for_each_release()
2397 n->dead = 1; in __neigh_for_each_release()
2399 np = &n->next; in __neigh_for_each_release()
2400 write_unlock(&n->lock); in __neigh_for_each_release()
2402 neigh_cleanup_and_release(n); in __neigh_for_each_release()
2449 struct neighbour *n = NULL; in neigh_get_first() local
2454 n = rcu_dereference_bh(nht->hash_buckets[bucket]); in neigh_get_first()
2456 while (n) { in neigh_get_first()
2457 if (!net_eq(dev_net(n->dev), net)) in neigh_get_first()
2463 v = state->neigh_sub_iter(state, n, &fakep); in neigh_get_first()
2469 if (n->nud_state & ~NUD_NOARP) in neigh_get_first()
2472 n = rcu_dereference_bh(n->next); in neigh_get_first()
2475 if (n) in neigh_get_first()
2480 return n; in neigh_get_first()
2484 struct neighbour *n, in neigh_get_next()
2492 void *v = state->neigh_sub_iter(state, n, pos); in neigh_get_next()
2494 return n; in neigh_get_next()
2496 n = rcu_dereference_bh(n->next); in neigh_get_next()
2499 while (n) { in neigh_get_next()
2500 if (!net_eq(dev_net(n->dev), net)) in neigh_get_next()
2503 void *v = state->neigh_sub_iter(state, n, pos); in neigh_get_next()
2505 return n; in neigh_get_next()
2511 if (n->nud_state & ~NUD_NOARP) in neigh_get_next()
2514 n = rcu_dereference_bh(n->next); in neigh_get_next()
2517 if (n) in neigh_get_next()
2523 n = rcu_dereference_bh(nht->hash_buckets[state->bucket]); in neigh_get_next()
2526 if (n && pos) in neigh_get_next()
2528 return n; in neigh_get_next()
2533 struct neighbour *n = neigh_get_first(seq); in neigh_get_idx() local
2535 if (n) { in neigh_get_idx()
2538 n = neigh_get_next(seq, n, pos); in neigh_get_idx()
2539 if (!n) in neigh_get_idx()
2543 return *pos ? NULL : n; in neigh_get_idx()
2782 static void __neigh_notify(struct neighbour *n, int type, int flags) in __neigh_notify() argument
2784 struct net *net = dev_net(n->dev); in __neigh_notify()
2792 err = neigh_fill_info(skb, n, 0, 0, type, flags); in __neigh_notify()
2806 void neigh_app_ns(struct neighbour *n) in neigh_app_ns() argument
2808 __neigh_notify(n, RTM_GETNEIGH, NLM_F_REQUEST); in neigh_app_ns()