2 * Generic address resolution entity
5 * Pedro Roque <roque@di.fc.ul.pt>
6 * Alexey Kuznetsov <kuznet@ms2.inr.ac.ru>
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License
10 * as published by the Free Software Foundation; either version
11 * 2 of the License, or (at your option) any later version.
14 * Vitaly E. Lavrov releasing NULL neighbor in neigh_add.
15 * Harald Welte Add neighbour cache statistics like rtstat
18 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
20 #include <linux/slab.h>
21 #include <linux/types.h>
22 #include <linux/kernel.h>
23 #include <linux/module.h>
24 #include <linux/socket.h>
25 #include <linux/netdevice.h>
26 #include <linux/proc_fs.h>
28 #include <linux/sysctl.h>
30 #include <linux/times.h>
31 #include <net/net_namespace.h>
32 #include <net/neighbour.h>
35 #include <net/netevent.h>
36 #include <net/netlink.h>
37 #include <linux/rtnetlink.h>
38 #include <linux/random.h>
39 #include <linux/string.h>
40 #include <linux/log2.h>
41 #include <linux/inetdevice.h>
42 #include <net/addrconf.h>
46 #define neigh_dbg(level, fmt, ...) \
48 if (level <= NEIGH_DEBUG) \
49 pr_debug(fmt, ##__VA_ARGS__); \
52 #define PNEIGH_HASHMASK 0xF
54 static void neigh_timer_handler(struct timer_list *t);
55 static void __neigh_notify(struct neighbour *n, int type, int flags,
57 static void neigh_update_notify(struct neighbour *neigh, u32 nlmsg_pid);
58 static int pneigh_ifdown_and_unlock(struct neigh_table *tbl,
59 struct net_device *dev);
62 static const struct seq_operations neigh_stat_seq_ops;
66 Neighbour hash table buckets are protected with rwlock tbl->lock.
68 - All the scans/updates to hash buckets MUST be made under this lock.
69 - NOTHING clever should be made under this lock: no callbacks
70 to protocol backends, no attempts to send something to network.
71 It will result in deadlocks, if backend/driver wants to use neighbour
73 - If the entry requires some non-trivial actions, increase
74 its reference count and release table lock.
76 Neighbour entries are protected:
77 - with reference count.
78 - with rwlock neigh->lock
80 Reference count prevents destruction.
82 neigh->lock mainly serializes ll address data and its validity state.
83 However, the same lock is used to protect another entry fields:
87 Again, nothing clever shall be made under neigh->lock,
88 the most complicated procedure, which we allow is dev->hard_header.
89 It is supposed, that dev->hard_header is simplistic and does
90 not make callbacks to neighbour tables.
93 static int neigh_blackhole(struct neighbour *neigh, struct sk_buff *skb)
99 static void neigh_cleanup_and_release(struct neighbour *neigh)
101 if (neigh->parms->neigh_cleanup)
102 neigh->parms->neigh_cleanup(neigh);
104 __neigh_notify(neigh, RTM_DELNEIGH, 0, 0);
105 call_netevent_notifiers(NETEVENT_NEIGH_UPDATE, neigh);
106 neigh_release(neigh);
110 * It is random distribution in the interval (1/2)*base...(3/2)*base.
111 * It corresponds to default IPv6 settings and is not overridable,
112 * because it is really reasonable choice.
115 unsigned long neigh_rand_reach_time(unsigned long base)
117 return base ? (prandom_u32() % base) + (base >> 1) : 0;
119 EXPORT_SYMBOL(neigh_rand_reach_time);
122 static bool neigh_del(struct neighbour *n, __u8 state,
123 struct neighbour __rcu **np, struct neigh_table *tbl)
127 write_lock(&n->lock);
128 if (refcount_read(&n->refcnt) == 1 && !(n->nud_state & state)) {
129 struct neighbour *neigh;
131 neigh = rcu_dereference_protected(n->next,
132 lockdep_is_held(&tbl->lock));
133 rcu_assign_pointer(*np, neigh);
137 write_unlock(&n->lock);
139 neigh_cleanup_and_release(n);
143 bool neigh_remove_one(struct neighbour *ndel, struct neigh_table *tbl)
145 struct neigh_hash_table *nht;
146 void *pkey = ndel->primary_key;
149 struct neighbour __rcu **np;
151 nht = rcu_dereference_protected(tbl->nht,
152 lockdep_is_held(&tbl->lock));
153 hash_val = tbl->hash(pkey, ndel->dev, nht->hash_rnd);
154 hash_val = hash_val >> (32 - nht->hash_shift);
156 np = &nht->hash_buckets[hash_val];
157 while ((n = rcu_dereference_protected(*np,
158 lockdep_is_held(&tbl->lock)))) {
160 return neigh_del(n, 0, np, tbl);
166 static int neigh_forced_gc(struct neigh_table *tbl)
170 struct neigh_hash_table *nht;
172 NEIGH_CACHE_STAT_INC(tbl, forced_gc_runs);
174 write_lock_bh(&tbl->lock);
175 nht = rcu_dereference_protected(tbl->nht,
176 lockdep_is_held(&tbl->lock));
177 for (i = 0; i < (1 << nht->hash_shift); i++) {
179 struct neighbour __rcu **np;
181 np = &nht->hash_buckets[i];
182 while ((n = rcu_dereference_protected(*np,
183 lockdep_is_held(&tbl->lock))) != NULL) {
184 /* Neighbour record may be discarded if:
185 * - nobody refers to it.
186 * - it is not permanent
188 if (neigh_del(n, NUD_PERMANENT, np, tbl)) {
196 tbl->last_flush = jiffies;
198 write_unlock_bh(&tbl->lock);
203 static void neigh_add_timer(struct neighbour *n, unsigned long when)
206 if (unlikely(mod_timer(&n->timer, when))) {
207 printk("NEIGH: BUG, double timer add, state is %x\n",
213 static int neigh_del_timer(struct neighbour *n)
215 if ((n->nud_state & NUD_IN_TIMER) &&
216 del_timer(&n->timer)) {
223 static void pneigh_queue_purge(struct sk_buff_head *list)
227 while ((skb = skb_dequeue(list)) != NULL) {
233 static void neigh_flush_dev(struct neigh_table *tbl, struct net_device *dev)
236 struct neigh_hash_table *nht;
238 nht = rcu_dereference_protected(tbl->nht,
239 lockdep_is_held(&tbl->lock));
241 for (i = 0; i < (1 << nht->hash_shift); i++) {
243 struct neighbour __rcu **np = &nht->hash_buckets[i];
245 while ((n = rcu_dereference_protected(*np,
246 lockdep_is_held(&tbl->lock))) != NULL) {
247 if (dev && n->dev != dev) {
251 rcu_assign_pointer(*np,
252 rcu_dereference_protected(n->next,
253 lockdep_is_held(&tbl->lock)));
254 write_lock(&n->lock);
258 if (refcount_read(&n->refcnt) != 1) {
259 /* The most unpleasant situation.
260 We must destroy neighbour entry,
261 but someone still uses it.
263 The destroy will be delayed until
264 the last user releases us, but
265 we must kill timers etc. and move
268 __skb_queue_purge(&n->arp_queue);
269 n->arp_queue_len_bytes = 0;
270 n->output = neigh_blackhole;
271 if (n->nud_state & NUD_VALID)
272 n->nud_state = NUD_NOARP;
274 n->nud_state = NUD_NONE;
275 neigh_dbg(2, "neigh %p is stray\n", n);
277 write_unlock(&n->lock);
278 neigh_cleanup_and_release(n);
283 void neigh_changeaddr(struct neigh_table *tbl, struct net_device *dev)
285 write_lock_bh(&tbl->lock);
286 neigh_flush_dev(tbl, dev);
287 write_unlock_bh(&tbl->lock);
289 EXPORT_SYMBOL(neigh_changeaddr);
291 int neigh_ifdown(struct neigh_table *tbl, struct net_device *dev)
293 write_lock_bh(&tbl->lock);
294 neigh_flush_dev(tbl, dev);
295 pneigh_ifdown_and_unlock(tbl, dev);
297 del_timer_sync(&tbl->proxy_timer);
298 pneigh_queue_purge(&tbl->proxy_queue);
301 EXPORT_SYMBOL(neigh_ifdown);
303 static struct neighbour *neigh_alloc(struct neigh_table *tbl, struct net_device *dev)
305 struct neighbour *n = NULL;
306 unsigned long now = jiffies;
309 entries = atomic_inc_return(&tbl->entries) - 1;
310 if (entries >= tbl->gc_thresh3 ||
311 (entries >= tbl->gc_thresh2 &&
312 time_after(now, tbl->last_flush + 5 * HZ))) {
313 if (!neigh_forced_gc(tbl) &&
314 entries >= tbl->gc_thresh3) {
315 net_info_ratelimited("%s: neighbor table overflow!\n",
317 NEIGH_CACHE_STAT_INC(tbl, table_fulls);
322 n = kzalloc(tbl->entry_size + dev->neigh_priv_len, GFP_ATOMIC);
326 __skb_queue_head_init(&n->arp_queue);
327 rwlock_init(&n->lock);
328 seqlock_init(&n->ha_lock);
329 n->updated = n->used = now;
330 n->nud_state = NUD_NONE;
331 n->output = neigh_blackhole;
332 seqlock_init(&n->hh.hh_lock);
333 n->parms = neigh_parms_clone(&tbl->parms);
334 timer_setup(&n->timer, neigh_timer_handler, 0);
336 NEIGH_CACHE_STAT_INC(tbl, allocs);
338 refcount_set(&n->refcnt, 1);
344 atomic_dec(&tbl->entries);
348 static void neigh_get_hash_rnd(u32 *x)
350 *x = get_random_u32() | 1;
353 static struct neigh_hash_table *neigh_hash_alloc(unsigned int shift)
355 size_t size = (1 << shift) * sizeof(struct neighbour *);
356 struct neigh_hash_table *ret;
357 struct neighbour __rcu **buckets;
360 ret = kmalloc(sizeof(*ret), GFP_ATOMIC);
363 if (size <= PAGE_SIZE)
364 buckets = kzalloc(size, GFP_ATOMIC);
366 buckets = (struct neighbour __rcu **)
367 __get_free_pages(GFP_ATOMIC | __GFP_ZERO,
373 ret->hash_buckets = buckets;
374 ret->hash_shift = shift;
375 for (i = 0; i < NEIGH_NUM_HASH_RND; i++)
376 neigh_get_hash_rnd(&ret->hash_rnd[i]);
380 static void neigh_hash_free_rcu(struct rcu_head *head)
382 struct neigh_hash_table *nht = container_of(head,
383 struct neigh_hash_table,
385 size_t size = (1 << nht->hash_shift) * sizeof(struct neighbour *);
386 struct neighbour __rcu **buckets = nht->hash_buckets;
388 if (size <= PAGE_SIZE)
391 free_pages((unsigned long)buckets, get_order(size));
395 static struct neigh_hash_table *neigh_hash_grow(struct neigh_table *tbl,
396 unsigned long new_shift)
398 unsigned int i, hash;
399 struct neigh_hash_table *new_nht, *old_nht;
401 NEIGH_CACHE_STAT_INC(tbl, hash_grows);
403 old_nht = rcu_dereference_protected(tbl->nht,
404 lockdep_is_held(&tbl->lock));
405 new_nht = neigh_hash_alloc(new_shift);
409 for (i = 0; i < (1 << old_nht->hash_shift); i++) {
410 struct neighbour *n, *next;
412 for (n = rcu_dereference_protected(old_nht->hash_buckets[i],
413 lockdep_is_held(&tbl->lock));
416 hash = tbl->hash(n->primary_key, n->dev,
419 hash >>= (32 - new_nht->hash_shift);
420 next = rcu_dereference_protected(n->next,
421 lockdep_is_held(&tbl->lock));
423 rcu_assign_pointer(n->next,
424 rcu_dereference_protected(
425 new_nht->hash_buckets[hash],
426 lockdep_is_held(&tbl->lock)));
427 rcu_assign_pointer(new_nht->hash_buckets[hash], n);
431 rcu_assign_pointer(tbl->nht, new_nht);
432 call_rcu(&old_nht->rcu, neigh_hash_free_rcu);
436 struct neighbour *neigh_lookup(struct neigh_table *tbl, const void *pkey,
437 struct net_device *dev)
441 NEIGH_CACHE_STAT_INC(tbl, lookups);
444 n = __neigh_lookup_noref(tbl, pkey, dev);
446 if (!refcount_inc_not_zero(&n->refcnt))
448 NEIGH_CACHE_STAT_INC(tbl, hits);
451 rcu_read_unlock_bh();
454 EXPORT_SYMBOL(neigh_lookup);
456 struct neighbour *neigh_lookup_nodev(struct neigh_table *tbl, struct net *net,
460 unsigned int key_len = tbl->key_len;
462 struct neigh_hash_table *nht;
464 NEIGH_CACHE_STAT_INC(tbl, lookups);
467 nht = rcu_dereference_bh(tbl->nht);
468 hash_val = tbl->hash(pkey, NULL, nht->hash_rnd) >> (32 - nht->hash_shift);
470 for (n = rcu_dereference_bh(nht->hash_buckets[hash_val]);
472 n = rcu_dereference_bh(n->next)) {
473 if (!memcmp(n->primary_key, pkey, key_len) &&
474 net_eq(dev_net(n->dev), net)) {
475 if (!refcount_inc_not_zero(&n->refcnt))
477 NEIGH_CACHE_STAT_INC(tbl, hits);
482 rcu_read_unlock_bh();
485 EXPORT_SYMBOL(neigh_lookup_nodev);
487 struct neighbour *__neigh_create(struct neigh_table *tbl, const void *pkey,
488 struct net_device *dev, bool want_ref)
491 unsigned int key_len = tbl->key_len;
493 struct neighbour *n1, *rc, *n = neigh_alloc(tbl, dev);
494 struct neigh_hash_table *nht;
497 rc = ERR_PTR(-ENOBUFS);
501 memcpy(n->primary_key, pkey, key_len);
505 /* Protocol specific setup. */
506 if (tbl->constructor && (error = tbl->constructor(n)) < 0) {
508 goto out_neigh_release;
511 if (dev->netdev_ops->ndo_neigh_construct) {
512 error = dev->netdev_ops->ndo_neigh_construct(dev, n);
515 goto out_neigh_release;
519 /* Device specific setup. */
520 if (n->parms->neigh_setup &&
521 (error = n->parms->neigh_setup(n)) < 0) {
523 goto out_neigh_release;
526 n->confirmed = jiffies - (NEIGH_VAR(n->parms, BASE_REACHABLE_TIME) << 1);
528 write_lock_bh(&tbl->lock);
529 nht = rcu_dereference_protected(tbl->nht,
530 lockdep_is_held(&tbl->lock));
532 if (atomic_read(&tbl->entries) > (1 << nht->hash_shift))
533 nht = neigh_hash_grow(tbl, nht->hash_shift + 1);
535 hash_val = tbl->hash(n->primary_key, dev, nht->hash_rnd) >> (32 - nht->hash_shift);
537 if (n->parms->dead) {
538 rc = ERR_PTR(-EINVAL);
542 for (n1 = rcu_dereference_protected(nht->hash_buckets[hash_val],
543 lockdep_is_held(&tbl->lock));
545 n1 = rcu_dereference_protected(n1->next,
546 lockdep_is_held(&tbl->lock))) {
547 if (dev == n1->dev && !memcmp(n1->primary_key, n->primary_key, key_len)) {
558 rcu_assign_pointer(n->next,
559 rcu_dereference_protected(nht->hash_buckets[hash_val],
560 lockdep_is_held(&tbl->lock)));
561 rcu_assign_pointer(nht->hash_buckets[hash_val], n);
562 write_unlock_bh(&tbl->lock);
563 neigh_dbg(2, "neigh %p is created\n", n);
568 write_unlock_bh(&tbl->lock);
573 EXPORT_SYMBOL(__neigh_create);
575 static u32 pneigh_hash(const void *pkey, unsigned int key_len)
577 u32 hash_val = *(u32 *)(pkey + key_len - 4);
578 hash_val ^= (hash_val >> 16);
579 hash_val ^= hash_val >> 8;
580 hash_val ^= hash_val >> 4;
581 hash_val &= PNEIGH_HASHMASK;
585 static struct pneigh_entry *__pneigh_lookup_1(struct pneigh_entry *n,
588 unsigned int key_len,
589 struct net_device *dev)
592 if (!memcmp(n->key, pkey, key_len) &&
593 net_eq(pneigh_net(n), net) &&
594 (n->dev == dev || !n->dev))
601 struct pneigh_entry *__pneigh_lookup(struct neigh_table *tbl,
602 struct net *net, const void *pkey, struct net_device *dev)
604 unsigned int key_len = tbl->key_len;
605 u32 hash_val = pneigh_hash(pkey, key_len);
607 return __pneigh_lookup_1(tbl->phash_buckets[hash_val],
608 net, pkey, key_len, dev);
610 EXPORT_SYMBOL_GPL(__pneigh_lookup);
612 struct pneigh_entry * pneigh_lookup(struct neigh_table *tbl,
613 struct net *net, const void *pkey,
614 struct net_device *dev, int creat)
616 struct pneigh_entry *n;
617 unsigned int key_len = tbl->key_len;
618 u32 hash_val = pneigh_hash(pkey, key_len);
620 read_lock_bh(&tbl->lock);
621 n = __pneigh_lookup_1(tbl->phash_buckets[hash_val],
622 net, pkey, key_len, dev);
623 read_unlock_bh(&tbl->lock);
630 n = kmalloc(sizeof(*n) + key_len, GFP_KERNEL);
634 write_pnet(&n->net, net);
635 memcpy(n->key, pkey, key_len);
640 if (tbl->pconstructor && tbl->pconstructor(n)) {
648 write_lock_bh(&tbl->lock);
649 n->next = tbl->phash_buckets[hash_val];
650 tbl->phash_buckets[hash_val] = n;
651 write_unlock_bh(&tbl->lock);
655 EXPORT_SYMBOL(pneigh_lookup);
658 int pneigh_delete(struct neigh_table *tbl, struct net *net, const void *pkey,
659 struct net_device *dev)
661 struct pneigh_entry *n, **np;
662 unsigned int key_len = tbl->key_len;
663 u32 hash_val = pneigh_hash(pkey, key_len);
665 write_lock_bh(&tbl->lock);
666 for (np = &tbl->phash_buckets[hash_val]; (n = *np) != NULL;
668 if (!memcmp(n->key, pkey, key_len) && n->dev == dev &&
669 net_eq(pneigh_net(n), net)) {
671 write_unlock_bh(&tbl->lock);
672 if (tbl->pdestructor)
680 write_unlock_bh(&tbl->lock);
684 static int pneigh_ifdown_and_unlock(struct neigh_table *tbl,
685 struct net_device *dev)
687 struct pneigh_entry *n, **np, *freelist = NULL;
690 for (h = 0; h <= PNEIGH_HASHMASK; h++) {
691 np = &tbl->phash_buckets[h];
692 while ((n = *np) != NULL) {
693 if (!dev || n->dev == dev) {
702 write_unlock_bh(&tbl->lock);
703 while ((n = freelist)) {
706 if (tbl->pdestructor)
715 static void neigh_parms_destroy(struct neigh_parms *parms);
717 static inline void neigh_parms_put(struct neigh_parms *parms)
719 if (refcount_dec_and_test(&parms->refcnt))
720 neigh_parms_destroy(parms);
724 * neighbour must already be out of the table;
727 void neigh_destroy(struct neighbour *neigh)
729 struct net_device *dev = neigh->dev;
731 NEIGH_CACHE_STAT_INC(neigh->tbl, destroys);
734 pr_warn("Destroying alive neighbour %p\n", neigh);
739 if (neigh_del_timer(neigh))
740 pr_warn("Impossible event\n");
742 write_lock_bh(&neigh->lock);
743 __skb_queue_purge(&neigh->arp_queue);
744 write_unlock_bh(&neigh->lock);
745 neigh->arp_queue_len_bytes = 0;
747 if (dev->netdev_ops->ndo_neigh_destroy)
748 dev->netdev_ops->ndo_neigh_destroy(dev, neigh);
751 neigh_parms_put(neigh->parms);
753 neigh_dbg(2, "neigh %p is destroyed\n", neigh);
755 atomic_dec(&neigh->tbl->entries);
756 kfree_rcu(neigh, rcu);
758 EXPORT_SYMBOL(neigh_destroy);
760 /* Neighbour state is suspicious;
763 Called with write_locked neigh.
765 static void neigh_suspect(struct neighbour *neigh)
767 neigh_dbg(2, "neigh %p is suspected\n", neigh);
769 neigh->output = neigh->ops->output;
772 /* Neighbour state is OK;
775 Called with write_locked neigh.
777 static void neigh_connect(struct neighbour *neigh)
779 neigh_dbg(2, "neigh %p is connected\n", neigh);
781 neigh->output = neigh->ops->connected_output;
784 static void neigh_periodic_work(struct work_struct *work)
786 struct neigh_table *tbl = container_of(work, struct neigh_table, gc_work.work);
788 struct neighbour __rcu **np;
790 struct neigh_hash_table *nht;
792 NEIGH_CACHE_STAT_INC(tbl, periodic_gc_runs);
794 write_lock_bh(&tbl->lock);
795 nht = rcu_dereference_protected(tbl->nht,
796 lockdep_is_held(&tbl->lock));
799 * periodically recompute ReachableTime from random function
802 if (time_after(jiffies, tbl->last_rand + 300 * HZ)) {
803 struct neigh_parms *p;
804 tbl->last_rand = jiffies;
805 list_for_each_entry(p, &tbl->parms_list, list)
807 neigh_rand_reach_time(NEIGH_VAR(p, BASE_REACHABLE_TIME));
810 if (atomic_read(&tbl->entries) < tbl->gc_thresh1)
813 for (i = 0 ; i < (1 << nht->hash_shift); i++) {
814 np = &nht->hash_buckets[i];
816 while ((n = rcu_dereference_protected(*np,
817 lockdep_is_held(&tbl->lock))) != NULL) {
820 write_lock(&n->lock);
822 state = n->nud_state;
823 if ((state & (NUD_PERMANENT | NUD_IN_TIMER)) ||
824 (n->flags & NTF_EXT_LEARNED)) {
825 write_unlock(&n->lock);
829 if (time_before(n->used, n->confirmed))
830 n->used = n->confirmed;
832 if (refcount_read(&n->refcnt) == 1 &&
833 (state == NUD_FAILED ||
834 time_after(jiffies, n->used + NEIGH_VAR(n->parms, GC_STALETIME)))) {
837 write_unlock(&n->lock);
838 neigh_cleanup_and_release(n);
841 write_unlock(&n->lock);
847 * It's fine to release lock here, even if hash table
848 * grows while we are preempted.
850 write_unlock_bh(&tbl->lock);
852 write_lock_bh(&tbl->lock);
853 nht = rcu_dereference_protected(tbl->nht,
854 lockdep_is_held(&tbl->lock));
857 /* Cycle through all hash buckets every BASE_REACHABLE_TIME/2 ticks.
858 * ARP entry timeouts range from 1/2 BASE_REACHABLE_TIME to 3/2
859 * BASE_REACHABLE_TIME.
861 queue_delayed_work(system_power_efficient_wq, &tbl->gc_work,
862 NEIGH_VAR(&tbl->parms, BASE_REACHABLE_TIME) >> 1);
863 write_unlock_bh(&tbl->lock);
866 static __inline__ int neigh_max_probes(struct neighbour *n)
868 struct neigh_parms *p = n->parms;
869 return NEIGH_VAR(p, UCAST_PROBES) + NEIGH_VAR(p, APP_PROBES) +
870 (n->nud_state & NUD_PROBE ? NEIGH_VAR(p, MCAST_REPROBES) :
871 NEIGH_VAR(p, MCAST_PROBES));
874 static void neigh_invalidate(struct neighbour *neigh)
875 __releases(neigh->lock)
876 __acquires(neigh->lock)
880 NEIGH_CACHE_STAT_INC(neigh->tbl, res_failed);
881 neigh_dbg(2, "neigh %p is failed\n", neigh);
882 neigh->updated = jiffies;
884 /* It is very thin place. report_unreachable is very complicated
885 routine. Particularly, it can hit the same neighbour entry!
887 So that, we try to be accurate and avoid dead loop. --ANK
889 while (neigh->nud_state == NUD_FAILED &&
890 (skb = __skb_dequeue(&neigh->arp_queue)) != NULL) {
891 write_unlock(&neigh->lock);
892 neigh->ops->error_report(neigh, skb);
893 write_lock(&neigh->lock);
895 __skb_queue_purge(&neigh->arp_queue);
896 neigh->arp_queue_len_bytes = 0;
899 static void neigh_probe(struct neighbour *neigh)
900 __releases(neigh->lock)
902 struct sk_buff *skb = skb_peek_tail(&neigh->arp_queue);
903 /* keep skb alive even if arp_queue overflows */
905 skb = skb_clone(skb, GFP_ATOMIC);
906 write_unlock(&neigh->lock);
907 if (neigh->ops->solicit)
908 neigh->ops->solicit(neigh, skb);
909 atomic_inc(&neigh->probes);
913 /* Called when a timer expires for a neighbour entry. */
915 static void neigh_timer_handler(struct timer_list *t)
917 unsigned long now, next;
918 struct neighbour *neigh = from_timer(neigh, t, timer);
922 write_lock(&neigh->lock);
924 state = neigh->nud_state;
928 if (!(state & NUD_IN_TIMER))
931 if (state & NUD_REACHABLE) {
932 if (time_before_eq(now,
933 neigh->confirmed + neigh->parms->reachable_time)) {
934 neigh_dbg(2, "neigh %p is still alive\n", neigh);
935 next = neigh->confirmed + neigh->parms->reachable_time;
936 } else if (time_before_eq(now,
938 NEIGH_VAR(neigh->parms, DELAY_PROBE_TIME))) {
939 neigh_dbg(2, "neigh %p is delayed\n", neigh);
940 neigh->nud_state = NUD_DELAY;
941 neigh->updated = jiffies;
942 neigh_suspect(neigh);
943 next = now + NEIGH_VAR(neigh->parms, DELAY_PROBE_TIME);
945 neigh_dbg(2, "neigh %p is suspected\n", neigh);
946 neigh->nud_state = NUD_STALE;
947 neigh->updated = jiffies;
948 neigh_suspect(neigh);
951 } else if (state & NUD_DELAY) {
952 if (time_before_eq(now,
954 NEIGH_VAR(neigh->parms, DELAY_PROBE_TIME))) {
955 neigh_dbg(2, "neigh %p is now reachable\n", neigh);
956 neigh->nud_state = NUD_REACHABLE;
957 neigh->updated = jiffies;
958 neigh_connect(neigh);
960 next = neigh->confirmed + neigh->parms->reachable_time;
962 neigh_dbg(2, "neigh %p is probed\n", neigh);
963 neigh->nud_state = NUD_PROBE;
964 neigh->updated = jiffies;
965 atomic_set(&neigh->probes, 0);
967 next = now + NEIGH_VAR(neigh->parms, RETRANS_TIME);
970 /* NUD_PROBE|NUD_INCOMPLETE */
971 next = now + NEIGH_VAR(neigh->parms, RETRANS_TIME);
974 if ((neigh->nud_state & (NUD_INCOMPLETE | NUD_PROBE)) &&
975 atomic_read(&neigh->probes) >= neigh_max_probes(neigh)) {
976 neigh->nud_state = NUD_FAILED;
978 neigh_invalidate(neigh);
982 if (neigh->nud_state & NUD_IN_TIMER) {
983 if (time_before(next, jiffies + HZ/2))
984 next = jiffies + HZ/2;
985 if (!mod_timer(&neigh->timer, next))
988 if (neigh->nud_state & (NUD_INCOMPLETE | NUD_PROBE)) {
992 write_unlock(&neigh->lock);
996 neigh_update_notify(neigh, 0);
998 neigh_release(neigh);
1001 int __neigh_event_send(struct neighbour *neigh, struct sk_buff *skb)
1004 bool immediate_probe = false;
1006 write_lock_bh(&neigh->lock);
1009 if (neigh->nud_state & (NUD_CONNECTED | NUD_DELAY | NUD_PROBE))
1014 if (!(neigh->nud_state & (NUD_STALE | NUD_INCOMPLETE))) {
1015 if (NEIGH_VAR(neigh->parms, MCAST_PROBES) +
1016 NEIGH_VAR(neigh->parms, APP_PROBES)) {
1017 unsigned long next, now = jiffies;
1019 atomic_set(&neigh->probes,
1020 NEIGH_VAR(neigh->parms, UCAST_PROBES));
1021 neigh->nud_state = NUD_INCOMPLETE;
1022 neigh->updated = now;
1023 next = now + max(NEIGH_VAR(neigh->parms, RETRANS_TIME),
1025 neigh_add_timer(neigh, next);
1026 immediate_probe = true;
1028 neigh->nud_state = NUD_FAILED;
1029 neigh->updated = jiffies;
1030 write_unlock_bh(&neigh->lock);
1035 } else if (neigh->nud_state & NUD_STALE) {
1036 neigh_dbg(2, "neigh %p is delayed\n", neigh);
1037 neigh->nud_state = NUD_DELAY;
1038 neigh->updated = jiffies;
1039 neigh_add_timer(neigh, jiffies +
1040 NEIGH_VAR(neigh->parms, DELAY_PROBE_TIME));
1043 if (neigh->nud_state == NUD_INCOMPLETE) {
1045 while (neigh->arp_queue_len_bytes + skb->truesize >
1046 NEIGH_VAR(neigh->parms, QUEUE_LEN_BYTES)) {
1047 struct sk_buff *buff;
1049 buff = __skb_dequeue(&neigh->arp_queue);
1052 neigh->arp_queue_len_bytes -= buff->truesize;
1054 NEIGH_CACHE_STAT_INC(neigh->tbl, unres_discards);
1057 __skb_queue_tail(&neigh->arp_queue, skb);
1058 neigh->arp_queue_len_bytes += skb->truesize;
1063 if (immediate_probe)
1066 write_unlock(&neigh->lock);
1071 if (neigh->nud_state & NUD_STALE)
1073 write_unlock_bh(&neigh->lock);
1077 EXPORT_SYMBOL(__neigh_event_send);
1079 static void neigh_update_hhs(struct neighbour *neigh)
1081 struct hh_cache *hh;
1082 void (*update)(struct hh_cache*, const struct net_device*, const unsigned char *)
1085 if (neigh->dev->header_ops)
1086 update = neigh->dev->header_ops->cache_update;
1091 write_seqlock_bh(&hh->hh_lock);
1092 update(hh, neigh->dev, neigh->ha);
1093 write_sequnlock_bh(&hh->hh_lock);
1100 /* Generic update routine.
1101 -- lladdr is new lladdr or NULL, if it is not supplied.
1102 -- new is new state.
1104 NEIGH_UPDATE_F_OVERRIDE allows to override existing lladdr,
1106 NEIGH_UPDATE_F_WEAK_OVERRIDE will suspect existing "connected"
1107 lladdr instead of overriding it
1109 NEIGH_UPDATE_F_ADMIN means that the change is administrative.
1111 NEIGH_UPDATE_F_OVERRIDE_ISROUTER allows to override existing
1113 NEIGH_UPDATE_F_ISROUTER indicates if the neighbour is known as
1116 Caller MUST hold reference count on the entry.
1119 int neigh_update(struct neighbour *neigh, const u8 *lladdr, u8 new,
1120 u32 flags, u32 nlmsg_pid)
1125 struct net_device *dev;
1126 int update_isrouter = 0;
1128 write_lock_bh(&neigh->lock);
1131 old = neigh->nud_state;
1134 if (!(flags & NEIGH_UPDATE_F_ADMIN) &&
1135 (old & (NUD_NOARP | NUD_PERMANENT)))
1140 neigh_update_ext_learned(neigh, flags, ¬ify);
1142 if (!(new & NUD_VALID)) {
1143 neigh_del_timer(neigh);
1144 if (old & NUD_CONNECTED)
1145 neigh_suspect(neigh);
1146 neigh->nud_state = new;
1148 notify = old & NUD_VALID;
1149 if ((old & (NUD_INCOMPLETE | NUD_PROBE)) &&
1150 (new & NUD_FAILED)) {
1151 neigh_invalidate(neigh);
1157 /* Compare new lladdr with cached one */
1158 if (!dev->addr_len) {
1159 /* First case: device needs no address. */
1161 } else if (lladdr) {
1162 /* The second case: if something is already cached
1163 and a new address is proposed:
1165 - if they are different, check override flag
1167 if ((old & NUD_VALID) &&
1168 !memcmp(lladdr, neigh->ha, dev->addr_len))
1171 /* No address is supplied; if we know something,
1172 use it, otherwise discard the request.
1175 if (!(old & NUD_VALID))
1180 /* If entry was valid and address is not changed,
1181 do not change entry state, if new one is STALE.
1184 update_isrouter = flags & NEIGH_UPDATE_F_OVERRIDE_ISROUTER;
1185 if (old & NUD_VALID) {
1186 if (lladdr != neigh->ha && !(flags & NEIGH_UPDATE_F_OVERRIDE)) {
1187 update_isrouter = 0;
1188 if ((flags & NEIGH_UPDATE_F_WEAK_OVERRIDE) &&
1189 (old & NUD_CONNECTED)) {
1195 if (lladdr == neigh->ha && new == NUD_STALE &&
1196 !(flags & NEIGH_UPDATE_F_ADMIN))
1201 /* Update timestamps only once we know we will make a change to the
1202 * neighbour entry. Otherwise we risk to move the locktime window with
1203 * noop updates and ignore relevant ARP updates.
1205 if (new != old || lladdr != neigh->ha) {
1206 if (new & NUD_CONNECTED)
1207 neigh->confirmed = jiffies;
1208 neigh->updated = jiffies;
1212 neigh_del_timer(neigh);
1213 if (new & NUD_PROBE)
1214 atomic_set(&neigh->probes, 0);
1215 if (new & NUD_IN_TIMER)
1216 neigh_add_timer(neigh, (jiffies +
1217 ((new & NUD_REACHABLE) ?
1218 neigh->parms->reachable_time :
1220 neigh->nud_state = new;
1224 if (lladdr != neigh->ha) {
1225 write_seqlock(&neigh->ha_lock);
1226 memcpy(&neigh->ha, lladdr, dev->addr_len);
1227 write_sequnlock(&neigh->ha_lock);
1228 neigh_update_hhs(neigh);
1229 if (!(new & NUD_CONNECTED))
1230 neigh->confirmed = jiffies -
1231 (NEIGH_VAR(neigh->parms, BASE_REACHABLE_TIME) << 1);
1236 if (new & NUD_CONNECTED)
1237 neigh_connect(neigh);
1239 neigh_suspect(neigh);
1240 if (!(old & NUD_VALID)) {
1241 struct sk_buff *skb;
1243 /* Again: avoid dead loop if something went wrong */
1245 while (neigh->nud_state & NUD_VALID &&
1246 (skb = __skb_dequeue(&neigh->arp_queue)) != NULL) {
1247 struct dst_entry *dst = skb_dst(skb);
1248 struct neighbour *n2, *n1 = neigh;
1249 write_unlock_bh(&neigh->lock);
1253 /* Why not just use 'neigh' as-is? The problem is that
1254 * things such as shaper, eql, and sch_teql can end up
1255 * using alternative, different, neigh objects to output
1256 * the packet in the output path. So what we need to do
1257 * here is re-lookup the top-level neigh in the path so
1258 * we can reinject the packet there.
1262 n2 = dst_neigh_lookup_skb(dst, skb);
1266 n1->output(n1, skb);
1271 write_lock_bh(&neigh->lock);
1273 __skb_queue_purge(&neigh->arp_queue);
1274 neigh->arp_queue_len_bytes = 0;
1277 if (update_isrouter) {
1278 neigh->flags = (flags & NEIGH_UPDATE_F_ISROUTER) ?
1279 (neigh->flags | NTF_ROUTER) :
1280 (neigh->flags & ~NTF_ROUTER);
1282 write_unlock_bh(&neigh->lock);
1285 neigh_update_notify(neigh, nlmsg_pid);
1289 EXPORT_SYMBOL(neigh_update);
1291 /* Update the neigh to listen temporarily for probe responses, even if it is
1292 * in a NUD_FAILED state. The caller has to hold neigh->lock for writing.
1294 void __neigh_set_probe_once(struct neighbour *neigh)
1298 neigh->updated = jiffies;
1299 if (!(neigh->nud_state & NUD_FAILED))
1301 neigh->nud_state = NUD_INCOMPLETE;
1302 atomic_set(&neigh->probes, neigh_max_probes(neigh));
1303 neigh_add_timer(neigh,
1304 jiffies + NEIGH_VAR(neigh->parms, RETRANS_TIME));
1306 EXPORT_SYMBOL(__neigh_set_probe_once);
1308 struct neighbour *neigh_event_ns(struct neigh_table *tbl,
1309 u8 *lladdr, void *saddr,
1310 struct net_device *dev)
1312 struct neighbour *neigh = __neigh_lookup(tbl, saddr, dev,
1313 lladdr || !dev->addr_len);
1315 neigh_update(neigh, lladdr, NUD_STALE,
1316 NEIGH_UPDATE_F_OVERRIDE, 0);
1319 EXPORT_SYMBOL(neigh_event_ns);
1321 /* called with read_lock_bh(&n->lock); */
1322 static void neigh_hh_init(struct neighbour *n)
1324 struct net_device *dev = n->dev;
1325 __be16 prot = n->tbl->protocol;
1326 struct hh_cache *hh = &n->hh;
1328 write_lock_bh(&n->lock);
1330 /* Only one thread can come in here and initialize the
1334 dev->header_ops->cache(n, hh, prot);
1336 write_unlock_bh(&n->lock);
1339 /* Slow and careful. */
1341 int neigh_resolve_output(struct neighbour *neigh, struct sk_buff *skb)
1345 if (!neigh_event_send(neigh, skb)) {
1347 struct net_device *dev = neigh->dev;
1350 if (dev->header_ops->cache && !neigh->hh.hh_len)
1351 neigh_hh_init(neigh);
1354 __skb_pull(skb, skb_network_offset(skb));
1355 seq = read_seqbegin(&neigh->ha_lock);
1356 err = dev_hard_header(skb, dev, ntohs(skb->protocol),
1357 neigh->ha, NULL, skb->len);
1358 } while (read_seqretry(&neigh->ha_lock, seq));
1361 rc = dev_queue_xmit(skb);
1372 EXPORT_SYMBOL(neigh_resolve_output);
1374 /* As fast as possible without hh cache */
1376 int neigh_connected_output(struct neighbour *neigh, struct sk_buff *skb)
1378 struct net_device *dev = neigh->dev;
1383 __skb_pull(skb, skb_network_offset(skb));
1384 seq = read_seqbegin(&neigh->ha_lock);
1385 err = dev_hard_header(skb, dev, ntohs(skb->protocol),
1386 neigh->ha, NULL, skb->len);
1387 } while (read_seqretry(&neigh->ha_lock, seq));
1390 err = dev_queue_xmit(skb);
1397 EXPORT_SYMBOL(neigh_connected_output);
1399 int neigh_direct_output(struct neighbour *neigh, struct sk_buff *skb)
1401 return dev_queue_xmit(skb);
1403 EXPORT_SYMBOL(neigh_direct_output);
1405 static void neigh_proxy_process(struct timer_list *t)
1407 struct neigh_table *tbl = from_timer(tbl, t, proxy_timer);
1408 long sched_next = 0;
1409 unsigned long now = jiffies;
1410 struct sk_buff *skb, *n;
1412 spin_lock(&tbl->proxy_queue.lock);
1414 skb_queue_walk_safe(&tbl->proxy_queue, skb, n) {
1415 long tdif = NEIGH_CB(skb)->sched_next - now;
1418 struct net_device *dev = skb->dev;
1420 __skb_unlink(skb, &tbl->proxy_queue);
1421 if (tbl->proxy_redo && netif_running(dev)) {
1423 tbl->proxy_redo(skb);
1430 } else if (!sched_next || tdif < sched_next)
1433 del_timer(&tbl->proxy_timer);
1435 mod_timer(&tbl->proxy_timer, jiffies + sched_next);
1436 spin_unlock(&tbl->proxy_queue.lock);
1439 void pneigh_enqueue(struct neigh_table *tbl, struct neigh_parms *p,
1440 struct sk_buff *skb)
1442 unsigned long now = jiffies;
1444 unsigned long sched_next = now + (prandom_u32() %
1445 NEIGH_VAR(p, PROXY_DELAY));
1447 if (tbl->proxy_queue.qlen > NEIGH_VAR(p, PROXY_QLEN)) {
1452 NEIGH_CB(skb)->sched_next = sched_next;
1453 NEIGH_CB(skb)->flags |= LOCALLY_ENQUEUED;
1455 spin_lock(&tbl->proxy_queue.lock);
1456 if (del_timer(&tbl->proxy_timer)) {
1457 if (time_before(tbl->proxy_timer.expires, sched_next))
1458 sched_next = tbl->proxy_timer.expires;
1462 __skb_queue_tail(&tbl->proxy_queue, skb);
1463 mod_timer(&tbl->proxy_timer, sched_next);
1464 spin_unlock(&tbl->proxy_queue.lock);
1466 EXPORT_SYMBOL(pneigh_enqueue);
1468 static inline struct neigh_parms *lookup_neigh_parms(struct neigh_table *tbl,
1469 struct net *net, int ifindex)
1471 struct neigh_parms *p;
1473 list_for_each_entry(p, &tbl->parms_list, list) {
1474 if ((p->dev && p->dev->ifindex == ifindex && net_eq(neigh_parms_net(p), net)) ||
1475 (!p->dev && !ifindex && net_eq(net, &init_net)))
1482 struct neigh_parms *neigh_parms_alloc(struct net_device *dev,
1483 struct neigh_table *tbl)
1485 struct neigh_parms *p;
1486 struct net *net = dev_net(dev);
1487 const struct net_device_ops *ops = dev->netdev_ops;
1489 p = kmemdup(&tbl->parms, sizeof(*p), GFP_KERNEL);
1492 refcount_set(&p->refcnt, 1);
1494 neigh_rand_reach_time(NEIGH_VAR(p, BASE_REACHABLE_TIME));
1497 write_pnet(&p->net, net);
1498 p->sysctl_table = NULL;
1500 if (ops->ndo_neigh_setup && ops->ndo_neigh_setup(dev, p)) {
1506 write_lock_bh(&tbl->lock);
1507 list_add(&p->list, &tbl->parms.list);
1508 write_unlock_bh(&tbl->lock);
1510 neigh_parms_data_state_cleanall(p);
1514 EXPORT_SYMBOL(neigh_parms_alloc);
1516 static void neigh_rcu_free_parms(struct rcu_head *head)
1518 struct neigh_parms *parms =
1519 container_of(head, struct neigh_parms, rcu_head);
1521 neigh_parms_put(parms);
1524 void neigh_parms_release(struct neigh_table *tbl, struct neigh_parms *parms)
1526 if (!parms || parms == &tbl->parms)
1528 write_lock_bh(&tbl->lock);
1529 list_del(&parms->list);
1531 write_unlock_bh(&tbl->lock);
1533 dev_put(parms->dev);
1534 call_rcu(&parms->rcu_head, neigh_rcu_free_parms);
1536 EXPORT_SYMBOL(neigh_parms_release);
1538 static void neigh_parms_destroy(struct neigh_parms *parms)
1543 static struct lock_class_key neigh_table_proxy_queue_class;
1545 static struct neigh_table *neigh_tables[NEIGH_NR_TABLES] __read_mostly;
1547 void neigh_table_init(int index, struct neigh_table *tbl)
1549 unsigned long now = jiffies;
1550 unsigned long phsize;
1552 INIT_LIST_HEAD(&tbl->parms_list);
1553 list_add(&tbl->parms.list, &tbl->parms_list);
1554 write_pnet(&tbl->parms.net, &init_net);
1555 refcount_set(&tbl->parms.refcnt, 1);
1556 tbl->parms.reachable_time =
1557 neigh_rand_reach_time(NEIGH_VAR(&tbl->parms, BASE_REACHABLE_TIME));
1559 tbl->stats = alloc_percpu(struct neigh_statistics);
1561 panic("cannot create neighbour cache statistics");
1563 #ifdef CONFIG_PROC_FS
1564 if (!proc_create_seq_data(tbl->id, 0, init_net.proc_net_stat,
1565 &neigh_stat_seq_ops, tbl))
1566 panic("cannot create neighbour proc dir entry");
1569 RCU_INIT_POINTER(tbl->nht, neigh_hash_alloc(3));
1571 phsize = (PNEIGH_HASHMASK + 1) * sizeof(struct pneigh_entry *);
1572 tbl->phash_buckets = kzalloc(phsize, GFP_KERNEL);
1574 if (!tbl->nht || !tbl->phash_buckets)
1575 panic("cannot allocate neighbour cache hashes");
1577 if (!tbl->entry_size)
1578 tbl->entry_size = ALIGN(offsetof(struct neighbour, primary_key) +
1579 tbl->key_len, NEIGH_PRIV_ALIGN);
1581 WARN_ON(tbl->entry_size % NEIGH_PRIV_ALIGN);
1583 rwlock_init(&tbl->lock);
1584 INIT_DEFERRABLE_WORK(&tbl->gc_work, neigh_periodic_work);
1585 queue_delayed_work(system_power_efficient_wq, &tbl->gc_work,
1586 tbl->parms.reachable_time);
1587 timer_setup(&tbl->proxy_timer, neigh_proxy_process, 0);
1588 skb_queue_head_init_class(&tbl->proxy_queue,
1589 &neigh_table_proxy_queue_class);
1591 tbl->last_flush = now;
1592 tbl->last_rand = now + tbl->parms.reachable_time * 20;
1594 neigh_tables[index] = tbl;
1596 EXPORT_SYMBOL(neigh_table_init);
1598 int neigh_table_clear(int index, struct neigh_table *tbl)
1600 neigh_tables[index] = NULL;
1601 /* It is not clean... Fix it to unload IPv6 module safely */
1602 cancel_delayed_work_sync(&tbl->gc_work);
1603 del_timer_sync(&tbl->proxy_timer);
1604 pneigh_queue_purge(&tbl->proxy_queue);
1605 neigh_ifdown(tbl, NULL);
1606 if (atomic_read(&tbl->entries))
1607 pr_crit("neighbour leakage\n");
1609 call_rcu(&rcu_dereference_protected(tbl->nht, 1)->rcu,
1610 neigh_hash_free_rcu);
1613 kfree(tbl->phash_buckets);
1614 tbl->phash_buckets = NULL;
1616 remove_proc_entry(tbl->id, init_net.proc_net_stat);
1618 free_percpu(tbl->stats);
1623 EXPORT_SYMBOL(neigh_table_clear);
1625 static struct neigh_table *neigh_find_table(int family)
1627 struct neigh_table *tbl = NULL;
1631 tbl = neigh_tables[NEIGH_ARP_TABLE];
1634 tbl = neigh_tables[NEIGH_ND_TABLE];
1637 tbl = neigh_tables[NEIGH_DN_TABLE];
1644 static int neigh_delete(struct sk_buff *skb, struct nlmsghdr *nlh,
1645 struct netlink_ext_ack *extack)
1647 struct net *net = sock_net(skb->sk);
1649 struct nlattr *dst_attr;
1650 struct neigh_table *tbl;
1651 struct neighbour *neigh;
1652 struct net_device *dev = NULL;
1656 if (nlmsg_len(nlh) < sizeof(*ndm))
1659 dst_attr = nlmsg_find_attr(nlh, sizeof(*ndm), NDA_DST);
1660 if (dst_attr == NULL)
1663 ndm = nlmsg_data(nlh);
1664 if (ndm->ndm_ifindex) {
1665 dev = __dev_get_by_index(net, ndm->ndm_ifindex);
1672 tbl = neigh_find_table(ndm->ndm_family);
1674 return -EAFNOSUPPORT;
1676 if (nla_len(dst_attr) < (int)tbl->key_len)
1679 if (ndm->ndm_flags & NTF_PROXY) {
1680 err = pneigh_delete(tbl, net, nla_data(dst_attr), dev);
1687 neigh = neigh_lookup(tbl, nla_data(dst_attr), dev);
1688 if (neigh == NULL) {
1693 err = neigh_update(neigh, NULL, NUD_FAILED,
1694 NEIGH_UPDATE_F_OVERRIDE |
1695 NEIGH_UPDATE_F_ADMIN,
1696 NETLINK_CB(skb).portid);
1697 write_lock_bh(&tbl->lock);
1698 neigh_release(neigh);
1699 neigh_remove_one(neigh, tbl);
1700 write_unlock_bh(&tbl->lock);
1706 static int neigh_add(struct sk_buff *skb, struct nlmsghdr *nlh,
1707 struct netlink_ext_ack *extack)
1709 int flags = NEIGH_UPDATE_F_ADMIN | NEIGH_UPDATE_F_OVERRIDE;
1710 struct net *net = sock_net(skb->sk);
1712 struct nlattr *tb[NDA_MAX+1];
1713 struct neigh_table *tbl;
1714 struct net_device *dev = NULL;
1715 struct neighbour *neigh;
1720 err = nlmsg_parse(nlh, sizeof(*ndm), tb, NDA_MAX, NULL, extack);
1725 if (tb[NDA_DST] == NULL)
1728 ndm = nlmsg_data(nlh);
1729 if (ndm->ndm_ifindex) {
1730 dev = __dev_get_by_index(net, ndm->ndm_ifindex);
1736 if (tb[NDA_LLADDR] && nla_len(tb[NDA_LLADDR]) < dev->addr_len)
1740 tbl = neigh_find_table(ndm->ndm_family);
1742 return -EAFNOSUPPORT;
1744 if (nla_len(tb[NDA_DST]) < (int)tbl->key_len)
1746 dst = nla_data(tb[NDA_DST]);
1747 lladdr = tb[NDA_LLADDR] ? nla_data(tb[NDA_LLADDR]) : NULL;
1749 if (ndm->ndm_flags & NTF_PROXY) {
1750 struct pneigh_entry *pn;
1753 pn = pneigh_lookup(tbl, net, dst, dev, 1);
1755 pn->flags = ndm->ndm_flags;
1764 neigh = neigh_lookup(tbl, dst, dev);
1765 if (neigh == NULL) {
1766 if (!(nlh->nlmsg_flags & NLM_F_CREATE)) {
1771 neigh = __neigh_lookup_errno(tbl, dst, dev);
1772 if (IS_ERR(neigh)) {
1773 err = PTR_ERR(neigh);
1777 if (nlh->nlmsg_flags & NLM_F_EXCL) {
1779 neigh_release(neigh);
1783 if (!(nlh->nlmsg_flags & NLM_F_REPLACE))
1784 flags &= ~NEIGH_UPDATE_F_OVERRIDE;
1787 if (ndm->ndm_flags & NTF_EXT_LEARNED)
1788 flags |= NEIGH_UPDATE_F_EXT_LEARNED;
1790 if (ndm->ndm_flags & NTF_USE) {
1791 neigh_event_send(neigh, NULL);
1794 err = neigh_update(neigh, lladdr, ndm->ndm_state, flags,
1795 NETLINK_CB(skb).portid);
1796 neigh_release(neigh);
1802 static int neightbl_fill_parms(struct sk_buff *skb, struct neigh_parms *parms)
1804 struct nlattr *nest;
1806 nest = nla_nest_start(skb, NDTA_PARMS);
1811 nla_put_u32(skb, NDTPA_IFINDEX, parms->dev->ifindex)) ||
1812 nla_put_u32(skb, NDTPA_REFCNT, refcount_read(&parms->refcnt)) ||
1813 nla_put_u32(skb, NDTPA_QUEUE_LENBYTES,
1814 NEIGH_VAR(parms, QUEUE_LEN_BYTES)) ||
1815 /* approximative value for deprecated QUEUE_LEN (in packets) */
1816 nla_put_u32(skb, NDTPA_QUEUE_LEN,
1817 NEIGH_VAR(parms, QUEUE_LEN_BYTES) / SKB_TRUESIZE(ETH_FRAME_LEN)) ||
1818 nla_put_u32(skb, NDTPA_PROXY_QLEN, NEIGH_VAR(parms, PROXY_QLEN)) ||
1819 nla_put_u32(skb, NDTPA_APP_PROBES, NEIGH_VAR(parms, APP_PROBES)) ||
1820 nla_put_u32(skb, NDTPA_UCAST_PROBES,
1821 NEIGH_VAR(parms, UCAST_PROBES)) ||
1822 nla_put_u32(skb, NDTPA_MCAST_PROBES,
1823 NEIGH_VAR(parms, MCAST_PROBES)) ||
1824 nla_put_u32(skb, NDTPA_MCAST_REPROBES,
1825 NEIGH_VAR(parms, MCAST_REPROBES)) ||
1826 nla_put_msecs(skb, NDTPA_REACHABLE_TIME, parms->reachable_time,
1828 nla_put_msecs(skb, NDTPA_BASE_REACHABLE_TIME,
1829 NEIGH_VAR(parms, BASE_REACHABLE_TIME), NDTPA_PAD) ||
1830 nla_put_msecs(skb, NDTPA_GC_STALETIME,
1831 NEIGH_VAR(parms, GC_STALETIME), NDTPA_PAD) ||
1832 nla_put_msecs(skb, NDTPA_DELAY_PROBE_TIME,
1833 NEIGH_VAR(parms, DELAY_PROBE_TIME), NDTPA_PAD) ||
1834 nla_put_msecs(skb, NDTPA_RETRANS_TIME,
1835 NEIGH_VAR(parms, RETRANS_TIME), NDTPA_PAD) ||
1836 nla_put_msecs(skb, NDTPA_ANYCAST_DELAY,
1837 NEIGH_VAR(parms, ANYCAST_DELAY), NDTPA_PAD) ||
1838 nla_put_msecs(skb, NDTPA_PROXY_DELAY,
1839 NEIGH_VAR(parms, PROXY_DELAY), NDTPA_PAD) ||
1840 nla_put_msecs(skb, NDTPA_LOCKTIME,
1841 NEIGH_VAR(parms, LOCKTIME), NDTPA_PAD))
1842 goto nla_put_failure;
1843 return nla_nest_end(skb, nest);
1846 nla_nest_cancel(skb, nest);
1850 static int neightbl_fill_info(struct sk_buff *skb, struct neigh_table *tbl,
1851 u32 pid, u32 seq, int type, int flags)
1853 struct nlmsghdr *nlh;
1854 struct ndtmsg *ndtmsg;
1856 nlh = nlmsg_put(skb, pid, seq, type, sizeof(*ndtmsg), flags);
1860 ndtmsg = nlmsg_data(nlh);
1862 read_lock_bh(&tbl->lock);
1863 ndtmsg->ndtm_family = tbl->family;
1864 ndtmsg->ndtm_pad1 = 0;
1865 ndtmsg->ndtm_pad2 = 0;
1867 if (nla_put_string(skb, NDTA_NAME, tbl->id) ||
1868 nla_put_msecs(skb, NDTA_GC_INTERVAL, tbl->gc_interval, NDTA_PAD) ||
1869 nla_put_u32(skb, NDTA_THRESH1, tbl->gc_thresh1) ||
1870 nla_put_u32(skb, NDTA_THRESH2, tbl->gc_thresh2) ||
1871 nla_put_u32(skb, NDTA_THRESH3, tbl->gc_thresh3))
1872 goto nla_put_failure;
1874 unsigned long now = jiffies;
1875 unsigned int flush_delta = now - tbl->last_flush;
1876 unsigned int rand_delta = now - tbl->last_rand;
1877 struct neigh_hash_table *nht;
1878 struct ndt_config ndc = {
1879 .ndtc_key_len = tbl->key_len,
1880 .ndtc_entry_size = tbl->entry_size,
1881 .ndtc_entries = atomic_read(&tbl->entries),
1882 .ndtc_last_flush = jiffies_to_msecs(flush_delta),
1883 .ndtc_last_rand = jiffies_to_msecs(rand_delta),
1884 .ndtc_proxy_qlen = tbl->proxy_queue.qlen,
1888 nht = rcu_dereference_bh(tbl->nht);
1889 ndc.ndtc_hash_rnd = nht->hash_rnd[0];
1890 ndc.ndtc_hash_mask = ((1 << nht->hash_shift) - 1);
1891 rcu_read_unlock_bh();
1893 if (nla_put(skb, NDTA_CONFIG, sizeof(ndc), &ndc))
1894 goto nla_put_failure;
1899 struct ndt_stats ndst;
1901 memset(&ndst, 0, sizeof(ndst));
1903 for_each_possible_cpu(cpu) {
1904 struct neigh_statistics *st;
1906 st = per_cpu_ptr(tbl->stats, cpu);
1907 ndst.ndts_allocs += st->allocs;
1908 ndst.ndts_destroys += st->destroys;
1909 ndst.ndts_hash_grows += st->hash_grows;
1910 ndst.ndts_res_failed += st->res_failed;
1911 ndst.ndts_lookups += st->lookups;
1912 ndst.ndts_hits += st->hits;
1913 ndst.ndts_rcv_probes_mcast += st->rcv_probes_mcast;
1914 ndst.ndts_rcv_probes_ucast += st->rcv_probes_ucast;
1915 ndst.ndts_periodic_gc_runs += st->periodic_gc_runs;
1916 ndst.ndts_forced_gc_runs += st->forced_gc_runs;
1917 ndst.ndts_table_fulls += st->table_fulls;
1920 if (nla_put_64bit(skb, NDTA_STATS, sizeof(ndst), &ndst,
1922 goto nla_put_failure;
1925 BUG_ON(tbl->parms.dev);
1926 if (neightbl_fill_parms(skb, &tbl->parms) < 0)
1927 goto nla_put_failure;
1929 read_unlock_bh(&tbl->lock);
1930 nlmsg_end(skb, nlh);
1934 read_unlock_bh(&tbl->lock);
1935 nlmsg_cancel(skb, nlh);
1939 static int neightbl_fill_param_info(struct sk_buff *skb,
1940 struct neigh_table *tbl,
1941 struct neigh_parms *parms,
1942 u32 pid, u32 seq, int type,
1945 struct ndtmsg *ndtmsg;
1946 struct nlmsghdr *nlh;
1948 nlh = nlmsg_put(skb, pid, seq, type, sizeof(*ndtmsg), flags);
1952 ndtmsg = nlmsg_data(nlh);
1954 read_lock_bh(&tbl->lock);
1955 ndtmsg->ndtm_family = tbl->family;
1956 ndtmsg->ndtm_pad1 = 0;
1957 ndtmsg->ndtm_pad2 = 0;
1959 if (nla_put_string(skb, NDTA_NAME, tbl->id) < 0 ||
1960 neightbl_fill_parms(skb, parms) < 0)
1963 read_unlock_bh(&tbl->lock);
1964 nlmsg_end(skb, nlh);
1967 read_unlock_bh(&tbl->lock);
1968 nlmsg_cancel(skb, nlh);
1972 static const struct nla_policy nl_neightbl_policy[NDTA_MAX+1] = {
1973 [NDTA_NAME] = { .type = NLA_STRING },
1974 [NDTA_THRESH1] = { .type = NLA_U32 },
1975 [NDTA_THRESH2] = { .type = NLA_U32 },
1976 [NDTA_THRESH3] = { .type = NLA_U32 },
1977 [NDTA_GC_INTERVAL] = { .type = NLA_U64 },
1978 [NDTA_PARMS] = { .type = NLA_NESTED },
1981 static const struct nla_policy nl_ntbl_parm_policy[NDTPA_MAX+1] = {
1982 [NDTPA_IFINDEX] = { .type = NLA_U32 },
1983 [NDTPA_QUEUE_LEN] = { .type = NLA_U32 },
1984 [NDTPA_PROXY_QLEN] = { .type = NLA_U32 },
1985 [NDTPA_APP_PROBES] = { .type = NLA_U32 },
1986 [NDTPA_UCAST_PROBES] = { .type = NLA_U32 },
1987 [NDTPA_MCAST_PROBES] = { .type = NLA_U32 },
1988 [NDTPA_MCAST_REPROBES] = { .type = NLA_U32 },
1989 [NDTPA_BASE_REACHABLE_TIME] = { .type = NLA_U64 },
1990 [NDTPA_GC_STALETIME] = { .type = NLA_U64 },
1991 [NDTPA_DELAY_PROBE_TIME] = { .type = NLA_U64 },
1992 [NDTPA_RETRANS_TIME] = { .type = NLA_U64 },
1993 [NDTPA_ANYCAST_DELAY] = { .type = NLA_U64 },
1994 [NDTPA_PROXY_DELAY] = { .type = NLA_U64 },
1995 [NDTPA_LOCKTIME] = { .type = NLA_U64 },
1998 static int neightbl_set(struct sk_buff *skb, struct nlmsghdr *nlh,
1999 struct netlink_ext_ack *extack)
2001 struct net *net = sock_net(skb->sk);
2002 struct neigh_table *tbl;
2003 struct ndtmsg *ndtmsg;
2004 struct nlattr *tb[NDTA_MAX+1];
2008 err = nlmsg_parse(nlh, sizeof(*ndtmsg), tb, NDTA_MAX,
2009 nl_neightbl_policy, extack);
2013 if (tb[NDTA_NAME] == NULL) {
2018 ndtmsg = nlmsg_data(nlh);
2020 for (tidx = 0; tidx < NEIGH_NR_TABLES; tidx++) {
2021 tbl = neigh_tables[tidx];
2024 if (ndtmsg->ndtm_family && tbl->family != ndtmsg->ndtm_family)
2026 if (nla_strcmp(tb[NDTA_NAME], tbl->id) == 0) {
2036 * We acquire tbl->lock to be nice to the periodic timers and
2037 * make sure they always see a consistent set of values.
2039 write_lock_bh(&tbl->lock);
2041 if (tb[NDTA_PARMS]) {
2042 struct nlattr *tbp[NDTPA_MAX+1];
2043 struct neigh_parms *p;
2046 err = nla_parse_nested(tbp, NDTPA_MAX, tb[NDTA_PARMS],
2047 nl_ntbl_parm_policy, extack);
2049 goto errout_tbl_lock;
2051 if (tbp[NDTPA_IFINDEX])
2052 ifindex = nla_get_u32(tbp[NDTPA_IFINDEX]);
2054 p = lookup_neigh_parms(tbl, net, ifindex);
2057 goto errout_tbl_lock;
2060 for (i = 1; i <= NDTPA_MAX; i++) {
2065 case NDTPA_QUEUE_LEN:
2066 NEIGH_VAR_SET(p, QUEUE_LEN_BYTES,
2067 nla_get_u32(tbp[i]) *
2068 SKB_TRUESIZE(ETH_FRAME_LEN));
2070 case NDTPA_QUEUE_LENBYTES:
2071 NEIGH_VAR_SET(p, QUEUE_LEN_BYTES,
2072 nla_get_u32(tbp[i]));
2074 case NDTPA_PROXY_QLEN:
2075 NEIGH_VAR_SET(p, PROXY_QLEN,
2076 nla_get_u32(tbp[i]));
2078 case NDTPA_APP_PROBES:
2079 NEIGH_VAR_SET(p, APP_PROBES,
2080 nla_get_u32(tbp[i]));
2082 case NDTPA_UCAST_PROBES:
2083 NEIGH_VAR_SET(p, UCAST_PROBES,
2084 nla_get_u32(tbp[i]));
2086 case NDTPA_MCAST_PROBES:
2087 NEIGH_VAR_SET(p, MCAST_PROBES,
2088 nla_get_u32(tbp[i]));
2090 case NDTPA_MCAST_REPROBES:
2091 NEIGH_VAR_SET(p, MCAST_REPROBES,
2092 nla_get_u32(tbp[i]));
2094 case NDTPA_BASE_REACHABLE_TIME:
2095 NEIGH_VAR_SET(p, BASE_REACHABLE_TIME,
2096 nla_get_msecs(tbp[i]));
2097 /* update reachable_time as well, otherwise, the change will
2098 * only be effective after the next time neigh_periodic_work
2099 * decides to recompute it (can be multiple minutes)
2102 neigh_rand_reach_time(NEIGH_VAR(p, BASE_REACHABLE_TIME));
2104 case NDTPA_GC_STALETIME:
2105 NEIGH_VAR_SET(p, GC_STALETIME,
2106 nla_get_msecs(tbp[i]));
2108 case NDTPA_DELAY_PROBE_TIME:
2109 NEIGH_VAR_SET(p, DELAY_PROBE_TIME,
2110 nla_get_msecs(tbp[i]));
2111 call_netevent_notifiers(NETEVENT_DELAY_PROBE_TIME_UPDATE, p);
2113 case NDTPA_RETRANS_TIME:
2114 NEIGH_VAR_SET(p, RETRANS_TIME,
2115 nla_get_msecs(tbp[i]));
2117 case NDTPA_ANYCAST_DELAY:
2118 NEIGH_VAR_SET(p, ANYCAST_DELAY,
2119 nla_get_msecs(tbp[i]));
2121 case NDTPA_PROXY_DELAY:
2122 NEIGH_VAR_SET(p, PROXY_DELAY,
2123 nla_get_msecs(tbp[i]));
2125 case NDTPA_LOCKTIME:
2126 NEIGH_VAR_SET(p, LOCKTIME,
2127 nla_get_msecs(tbp[i]));
2134 if ((tb[NDTA_THRESH1] || tb[NDTA_THRESH2] ||
2135 tb[NDTA_THRESH3] || tb[NDTA_GC_INTERVAL]) &&
2136 !net_eq(net, &init_net))
2137 goto errout_tbl_lock;
2139 if (tb[NDTA_THRESH1])
2140 tbl->gc_thresh1 = nla_get_u32(tb[NDTA_THRESH1]);
2142 if (tb[NDTA_THRESH2])
2143 tbl->gc_thresh2 = nla_get_u32(tb[NDTA_THRESH2]);
2145 if (tb[NDTA_THRESH3])
2146 tbl->gc_thresh3 = nla_get_u32(tb[NDTA_THRESH3]);
2148 if (tb[NDTA_GC_INTERVAL])
2149 tbl->gc_interval = nla_get_msecs(tb[NDTA_GC_INTERVAL]);
2154 write_unlock_bh(&tbl->lock);
2159 static int neightbl_dump_info(struct sk_buff *skb, struct netlink_callback *cb)
2161 struct net *net = sock_net(skb->sk);
2162 int family, tidx, nidx = 0;
2163 int tbl_skip = cb->args[0];
2164 int neigh_skip = cb->args[1];
2165 struct neigh_table *tbl;
2167 family = ((struct rtgenmsg *) nlmsg_data(cb->nlh))->rtgen_family;
2169 for (tidx = 0; tidx < NEIGH_NR_TABLES; tidx++) {
2170 struct neigh_parms *p;
2172 tbl = neigh_tables[tidx];
2176 if (tidx < tbl_skip || (family && tbl->family != family))
2179 if (neightbl_fill_info(skb, tbl, NETLINK_CB(cb->skb).portid,
2180 cb->nlh->nlmsg_seq, RTM_NEWNEIGHTBL,
2185 p = list_next_entry(&tbl->parms, list);
2186 list_for_each_entry_from(p, &tbl->parms_list, list) {
2187 if (!net_eq(neigh_parms_net(p), net))
2190 if (nidx < neigh_skip)
2193 if (neightbl_fill_param_info(skb, tbl, p,
2194 NETLINK_CB(cb->skb).portid,
2212 static int neigh_fill_info(struct sk_buff *skb, struct neighbour *neigh,
2213 u32 pid, u32 seq, int type, unsigned int flags)
2215 unsigned long now = jiffies;
2216 struct nda_cacheinfo ci;
2217 struct nlmsghdr *nlh;
2220 nlh = nlmsg_put(skb, pid, seq, type, sizeof(*ndm), flags);
2224 ndm = nlmsg_data(nlh);
2225 ndm->ndm_family = neigh->ops->family;
2228 ndm->ndm_flags = neigh->flags;
2229 ndm->ndm_type = neigh->type;
2230 ndm->ndm_ifindex = neigh->dev->ifindex;
2232 if (nla_put(skb, NDA_DST, neigh->tbl->key_len, neigh->primary_key))
2233 goto nla_put_failure;
2235 read_lock_bh(&neigh->lock);
2236 ndm->ndm_state = neigh->nud_state;
2237 if (neigh->nud_state & NUD_VALID) {
2238 char haddr[MAX_ADDR_LEN];
2240 neigh_ha_snapshot(haddr, neigh, neigh->dev);
2241 if (nla_put(skb, NDA_LLADDR, neigh->dev->addr_len, haddr) < 0) {
2242 read_unlock_bh(&neigh->lock);
2243 goto nla_put_failure;
2247 ci.ndm_used = jiffies_to_clock_t(now - neigh->used);
2248 ci.ndm_confirmed = jiffies_to_clock_t(now - neigh->confirmed);
2249 ci.ndm_updated = jiffies_to_clock_t(now - neigh->updated);
2250 ci.ndm_refcnt = refcount_read(&neigh->refcnt) - 1;
2251 read_unlock_bh(&neigh->lock);
2253 if (nla_put_u32(skb, NDA_PROBES, atomic_read(&neigh->probes)) ||
2254 nla_put(skb, NDA_CACHEINFO, sizeof(ci), &ci))
2255 goto nla_put_failure;
2257 nlmsg_end(skb, nlh);
2261 nlmsg_cancel(skb, nlh);
2265 static int pneigh_fill_info(struct sk_buff *skb, struct pneigh_entry *pn,
2266 u32 pid, u32 seq, int type, unsigned int flags,
2267 struct neigh_table *tbl)
2269 struct nlmsghdr *nlh;
2272 nlh = nlmsg_put(skb, pid, seq, type, sizeof(*ndm), flags);
2276 ndm = nlmsg_data(nlh);
2277 ndm->ndm_family = tbl->family;
2280 ndm->ndm_flags = pn->flags | NTF_PROXY;
2281 ndm->ndm_type = RTN_UNICAST;
2282 ndm->ndm_ifindex = pn->dev ? pn->dev->ifindex : 0;
2283 ndm->ndm_state = NUD_NONE;
2285 if (nla_put(skb, NDA_DST, tbl->key_len, pn->key))
2286 goto nla_put_failure;
2288 nlmsg_end(skb, nlh);
2292 nlmsg_cancel(skb, nlh);
2296 static void neigh_update_notify(struct neighbour *neigh, u32 nlmsg_pid)
2298 call_netevent_notifiers(NETEVENT_NEIGH_UPDATE, neigh);
2299 __neigh_notify(neigh, RTM_NEWNEIGH, 0, nlmsg_pid);
2302 static bool neigh_master_filtered(struct net_device *dev, int master_idx)
2304 struct net_device *master;
2309 master = netdev_master_upper_dev_get(dev);
2310 if (!master || master->ifindex != master_idx)
2316 static bool neigh_ifindex_filtered(struct net_device *dev, int filter_idx)
2318 if (filter_idx && dev->ifindex != filter_idx)
2324 static int neigh_dump_table(struct neigh_table *tbl, struct sk_buff *skb,
2325 struct netlink_callback *cb)
2327 struct net *net = sock_net(skb->sk);
2328 const struct nlmsghdr *nlh = cb->nlh;
2329 struct nlattr *tb[NDA_MAX + 1];
2330 struct neighbour *n;
2331 int rc, h, s_h = cb->args[1];
2332 int idx, s_idx = idx = cb->args[2];
2333 struct neigh_hash_table *nht;
2334 int filter_master_idx = 0, filter_idx = 0;
2335 unsigned int flags = NLM_F_MULTI;
2338 err = nlmsg_parse(nlh, sizeof(struct ndmsg), tb, NDA_MAX, NULL, NULL);
2340 if (tb[NDA_IFINDEX]) {
2341 if (nla_len(tb[NDA_IFINDEX]) != sizeof(u32))
2343 filter_idx = nla_get_u32(tb[NDA_IFINDEX]);
2345 if (tb[NDA_MASTER]) {
2346 if (nla_len(tb[NDA_MASTER]) != sizeof(u32))
2348 filter_master_idx = nla_get_u32(tb[NDA_MASTER]);
2350 if (filter_idx || filter_master_idx)
2351 flags |= NLM_F_DUMP_FILTERED;
2355 nht = rcu_dereference_bh(tbl->nht);
2357 for (h = s_h; h < (1 << nht->hash_shift); h++) {
2360 for (n = rcu_dereference_bh(nht->hash_buckets[h]), idx = 0;
2362 n = rcu_dereference_bh(n->next)) {
2363 if (idx < s_idx || !net_eq(dev_net(n->dev), net))
2365 if (neigh_ifindex_filtered(n->dev, filter_idx) ||
2366 neigh_master_filtered(n->dev, filter_master_idx))
2368 if (neigh_fill_info(skb, n, NETLINK_CB(cb->skb).portid,
2381 rcu_read_unlock_bh();
2387 static int pneigh_dump_table(struct neigh_table *tbl, struct sk_buff *skb,
2388 struct netlink_callback *cb)
2390 struct pneigh_entry *n;
2391 struct net *net = sock_net(skb->sk);
2392 int rc, h, s_h = cb->args[3];
2393 int idx, s_idx = idx = cb->args[4];
2395 read_lock_bh(&tbl->lock);
2397 for (h = s_h; h <= PNEIGH_HASHMASK; h++) {
2400 for (n = tbl->phash_buckets[h], idx = 0; n; n = n->next) {
2401 if (idx < s_idx || pneigh_net(n) != net)
2403 if (pneigh_fill_info(skb, n, NETLINK_CB(cb->skb).portid,
2406 NLM_F_MULTI, tbl) < 0) {
2407 read_unlock_bh(&tbl->lock);
2416 read_unlock_bh(&tbl->lock);
2425 static int neigh_dump_info(struct sk_buff *skb, struct netlink_callback *cb)
2427 struct neigh_table *tbl;
2432 family = ((struct rtgenmsg *) nlmsg_data(cb->nlh))->rtgen_family;
2434 /* check for full ndmsg structure presence, family member is
2435 * the same for both structures
2437 if (nlmsg_len(cb->nlh) >= sizeof(struct ndmsg) &&
2438 ((struct ndmsg *) nlmsg_data(cb->nlh))->ndm_flags == NTF_PROXY)
2443 for (t = 0; t < NEIGH_NR_TABLES; t++) {
2444 tbl = neigh_tables[t];
2448 if (t < s_t || (family && tbl->family != family))
2451 memset(&cb->args[1], 0, sizeof(cb->args) -
2452 sizeof(cb->args[0]));
2454 err = pneigh_dump_table(tbl, skb, cb);
2456 err = neigh_dump_table(tbl, skb, cb);
2465 void neigh_for_each(struct neigh_table *tbl, void (*cb)(struct neighbour *, void *), void *cookie)
2468 struct neigh_hash_table *nht;
2471 nht = rcu_dereference_bh(tbl->nht);
2473 read_lock(&tbl->lock); /* avoid resizes */
2474 for (chain = 0; chain < (1 << nht->hash_shift); chain++) {
2475 struct neighbour *n;
2477 for (n = rcu_dereference_bh(nht->hash_buckets[chain]);
2479 n = rcu_dereference_bh(n->next))
2482 read_unlock(&tbl->lock);
2483 rcu_read_unlock_bh();
2485 EXPORT_SYMBOL(neigh_for_each);
2487 /* The tbl->lock must be held as a writer and BH disabled. */
2488 void __neigh_for_each_release(struct neigh_table *tbl,
2489 int (*cb)(struct neighbour *))
2492 struct neigh_hash_table *nht;
2494 nht = rcu_dereference_protected(tbl->nht,
2495 lockdep_is_held(&tbl->lock));
2496 for (chain = 0; chain < (1 << nht->hash_shift); chain++) {
2497 struct neighbour *n;
2498 struct neighbour __rcu **np;
2500 np = &nht->hash_buckets[chain];
2501 while ((n = rcu_dereference_protected(*np,
2502 lockdep_is_held(&tbl->lock))) != NULL) {
2505 write_lock(&n->lock);
2508 rcu_assign_pointer(*np,
2509 rcu_dereference_protected(n->next,
2510 lockdep_is_held(&tbl->lock)));
2514 write_unlock(&n->lock);
2516 neigh_cleanup_and_release(n);
2520 EXPORT_SYMBOL(__neigh_for_each_release);
2522 int neigh_xmit(int index, struct net_device *dev,
2523 const void *addr, struct sk_buff *skb)
2525 int err = -EAFNOSUPPORT;
2526 if (likely(index < NEIGH_NR_TABLES)) {
2527 struct neigh_table *tbl;
2528 struct neighbour *neigh;
2530 tbl = neigh_tables[index];
2534 neigh = __neigh_lookup_noref(tbl, addr, dev);
2536 neigh = __neigh_create(tbl, addr, dev, false);
2537 err = PTR_ERR(neigh);
2538 if (IS_ERR(neigh)) {
2539 rcu_read_unlock_bh();
2542 err = neigh->output(neigh, skb);
2543 rcu_read_unlock_bh();
2545 else if (index == NEIGH_LINK_TABLE) {
2546 err = dev_hard_header(skb, dev, ntohs(skb->protocol),
2547 addr, NULL, skb->len);
2550 err = dev_queue_xmit(skb);
2558 EXPORT_SYMBOL(neigh_xmit);
2560 #ifdef CONFIG_PROC_FS
2562 static struct neighbour *neigh_get_first(struct seq_file *seq)
2564 struct neigh_seq_state *state = seq->private;
2565 struct net *net = seq_file_net(seq);
2566 struct neigh_hash_table *nht = state->nht;
2567 struct neighbour *n = NULL;
2568 int bucket = state->bucket;
2570 state->flags &= ~NEIGH_SEQ_IS_PNEIGH;
2571 for (bucket = 0; bucket < (1 << nht->hash_shift); bucket++) {
2572 n = rcu_dereference_bh(nht->hash_buckets[bucket]);
2575 if (!net_eq(dev_net(n->dev), net))
2577 if (state->neigh_sub_iter) {
2581 v = state->neigh_sub_iter(state, n, &fakep);
2585 if (!(state->flags & NEIGH_SEQ_SKIP_NOARP))
2587 if (n->nud_state & ~NUD_NOARP)
2590 n = rcu_dereference_bh(n->next);
2596 state->bucket = bucket;
2601 static struct neighbour *neigh_get_next(struct seq_file *seq,
2602 struct neighbour *n,
2605 struct neigh_seq_state *state = seq->private;
2606 struct net *net = seq_file_net(seq);
2607 struct neigh_hash_table *nht = state->nht;
2609 if (state->neigh_sub_iter) {
2610 void *v = state->neigh_sub_iter(state, n, pos);
2614 n = rcu_dereference_bh(n->next);
2618 if (!net_eq(dev_net(n->dev), net))
2620 if (state->neigh_sub_iter) {
2621 void *v = state->neigh_sub_iter(state, n, pos);
2626 if (!(state->flags & NEIGH_SEQ_SKIP_NOARP))
2629 if (n->nud_state & ~NUD_NOARP)
2632 n = rcu_dereference_bh(n->next);
2638 if (++state->bucket >= (1 << nht->hash_shift))
2641 n = rcu_dereference_bh(nht->hash_buckets[state->bucket]);
2649 static struct neighbour *neigh_get_idx(struct seq_file *seq, loff_t *pos)
2651 struct neighbour *n = neigh_get_first(seq);
2656 n = neigh_get_next(seq, n, pos);
2661 return *pos ? NULL : n;
2664 static struct pneigh_entry *pneigh_get_first(struct seq_file *seq)
2666 struct neigh_seq_state *state = seq->private;
2667 struct net *net = seq_file_net(seq);
2668 struct neigh_table *tbl = state->tbl;
2669 struct pneigh_entry *pn = NULL;
2670 int bucket = state->bucket;
2672 state->flags |= NEIGH_SEQ_IS_PNEIGH;
2673 for (bucket = 0; bucket <= PNEIGH_HASHMASK; bucket++) {
2674 pn = tbl->phash_buckets[bucket];
2675 while (pn && !net_eq(pneigh_net(pn), net))
2680 state->bucket = bucket;
2685 static struct pneigh_entry *pneigh_get_next(struct seq_file *seq,
2686 struct pneigh_entry *pn,
2689 struct neigh_seq_state *state = seq->private;
2690 struct net *net = seq_file_net(seq);
2691 struct neigh_table *tbl = state->tbl;
2695 } while (pn && !net_eq(pneigh_net(pn), net));
2698 if (++state->bucket > PNEIGH_HASHMASK)
2700 pn = tbl->phash_buckets[state->bucket];
2701 while (pn && !net_eq(pneigh_net(pn), net))
2713 static struct pneigh_entry *pneigh_get_idx(struct seq_file *seq, loff_t *pos)
2715 struct pneigh_entry *pn = pneigh_get_first(seq);
2720 pn = pneigh_get_next(seq, pn, pos);
2725 return *pos ? NULL : pn;
2728 static void *neigh_get_idx_any(struct seq_file *seq, loff_t *pos)
2730 struct neigh_seq_state *state = seq->private;
2732 loff_t idxpos = *pos;
2734 rc = neigh_get_idx(seq, &idxpos);
2735 if (!rc && !(state->flags & NEIGH_SEQ_NEIGH_ONLY))
2736 rc = pneigh_get_idx(seq, &idxpos);
2741 void *neigh_seq_start(struct seq_file *seq, loff_t *pos, struct neigh_table *tbl, unsigned int neigh_seq_flags)
2744 struct neigh_seq_state *state = seq->private;
2748 state->flags = (neigh_seq_flags & ~NEIGH_SEQ_IS_PNEIGH);
2751 state->nht = rcu_dereference_bh(tbl->nht);
2753 return *pos ? neigh_get_idx_any(seq, pos) : SEQ_START_TOKEN;
2755 EXPORT_SYMBOL(neigh_seq_start);
2757 void *neigh_seq_next(struct seq_file *seq, void *v, loff_t *pos)
2759 struct neigh_seq_state *state;
2762 if (v == SEQ_START_TOKEN) {
2763 rc = neigh_get_first(seq);
2767 state = seq->private;
2768 if (!(state->flags & NEIGH_SEQ_IS_PNEIGH)) {
2769 rc = neigh_get_next(seq, v, NULL);
2772 if (!(state->flags & NEIGH_SEQ_NEIGH_ONLY))
2773 rc = pneigh_get_first(seq);
2775 BUG_ON(state->flags & NEIGH_SEQ_NEIGH_ONLY);
2776 rc = pneigh_get_next(seq, v, NULL);
2782 EXPORT_SYMBOL(neigh_seq_next);
2784 void neigh_seq_stop(struct seq_file *seq, void *v)
2787 rcu_read_unlock_bh();
2789 EXPORT_SYMBOL(neigh_seq_stop);
2791 /* statistics via seq_file */
2793 static void *neigh_stat_seq_start(struct seq_file *seq, loff_t *pos)
2795 struct neigh_table *tbl = PDE_DATA(file_inode(seq->file));
2799 return SEQ_START_TOKEN;
2801 for (cpu = *pos-1; cpu < nr_cpu_ids; ++cpu) {
2802 if (!cpu_possible(cpu))
2805 return per_cpu_ptr(tbl->stats, cpu);
2810 static void *neigh_stat_seq_next(struct seq_file *seq, void *v, loff_t *pos)
2812 struct neigh_table *tbl = PDE_DATA(file_inode(seq->file));
2815 for (cpu = *pos; cpu < nr_cpu_ids; ++cpu) {
2816 if (!cpu_possible(cpu))
2819 return per_cpu_ptr(tbl->stats, cpu);
2824 static void neigh_stat_seq_stop(struct seq_file *seq, void *v)
2829 static int neigh_stat_seq_show(struct seq_file *seq, void *v)
2831 struct neigh_table *tbl = PDE_DATA(file_inode(seq->file));
2832 struct neigh_statistics *st = v;
2834 if (v == SEQ_START_TOKEN) {
2835 seq_printf(seq, "entries allocs destroys hash_grows lookups hits res_failed rcv_probes_mcast rcv_probes_ucast periodic_gc_runs forced_gc_runs unresolved_discards table_fulls\n");
2839 seq_printf(seq, "%08x %08lx %08lx %08lx %08lx %08lx %08lx "
2840 "%08lx %08lx %08lx %08lx %08lx %08lx\n",
2841 atomic_read(&tbl->entries),
2852 st->rcv_probes_mcast,
2853 st->rcv_probes_ucast,
2855 st->periodic_gc_runs,
2864 static const struct seq_operations neigh_stat_seq_ops = {
2865 .start = neigh_stat_seq_start,
2866 .next = neigh_stat_seq_next,
2867 .stop = neigh_stat_seq_stop,
2868 .show = neigh_stat_seq_show,
2870 #endif /* CONFIG_PROC_FS */
2872 static inline size_t neigh_nlmsg_size(void)
2874 return NLMSG_ALIGN(sizeof(struct ndmsg))
2875 + nla_total_size(MAX_ADDR_LEN) /* NDA_DST */
2876 + nla_total_size(MAX_ADDR_LEN) /* NDA_LLADDR */
2877 + nla_total_size(sizeof(struct nda_cacheinfo))
2878 + nla_total_size(4); /* NDA_PROBES */
2881 static void __neigh_notify(struct neighbour *n, int type, int flags,
2884 struct net *net = dev_net(n->dev);
2885 struct sk_buff *skb;
2888 skb = nlmsg_new(neigh_nlmsg_size(), GFP_ATOMIC);
2892 err = neigh_fill_info(skb, n, pid, 0, type, flags);
2894 /* -EMSGSIZE implies BUG in neigh_nlmsg_size() */
2895 WARN_ON(err == -EMSGSIZE);
2899 rtnl_notify(skb, net, 0, RTNLGRP_NEIGH, NULL, GFP_ATOMIC);
2903 rtnl_set_sk_err(net, RTNLGRP_NEIGH, err);
2906 void neigh_app_ns(struct neighbour *n)
2908 __neigh_notify(n, RTM_GETNEIGH, NLM_F_REQUEST, 0);
2910 EXPORT_SYMBOL(neigh_app_ns);
2912 #ifdef CONFIG_SYSCTL
2914 static int int_max = INT_MAX;
2915 static int unres_qlen_max = INT_MAX / SKB_TRUESIZE(ETH_FRAME_LEN);
2917 static int proc_unres_qlen(struct ctl_table *ctl, int write,
2918 void __user *buffer, size_t *lenp, loff_t *ppos)
2921 struct ctl_table tmp = *ctl;
2924 tmp.extra2 = &unres_qlen_max;
2927 size = *(int *)ctl->data / SKB_TRUESIZE(ETH_FRAME_LEN);
2928 ret = proc_dointvec_minmax(&tmp, write, buffer, lenp, ppos);
2931 *(int *)ctl->data = size * SKB_TRUESIZE(ETH_FRAME_LEN);
2935 static struct neigh_parms *neigh_get_dev_parms_rcu(struct net_device *dev,
2940 return __in_dev_arp_parms_get_rcu(dev);
2942 return __in6_dev_nd_parms_get_rcu(dev);
2947 static void neigh_copy_dflt_parms(struct net *net, struct neigh_parms *p,
2950 struct net_device *dev;
2951 int family = neigh_parms_family(p);
2954 for_each_netdev_rcu(net, dev) {
2955 struct neigh_parms *dst_p =
2956 neigh_get_dev_parms_rcu(dev, family);
2958 if (dst_p && !test_bit(index, dst_p->data_state))
2959 dst_p->data[index] = p->data[index];
2964 static void neigh_proc_update(struct ctl_table *ctl, int write)
2966 struct net_device *dev = ctl->extra1;
2967 struct neigh_parms *p = ctl->extra2;
2968 struct net *net = neigh_parms_net(p);
2969 int index = (int *) ctl->data - p->data;
2974 set_bit(index, p->data_state);
2975 if (index == NEIGH_VAR_DELAY_PROBE_TIME)
2976 call_netevent_notifiers(NETEVENT_DELAY_PROBE_TIME_UPDATE, p);
2977 if (!dev) /* NULL dev means this is default value */
2978 neigh_copy_dflt_parms(net, p, index);
2981 static int neigh_proc_dointvec_zero_intmax(struct ctl_table *ctl, int write,
2982 void __user *buffer,
2983 size_t *lenp, loff_t *ppos)
2985 struct ctl_table tmp = *ctl;
2989 tmp.extra2 = &int_max;
2991 ret = proc_dointvec_minmax(&tmp, write, buffer, lenp, ppos);
2992 neigh_proc_update(ctl, write);
2996 int neigh_proc_dointvec(struct ctl_table *ctl, int write,
2997 void __user *buffer, size_t *lenp, loff_t *ppos)
2999 int ret = proc_dointvec(ctl, write, buffer, lenp, ppos);
3001 neigh_proc_update(ctl, write);
3004 EXPORT_SYMBOL(neigh_proc_dointvec);
3006 int neigh_proc_dointvec_jiffies(struct ctl_table *ctl, int write,
3007 void __user *buffer,
3008 size_t *lenp, loff_t *ppos)
3010 int ret = proc_dointvec_jiffies(ctl, write, buffer, lenp, ppos);
3012 neigh_proc_update(ctl, write);
3015 EXPORT_SYMBOL(neigh_proc_dointvec_jiffies);
3017 static int neigh_proc_dointvec_userhz_jiffies(struct ctl_table *ctl, int write,
3018 void __user *buffer,
3019 size_t *lenp, loff_t *ppos)
3021 int ret = proc_dointvec_userhz_jiffies(ctl, write, buffer, lenp, ppos);
3023 neigh_proc_update(ctl, write);
3027 int neigh_proc_dointvec_ms_jiffies(struct ctl_table *ctl, int write,
3028 void __user *buffer,
3029 size_t *lenp, loff_t *ppos)
3031 int ret = proc_dointvec_ms_jiffies(ctl, write, buffer, lenp, ppos);
3033 neigh_proc_update(ctl, write);
3036 EXPORT_SYMBOL(neigh_proc_dointvec_ms_jiffies);
3038 static int neigh_proc_dointvec_unres_qlen(struct ctl_table *ctl, int write,
3039 void __user *buffer,
3040 size_t *lenp, loff_t *ppos)
3042 int ret = proc_unres_qlen(ctl, write, buffer, lenp, ppos);
3044 neigh_proc_update(ctl, write);
3048 static int neigh_proc_base_reachable_time(struct ctl_table *ctl, int write,
3049 void __user *buffer,
3050 size_t *lenp, loff_t *ppos)
3052 struct neigh_parms *p = ctl->extra2;
3055 if (strcmp(ctl->procname, "base_reachable_time") == 0)
3056 ret = neigh_proc_dointvec_jiffies(ctl, write, buffer, lenp, ppos);
3057 else if (strcmp(ctl->procname, "base_reachable_time_ms") == 0)
3058 ret = neigh_proc_dointvec_ms_jiffies(ctl, write, buffer, lenp, ppos);
3062 if (write && ret == 0) {
3063 /* update reachable_time as well, otherwise, the change will
3064 * only be effective after the next time neigh_periodic_work
3065 * decides to recompute it
3068 neigh_rand_reach_time(NEIGH_VAR(p, BASE_REACHABLE_TIME));
3073 #define NEIGH_PARMS_DATA_OFFSET(index) \
3074 (&((struct neigh_parms *) 0)->data[index])
3076 #define NEIGH_SYSCTL_ENTRY(attr, data_attr, name, mval, proc) \
3077 [NEIGH_VAR_ ## attr] = { \
3079 .data = NEIGH_PARMS_DATA_OFFSET(NEIGH_VAR_ ## data_attr), \
3080 .maxlen = sizeof(int), \
3082 .proc_handler = proc, \
3085 #define NEIGH_SYSCTL_ZERO_INTMAX_ENTRY(attr, name) \
3086 NEIGH_SYSCTL_ENTRY(attr, attr, name, 0644, neigh_proc_dointvec_zero_intmax)
3088 #define NEIGH_SYSCTL_JIFFIES_ENTRY(attr, name) \
3089 NEIGH_SYSCTL_ENTRY(attr, attr, name, 0644, neigh_proc_dointvec_jiffies)
3091 #define NEIGH_SYSCTL_USERHZ_JIFFIES_ENTRY(attr, name) \
3092 NEIGH_SYSCTL_ENTRY(attr, attr, name, 0644, neigh_proc_dointvec_userhz_jiffies)
3094 #define NEIGH_SYSCTL_MS_JIFFIES_ENTRY(attr, name) \
3095 NEIGH_SYSCTL_ENTRY(attr, attr, name, 0644, neigh_proc_dointvec_ms_jiffies)
3097 #define NEIGH_SYSCTL_MS_JIFFIES_REUSED_ENTRY(attr, data_attr, name) \
3098 NEIGH_SYSCTL_ENTRY(attr, data_attr, name, 0644, neigh_proc_dointvec_ms_jiffies)
3100 #define NEIGH_SYSCTL_UNRES_QLEN_REUSED_ENTRY(attr, data_attr, name) \
3101 NEIGH_SYSCTL_ENTRY(attr, data_attr, name, 0644, neigh_proc_dointvec_unres_qlen)
3103 static struct neigh_sysctl_table {
3104 struct ctl_table_header *sysctl_header;
3105 struct ctl_table neigh_vars[NEIGH_VAR_MAX + 1];
3106 } neigh_sysctl_template __read_mostly = {
3108 NEIGH_SYSCTL_ZERO_INTMAX_ENTRY(MCAST_PROBES, "mcast_solicit"),
3109 NEIGH_SYSCTL_ZERO_INTMAX_ENTRY(UCAST_PROBES, "ucast_solicit"),
3110 NEIGH_SYSCTL_ZERO_INTMAX_ENTRY(APP_PROBES, "app_solicit"),
3111 NEIGH_SYSCTL_ZERO_INTMAX_ENTRY(MCAST_REPROBES, "mcast_resolicit"),
3112 NEIGH_SYSCTL_USERHZ_JIFFIES_ENTRY(RETRANS_TIME, "retrans_time"),
3113 NEIGH_SYSCTL_JIFFIES_ENTRY(BASE_REACHABLE_TIME, "base_reachable_time"),
3114 NEIGH_SYSCTL_JIFFIES_ENTRY(DELAY_PROBE_TIME, "delay_first_probe_time"),
3115 NEIGH_SYSCTL_JIFFIES_ENTRY(GC_STALETIME, "gc_stale_time"),
3116 NEIGH_SYSCTL_ZERO_INTMAX_ENTRY(QUEUE_LEN_BYTES, "unres_qlen_bytes"),
3117 NEIGH_SYSCTL_ZERO_INTMAX_ENTRY(PROXY_QLEN, "proxy_qlen"),
3118 NEIGH_SYSCTL_USERHZ_JIFFIES_ENTRY(ANYCAST_DELAY, "anycast_delay"),
3119 NEIGH_SYSCTL_USERHZ_JIFFIES_ENTRY(PROXY_DELAY, "proxy_delay"),
3120 NEIGH_SYSCTL_USERHZ_JIFFIES_ENTRY(LOCKTIME, "locktime"),
3121 NEIGH_SYSCTL_UNRES_QLEN_REUSED_ENTRY(QUEUE_LEN, QUEUE_LEN_BYTES, "unres_qlen"),
3122 NEIGH_SYSCTL_MS_JIFFIES_REUSED_ENTRY(RETRANS_TIME_MS, RETRANS_TIME, "retrans_time_ms"),
3123 NEIGH_SYSCTL_MS_JIFFIES_REUSED_ENTRY(BASE_REACHABLE_TIME_MS, BASE_REACHABLE_TIME, "base_reachable_time_ms"),
3124 [NEIGH_VAR_GC_INTERVAL] = {
3125 .procname = "gc_interval",
3126 .maxlen = sizeof(int),
3128 .proc_handler = proc_dointvec_jiffies,
3130 [NEIGH_VAR_GC_THRESH1] = {
3131 .procname = "gc_thresh1",
3132 .maxlen = sizeof(int),
3136 .proc_handler = proc_dointvec_minmax,
3138 [NEIGH_VAR_GC_THRESH2] = {
3139 .procname = "gc_thresh2",
3140 .maxlen = sizeof(int),
3144 .proc_handler = proc_dointvec_minmax,
3146 [NEIGH_VAR_GC_THRESH3] = {
3147 .procname = "gc_thresh3",
3148 .maxlen = sizeof(int),
3152 .proc_handler = proc_dointvec_minmax,
3158 int neigh_sysctl_register(struct net_device *dev, struct neigh_parms *p,
3159 proc_handler *handler)
3162 struct neigh_sysctl_table *t;
3163 const char *dev_name_source;
3164 char neigh_path[ sizeof("net//neigh/") + IFNAMSIZ + IFNAMSIZ ];
3167 t = kmemdup(&neigh_sysctl_template, sizeof(*t), GFP_KERNEL);
3171 for (i = 0; i < NEIGH_VAR_GC_INTERVAL; i++) {
3172 t->neigh_vars[i].data += (long) p;
3173 t->neigh_vars[i].extra1 = dev;
3174 t->neigh_vars[i].extra2 = p;
3178 dev_name_source = dev->name;
3179 /* Terminate the table early */
3180 memset(&t->neigh_vars[NEIGH_VAR_GC_INTERVAL], 0,
3181 sizeof(t->neigh_vars[NEIGH_VAR_GC_INTERVAL]));
3183 struct neigh_table *tbl = p->tbl;
3184 dev_name_source = "default";
3185 t->neigh_vars[NEIGH_VAR_GC_INTERVAL].data = &tbl->gc_interval;
3186 t->neigh_vars[NEIGH_VAR_GC_THRESH1].data = &tbl->gc_thresh1;
3187 t->neigh_vars[NEIGH_VAR_GC_THRESH2].data = &tbl->gc_thresh2;
3188 t->neigh_vars[NEIGH_VAR_GC_THRESH3].data = &tbl->gc_thresh3;
3193 t->neigh_vars[NEIGH_VAR_RETRANS_TIME].proc_handler = handler;
3195 t->neigh_vars[NEIGH_VAR_BASE_REACHABLE_TIME].proc_handler = handler;
3196 /* RetransTime (in milliseconds)*/
3197 t->neigh_vars[NEIGH_VAR_RETRANS_TIME_MS].proc_handler = handler;
3198 /* ReachableTime (in milliseconds) */
3199 t->neigh_vars[NEIGH_VAR_BASE_REACHABLE_TIME_MS].proc_handler = handler;
3201 /* Those handlers will update p->reachable_time after
3202 * base_reachable_time(_ms) is set to ensure the new timer starts being
3203 * applied after the next neighbour update instead of waiting for
3204 * neigh_periodic_work to update its value (can be multiple minutes)
3205 * So any handler that replaces them should do this as well
3208 t->neigh_vars[NEIGH_VAR_BASE_REACHABLE_TIME].proc_handler =
3209 neigh_proc_base_reachable_time;
3210 /* ReachableTime (in milliseconds) */
3211 t->neigh_vars[NEIGH_VAR_BASE_REACHABLE_TIME_MS].proc_handler =
3212 neigh_proc_base_reachable_time;
3215 /* Don't export sysctls to unprivileged users */
3216 if (neigh_parms_net(p)->user_ns != &init_user_ns)
3217 t->neigh_vars[0].procname = NULL;
3219 switch (neigh_parms_family(p)) {
3230 snprintf(neigh_path, sizeof(neigh_path), "net/%s/neigh/%s",
3231 p_name, dev_name_source);
3233 register_net_sysctl(neigh_parms_net(p), neigh_path, t->neigh_vars);
3234 if (!t->sysctl_header)
3237 p->sysctl_table = t;
3245 EXPORT_SYMBOL(neigh_sysctl_register);
3247 void neigh_sysctl_unregister(struct neigh_parms *p)
3249 if (p->sysctl_table) {
3250 struct neigh_sysctl_table *t = p->sysctl_table;
3251 p->sysctl_table = NULL;
3252 unregister_net_sysctl_table(t->sysctl_header);
3256 EXPORT_SYMBOL(neigh_sysctl_unregister);
3258 #endif /* CONFIG_SYSCTL */
3260 static int __init neigh_init(void)
3262 rtnl_register(PF_UNSPEC, RTM_NEWNEIGH, neigh_add, NULL, 0);
3263 rtnl_register(PF_UNSPEC, RTM_DELNEIGH, neigh_delete, NULL, 0);
3264 rtnl_register(PF_UNSPEC, RTM_GETNEIGH, NULL, neigh_dump_info, 0);
3266 rtnl_register(PF_UNSPEC, RTM_GETNEIGHTBL, NULL, neightbl_dump_info,
3268 rtnl_register(PF_UNSPEC, RTM_SETNEIGHTBL, neightbl_set, NULL, 0);
3273 subsys_initcall(neigh_init);