2 * Generic address resolution entity
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, __u8 flags,
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 !(n->flags & flags)) {
130 struct neighbour *neigh;
132 neigh = rcu_dereference_protected(n->next,
133 lockdep_is_held(&tbl->lock));
134 rcu_assign_pointer(*np, neigh);
138 write_unlock(&n->lock);
140 neigh_cleanup_and_release(n);
144 bool neigh_remove_one(struct neighbour *ndel, struct neigh_table *tbl)
146 struct neigh_hash_table *nht;
147 void *pkey = ndel->primary_key;
150 struct neighbour __rcu **np;
152 nht = rcu_dereference_protected(tbl->nht,
153 lockdep_is_held(&tbl->lock));
154 hash_val = tbl->hash(pkey, ndel->dev, nht->hash_rnd);
155 hash_val = hash_val >> (32 - nht->hash_shift);
157 np = &nht->hash_buckets[hash_val];
158 while ((n = rcu_dereference_protected(*np,
159 lockdep_is_held(&tbl->lock)))) {
161 return neigh_del(n, 0, 0, np, tbl);
167 static int neigh_forced_gc(struct neigh_table *tbl)
171 struct neigh_hash_table *nht;
173 NEIGH_CACHE_STAT_INC(tbl, forced_gc_runs);
175 write_lock_bh(&tbl->lock);
176 nht = rcu_dereference_protected(tbl->nht,
177 lockdep_is_held(&tbl->lock));
178 for (i = 0; i < (1 << nht->hash_shift); i++) {
180 struct neighbour __rcu **np;
182 np = &nht->hash_buckets[i];
183 while ((n = rcu_dereference_protected(*np,
184 lockdep_is_held(&tbl->lock))) != NULL) {
185 /* Neighbour record may be discarded if:
186 * - nobody refers to it.
187 * - it is not permanent
189 if (neigh_del(n, NUD_PERMANENT, NTF_EXT_LEARNED, np,
198 tbl->last_flush = jiffies;
200 write_unlock_bh(&tbl->lock);
205 static void neigh_add_timer(struct neighbour *n, unsigned long when)
208 if (unlikely(mod_timer(&n->timer, when))) {
209 printk("NEIGH: BUG, double timer add, state is %x\n",
215 static int neigh_del_timer(struct neighbour *n)
217 if ((n->nud_state & NUD_IN_TIMER) &&
218 del_timer(&n->timer)) {
225 static void pneigh_queue_purge(struct sk_buff_head *list)
229 while ((skb = skb_dequeue(list)) != NULL) {
235 static void neigh_flush_dev(struct neigh_table *tbl, struct net_device *dev,
239 struct neigh_hash_table *nht;
241 nht = rcu_dereference_protected(tbl->nht,
242 lockdep_is_held(&tbl->lock));
244 for (i = 0; i < (1 << nht->hash_shift); i++) {
246 struct neighbour __rcu **np = &nht->hash_buckets[i];
248 while ((n = rcu_dereference_protected(*np,
249 lockdep_is_held(&tbl->lock))) != NULL) {
250 if (dev && n->dev != dev) {
254 if (skip_perm && n->nud_state & NUD_PERMANENT) {
258 rcu_assign_pointer(*np,
259 rcu_dereference_protected(n->next,
260 lockdep_is_held(&tbl->lock)));
261 write_lock(&n->lock);
265 if (refcount_read(&n->refcnt) != 1) {
266 /* The most unpleasant situation.
267 We must destroy neighbour entry,
268 but someone still uses it.
270 The destroy will be delayed until
271 the last user releases us, but
272 we must kill timers etc. and move
275 __skb_queue_purge(&n->arp_queue);
276 n->arp_queue_len_bytes = 0;
277 n->output = neigh_blackhole;
278 if (n->nud_state & NUD_VALID)
279 n->nud_state = NUD_NOARP;
281 n->nud_state = NUD_NONE;
282 neigh_dbg(2, "neigh %p is stray\n", n);
284 write_unlock(&n->lock);
285 neigh_cleanup_and_release(n);
290 void neigh_changeaddr(struct neigh_table *tbl, struct net_device *dev)
292 write_lock_bh(&tbl->lock);
293 neigh_flush_dev(tbl, dev, false);
294 write_unlock_bh(&tbl->lock);
296 EXPORT_SYMBOL(neigh_changeaddr);
298 static int __neigh_ifdown(struct neigh_table *tbl, struct net_device *dev,
301 write_lock_bh(&tbl->lock);
302 neigh_flush_dev(tbl, dev, skip_perm);
303 pneigh_ifdown_and_unlock(tbl, dev);
305 del_timer_sync(&tbl->proxy_timer);
306 pneigh_queue_purge(&tbl->proxy_queue);
310 int neigh_carrier_down(struct neigh_table *tbl, struct net_device *dev)
312 __neigh_ifdown(tbl, dev, true);
315 EXPORT_SYMBOL(neigh_carrier_down);
317 int neigh_ifdown(struct neigh_table *tbl, struct net_device *dev)
319 __neigh_ifdown(tbl, dev, false);
322 EXPORT_SYMBOL(neigh_ifdown);
324 static struct neighbour *neigh_alloc(struct neigh_table *tbl, struct net_device *dev)
326 struct neighbour *n = NULL;
327 unsigned long now = jiffies;
330 entries = atomic_inc_return(&tbl->entries) - 1;
331 if (entries >= tbl->gc_thresh3 ||
332 (entries >= tbl->gc_thresh2 &&
333 time_after(now, tbl->last_flush + 5 * HZ))) {
334 if (!neigh_forced_gc(tbl) &&
335 entries >= tbl->gc_thresh3) {
336 net_info_ratelimited("%s: neighbor table overflow!\n",
338 NEIGH_CACHE_STAT_INC(tbl, table_fulls);
343 n = kzalloc(tbl->entry_size + dev->neigh_priv_len, GFP_ATOMIC);
347 __skb_queue_head_init(&n->arp_queue);
348 rwlock_init(&n->lock);
349 seqlock_init(&n->ha_lock);
350 n->updated = n->used = now;
351 n->nud_state = NUD_NONE;
352 n->output = neigh_blackhole;
353 seqlock_init(&n->hh.hh_lock);
354 n->parms = neigh_parms_clone(&tbl->parms);
355 timer_setup(&n->timer, neigh_timer_handler, 0);
357 NEIGH_CACHE_STAT_INC(tbl, allocs);
359 refcount_set(&n->refcnt, 1);
365 atomic_dec(&tbl->entries);
369 static void neigh_get_hash_rnd(u32 *x)
371 *x = get_random_u32() | 1;
374 static struct neigh_hash_table *neigh_hash_alloc(unsigned int shift)
376 size_t size = (1 << shift) * sizeof(struct neighbour *);
377 struct neigh_hash_table *ret;
378 struct neighbour __rcu **buckets;
381 ret = kmalloc(sizeof(*ret), GFP_ATOMIC);
384 if (size <= PAGE_SIZE)
385 buckets = kzalloc(size, GFP_ATOMIC);
387 buckets = (struct neighbour __rcu **)
388 __get_free_pages(GFP_ATOMIC | __GFP_ZERO,
394 ret->hash_buckets = buckets;
395 ret->hash_shift = shift;
396 for (i = 0; i < NEIGH_NUM_HASH_RND; i++)
397 neigh_get_hash_rnd(&ret->hash_rnd[i]);
401 static void neigh_hash_free_rcu(struct rcu_head *head)
403 struct neigh_hash_table *nht = container_of(head,
404 struct neigh_hash_table,
406 size_t size = (1 << nht->hash_shift) * sizeof(struct neighbour *);
407 struct neighbour __rcu **buckets = nht->hash_buckets;
409 if (size <= PAGE_SIZE)
412 free_pages((unsigned long)buckets, get_order(size));
416 static struct neigh_hash_table *neigh_hash_grow(struct neigh_table *tbl,
417 unsigned long new_shift)
419 unsigned int i, hash;
420 struct neigh_hash_table *new_nht, *old_nht;
422 NEIGH_CACHE_STAT_INC(tbl, hash_grows);
424 old_nht = rcu_dereference_protected(tbl->nht,
425 lockdep_is_held(&tbl->lock));
426 new_nht = neigh_hash_alloc(new_shift);
430 for (i = 0; i < (1 << old_nht->hash_shift); i++) {
431 struct neighbour *n, *next;
433 for (n = rcu_dereference_protected(old_nht->hash_buckets[i],
434 lockdep_is_held(&tbl->lock));
437 hash = tbl->hash(n->primary_key, n->dev,
440 hash >>= (32 - new_nht->hash_shift);
441 next = rcu_dereference_protected(n->next,
442 lockdep_is_held(&tbl->lock));
444 rcu_assign_pointer(n->next,
445 rcu_dereference_protected(
446 new_nht->hash_buckets[hash],
447 lockdep_is_held(&tbl->lock)));
448 rcu_assign_pointer(new_nht->hash_buckets[hash], n);
452 rcu_assign_pointer(tbl->nht, new_nht);
453 call_rcu(&old_nht->rcu, neigh_hash_free_rcu);
457 struct neighbour *neigh_lookup(struct neigh_table *tbl, const void *pkey,
458 struct net_device *dev)
462 NEIGH_CACHE_STAT_INC(tbl, lookups);
465 n = __neigh_lookup_noref(tbl, pkey, dev);
467 if (!refcount_inc_not_zero(&n->refcnt))
469 NEIGH_CACHE_STAT_INC(tbl, hits);
472 rcu_read_unlock_bh();
475 EXPORT_SYMBOL(neigh_lookup);
477 struct neighbour *neigh_lookup_nodev(struct neigh_table *tbl, struct net *net,
481 unsigned int key_len = tbl->key_len;
483 struct neigh_hash_table *nht;
485 NEIGH_CACHE_STAT_INC(tbl, lookups);
488 nht = rcu_dereference_bh(tbl->nht);
489 hash_val = tbl->hash(pkey, NULL, nht->hash_rnd) >> (32 - nht->hash_shift);
491 for (n = rcu_dereference_bh(nht->hash_buckets[hash_val]);
493 n = rcu_dereference_bh(n->next)) {
494 if (!memcmp(n->primary_key, pkey, key_len) &&
495 net_eq(dev_net(n->dev), net)) {
496 if (!refcount_inc_not_zero(&n->refcnt))
498 NEIGH_CACHE_STAT_INC(tbl, hits);
503 rcu_read_unlock_bh();
506 EXPORT_SYMBOL(neigh_lookup_nodev);
508 struct neighbour *__neigh_create(struct neigh_table *tbl, const void *pkey,
509 struct net_device *dev, bool want_ref)
512 unsigned int key_len = tbl->key_len;
514 struct neighbour *n1, *rc, *n = neigh_alloc(tbl, dev);
515 struct neigh_hash_table *nht;
518 rc = ERR_PTR(-ENOBUFS);
522 memcpy(n->primary_key, pkey, key_len);
526 /* Protocol specific setup. */
527 if (tbl->constructor && (error = tbl->constructor(n)) < 0) {
529 goto out_neigh_release;
532 if (dev->netdev_ops->ndo_neigh_construct) {
533 error = dev->netdev_ops->ndo_neigh_construct(dev, n);
536 goto out_neigh_release;
540 /* Device specific setup. */
541 if (n->parms->neigh_setup &&
542 (error = n->parms->neigh_setup(n)) < 0) {
544 goto out_neigh_release;
547 n->confirmed = jiffies - (NEIGH_VAR(n->parms, BASE_REACHABLE_TIME) << 1);
549 write_lock_bh(&tbl->lock);
550 nht = rcu_dereference_protected(tbl->nht,
551 lockdep_is_held(&tbl->lock));
553 if (atomic_read(&tbl->entries) > (1 << nht->hash_shift))
554 nht = neigh_hash_grow(tbl, nht->hash_shift + 1);
556 hash_val = tbl->hash(n->primary_key, dev, nht->hash_rnd) >> (32 - nht->hash_shift);
558 if (n->parms->dead) {
559 rc = ERR_PTR(-EINVAL);
563 for (n1 = rcu_dereference_protected(nht->hash_buckets[hash_val],
564 lockdep_is_held(&tbl->lock));
566 n1 = rcu_dereference_protected(n1->next,
567 lockdep_is_held(&tbl->lock))) {
568 if (dev == n1->dev && !memcmp(n1->primary_key, n->primary_key, key_len)) {
579 rcu_assign_pointer(n->next,
580 rcu_dereference_protected(nht->hash_buckets[hash_val],
581 lockdep_is_held(&tbl->lock)));
582 rcu_assign_pointer(nht->hash_buckets[hash_val], n);
583 write_unlock_bh(&tbl->lock);
584 neigh_dbg(2, "neigh %p is created\n", n);
589 write_unlock_bh(&tbl->lock);
594 EXPORT_SYMBOL(__neigh_create);
596 static u32 pneigh_hash(const void *pkey, unsigned int key_len)
598 u32 hash_val = *(u32 *)(pkey + key_len - 4);
599 hash_val ^= (hash_val >> 16);
600 hash_val ^= hash_val >> 8;
601 hash_val ^= hash_val >> 4;
602 hash_val &= PNEIGH_HASHMASK;
606 static struct pneigh_entry *__pneigh_lookup_1(struct pneigh_entry *n,
609 unsigned int key_len,
610 struct net_device *dev)
613 if (!memcmp(n->key, pkey, key_len) &&
614 net_eq(pneigh_net(n), net) &&
615 (n->dev == dev || !n->dev))
622 struct pneigh_entry *__pneigh_lookup(struct neigh_table *tbl,
623 struct net *net, const void *pkey, struct net_device *dev)
625 unsigned int key_len = tbl->key_len;
626 u32 hash_val = pneigh_hash(pkey, key_len);
628 return __pneigh_lookup_1(tbl->phash_buckets[hash_val],
629 net, pkey, key_len, dev);
631 EXPORT_SYMBOL_GPL(__pneigh_lookup);
633 struct pneigh_entry * pneigh_lookup(struct neigh_table *tbl,
634 struct net *net, const void *pkey,
635 struct net_device *dev, int creat)
637 struct pneigh_entry *n;
638 unsigned int key_len = tbl->key_len;
639 u32 hash_val = pneigh_hash(pkey, key_len);
641 read_lock_bh(&tbl->lock);
642 n = __pneigh_lookup_1(tbl->phash_buckets[hash_val],
643 net, pkey, key_len, dev);
644 read_unlock_bh(&tbl->lock);
651 n = kmalloc(sizeof(*n) + key_len, GFP_KERNEL);
655 write_pnet(&n->net, net);
656 memcpy(n->key, pkey, key_len);
661 if (tbl->pconstructor && tbl->pconstructor(n)) {
669 write_lock_bh(&tbl->lock);
670 n->next = tbl->phash_buckets[hash_val];
671 tbl->phash_buckets[hash_val] = n;
672 write_unlock_bh(&tbl->lock);
676 EXPORT_SYMBOL(pneigh_lookup);
679 int pneigh_delete(struct neigh_table *tbl, struct net *net, const void *pkey,
680 struct net_device *dev)
682 struct pneigh_entry *n, **np;
683 unsigned int key_len = tbl->key_len;
684 u32 hash_val = pneigh_hash(pkey, key_len);
686 write_lock_bh(&tbl->lock);
687 for (np = &tbl->phash_buckets[hash_val]; (n = *np) != NULL;
689 if (!memcmp(n->key, pkey, key_len) && n->dev == dev &&
690 net_eq(pneigh_net(n), net)) {
692 write_unlock_bh(&tbl->lock);
693 if (tbl->pdestructor)
701 write_unlock_bh(&tbl->lock);
705 static int pneigh_ifdown_and_unlock(struct neigh_table *tbl,
706 struct net_device *dev)
708 struct pneigh_entry *n, **np, *freelist = NULL;
711 for (h = 0; h <= PNEIGH_HASHMASK; h++) {
712 np = &tbl->phash_buckets[h];
713 while ((n = *np) != NULL) {
714 if (!dev || n->dev == dev) {
723 write_unlock_bh(&tbl->lock);
724 while ((n = freelist)) {
727 if (tbl->pdestructor)
736 static void neigh_parms_destroy(struct neigh_parms *parms);
738 static inline void neigh_parms_put(struct neigh_parms *parms)
740 if (refcount_dec_and_test(&parms->refcnt))
741 neigh_parms_destroy(parms);
745 * neighbour must already be out of the table;
748 void neigh_destroy(struct neighbour *neigh)
750 struct net_device *dev = neigh->dev;
752 NEIGH_CACHE_STAT_INC(neigh->tbl, destroys);
755 pr_warn("Destroying alive neighbour %p\n", neigh);
760 if (neigh_del_timer(neigh))
761 pr_warn("Impossible event\n");
763 write_lock_bh(&neigh->lock);
764 __skb_queue_purge(&neigh->arp_queue);
765 write_unlock_bh(&neigh->lock);
766 neigh->arp_queue_len_bytes = 0;
768 if (dev->netdev_ops->ndo_neigh_destroy)
769 dev->netdev_ops->ndo_neigh_destroy(dev, neigh);
772 neigh_parms_put(neigh->parms);
774 neigh_dbg(2, "neigh %p is destroyed\n", neigh);
776 atomic_dec(&neigh->tbl->entries);
777 kfree_rcu(neigh, rcu);
779 EXPORT_SYMBOL(neigh_destroy);
781 /* Neighbour state is suspicious;
784 Called with write_locked neigh.
786 static void neigh_suspect(struct neighbour *neigh)
788 neigh_dbg(2, "neigh %p is suspected\n", neigh);
790 neigh->output = neigh->ops->output;
793 /* Neighbour state is OK;
796 Called with write_locked neigh.
798 static void neigh_connect(struct neighbour *neigh)
800 neigh_dbg(2, "neigh %p is connected\n", neigh);
802 neigh->output = neigh->ops->connected_output;
805 static void neigh_periodic_work(struct work_struct *work)
807 struct neigh_table *tbl = container_of(work, struct neigh_table, gc_work.work);
809 struct neighbour __rcu **np;
811 struct neigh_hash_table *nht;
813 NEIGH_CACHE_STAT_INC(tbl, periodic_gc_runs);
815 write_lock_bh(&tbl->lock);
816 nht = rcu_dereference_protected(tbl->nht,
817 lockdep_is_held(&tbl->lock));
820 * periodically recompute ReachableTime from random function
823 if (time_after(jiffies, tbl->last_rand + 300 * HZ)) {
824 struct neigh_parms *p;
825 tbl->last_rand = jiffies;
826 list_for_each_entry(p, &tbl->parms_list, list)
828 neigh_rand_reach_time(NEIGH_VAR(p, BASE_REACHABLE_TIME));
831 if (atomic_read(&tbl->entries) < tbl->gc_thresh1)
834 for (i = 0 ; i < (1 << nht->hash_shift); i++) {
835 np = &nht->hash_buckets[i];
837 while ((n = rcu_dereference_protected(*np,
838 lockdep_is_held(&tbl->lock))) != NULL) {
841 write_lock(&n->lock);
843 state = n->nud_state;
844 if ((state & (NUD_PERMANENT | NUD_IN_TIMER)) ||
845 (n->flags & NTF_EXT_LEARNED)) {
846 write_unlock(&n->lock);
850 if (time_before(n->used, n->confirmed))
851 n->used = n->confirmed;
853 if (refcount_read(&n->refcnt) == 1 &&
854 (state == NUD_FAILED ||
855 time_after(jiffies, n->used + NEIGH_VAR(n->parms, GC_STALETIME)))) {
858 write_unlock(&n->lock);
859 neigh_cleanup_and_release(n);
862 write_unlock(&n->lock);
868 * It's fine to release lock here, even if hash table
869 * grows while we are preempted.
871 write_unlock_bh(&tbl->lock);
873 write_lock_bh(&tbl->lock);
874 nht = rcu_dereference_protected(tbl->nht,
875 lockdep_is_held(&tbl->lock));
878 /* Cycle through all hash buckets every BASE_REACHABLE_TIME/2 ticks.
879 * ARP entry timeouts range from 1/2 BASE_REACHABLE_TIME to 3/2
880 * BASE_REACHABLE_TIME.
882 queue_delayed_work(system_power_efficient_wq, &tbl->gc_work,
883 NEIGH_VAR(&tbl->parms, BASE_REACHABLE_TIME) >> 1);
884 write_unlock_bh(&tbl->lock);
887 static __inline__ int neigh_max_probes(struct neighbour *n)
889 struct neigh_parms *p = n->parms;
890 return NEIGH_VAR(p, UCAST_PROBES) + NEIGH_VAR(p, APP_PROBES) +
891 (n->nud_state & NUD_PROBE ? NEIGH_VAR(p, MCAST_REPROBES) :
892 NEIGH_VAR(p, MCAST_PROBES));
895 static void neigh_invalidate(struct neighbour *neigh)
896 __releases(neigh->lock)
897 __acquires(neigh->lock)
901 NEIGH_CACHE_STAT_INC(neigh->tbl, res_failed);
902 neigh_dbg(2, "neigh %p is failed\n", neigh);
903 neigh->updated = jiffies;
905 /* It is very thin place. report_unreachable is very complicated
906 routine. Particularly, it can hit the same neighbour entry!
908 So that, we try to be accurate and avoid dead loop. --ANK
910 while (neigh->nud_state == NUD_FAILED &&
911 (skb = __skb_dequeue(&neigh->arp_queue)) != NULL) {
912 write_unlock(&neigh->lock);
913 neigh->ops->error_report(neigh, skb);
914 write_lock(&neigh->lock);
916 __skb_queue_purge(&neigh->arp_queue);
917 neigh->arp_queue_len_bytes = 0;
920 static void neigh_probe(struct neighbour *neigh)
921 __releases(neigh->lock)
923 struct sk_buff *skb = skb_peek_tail(&neigh->arp_queue);
924 /* keep skb alive even if arp_queue overflows */
926 skb = skb_clone(skb, GFP_ATOMIC);
927 write_unlock(&neigh->lock);
928 if (neigh->ops->solicit)
929 neigh->ops->solicit(neigh, skb);
930 atomic_inc(&neigh->probes);
934 /* Called when a timer expires for a neighbour entry. */
936 static void neigh_timer_handler(struct timer_list *t)
938 unsigned long now, next;
939 struct neighbour *neigh = from_timer(neigh, t, timer);
943 write_lock(&neigh->lock);
945 state = neigh->nud_state;
949 if (!(state & NUD_IN_TIMER))
952 if (state & NUD_REACHABLE) {
953 if (time_before_eq(now,
954 neigh->confirmed + neigh->parms->reachable_time)) {
955 neigh_dbg(2, "neigh %p is still alive\n", neigh);
956 next = neigh->confirmed + neigh->parms->reachable_time;
957 } else if (time_before_eq(now,
959 NEIGH_VAR(neigh->parms, DELAY_PROBE_TIME))) {
960 neigh_dbg(2, "neigh %p is delayed\n", neigh);
961 neigh->nud_state = NUD_DELAY;
962 neigh->updated = jiffies;
963 neigh_suspect(neigh);
964 next = now + NEIGH_VAR(neigh->parms, DELAY_PROBE_TIME);
966 neigh_dbg(2, "neigh %p is suspected\n", neigh);
967 neigh->nud_state = NUD_STALE;
968 neigh->updated = jiffies;
969 neigh_suspect(neigh);
972 } else if (state & NUD_DELAY) {
973 if (time_before_eq(now,
975 NEIGH_VAR(neigh->parms, DELAY_PROBE_TIME))) {
976 neigh_dbg(2, "neigh %p is now reachable\n", neigh);
977 neigh->nud_state = NUD_REACHABLE;
978 neigh->updated = jiffies;
979 neigh_connect(neigh);
981 next = neigh->confirmed + neigh->parms->reachable_time;
983 neigh_dbg(2, "neigh %p is probed\n", neigh);
984 neigh->nud_state = NUD_PROBE;
985 neigh->updated = jiffies;
986 atomic_set(&neigh->probes, 0);
988 next = now + NEIGH_VAR(neigh->parms, RETRANS_TIME);
991 /* NUD_PROBE|NUD_INCOMPLETE */
992 next = now + NEIGH_VAR(neigh->parms, RETRANS_TIME);
995 if ((neigh->nud_state & (NUD_INCOMPLETE | NUD_PROBE)) &&
996 atomic_read(&neigh->probes) >= neigh_max_probes(neigh)) {
997 neigh->nud_state = NUD_FAILED;
999 neigh_invalidate(neigh);
1003 if (neigh->nud_state & NUD_IN_TIMER) {
1004 if (time_before(next, jiffies + HZ/2))
1005 next = jiffies + HZ/2;
1006 if (!mod_timer(&neigh->timer, next))
1009 if (neigh->nud_state & (NUD_INCOMPLETE | NUD_PROBE)) {
1013 write_unlock(&neigh->lock);
1017 neigh_update_notify(neigh, 0);
1019 neigh_release(neigh);
1022 int __neigh_event_send(struct neighbour *neigh, struct sk_buff *skb)
1025 bool immediate_probe = false;
1027 write_lock_bh(&neigh->lock);
1030 if (neigh->nud_state & (NUD_CONNECTED | NUD_DELAY | NUD_PROBE))
1035 if (!(neigh->nud_state & (NUD_STALE | NUD_INCOMPLETE))) {
1036 if (NEIGH_VAR(neigh->parms, MCAST_PROBES) +
1037 NEIGH_VAR(neigh->parms, APP_PROBES)) {
1038 unsigned long next, now = jiffies;
1040 atomic_set(&neigh->probes,
1041 NEIGH_VAR(neigh->parms, UCAST_PROBES));
1042 neigh->nud_state = NUD_INCOMPLETE;
1043 neigh->updated = now;
1044 next = now + max(NEIGH_VAR(neigh->parms, RETRANS_TIME),
1046 neigh_add_timer(neigh, next);
1047 immediate_probe = true;
1049 neigh->nud_state = NUD_FAILED;
1050 neigh->updated = jiffies;
1051 write_unlock_bh(&neigh->lock);
1056 } else if (neigh->nud_state & NUD_STALE) {
1057 neigh_dbg(2, "neigh %p is delayed\n", neigh);
1058 neigh->nud_state = NUD_DELAY;
1059 neigh->updated = jiffies;
1060 neigh_add_timer(neigh, jiffies +
1061 NEIGH_VAR(neigh->parms, DELAY_PROBE_TIME));
1064 if (neigh->nud_state == NUD_INCOMPLETE) {
1066 while (neigh->arp_queue_len_bytes + skb->truesize >
1067 NEIGH_VAR(neigh->parms, QUEUE_LEN_BYTES)) {
1068 struct sk_buff *buff;
1070 buff = __skb_dequeue(&neigh->arp_queue);
1073 neigh->arp_queue_len_bytes -= buff->truesize;
1075 NEIGH_CACHE_STAT_INC(neigh->tbl, unres_discards);
1078 __skb_queue_tail(&neigh->arp_queue, skb);
1079 neigh->arp_queue_len_bytes += skb->truesize;
1084 if (immediate_probe)
1087 write_unlock(&neigh->lock);
1092 if (neigh->nud_state & NUD_STALE)
1094 write_unlock_bh(&neigh->lock);
1098 EXPORT_SYMBOL(__neigh_event_send);
1100 static void neigh_update_hhs(struct neighbour *neigh)
1102 struct hh_cache *hh;
1103 void (*update)(struct hh_cache*, const struct net_device*, const unsigned char *)
1106 if (neigh->dev->header_ops)
1107 update = neigh->dev->header_ops->cache_update;
1112 write_seqlock_bh(&hh->hh_lock);
1113 update(hh, neigh->dev, neigh->ha);
1114 write_sequnlock_bh(&hh->hh_lock);
1121 /* Generic update routine.
1122 -- lladdr is new lladdr or NULL, if it is not supplied.
1123 -- new is new state.
1125 NEIGH_UPDATE_F_OVERRIDE allows to override existing lladdr,
1127 NEIGH_UPDATE_F_WEAK_OVERRIDE will suspect existing "connected"
1128 lladdr instead of overriding it
1130 NEIGH_UPDATE_F_ADMIN means that the change is administrative.
1132 NEIGH_UPDATE_F_OVERRIDE_ISROUTER allows to override existing
1134 NEIGH_UPDATE_F_ISROUTER indicates if the neighbour is known as
1137 Caller MUST hold reference count on the entry.
1140 int neigh_update(struct neighbour *neigh, const u8 *lladdr, u8 new,
1141 u32 flags, u32 nlmsg_pid)
1146 struct net_device *dev;
1147 int update_isrouter = 0;
1149 write_lock_bh(&neigh->lock);
1152 old = neigh->nud_state;
1155 if (!(flags & NEIGH_UPDATE_F_ADMIN) &&
1156 (old & (NUD_NOARP | NUD_PERMANENT)))
1161 neigh_update_ext_learned(neigh, flags, ¬ify);
1163 if (!(new & NUD_VALID)) {
1164 neigh_del_timer(neigh);
1165 if (old & NUD_CONNECTED)
1166 neigh_suspect(neigh);
1167 neigh->nud_state = new;
1169 notify = old & NUD_VALID;
1170 if ((old & (NUD_INCOMPLETE | NUD_PROBE)) &&
1171 (new & NUD_FAILED)) {
1172 neigh_invalidate(neigh);
1178 /* Compare new lladdr with cached one */
1179 if (!dev->addr_len) {
1180 /* First case: device needs no address. */
1182 } else if (lladdr) {
1183 /* The second case: if something is already cached
1184 and a new address is proposed:
1186 - if they are different, check override flag
1188 if ((old & NUD_VALID) &&
1189 !memcmp(lladdr, neigh->ha, dev->addr_len))
1192 /* No address is supplied; if we know something,
1193 use it, otherwise discard the request.
1196 if (!(old & NUD_VALID))
1201 /* Update confirmed timestamp for neighbour entry after we
1202 * received ARP packet even if it doesn't change IP to MAC binding.
1204 if (new & NUD_CONNECTED)
1205 neigh->confirmed = jiffies;
1207 /* If entry was valid and address is not changed,
1208 do not change entry state, if new one is STALE.
1211 update_isrouter = flags & NEIGH_UPDATE_F_OVERRIDE_ISROUTER;
1212 if (old & NUD_VALID) {
1213 if (lladdr != neigh->ha && !(flags & NEIGH_UPDATE_F_OVERRIDE)) {
1214 update_isrouter = 0;
1215 if ((flags & NEIGH_UPDATE_F_WEAK_OVERRIDE) &&
1216 (old & NUD_CONNECTED)) {
1222 if (lladdr == neigh->ha && new == NUD_STALE &&
1223 !(flags & NEIGH_UPDATE_F_ADMIN))
1228 /* Update timestamp only once we know we will make a change to the
1229 * neighbour entry. Otherwise we risk to move the locktime window with
1230 * noop updates and ignore relevant ARP updates.
1232 if (new != old || lladdr != neigh->ha)
1233 neigh->updated = jiffies;
1236 neigh_del_timer(neigh);
1237 if (new & NUD_PROBE)
1238 atomic_set(&neigh->probes, 0);
1239 if (new & NUD_IN_TIMER)
1240 neigh_add_timer(neigh, (jiffies +
1241 ((new & NUD_REACHABLE) ?
1242 neigh->parms->reachable_time :
1244 neigh->nud_state = new;
1248 if (lladdr != neigh->ha) {
1249 write_seqlock(&neigh->ha_lock);
1250 memcpy(&neigh->ha, lladdr, dev->addr_len);
1251 write_sequnlock(&neigh->ha_lock);
1252 neigh_update_hhs(neigh);
1253 if (!(new & NUD_CONNECTED))
1254 neigh->confirmed = jiffies -
1255 (NEIGH_VAR(neigh->parms, BASE_REACHABLE_TIME) << 1);
1260 if (new & NUD_CONNECTED)
1261 neigh_connect(neigh);
1263 neigh_suspect(neigh);
1264 if (!(old & NUD_VALID)) {
1265 struct sk_buff *skb;
1267 /* Again: avoid dead loop if something went wrong */
1269 while (neigh->nud_state & NUD_VALID &&
1270 (skb = __skb_dequeue(&neigh->arp_queue)) != NULL) {
1271 struct dst_entry *dst = skb_dst(skb);
1272 struct neighbour *n2, *n1 = neigh;
1273 write_unlock_bh(&neigh->lock);
1277 /* Why not just use 'neigh' as-is? The problem is that
1278 * things such as shaper, eql, and sch_teql can end up
1279 * using alternative, different, neigh objects to output
1280 * the packet in the output path. So what we need to do
1281 * here is re-lookup the top-level neigh in the path so
1282 * we can reinject the packet there.
1286 n2 = dst_neigh_lookup_skb(dst, skb);
1290 n1->output(n1, skb);
1295 write_lock_bh(&neigh->lock);
1297 __skb_queue_purge(&neigh->arp_queue);
1298 neigh->arp_queue_len_bytes = 0;
1301 if (update_isrouter)
1302 neigh_update_is_router(neigh, flags, ¬ify);
1303 write_unlock_bh(&neigh->lock);
1306 neigh_update_notify(neigh, nlmsg_pid);
1310 EXPORT_SYMBOL(neigh_update);
1312 /* Update the neigh to listen temporarily for probe responses, even if it is
1313 * in a NUD_FAILED state. The caller has to hold neigh->lock for writing.
1315 void __neigh_set_probe_once(struct neighbour *neigh)
1319 neigh->updated = jiffies;
1320 if (!(neigh->nud_state & NUD_FAILED))
1322 neigh->nud_state = NUD_INCOMPLETE;
1323 atomic_set(&neigh->probes, neigh_max_probes(neigh));
1324 neigh_add_timer(neigh,
1325 jiffies + NEIGH_VAR(neigh->parms, RETRANS_TIME));
1327 EXPORT_SYMBOL(__neigh_set_probe_once);
1329 struct neighbour *neigh_event_ns(struct neigh_table *tbl,
1330 u8 *lladdr, void *saddr,
1331 struct net_device *dev)
1333 struct neighbour *neigh = __neigh_lookup(tbl, saddr, dev,
1334 lladdr || !dev->addr_len);
1336 neigh_update(neigh, lladdr, NUD_STALE,
1337 NEIGH_UPDATE_F_OVERRIDE, 0);
1340 EXPORT_SYMBOL(neigh_event_ns);
1342 /* called with read_lock_bh(&n->lock); */
1343 static void neigh_hh_init(struct neighbour *n)
1345 struct net_device *dev = n->dev;
1346 __be16 prot = n->tbl->protocol;
1347 struct hh_cache *hh = &n->hh;
1349 write_lock_bh(&n->lock);
1351 /* Only one thread can come in here and initialize the
1355 dev->header_ops->cache(n, hh, prot);
1357 write_unlock_bh(&n->lock);
1360 /* Slow and careful. */
1362 int neigh_resolve_output(struct neighbour *neigh, struct sk_buff *skb)
1366 if (!neigh_event_send(neigh, skb)) {
1368 struct net_device *dev = neigh->dev;
1371 if (dev->header_ops->cache && !neigh->hh.hh_len)
1372 neigh_hh_init(neigh);
1375 __skb_pull(skb, skb_network_offset(skb));
1376 seq = read_seqbegin(&neigh->ha_lock);
1377 err = dev_hard_header(skb, dev, ntohs(skb->protocol),
1378 neigh->ha, NULL, skb->len);
1379 } while (read_seqretry(&neigh->ha_lock, seq));
1382 rc = dev_queue_xmit(skb);
1393 EXPORT_SYMBOL(neigh_resolve_output);
1395 /* As fast as possible without hh cache */
1397 int neigh_connected_output(struct neighbour *neigh, struct sk_buff *skb)
1399 struct net_device *dev = neigh->dev;
1404 __skb_pull(skb, skb_network_offset(skb));
1405 seq = read_seqbegin(&neigh->ha_lock);
1406 err = dev_hard_header(skb, dev, ntohs(skb->protocol),
1407 neigh->ha, NULL, skb->len);
1408 } while (read_seqretry(&neigh->ha_lock, seq));
1411 err = dev_queue_xmit(skb);
1418 EXPORT_SYMBOL(neigh_connected_output);
1420 int neigh_direct_output(struct neighbour *neigh, struct sk_buff *skb)
1422 return dev_queue_xmit(skb);
1424 EXPORT_SYMBOL(neigh_direct_output);
1426 static void neigh_proxy_process(struct timer_list *t)
1428 struct neigh_table *tbl = from_timer(tbl, t, proxy_timer);
1429 long sched_next = 0;
1430 unsigned long now = jiffies;
1431 struct sk_buff *skb, *n;
1433 spin_lock(&tbl->proxy_queue.lock);
1435 skb_queue_walk_safe(&tbl->proxy_queue, skb, n) {
1436 long tdif = NEIGH_CB(skb)->sched_next - now;
1439 struct net_device *dev = skb->dev;
1441 __skb_unlink(skb, &tbl->proxy_queue);
1442 if (tbl->proxy_redo && netif_running(dev)) {
1444 tbl->proxy_redo(skb);
1451 } else if (!sched_next || tdif < sched_next)
1454 del_timer(&tbl->proxy_timer);
1456 mod_timer(&tbl->proxy_timer, jiffies + sched_next);
1457 spin_unlock(&tbl->proxy_queue.lock);
1460 void pneigh_enqueue(struct neigh_table *tbl, struct neigh_parms *p,
1461 struct sk_buff *skb)
1463 unsigned long now = jiffies;
1465 unsigned long sched_next = now + (prandom_u32() %
1466 NEIGH_VAR(p, PROXY_DELAY));
1468 if (tbl->proxy_queue.qlen > NEIGH_VAR(p, PROXY_QLEN)) {
1473 NEIGH_CB(skb)->sched_next = sched_next;
1474 NEIGH_CB(skb)->flags |= LOCALLY_ENQUEUED;
1476 spin_lock(&tbl->proxy_queue.lock);
1477 if (del_timer(&tbl->proxy_timer)) {
1478 if (time_before(tbl->proxy_timer.expires, sched_next))
1479 sched_next = tbl->proxy_timer.expires;
1483 __skb_queue_tail(&tbl->proxy_queue, skb);
1484 mod_timer(&tbl->proxy_timer, sched_next);
1485 spin_unlock(&tbl->proxy_queue.lock);
1487 EXPORT_SYMBOL(pneigh_enqueue);
1489 static inline struct neigh_parms *lookup_neigh_parms(struct neigh_table *tbl,
1490 struct net *net, int ifindex)
1492 struct neigh_parms *p;
1494 list_for_each_entry(p, &tbl->parms_list, list) {
1495 if ((p->dev && p->dev->ifindex == ifindex && net_eq(neigh_parms_net(p), net)) ||
1496 (!p->dev && !ifindex && net_eq(net, &init_net)))
1503 struct neigh_parms *neigh_parms_alloc(struct net_device *dev,
1504 struct neigh_table *tbl)
1506 struct neigh_parms *p;
1507 struct net *net = dev_net(dev);
1508 const struct net_device_ops *ops = dev->netdev_ops;
1510 p = kmemdup(&tbl->parms, sizeof(*p), GFP_KERNEL);
1513 refcount_set(&p->refcnt, 1);
1515 neigh_rand_reach_time(NEIGH_VAR(p, BASE_REACHABLE_TIME));
1518 write_pnet(&p->net, net);
1519 p->sysctl_table = NULL;
1521 if (ops->ndo_neigh_setup && ops->ndo_neigh_setup(dev, p)) {
1527 write_lock_bh(&tbl->lock);
1528 list_add(&p->list, &tbl->parms.list);
1529 write_unlock_bh(&tbl->lock);
1531 neigh_parms_data_state_cleanall(p);
1535 EXPORT_SYMBOL(neigh_parms_alloc);
1537 static void neigh_rcu_free_parms(struct rcu_head *head)
1539 struct neigh_parms *parms =
1540 container_of(head, struct neigh_parms, rcu_head);
1542 neigh_parms_put(parms);
1545 void neigh_parms_release(struct neigh_table *tbl, struct neigh_parms *parms)
1547 if (!parms || parms == &tbl->parms)
1549 write_lock_bh(&tbl->lock);
1550 list_del(&parms->list);
1552 write_unlock_bh(&tbl->lock);
1554 dev_put(parms->dev);
1555 call_rcu(&parms->rcu_head, neigh_rcu_free_parms);
1557 EXPORT_SYMBOL(neigh_parms_release);
1559 static void neigh_parms_destroy(struct neigh_parms *parms)
1564 static struct lock_class_key neigh_table_proxy_queue_class;
1566 static struct neigh_table *neigh_tables[NEIGH_NR_TABLES] __read_mostly;
1568 void neigh_table_init(int index, struct neigh_table *tbl)
1570 unsigned long now = jiffies;
1571 unsigned long phsize;
1573 INIT_LIST_HEAD(&tbl->parms_list);
1574 list_add(&tbl->parms.list, &tbl->parms_list);
1575 write_pnet(&tbl->parms.net, &init_net);
1576 refcount_set(&tbl->parms.refcnt, 1);
1577 tbl->parms.reachable_time =
1578 neigh_rand_reach_time(NEIGH_VAR(&tbl->parms, BASE_REACHABLE_TIME));
1580 tbl->stats = alloc_percpu(struct neigh_statistics);
1582 panic("cannot create neighbour cache statistics");
1584 #ifdef CONFIG_PROC_FS
1585 if (!proc_create_seq_data(tbl->id, 0, init_net.proc_net_stat,
1586 &neigh_stat_seq_ops, tbl))
1587 panic("cannot create neighbour proc dir entry");
1590 RCU_INIT_POINTER(tbl->nht, neigh_hash_alloc(3));
1592 phsize = (PNEIGH_HASHMASK + 1) * sizeof(struct pneigh_entry *);
1593 tbl->phash_buckets = kzalloc(phsize, GFP_KERNEL);
1595 if (!tbl->nht || !tbl->phash_buckets)
1596 panic("cannot allocate neighbour cache hashes");
1598 if (!tbl->entry_size)
1599 tbl->entry_size = ALIGN(offsetof(struct neighbour, primary_key) +
1600 tbl->key_len, NEIGH_PRIV_ALIGN);
1602 WARN_ON(tbl->entry_size % NEIGH_PRIV_ALIGN);
1604 rwlock_init(&tbl->lock);
1605 INIT_DEFERRABLE_WORK(&tbl->gc_work, neigh_periodic_work);
1606 queue_delayed_work(system_power_efficient_wq, &tbl->gc_work,
1607 tbl->parms.reachable_time);
1608 timer_setup(&tbl->proxy_timer, neigh_proxy_process, 0);
1609 skb_queue_head_init_class(&tbl->proxy_queue,
1610 &neigh_table_proxy_queue_class);
1612 tbl->last_flush = now;
1613 tbl->last_rand = now + tbl->parms.reachable_time * 20;
1615 neigh_tables[index] = tbl;
1617 EXPORT_SYMBOL(neigh_table_init);
1619 int neigh_table_clear(int index, struct neigh_table *tbl)
1621 neigh_tables[index] = NULL;
1622 /* It is not clean... Fix it to unload IPv6 module safely */
1623 cancel_delayed_work_sync(&tbl->gc_work);
1624 del_timer_sync(&tbl->proxy_timer);
1625 pneigh_queue_purge(&tbl->proxy_queue);
1626 neigh_ifdown(tbl, NULL);
1627 if (atomic_read(&tbl->entries))
1628 pr_crit("neighbour leakage\n");
1630 call_rcu(&rcu_dereference_protected(tbl->nht, 1)->rcu,
1631 neigh_hash_free_rcu);
1634 kfree(tbl->phash_buckets);
1635 tbl->phash_buckets = NULL;
1637 remove_proc_entry(tbl->id, init_net.proc_net_stat);
1639 free_percpu(tbl->stats);
1644 EXPORT_SYMBOL(neigh_table_clear);
1646 static struct neigh_table *neigh_find_table(int family)
1648 struct neigh_table *tbl = NULL;
1652 tbl = neigh_tables[NEIGH_ARP_TABLE];
1655 tbl = neigh_tables[NEIGH_ND_TABLE];
1658 tbl = neigh_tables[NEIGH_DN_TABLE];
1665 static int neigh_delete(struct sk_buff *skb, struct nlmsghdr *nlh,
1666 struct netlink_ext_ack *extack)
1668 struct net *net = sock_net(skb->sk);
1670 struct nlattr *dst_attr;
1671 struct neigh_table *tbl;
1672 struct neighbour *neigh;
1673 struct net_device *dev = NULL;
1677 if (nlmsg_len(nlh) < sizeof(*ndm))
1680 dst_attr = nlmsg_find_attr(nlh, sizeof(*ndm), NDA_DST);
1681 if (dst_attr == NULL)
1684 ndm = nlmsg_data(nlh);
1685 if (ndm->ndm_ifindex) {
1686 dev = __dev_get_by_index(net, ndm->ndm_ifindex);
1693 tbl = neigh_find_table(ndm->ndm_family);
1695 return -EAFNOSUPPORT;
1697 if (nla_len(dst_attr) < (int)tbl->key_len)
1700 if (ndm->ndm_flags & NTF_PROXY) {
1701 err = pneigh_delete(tbl, net, nla_data(dst_attr), dev);
1708 neigh = neigh_lookup(tbl, nla_data(dst_attr), dev);
1709 if (neigh == NULL) {
1714 err = neigh_update(neigh, NULL, NUD_FAILED,
1715 NEIGH_UPDATE_F_OVERRIDE |
1716 NEIGH_UPDATE_F_ADMIN,
1717 NETLINK_CB(skb).portid);
1718 write_lock_bh(&tbl->lock);
1719 neigh_release(neigh);
1720 neigh_remove_one(neigh, tbl);
1721 write_unlock_bh(&tbl->lock);
1727 static int neigh_add(struct sk_buff *skb, struct nlmsghdr *nlh,
1728 struct netlink_ext_ack *extack)
1730 int flags = NEIGH_UPDATE_F_ADMIN | NEIGH_UPDATE_F_OVERRIDE |
1731 NEIGH_UPDATE_F_OVERRIDE_ISROUTER;
1732 struct net *net = sock_net(skb->sk);
1734 struct nlattr *tb[NDA_MAX+1];
1735 struct neigh_table *tbl;
1736 struct net_device *dev = NULL;
1737 struct neighbour *neigh;
1742 err = nlmsg_parse(nlh, sizeof(*ndm), tb, NDA_MAX, NULL, extack);
1747 if (tb[NDA_DST] == NULL)
1750 ndm = nlmsg_data(nlh);
1751 if (ndm->ndm_ifindex) {
1752 dev = __dev_get_by_index(net, ndm->ndm_ifindex);
1758 if (tb[NDA_LLADDR] && nla_len(tb[NDA_LLADDR]) < dev->addr_len)
1762 tbl = neigh_find_table(ndm->ndm_family);
1764 return -EAFNOSUPPORT;
1766 if (nla_len(tb[NDA_DST]) < (int)tbl->key_len)
1768 dst = nla_data(tb[NDA_DST]);
1769 lladdr = tb[NDA_LLADDR] ? nla_data(tb[NDA_LLADDR]) : NULL;
1771 if (ndm->ndm_flags & NTF_PROXY) {
1772 struct pneigh_entry *pn;
1775 pn = pneigh_lookup(tbl, net, dst, dev, 1);
1777 pn->flags = ndm->ndm_flags;
1786 neigh = neigh_lookup(tbl, dst, dev);
1787 if (neigh == NULL) {
1788 if (!(nlh->nlmsg_flags & NLM_F_CREATE)) {
1793 neigh = __neigh_lookup_errno(tbl, dst, dev);
1794 if (IS_ERR(neigh)) {
1795 err = PTR_ERR(neigh);
1799 if (nlh->nlmsg_flags & NLM_F_EXCL) {
1801 neigh_release(neigh);
1805 if (!(nlh->nlmsg_flags & NLM_F_REPLACE))
1806 flags &= ~(NEIGH_UPDATE_F_OVERRIDE |
1807 NEIGH_UPDATE_F_OVERRIDE_ISROUTER);
1810 if (ndm->ndm_flags & NTF_EXT_LEARNED)
1811 flags |= NEIGH_UPDATE_F_EXT_LEARNED;
1813 if (ndm->ndm_flags & NTF_ROUTER)
1814 flags |= NEIGH_UPDATE_F_ISROUTER;
1816 if (ndm->ndm_flags & NTF_USE) {
1817 neigh_event_send(neigh, NULL);
1820 err = neigh_update(neigh, lladdr, ndm->ndm_state, flags,
1821 NETLINK_CB(skb).portid);
1822 neigh_release(neigh);
1828 static int neightbl_fill_parms(struct sk_buff *skb, struct neigh_parms *parms)
1830 struct nlattr *nest;
1832 nest = nla_nest_start(skb, NDTA_PARMS);
1837 nla_put_u32(skb, NDTPA_IFINDEX, parms->dev->ifindex)) ||
1838 nla_put_u32(skb, NDTPA_REFCNT, refcount_read(&parms->refcnt)) ||
1839 nla_put_u32(skb, NDTPA_QUEUE_LENBYTES,
1840 NEIGH_VAR(parms, QUEUE_LEN_BYTES)) ||
1841 /* approximative value for deprecated QUEUE_LEN (in packets) */
1842 nla_put_u32(skb, NDTPA_QUEUE_LEN,
1843 NEIGH_VAR(parms, QUEUE_LEN_BYTES) / SKB_TRUESIZE(ETH_FRAME_LEN)) ||
1844 nla_put_u32(skb, NDTPA_PROXY_QLEN, NEIGH_VAR(parms, PROXY_QLEN)) ||
1845 nla_put_u32(skb, NDTPA_APP_PROBES, NEIGH_VAR(parms, APP_PROBES)) ||
1846 nla_put_u32(skb, NDTPA_UCAST_PROBES,
1847 NEIGH_VAR(parms, UCAST_PROBES)) ||
1848 nla_put_u32(skb, NDTPA_MCAST_PROBES,
1849 NEIGH_VAR(parms, MCAST_PROBES)) ||
1850 nla_put_u32(skb, NDTPA_MCAST_REPROBES,
1851 NEIGH_VAR(parms, MCAST_REPROBES)) ||
1852 nla_put_msecs(skb, NDTPA_REACHABLE_TIME, parms->reachable_time,
1854 nla_put_msecs(skb, NDTPA_BASE_REACHABLE_TIME,
1855 NEIGH_VAR(parms, BASE_REACHABLE_TIME), NDTPA_PAD) ||
1856 nla_put_msecs(skb, NDTPA_GC_STALETIME,
1857 NEIGH_VAR(parms, GC_STALETIME), NDTPA_PAD) ||
1858 nla_put_msecs(skb, NDTPA_DELAY_PROBE_TIME,
1859 NEIGH_VAR(parms, DELAY_PROBE_TIME), NDTPA_PAD) ||
1860 nla_put_msecs(skb, NDTPA_RETRANS_TIME,
1861 NEIGH_VAR(parms, RETRANS_TIME), NDTPA_PAD) ||
1862 nla_put_msecs(skb, NDTPA_ANYCAST_DELAY,
1863 NEIGH_VAR(parms, ANYCAST_DELAY), NDTPA_PAD) ||
1864 nla_put_msecs(skb, NDTPA_PROXY_DELAY,
1865 NEIGH_VAR(parms, PROXY_DELAY), NDTPA_PAD) ||
1866 nla_put_msecs(skb, NDTPA_LOCKTIME,
1867 NEIGH_VAR(parms, LOCKTIME), NDTPA_PAD))
1868 goto nla_put_failure;
1869 return nla_nest_end(skb, nest);
1872 nla_nest_cancel(skb, nest);
1876 static int neightbl_fill_info(struct sk_buff *skb, struct neigh_table *tbl,
1877 u32 pid, u32 seq, int type, int flags)
1879 struct nlmsghdr *nlh;
1880 struct ndtmsg *ndtmsg;
1882 nlh = nlmsg_put(skb, pid, seq, type, sizeof(*ndtmsg), flags);
1886 ndtmsg = nlmsg_data(nlh);
1888 read_lock_bh(&tbl->lock);
1889 ndtmsg->ndtm_family = tbl->family;
1890 ndtmsg->ndtm_pad1 = 0;
1891 ndtmsg->ndtm_pad2 = 0;
1893 if (nla_put_string(skb, NDTA_NAME, tbl->id) ||
1894 nla_put_msecs(skb, NDTA_GC_INTERVAL, tbl->gc_interval, NDTA_PAD) ||
1895 nla_put_u32(skb, NDTA_THRESH1, tbl->gc_thresh1) ||
1896 nla_put_u32(skb, NDTA_THRESH2, tbl->gc_thresh2) ||
1897 nla_put_u32(skb, NDTA_THRESH3, tbl->gc_thresh3))
1898 goto nla_put_failure;
1900 unsigned long now = jiffies;
1901 unsigned int flush_delta = now - tbl->last_flush;
1902 unsigned int rand_delta = now - tbl->last_rand;
1903 struct neigh_hash_table *nht;
1904 struct ndt_config ndc = {
1905 .ndtc_key_len = tbl->key_len,
1906 .ndtc_entry_size = tbl->entry_size,
1907 .ndtc_entries = atomic_read(&tbl->entries),
1908 .ndtc_last_flush = jiffies_to_msecs(flush_delta),
1909 .ndtc_last_rand = jiffies_to_msecs(rand_delta),
1910 .ndtc_proxy_qlen = tbl->proxy_queue.qlen,
1914 nht = rcu_dereference_bh(tbl->nht);
1915 ndc.ndtc_hash_rnd = nht->hash_rnd[0];
1916 ndc.ndtc_hash_mask = ((1 << nht->hash_shift) - 1);
1917 rcu_read_unlock_bh();
1919 if (nla_put(skb, NDTA_CONFIG, sizeof(ndc), &ndc))
1920 goto nla_put_failure;
1925 struct ndt_stats ndst;
1927 memset(&ndst, 0, sizeof(ndst));
1929 for_each_possible_cpu(cpu) {
1930 struct neigh_statistics *st;
1932 st = per_cpu_ptr(tbl->stats, cpu);
1933 ndst.ndts_allocs += st->allocs;
1934 ndst.ndts_destroys += st->destroys;
1935 ndst.ndts_hash_grows += st->hash_grows;
1936 ndst.ndts_res_failed += st->res_failed;
1937 ndst.ndts_lookups += st->lookups;
1938 ndst.ndts_hits += st->hits;
1939 ndst.ndts_rcv_probes_mcast += st->rcv_probes_mcast;
1940 ndst.ndts_rcv_probes_ucast += st->rcv_probes_ucast;
1941 ndst.ndts_periodic_gc_runs += st->periodic_gc_runs;
1942 ndst.ndts_forced_gc_runs += st->forced_gc_runs;
1943 ndst.ndts_table_fulls += st->table_fulls;
1946 if (nla_put_64bit(skb, NDTA_STATS, sizeof(ndst), &ndst,
1948 goto nla_put_failure;
1951 BUG_ON(tbl->parms.dev);
1952 if (neightbl_fill_parms(skb, &tbl->parms) < 0)
1953 goto nla_put_failure;
1955 read_unlock_bh(&tbl->lock);
1956 nlmsg_end(skb, nlh);
1960 read_unlock_bh(&tbl->lock);
1961 nlmsg_cancel(skb, nlh);
1965 static int neightbl_fill_param_info(struct sk_buff *skb,
1966 struct neigh_table *tbl,
1967 struct neigh_parms *parms,
1968 u32 pid, u32 seq, int type,
1971 struct ndtmsg *ndtmsg;
1972 struct nlmsghdr *nlh;
1974 nlh = nlmsg_put(skb, pid, seq, type, sizeof(*ndtmsg), flags);
1978 ndtmsg = nlmsg_data(nlh);
1980 read_lock_bh(&tbl->lock);
1981 ndtmsg->ndtm_family = tbl->family;
1982 ndtmsg->ndtm_pad1 = 0;
1983 ndtmsg->ndtm_pad2 = 0;
1985 if (nla_put_string(skb, NDTA_NAME, tbl->id) < 0 ||
1986 neightbl_fill_parms(skb, parms) < 0)
1989 read_unlock_bh(&tbl->lock);
1990 nlmsg_end(skb, nlh);
1993 read_unlock_bh(&tbl->lock);
1994 nlmsg_cancel(skb, nlh);
1998 static const struct nla_policy nl_neightbl_policy[NDTA_MAX+1] = {
1999 [NDTA_NAME] = { .type = NLA_STRING },
2000 [NDTA_THRESH1] = { .type = NLA_U32 },
2001 [NDTA_THRESH2] = { .type = NLA_U32 },
2002 [NDTA_THRESH3] = { .type = NLA_U32 },
2003 [NDTA_GC_INTERVAL] = { .type = NLA_U64 },
2004 [NDTA_PARMS] = { .type = NLA_NESTED },
2007 static const struct nla_policy nl_ntbl_parm_policy[NDTPA_MAX+1] = {
2008 [NDTPA_IFINDEX] = { .type = NLA_U32 },
2009 [NDTPA_QUEUE_LEN] = { .type = NLA_U32 },
2010 [NDTPA_PROXY_QLEN] = { .type = NLA_U32 },
2011 [NDTPA_APP_PROBES] = { .type = NLA_U32 },
2012 [NDTPA_UCAST_PROBES] = { .type = NLA_U32 },
2013 [NDTPA_MCAST_PROBES] = { .type = NLA_U32 },
2014 [NDTPA_MCAST_REPROBES] = { .type = NLA_U32 },
2015 [NDTPA_BASE_REACHABLE_TIME] = { .type = NLA_U64 },
2016 [NDTPA_GC_STALETIME] = { .type = NLA_U64 },
2017 [NDTPA_DELAY_PROBE_TIME] = { .type = NLA_U64 },
2018 [NDTPA_RETRANS_TIME] = { .type = NLA_U64 },
2019 [NDTPA_ANYCAST_DELAY] = { .type = NLA_U64 },
2020 [NDTPA_PROXY_DELAY] = { .type = NLA_U64 },
2021 [NDTPA_LOCKTIME] = { .type = NLA_U64 },
2024 static int neightbl_set(struct sk_buff *skb, struct nlmsghdr *nlh,
2025 struct netlink_ext_ack *extack)
2027 struct net *net = sock_net(skb->sk);
2028 struct neigh_table *tbl;
2029 struct ndtmsg *ndtmsg;
2030 struct nlattr *tb[NDTA_MAX+1];
2034 err = nlmsg_parse(nlh, sizeof(*ndtmsg), tb, NDTA_MAX,
2035 nl_neightbl_policy, extack);
2039 if (tb[NDTA_NAME] == NULL) {
2044 ndtmsg = nlmsg_data(nlh);
2046 for (tidx = 0; tidx < NEIGH_NR_TABLES; tidx++) {
2047 tbl = neigh_tables[tidx];
2050 if (ndtmsg->ndtm_family && tbl->family != ndtmsg->ndtm_family)
2052 if (nla_strcmp(tb[NDTA_NAME], tbl->id) == 0) {
2062 * We acquire tbl->lock to be nice to the periodic timers and
2063 * make sure they always see a consistent set of values.
2065 write_lock_bh(&tbl->lock);
2067 if (tb[NDTA_PARMS]) {
2068 struct nlattr *tbp[NDTPA_MAX+1];
2069 struct neigh_parms *p;
2072 err = nla_parse_nested(tbp, NDTPA_MAX, tb[NDTA_PARMS],
2073 nl_ntbl_parm_policy, extack);
2075 goto errout_tbl_lock;
2077 if (tbp[NDTPA_IFINDEX])
2078 ifindex = nla_get_u32(tbp[NDTPA_IFINDEX]);
2080 p = lookup_neigh_parms(tbl, net, ifindex);
2083 goto errout_tbl_lock;
2086 for (i = 1; i <= NDTPA_MAX; i++) {
2091 case NDTPA_QUEUE_LEN:
2092 NEIGH_VAR_SET(p, QUEUE_LEN_BYTES,
2093 nla_get_u32(tbp[i]) *
2094 SKB_TRUESIZE(ETH_FRAME_LEN));
2096 case NDTPA_QUEUE_LENBYTES:
2097 NEIGH_VAR_SET(p, QUEUE_LEN_BYTES,
2098 nla_get_u32(tbp[i]));
2100 case NDTPA_PROXY_QLEN:
2101 NEIGH_VAR_SET(p, PROXY_QLEN,
2102 nla_get_u32(tbp[i]));
2104 case NDTPA_APP_PROBES:
2105 NEIGH_VAR_SET(p, APP_PROBES,
2106 nla_get_u32(tbp[i]));
2108 case NDTPA_UCAST_PROBES:
2109 NEIGH_VAR_SET(p, UCAST_PROBES,
2110 nla_get_u32(tbp[i]));
2112 case NDTPA_MCAST_PROBES:
2113 NEIGH_VAR_SET(p, MCAST_PROBES,
2114 nla_get_u32(tbp[i]));
2116 case NDTPA_MCAST_REPROBES:
2117 NEIGH_VAR_SET(p, MCAST_REPROBES,
2118 nla_get_u32(tbp[i]));
2120 case NDTPA_BASE_REACHABLE_TIME:
2121 NEIGH_VAR_SET(p, BASE_REACHABLE_TIME,
2122 nla_get_msecs(tbp[i]));
2123 /* update reachable_time as well, otherwise, the change will
2124 * only be effective after the next time neigh_periodic_work
2125 * decides to recompute it (can be multiple minutes)
2128 neigh_rand_reach_time(NEIGH_VAR(p, BASE_REACHABLE_TIME));
2130 case NDTPA_GC_STALETIME:
2131 NEIGH_VAR_SET(p, GC_STALETIME,
2132 nla_get_msecs(tbp[i]));
2134 case NDTPA_DELAY_PROBE_TIME:
2135 NEIGH_VAR_SET(p, DELAY_PROBE_TIME,
2136 nla_get_msecs(tbp[i]));
2137 call_netevent_notifiers(NETEVENT_DELAY_PROBE_TIME_UPDATE, p);
2139 case NDTPA_RETRANS_TIME:
2140 NEIGH_VAR_SET(p, RETRANS_TIME,
2141 nla_get_msecs(tbp[i]));
2143 case NDTPA_ANYCAST_DELAY:
2144 NEIGH_VAR_SET(p, ANYCAST_DELAY,
2145 nla_get_msecs(tbp[i]));
2147 case NDTPA_PROXY_DELAY:
2148 NEIGH_VAR_SET(p, PROXY_DELAY,
2149 nla_get_msecs(tbp[i]));
2151 case NDTPA_LOCKTIME:
2152 NEIGH_VAR_SET(p, LOCKTIME,
2153 nla_get_msecs(tbp[i]));
2160 if ((tb[NDTA_THRESH1] || tb[NDTA_THRESH2] ||
2161 tb[NDTA_THRESH3] || tb[NDTA_GC_INTERVAL]) &&
2162 !net_eq(net, &init_net))
2163 goto errout_tbl_lock;
2165 if (tb[NDTA_THRESH1])
2166 tbl->gc_thresh1 = nla_get_u32(tb[NDTA_THRESH1]);
2168 if (tb[NDTA_THRESH2])
2169 tbl->gc_thresh2 = nla_get_u32(tb[NDTA_THRESH2]);
2171 if (tb[NDTA_THRESH3])
2172 tbl->gc_thresh3 = nla_get_u32(tb[NDTA_THRESH3]);
2174 if (tb[NDTA_GC_INTERVAL])
2175 tbl->gc_interval = nla_get_msecs(tb[NDTA_GC_INTERVAL]);
2180 write_unlock_bh(&tbl->lock);
2185 static int neightbl_valid_dump_info(const struct nlmsghdr *nlh,
2186 struct netlink_ext_ack *extack)
2188 struct ndtmsg *ndtm;
2190 if (nlh->nlmsg_len < nlmsg_msg_size(sizeof(*ndtm))) {
2191 NL_SET_ERR_MSG(extack, "Invalid header for neighbor table dump request");
2195 ndtm = nlmsg_data(nlh);
2196 if (ndtm->ndtm_pad1 || ndtm->ndtm_pad2) {
2197 NL_SET_ERR_MSG(extack, "Invalid values in header for neighbor table dump request");
2201 if (nlmsg_attrlen(nlh, sizeof(*ndtm))) {
2202 NL_SET_ERR_MSG(extack, "Invalid data after header in neighbor table dump request");
2209 static int neightbl_dump_info(struct sk_buff *skb, struct netlink_callback *cb)
2211 const struct nlmsghdr *nlh = cb->nlh;
2212 struct net *net = sock_net(skb->sk);
2213 int family, tidx, nidx = 0;
2214 int tbl_skip = cb->args[0];
2215 int neigh_skip = cb->args[1];
2216 struct neigh_table *tbl;
2218 if (cb->strict_check) {
2219 int err = neightbl_valid_dump_info(nlh, cb->extack);
2225 family = ((struct rtgenmsg *)nlmsg_data(nlh))->rtgen_family;
2227 for (tidx = 0; tidx < NEIGH_NR_TABLES; tidx++) {
2228 struct neigh_parms *p;
2230 tbl = neigh_tables[tidx];
2234 if (tidx < tbl_skip || (family && tbl->family != family))
2237 if (neightbl_fill_info(skb, tbl, NETLINK_CB(cb->skb).portid,
2238 nlh->nlmsg_seq, RTM_NEWNEIGHTBL,
2243 p = list_next_entry(&tbl->parms, list);
2244 list_for_each_entry_from(p, &tbl->parms_list, list) {
2245 if (!net_eq(neigh_parms_net(p), net))
2248 if (nidx < neigh_skip)
2251 if (neightbl_fill_param_info(skb, tbl, p,
2252 NETLINK_CB(cb->skb).portid,
2270 static int neigh_fill_info(struct sk_buff *skb, struct neighbour *neigh,
2271 u32 pid, u32 seq, int type, unsigned int flags)
2273 unsigned long now = jiffies;
2274 struct nda_cacheinfo ci;
2275 struct nlmsghdr *nlh;
2278 nlh = nlmsg_put(skb, pid, seq, type, sizeof(*ndm), flags);
2282 ndm = nlmsg_data(nlh);
2283 ndm->ndm_family = neigh->ops->family;
2286 ndm->ndm_flags = neigh->flags;
2287 ndm->ndm_type = neigh->type;
2288 ndm->ndm_ifindex = neigh->dev->ifindex;
2290 if (nla_put(skb, NDA_DST, neigh->tbl->key_len, neigh->primary_key))
2291 goto nla_put_failure;
2293 read_lock_bh(&neigh->lock);
2294 ndm->ndm_state = neigh->nud_state;
2295 if (neigh->nud_state & NUD_VALID) {
2296 char haddr[MAX_ADDR_LEN];
2298 neigh_ha_snapshot(haddr, neigh, neigh->dev);
2299 if (nla_put(skb, NDA_LLADDR, neigh->dev->addr_len, haddr) < 0) {
2300 read_unlock_bh(&neigh->lock);
2301 goto nla_put_failure;
2305 ci.ndm_used = jiffies_to_clock_t(now - neigh->used);
2306 ci.ndm_confirmed = jiffies_to_clock_t(now - neigh->confirmed);
2307 ci.ndm_updated = jiffies_to_clock_t(now - neigh->updated);
2308 ci.ndm_refcnt = refcount_read(&neigh->refcnt) - 1;
2309 read_unlock_bh(&neigh->lock);
2311 if (nla_put_u32(skb, NDA_PROBES, atomic_read(&neigh->probes)) ||
2312 nla_put(skb, NDA_CACHEINFO, sizeof(ci), &ci))
2313 goto nla_put_failure;
2315 nlmsg_end(skb, nlh);
2319 nlmsg_cancel(skb, nlh);
2323 static int pneigh_fill_info(struct sk_buff *skb, struct pneigh_entry *pn,
2324 u32 pid, u32 seq, int type, unsigned int flags,
2325 struct neigh_table *tbl)
2327 struct nlmsghdr *nlh;
2330 nlh = nlmsg_put(skb, pid, seq, type, sizeof(*ndm), flags);
2334 ndm = nlmsg_data(nlh);
2335 ndm->ndm_family = tbl->family;
2338 ndm->ndm_flags = pn->flags | NTF_PROXY;
2339 ndm->ndm_type = RTN_UNICAST;
2340 ndm->ndm_ifindex = pn->dev ? pn->dev->ifindex : 0;
2341 ndm->ndm_state = NUD_NONE;
2343 if (nla_put(skb, NDA_DST, tbl->key_len, pn->key))
2344 goto nla_put_failure;
2346 nlmsg_end(skb, nlh);
2350 nlmsg_cancel(skb, nlh);
2354 static void neigh_update_notify(struct neighbour *neigh, u32 nlmsg_pid)
2356 call_netevent_notifiers(NETEVENT_NEIGH_UPDATE, neigh);
2357 __neigh_notify(neigh, RTM_NEWNEIGH, 0, nlmsg_pid);
2360 static bool neigh_master_filtered(struct net_device *dev, int master_idx)
2362 struct net_device *master;
2367 master = dev ? netdev_master_upper_dev_get(dev) : NULL;
2368 if (!master || master->ifindex != master_idx)
2374 static bool neigh_ifindex_filtered(struct net_device *dev, int filter_idx)
2376 if (filter_idx && (!dev || dev->ifindex != filter_idx))
2382 struct neigh_dump_filter {
2387 static int neigh_dump_table(struct neigh_table *tbl, struct sk_buff *skb,
2388 struct netlink_callback *cb,
2389 struct neigh_dump_filter *filter)
2391 struct net *net = sock_net(skb->sk);
2392 struct neighbour *n;
2393 int rc, h, s_h = cb->args[1];
2394 int idx, s_idx = idx = cb->args[2];
2395 struct neigh_hash_table *nht;
2396 unsigned int flags = NLM_F_MULTI;
2398 if (filter->dev_idx || filter->master_idx)
2399 flags |= NLM_F_DUMP_FILTERED;
2402 nht = rcu_dereference_bh(tbl->nht);
2404 for (h = s_h; h < (1 << nht->hash_shift); h++) {
2407 for (n = rcu_dereference_bh(nht->hash_buckets[h]), idx = 0;
2409 n = rcu_dereference_bh(n->next)) {
2410 if (idx < s_idx || !net_eq(dev_net(n->dev), net))
2412 if (neigh_ifindex_filtered(n->dev, filter->dev_idx) ||
2413 neigh_master_filtered(n->dev, filter->master_idx))
2415 if (neigh_fill_info(skb, n, NETLINK_CB(cb->skb).portid,
2428 rcu_read_unlock_bh();
2434 static int pneigh_dump_table(struct neigh_table *tbl, struct sk_buff *skb,
2435 struct netlink_callback *cb,
2436 struct neigh_dump_filter *filter)
2438 struct pneigh_entry *n;
2439 struct net *net = sock_net(skb->sk);
2440 int rc, h, s_h = cb->args[3];
2441 int idx, s_idx = idx = cb->args[4];
2442 unsigned int flags = NLM_F_MULTI;
2444 if (filter->dev_idx || filter->master_idx)
2445 flags |= NLM_F_DUMP_FILTERED;
2447 read_lock_bh(&tbl->lock);
2449 for (h = s_h; h <= PNEIGH_HASHMASK; h++) {
2452 for (n = tbl->phash_buckets[h], idx = 0; n; n = n->next) {
2453 if (idx < s_idx || pneigh_net(n) != net)
2455 if (neigh_ifindex_filtered(n->dev, filter->dev_idx) ||
2456 neigh_master_filtered(n->dev, filter->master_idx))
2458 if (pneigh_fill_info(skb, n, NETLINK_CB(cb->skb).portid,
2460 RTM_NEWNEIGH, flags, tbl) < 0) {
2461 read_unlock_bh(&tbl->lock);
2470 read_unlock_bh(&tbl->lock);
2479 static int neigh_valid_dump_req(const struct nlmsghdr *nlh,
2481 struct neigh_dump_filter *filter,
2482 struct netlink_ext_ack *extack)
2484 struct nlattr *tb[NDA_MAX + 1];
2490 if (nlh->nlmsg_len < nlmsg_msg_size(sizeof(*ndm))) {
2491 NL_SET_ERR_MSG(extack, "Invalid header for neighbor dump request");
2495 ndm = nlmsg_data(nlh);
2496 if (ndm->ndm_pad1 || ndm->ndm_pad2 || ndm->ndm_ifindex ||
2497 ndm->ndm_state || ndm->ndm_flags || ndm->ndm_type) {
2498 NL_SET_ERR_MSG(extack, "Invalid values in header for neighbor dump request");
2502 err = nlmsg_parse_strict(nlh, sizeof(struct ndmsg), tb, NDA_MAX,
2505 err = nlmsg_parse(nlh, sizeof(struct ndmsg), tb, NDA_MAX,
2511 for (i = 0; i <= NDA_MAX; ++i) {
2515 /* all new attributes should require strict_check */
2518 if (nla_len(tb[i]) != sizeof(u32)) {
2519 NL_SET_ERR_MSG(extack, "Invalid IFINDEX attribute in neighbor dump request");
2522 filter->dev_idx = nla_get_u32(tb[i]);
2525 if (nla_len(tb[i]) != sizeof(u32)) {
2526 NL_SET_ERR_MSG(extack, "Invalid MASTER attribute in neighbor dump request");
2529 filter->master_idx = nla_get_u32(tb[i]);
2533 NL_SET_ERR_MSG(extack, "Unsupported attribute in neighbor dump request");
2542 static int neigh_dump_info(struct sk_buff *skb, struct netlink_callback *cb)
2544 const struct nlmsghdr *nlh = cb->nlh;
2545 struct neigh_dump_filter filter = {};
2546 struct neigh_table *tbl;
2551 family = ((struct rtgenmsg *)nlmsg_data(nlh))->rtgen_family;
2553 /* check for full ndmsg structure presence, family member is
2554 * the same for both structures
2556 if (nlmsg_len(nlh) >= sizeof(struct ndmsg) &&
2557 ((struct ndmsg *)nlmsg_data(nlh))->ndm_flags == NTF_PROXY)
2560 err = neigh_valid_dump_req(nlh, cb->strict_check, &filter, cb->extack);
2561 if (err < 0 && cb->strict_check)
2566 for (t = 0; t < NEIGH_NR_TABLES; t++) {
2567 tbl = neigh_tables[t];
2571 if (t < s_t || (family && tbl->family != family))
2574 memset(&cb->args[1], 0, sizeof(cb->args) -
2575 sizeof(cb->args[0]));
2577 err = pneigh_dump_table(tbl, skb, cb, &filter);
2579 err = neigh_dump_table(tbl, skb, cb, &filter);
2588 void neigh_for_each(struct neigh_table *tbl, void (*cb)(struct neighbour *, void *), void *cookie)
2591 struct neigh_hash_table *nht;
2594 nht = rcu_dereference_bh(tbl->nht);
2596 read_lock(&tbl->lock); /* avoid resizes */
2597 for (chain = 0; chain < (1 << nht->hash_shift); chain++) {
2598 struct neighbour *n;
2600 for (n = rcu_dereference_bh(nht->hash_buckets[chain]);
2602 n = rcu_dereference_bh(n->next))
2605 read_unlock(&tbl->lock);
2606 rcu_read_unlock_bh();
2608 EXPORT_SYMBOL(neigh_for_each);
2610 /* The tbl->lock must be held as a writer and BH disabled. */
2611 void __neigh_for_each_release(struct neigh_table *tbl,
2612 int (*cb)(struct neighbour *))
2615 struct neigh_hash_table *nht;
2617 nht = rcu_dereference_protected(tbl->nht,
2618 lockdep_is_held(&tbl->lock));
2619 for (chain = 0; chain < (1 << nht->hash_shift); chain++) {
2620 struct neighbour *n;
2621 struct neighbour __rcu **np;
2623 np = &nht->hash_buckets[chain];
2624 while ((n = rcu_dereference_protected(*np,
2625 lockdep_is_held(&tbl->lock))) != NULL) {
2628 write_lock(&n->lock);
2631 rcu_assign_pointer(*np,
2632 rcu_dereference_protected(n->next,
2633 lockdep_is_held(&tbl->lock)));
2637 write_unlock(&n->lock);
2639 neigh_cleanup_and_release(n);
2643 EXPORT_SYMBOL(__neigh_for_each_release);
2645 int neigh_xmit(int index, struct net_device *dev,
2646 const void *addr, struct sk_buff *skb)
2648 int err = -EAFNOSUPPORT;
2649 if (likely(index < NEIGH_NR_TABLES)) {
2650 struct neigh_table *tbl;
2651 struct neighbour *neigh;
2653 tbl = neigh_tables[index];
2657 neigh = __neigh_lookup_noref(tbl, addr, dev);
2659 neigh = __neigh_create(tbl, addr, dev, false);
2660 err = PTR_ERR(neigh);
2661 if (IS_ERR(neigh)) {
2662 rcu_read_unlock_bh();
2665 err = neigh->output(neigh, skb);
2666 rcu_read_unlock_bh();
2668 else if (index == NEIGH_LINK_TABLE) {
2669 err = dev_hard_header(skb, dev, ntohs(skb->protocol),
2670 addr, NULL, skb->len);
2673 err = dev_queue_xmit(skb);
2681 EXPORT_SYMBOL(neigh_xmit);
2683 #ifdef CONFIG_PROC_FS
2685 static struct neighbour *neigh_get_first(struct seq_file *seq)
2687 struct neigh_seq_state *state = seq->private;
2688 struct net *net = seq_file_net(seq);
2689 struct neigh_hash_table *nht = state->nht;
2690 struct neighbour *n = NULL;
2691 int bucket = state->bucket;
2693 state->flags &= ~NEIGH_SEQ_IS_PNEIGH;
2694 for (bucket = 0; bucket < (1 << nht->hash_shift); bucket++) {
2695 n = rcu_dereference_bh(nht->hash_buckets[bucket]);
2698 if (!net_eq(dev_net(n->dev), net))
2700 if (state->neigh_sub_iter) {
2704 v = state->neigh_sub_iter(state, n, &fakep);
2708 if (!(state->flags & NEIGH_SEQ_SKIP_NOARP))
2710 if (n->nud_state & ~NUD_NOARP)
2713 n = rcu_dereference_bh(n->next);
2719 state->bucket = bucket;
2724 static struct neighbour *neigh_get_next(struct seq_file *seq,
2725 struct neighbour *n,
2728 struct neigh_seq_state *state = seq->private;
2729 struct net *net = seq_file_net(seq);
2730 struct neigh_hash_table *nht = state->nht;
2732 if (state->neigh_sub_iter) {
2733 void *v = state->neigh_sub_iter(state, n, pos);
2737 n = rcu_dereference_bh(n->next);
2741 if (!net_eq(dev_net(n->dev), net))
2743 if (state->neigh_sub_iter) {
2744 void *v = state->neigh_sub_iter(state, n, pos);
2749 if (!(state->flags & NEIGH_SEQ_SKIP_NOARP))
2752 if (n->nud_state & ~NUD_NOARP)
2755 n = rcu_dereference_bh(n->next);
2761 if (++state->bucket >= (1 << nht->hash_shift))
2764 n = rcu_dereference_bh(nht->hash_buckets[state->bucket]);
2772 static struct neighbour *neigh_get_idx(struct seq_file *seq, loff_t *pos)
2774 struct neighbour *n = neigh_get_first(seq);
2779 n = neigh_get_next(seq, n, pos);
2784 return *pos ? NULL : n;
2787 static struct pneigh_entry *pneigh_get_first(struct seq_file *seq)
2789 struct neigh_seq_state *state = seq->private;
2790 struct net *net = seq_file_net(seq);
2791 struct neigh_table *tbl = state->tbl;
2792 struct pneigh_entry *pn = NULL;
2793 int bucket = state->bucket;
2795 state->flags |= NEIGH_SEQ_IS_PNEIGH;
2796 for (bucket = 0; bucket <= PNEIGH_HASHMASK; bucket++) {
2797 pn = tbl->phash_buckets[bucket];
2798 while (pn && !net_eq(pneigh_net(pn), net))
2803 state->bucket = bucket;
2808 static struct pneigh_entry *pneigh_get_next(struct seq_file *seq,
2809 struct pneigh_entry *pn,
2812 struct neigh_seq_state *state = seq->private;
2813 struct net *net = seq_file_net(seq);
2814 struct neigh_table *tbl = state->tbl;
2818 } while (pn && !net_eq(pneigh_net(pn), net));
2821 if (++state->bucket > PNEIGH_HASHMASK)
2823 pn = tbl->phash_buckets[state->bucket];
2824 while (pn && !net_eq(pneigh_net(pn), net))
2836 static struct pneigh_entry *pneigh_get_idx(struct seq_file *seq, loff_t *pos)
2838 struct pneigh_entry *pn = pneigh_get_first(seq);
2843 pn = pneigh_get_next(seq, pn, pos);
2848 return *pos ? NULL : pn;
2851 static void *neigh_get_idx_any(struct seq_file *seq, loff_t *pos)
2853 struct neigh_seq_state *state = seq->private;
2855 loff_t idxpos = *pos;
2857 rc = neigh_get_idx(seq, &idxpos);
2858 if (!rc && !(state->flags & NEIGH_SEQ_NEIGH_ONLY))
2859 rc = pneigh_get_idx(seq, &idxpos);
2864 void *neigh_seq_start(struct seq_file *seq, loff_t *pos, struct neigh_table *tbl, unsigned int neigh_seq_flags)
2867 struct neigh_seq_state *state = seq->private;
2871 state->flags = (neigh_seq_flags & ~NEIGH_SEQ_IS_PNEIGH);
2874 state->nht = rcu_dereference_bh(tbl->nht);
2876 return *pos ? neigh_get_idx_any(seq, pos) : SEQ_START_TOKEN;
2878 EXPORT_SYMBOL(neigh_seq_start);
2880 void *neigh_seq_next(struct seq_file *seq, void *v, loff_t *pos)
2882 struct neigh_seq_state *state;
2885 if (v == SEQ_START_TOKEN) {
2886 rc = neigh_get_first(seq);
2890 state = seq->private;
2891 if (!(state->flags & NEIGH_SEQ_IS_PNEIGH)) {
2892 rc = neigh_get_next(seq, v, NULL);
2895 if (!(state->flags & NEIGH_SEQ_NEIGH_ONLY))
2896 rc = pneigh_get_first(seq);
2898 BUG_ON(state->flags & NEIGH_SEQ_NEIGH_ONLY);
2899 rc = pneigh_get_next(seq, v, NULL);
2905 EXPORT_SYMBOL(neigh_seq_next);
2907 void neigh_seq_stop(struct seq_file *seq, void *v)
2910 rcu_read_unlock_bh();
2912 EXPORT_SYMBOL(neigh_seq_stop);
2914 /* statistics via seq_file */
2916 static void *neigh_stat_seq_start(struct seq_file *seq, loff_t *pos)
2918 struct neigh_table *tbl = PDE_DATA(file_inode(seq->file));
2922 return SEQ_START_TOKEN;
2924 for (cpu = *pos-1; cpu < nr_cpu_ids; ++cpu) {
2925 if (!cpu_possible(cpu))
2928 return per_cpu_ptr(tbl->stats, cpu);
2933 static void *neigh_stat_seq_next(struct seq_file *seq, void *v, loff_t *pos)
2935 struct neigh_table *tbl = PDE_DATA(file_inode(seq->file));
2938 for (cpu = *pos; cpu < nr_cpu_ids; ++cpu) {
2939 if (!cpu_possible(cpu))
2942 return per_cpu_ptr(tbl->stats, cpu);
2947 static void neigh_stat_seq_stop(struct seq_file *seq, void *v)
2952 static int neigh_stat_seq_show(struct seq_file *seq, void *v)
2954 struct neigh_table *tbl = PDE_DATA(file_inode(seq->file));
2955 struct neigh_statistics *st = v;
2957 if (v == SEQ_START_TOKEN) {
2958 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");
2962 seq_printf(seq, "%08x %08lx %08lx %08lx %08lx %08lx %08lx "
2963 "%08lx %08lx %08lx %08lx %08lx %08lx\n",
2964 atomic_read(&tbl->entries),
2975 st->rcv_probes_mcast,
2976 st->rcv_probes_ucast,
2978 st->periodic_gc_runs,
2987 static const struct seq_operations neigh_stat_seq_ops = {
2988 .start = neigh_stat_seq_start,
2989 .next = neigh_stat_seq_next,
2990 .stop = neigh_stat_seq_stop,
2991 .show = neigh_stat_seq_show,
2993 #endif /* CONFIG_PROC_FS */
2995 static inline size_t neigh_nlmsg_size(void)
2997 return NLMSG_ALIGN(sizeof(struct ndmsg))
2998 + nla_total_size(MAX_ADDR_LEN) /* NDA_DST */
2999 + nla_total_size(MAX_ADDR_LEN) /* NDA_LLADDR */
3000 + nla_total_size(sizeof(struct nda_cacheinfo))
3001 + nla_total_size(4); /* NDA_PROBES */
3004 static void __neigh_notify(struct neighbour *n, int type, int flags,
3007 struct net *net = dev_net(n->dev);
3008 struct sk_buff *skb;
3011 skb = nlmsg_new(neigh_nlmsg_size(), GFP_ATOMIC);
3015 err = neigh_fill_info(skb, n, pid, 0, type, flags);
3017 /* -EMSGSIZE implies BUG in neigh_nlmsg_size() */
3018 WARN_ON(err == -EMSGSIZE);
3022 rtnl_notify(skb, net, 0, RTNLGRP_NEIGH, NULL, GFP_ATOMIC);
3026 rtnl_set_sk_err(net, RTNLGRP_NEIGH, err);
3029 void neigh_app_ns(struct neighbour *n)
3031 __neigh_notify(n, RTM_GETNEIGH, NLM_F_REQUEST, 0);
3033 EXPORT_SYMBOL(neigh_app_ns);
3035 #ifdef CONFIG_SYSCTL
3037 static int int_max = INT_MAX;
3038 static int unres_qlen_max = INT_MAX / SKB_TRUESIZE(ETH_FRAME_LEN);
3040 static int proc_unres_qlen(struct ctl_table *ctl, int write,
3041 void __user *buffer, size_t *lenp, loff_t *ppos)
3044 struct ctl_table tmp = *ctl;
3047 tmp.extra2 = &unres_qlen_max;
3050 size = *(int *)ctl->data / SKB_TRUESIZE(ETH_FRAME_LEN);
3051 ret = proc_dointvec_minmax(&tmp, write, buffer, lenp, ppos);
3054 *(int *)ctl->data = size * SKB_TRUESIZE(ETH_FRAME_LEN);
3058 static struct neigh_parms *neigh_get_dev_parms_rcu(struct net_device *dev,
3063 return __in_dev_arp_parms_get_rcu(dev);
3065 return __in6_dev_nd_parms_get_rcu(dev);
3070 static void neigh_copy_dflt_parms(struct net *net, struct neigh_parms *p,
3073 struct net_device *dev;
3074 int family = neigh_parms_family(p);
3077 for_each_netdev_rcu(net, dev) {
3078 struct neigh_parms *dst_p =
3079 neigh_get_dev_parms_rcu(dev, family);
3081 if (dst_p && !test_bit(index, dst_p->data_state))
3082 dst_p->data[index] = p->data[index];
3087 static void neigh_proc_update(struct ctl_table *ctl, int write)
3089 struct net_device *dev = ctl->extra1;
3090 struct neigh_parms *p = ctl->extra2;
3091 struct net *net = neigh_parms_net(p);
3092 int index = (int *) ctl->data - p->data;
3097 set_bit(index, p->data_state);
3098 if (index == NEIGH_VAR_DELAY_PROBE_TIME)
3099 call_netevent_notifiers(NETEVENT_DELAY_PROBE_TIME_UPDATE, p);
3100 if (!dev) /* NULL dev means this is default value */
3101 neigh_copy_dflt_parms(net, p, index);
3104 static int neigh_proc_dointvec_zero_intmax(struct ctl_table *ctl, int write,
3105 void __user *buffer,
3106 size_t *lenp, loff_t *ppos)
3108 struct ctl_table tmp = *ctl;
3112 tmp.extra2 = &int_max;
3114 ret = proc_dointvec_minmax(&tmp, write, buffer, lenp, ppos);
3115 neigh_proc_update(ctl, write);
3119 int neigh_proc_dointvec(struct ctl_table *ctl, int write,
3120 void __user *buffer, size_t *lenp, loff_t *ppos)
3122 int ret = proc_dointvec(ctl, write, buffer, lenp, ppos);
3124 neigh_proc_update(ctl, write);
3127 EXPORT_SYMBOL(neigh_proc_dointvec);
3129 int neigh_proc_dointvec_jiffies(struct ctl_table *ctl, int write,
3130 void __user *buffer,
3131 size_t *lenp, loff_t *ppos)
3133 int ret = proc_dointvec_jiffies(ctl, write, buffer, lenp, ppos);
3135 neigh_proc_update(ctl, write);
3138 EXPORT_SYMBOL(neigh_proc_dointvec_jiffies);
3140 static int neigh_proc_dointvec_userhz_jiffies(struct ctl_table *ctl, int write,
3141 void __user *buffer,
3142 size_t *lenp, loff_t *ppos)
3144 int ret = proc_dointvec_userhz_jiffies(ctl, write, buffer, lenp, ppos);
3146 neigh_proc_update(ctl, write);
3150 int neigh_proc_dointvec_ms_jiffies(struct ctl_table *ctl, int write,
3151 void __user *buffer,
3152 size_t *lenp, loff_t *ppos)
3154 int ret = proc_dointvec_ms_jiffies(ctl, write, buffer, lenp, ppos);
3156 neigh_proc_update(ctl, write);
3159 EXPORT_SYMBOL(neigh_proc_dointvec_ms_jiffies);
3161 static int neigh_proc_dointvec_unres_qlen(struct ctl_table *ctl, int write,
3162 void __user *buffer,
3163 size_t *lenp, loff_t *ppos)
3165 int ret = proc_unres_qlen(ctl, write, buffer, lenp, ppos);
3167 neigh_proc_update(ctl, write);
3171 static int neigh_proc_base_reachable_time(struct ctl_table *ctl, int write,
3172 void __user *buffer,
3173 size_t *lenp, loff_t *ppos)
3175 struct neigh_parms *p = ctl->extra2;
3178 if (strcmp(ctl->procname, "base_reachable_time") == 0)
3179 ret = neigh_proc_dointvec_jiffies(ctl, write, buffer, lenp, ppos);
3180 else if (strcmp(ctl->procname, "base_reachable_time_ms") == 0)
3181 ret = neigh_proc_dointvec_ms_jiffies(ctl, write, buffer, lenp, ppos);
3185 if (write && ret == 0) {
3186 /* update reachable_time as well, otherwise, the change will
3187 * only be effective after the next time neigh_periodic_work
3188 * decides to recompute it
3191 neigh_rand_reach_time(NEIGH_VAR(p, BASE_REACHABLE_TIME));
3196 #define NEIGH_PARMS_DATA_OFFSET(index) \
3197 (&((struct neigh_parms *) 0)->data[index])
3199 #define NEIGH_SYSCTL_ENTRY(attr, data_attr, name, mval, proc) \
3200 [NEIGH_VAR_ ## attr] = { \
3202 .data = NEIGH_PARMS_DATA_OFFSET(NEIGH_VAR_ ## data_attr), \
3203 .maxlen = sizeof(int), \
3205 .proc_handler = proc, \
3208 #define NEIGH_SYSCTL_ZERO_INTMAX_ENTRY(attr, name) \
3209 NEIGH_SYSCTL_ENTRY(attr, attr, name, 0644, neigh_proc_dointvec_zero_intmax)
3211 #define NEIGH_SYSCTL_JIFFIES_ENTRY(attr, name) \
3212 NEIGH_SYSCTL_ENTRY(attr, attr, name, 0644, neigh_proc_dointvec_jiffies)
3214 #define NEIGH_SYSCTL_USERHZ_JIFFIES_ENTRY(attr, name) \
3215 NEIGH_SYSCTL_ENTRY(attr, attr, name, 0644, neigh_proc_dointvec_userhz_jiffies)
3217 #define NEIGH_SYSCTL_MS_JIFFIES_ENTRY(attr, name) \
3218 NEIGH_SYSCTL_ENTRY(attr, attr, name, 0644, neigh_proc_dointvec_ms_jiffies)
3220 #define NEIGH_SYSCTL_MS_JIFFIES_REUSED_ENTRY(attr, data_attr, name) \
3221 NEIGH_SYSCTL_ENTRY(attr, data_attr, name, 0644, neigh_proc_dointvec_ms_jiffies)
3223 #define NEIGH_SYSCTL_UNRES_QLEN_REUSED_ENTRY(attr, data_attr, name) \
3224 NEIGH_SYSCTL_ENTRY(attr, data_attr, name, 0644, neigh_proc_dointvec_unres_qlen)
3226 static struct neigh_sysctl_table {
3227 struct ctl_table_header *sysctl_header;
3228 struct ctl_table neigh_vars[NEIGH_VAR_MAX + 1];
3229 } neigh_sysctl_template __read_mostly = {
3231 NEIGH_SYSCTL_ZERO_INTMAX_ENTRY(MCAST_PROBES, "mcast_solicit"),
3232 NEIGH_SYSCTL_ZERO_INTMAX_ENTRY(UCAST_PROBES, "ucast_solicit"),
3233 NEIGH_SYSCTL_ZERO_INTMAX_ENTRY(APP_PROBES, "app_solicit"),
3234 NEIGH_SYSCTL_ZERO_INTMAX_ENTRY(MCAST_REPROBES, "mcast_resolicit"),
3235 NEIGH_SYSCTL_USERHZ_JIFFIES_ENTRY(RETRANS_TIME, "retrans_time"),
3236 NEIGH_SYSCTL_JIFFIES_ENTRY(BASE_REACHABLE_TIME, "base_reachable_time"),
3237 NEIGH_SYSCTL_JIFFIES_ENTRY(DELAY_PROBE_TIME, "delay_first_probe_time"),
3238 NEIGH_SYSCTL_JIFFIES_ENTRY(GC_STALETIME, "gc_stale_time"),
3239 NEIGH_SYSCTL_ZERO_INTMAX_ENTRY(QUEUE_LEN_BYTES, "unres_qlen_bytes"),
3240 NEIGH_SYSCTL_ZERO_INTMAX_ENTRY(PROXY_QLEN, "proxy_qlen"),
3241 NEIGH_SYSCTL_USERHZ_JIFFIES_ENTRY(ANYCAST_DELAY, "anycast_delay"),
3242 NEIGH_SYSCTL_USERHZ_JIFFIES_ENTRY(PROXY_DELAY, "proxy_delay"),
3243 NEIGH_SYSCTL_USERHZ_JIFFIES_ENTRY(LOCKTIME, "locktime"),
3244 NEIGH_SYSCTL_UNRES_QLEN_REUSED_ENTRY(QUEUE_LEN, QUEUE_LEN_BYTES, "unres_qlen"),
3245 NEIGH_SYSCTL_MS_JIFFIES_REUSED_ENTRY(RETRANS_TIME_MS, RETRANS_TIME, "retrans_time_ms"),
3246 NEIGH_SYSCTL_MS_JIFFIES_REUSED_ENTRY(BASE_REACHABLE_TIME_MS, BASE_REACHABLE_TIME, "base_reachable_time_ms"),
3247 [NEIGH_VAR_GC_INTERVAL] = {
3248 .procname = "gc_interval",
3249 .maxlen = sizeof(int),
3251 .proc_handler = proc_dointvec_jiffies,
3253 [NEIGH_VAR_GC_THRESH1] = {
3254 .procname = "gc_thresh1",
3255 .maxlen = sizeof(int),
3259 .proc_handler = proc_dointvec_minmax,
3261 [NEIGH_VAR_GC_THRESH2] = {
3262 .procname = "gc_thresh2",
3263 .maxlen = sizeof(int),
3267 .proc_handler = proc_dointvec_minmax,
3269 [NEIGH_VAR_GC_THRESH3] = {
3270 .procname = "gc_thresh3",
3271 .maxlen = sizeof(int),
3275 .proc_handler = proc_dointvec_minmax,
3281 int neigh_sysctl_register(struct net_device *dev, struct neigh_parms *p,
3282 proc_handler *handler)
3285 struct neigh_sysctl_table *t;
3286 const char *dev_name_source;
3287 char neigh_path[ sizeof("net//neigh/") + IFNAMSIZ + IFNAMSIZ ];
3290 t = kmemdup(&neigh_sysctl_template, sizeof(*t), GFP_KERNEL);
3294 for (i = 0; i < NEIGH_VAR_GC_INTERVAL; i++) {
3295 t->neigh_vars[i].data += (long) p;
3296 t->neigh_vars[i].extra1 = dev;
3297 t->neigh_vars[i].extra2 = p;
3301 dev_name_source = dev->name;
3302 /* Terminate the table early */
3303 memset(&t->neigh_vars[NEIGH_VAR_GC_INTERVAL], 0,
3304 sizeof(t->neigh_vars[NEIGH_VAR_GC_INTERVAL]));
3306 struct neigh_table *tbl = p->tbl;
3307 dev_name_source = "default";
3308 t->neigh_vars[NEIGH_VAR_GC_INTERVAL].data = &tbl->gc_interval;
3309 t->neigh_vars[NEIGH_VAR_GC_THRESH1].data = &tbl->gc_thresh1;
3310 t->neigh_vars[NEIGH_VAR_GC_THRESH2].data = &tbl->gc_thresh2;
3311 t->neigh_vars[NEIGH_VAR_GC_THRESH3].data = &tbl->gc_thresh3;
3316 t->neigh_vars[NEIGH_VAR_RETRANS_TIME].proc_handler = handler;
3318 t->neigh_vars[NEIGH_VAR_BASE_REACHABLE_TIME].proc_handler = handler;
3319 /* RetransTime (in milliseconds)*/
3320 t->neigh_vars[NEIGH_VAR_RETRANS_TIME_MS].proc_handler = handler;
3321 /* ReachableTime (in milliseconds) */
3322 t->neigh_vars[NEIGH_VAR_BASE_REACHABLE_TIME_MS].proc_handler = handler;
3324 /* Those handlers will update p->reachable_time after
3325 * base_reachable_time(_ms) is set to ensure the new timer starts being
3326 * applied after the next neighbour update instead of waiting for
3327 * neigh_periodic_work to update its value (can be multiple minutes)
3328 * So any handler that replaces them should do this as well
3331 t->neigh_vars[NEIGH_VAR_BASE_REACHABLE_TIME].proc_handler =
3332 neigh_proc_base_reachable_time;
3333 /* ReachableTime (in milliseconds) */
3334 t->neigh_vars[NEIGH_VAR_BASE_REACHABLE_TIME_MS].proc_handler =
3335 neigh_proc_base_reachable_time;
3338 /* Don't export sysctls to unprivileged users */
3339 if (neigh_parms_net(p)->user_ns != &init_user_ns)
3340 t->neigh_vars[0].procname = NULL;
3342 switch (neigh_parms_family(p)) {
3353 snprintf(neigh_path, sizeof(neigh_path), "net/%s/neigh/%s",
3354 p_name, dev_name_source);
3356 register_net_sysctl(neigh_parms_net(p), neigh_path, t->neigh_vars);
3357 if (!t->sysctl_header)
3360 p->sysctl_table = t;
3368 EXPORT_SYMBOL(neigh_sysctl_register);
3370 void neigh_sysctl_unregister(struct neigh_parms *p)
3372 if (p->sysctl_table) {
3373 struct neigh_sysctl_table *t = p->sysctl_table;
3374 p->sysctl_table = NULL;
3375 unregister_net_sysctl_table(t->sysctl_header);
3379 EXPORT_SYMBOL(neigh_sysctl_unregister);
3381 #endif /* CONFIG_SYSCTL */
3383 static int __init neigh_init(void)
3385 rtnl_register(PF_UNSPEC, RTM_NEWNEIGH, neigh_add, NULL, 0);
3386 rtnl_register(PF_UNSPEC, RTM_DELNEIGH, neigh_delete, NULL, 0);
3387 rtnl_register(PF_UNSPEC, RTM_GETNEIGH, NULL, neigh_dump_info, 0);
3389 rtnl_register(PF_UNSPEC, RTM_GETNEIGHTBL, NULL, neightbl_dump_info,
3391 rtnl_register(PF_UNSPEC, RTM_SETNEIGHTBL, neightbl_set, NULL, 0);
3396 subsys_initcall(neigh_init);