Merge tag 'staging-4.12-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh...
[sfrench/cifs-2.6.git] / net / core / neighbour.c
1 /*
2  *      Generic address resolution entity
3  *
4  *      Authors:
5  *      Pedro Roque             <roque@di.fc.ul.pt>
6  *      Alexey Kuznetsov        <kuznet@ms2.inr.ac.ru>
7  *
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.
12  *
13  *      Fixes:
14  *      Vitaly E. Lavrov        releasing NULL neighbor in neigh_add.
15  *      Harald Welte            Add neighbour cache statistics like rtstat
16  */
17
18 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
19
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>
27 #ifdef CONFIG_SYSCTL
28 #include <linux/sysctl.h>
29 #endif
30 #include <linux/times.h>
31 #include <net/net_namespace.h>
32 #include <net/neighbour.h>
33 #include <net/dst.h>
34 #include <net/sock.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>
43
44 #define DEBUG
45 #define NEIGH_DEBUG 1
46 #define neigh_dbg(level, fmt, ...)              \
47 do {                                            \
48         if (level <= NEIGH_DEBUG)               \
49                 pr_debug(fmt, ##__VA_ARGS__);   \
50 } while (0)
51
52 #define PNEIGH_HASHMASK         0xF
53
54 static void neigh_timer_handler(unsigned long arg);
55 static void __neigh_notify(struct neighbour *n, int type, int flags,
56                            u32 pid);
57 static void neigh_update_notify(struct neighbour *neigh, u32 nlmsg_pid);
58 static int pneigh_ifdown(struct neigh_table *tbl, struct net_device *dev);
59
60 #ifdef CONFIG_PROC_FS
61 static const struct file_operations neigh_stat_seq_fops;
62 #endif
63
64 /*
65    Neighbour hash table buckets are protected with rwlock tbl->lock.
66
67    - All the scans/updates to hash buckets MUST be made under this lock.
68    - NOTHING clever should be made under this lock: no callbacks
69      to protocol backends, no attempts to send something to network.
70      It will result in deadlocks, if backend/driver wants to use neighbour
71      cache.
72    - If the entry requires some non-trivial actions, increase
73      its reference count and release table lock.
74
75    Neighbour entries are protected:
76    - with reference count.
77    - with rwlock neigh->lock
78
79    Reference count prevents destruction.
80
81    neigh->lock mainly serializes ll address data and its validity state.
82    However, the same lock is used to protect another entry fields:
83     - timer
84     - resolution queue
85
86    Again, nothing clever shall be made under neigh->lock,
87    the most complicated procedure, which we allow is dev->hard_header.
88    It is supposed, that dev->hard_header is simplistic and does
89    not make callbacks to neighbour tables.
90  */
91
92 static int neigh_blackhole(struct neighbour *neigh, struct sk_buff *skb)
93 {
94         kfree_skb(skb);
95         return -ENETDOWN;
96 }
97
98 static void neigh_cleanup_and_release(struct neighbour *neigh)
99 {
100         if (neigh->parms->neigh_cleanup)
101                 neigh->parms->neigh_cleanup(neigh);
102
103         __neigh_notify(neigh, RTM_DELNEIGH, 0, 0);
104         call_netevent_notifiers(NETEVENT_NEIGH_UPDATE, neigh);
105         neigh_release(neigh);
106 }
107
108 /*
109  * It is random distribution in the interval (1/2)*base...(3/2)*base.
110  * It corresponds to default IPv6 settings and is not overridable,
111  * because it is really reasonable choice.
112  */
113
114 unsigned long neigh_rand_reach_time(unsigned long base)
115 {
116         return base ? (prandom_u32() % base) + (base >> 1) : 0;
117 }
118 EXPORT_SYMBOL(neigh_rand_reach_time);
119
120
121 static int neigh_forced_gc(struct neigh_table *tbl)
122 {
123         int shrunk = 0;
124         int i;
125         struct neigh_hash_table *nht;
126
127         NEIGH_CACHE_STAT_INC(tbl, forced_gc_runs);
128
129         write_lock_bh(&tbl->lock);
130         nht = rcu_dereference_protected(tbl->nht,
131                                         lockdep_is_held(&tbl->lock));
132         for (i = 0; i < (1 << nht->hash_shift); i++) {
133                 struct neighbour *n;
134                 struct neighbour __rcu **np;
135
136                 np = &nht->hash_buckets[i];
137                 while ((n = rcu_dereference_protected(*np,
138                                         lockdep_is_held(&tbl->lock))) != NULL) {
139                         /* Neighbour record may be discarded if:
140                          * - nobody refers to it.
141                          * - it is not permanent
142                          */
143                         write_lock(&n->lock);
144                         if (atomic_read(&n->refcnt) == 1 &&
145                             !(n->nud_state & NUD_PERMANENT)) {
146                                 rcu_assign_pointer(*np,
147                                         rcu_dereference_protected(n->next,
148                                                   lockdep_is_held(&tbl->lock)));
149                                 n->dead = 1;
150                                 shrunk  = 1;
151                                 write_unlock(&n->lock);
152                                 neigh_cleanup_and_release(n);
153                                 continue;
154                         }
155                         write_unlock(&n->lock);
156                         np = &n->next;
157                 }
158         }
159
160         tbl->last_flush = jiffies;
161
162         write_unlock_bh(&tbl->lock);
163
164         return shrunk;
165 }
166
167 static void neigh_add_timer(struct neighbour *n, unsigned long when)
168 {
169         neigh_hold(n);
170         if (unlikely(mod_timer(&n->timer, when))) {
171                 printk("NEIGH: BUG, double timer add, state is %x\n",
172                        n->nud_state);
173                 dump_stack();
174         }
175 }
176
177 static int neigh_del_timer(struct neighbour *n)
178 {
179         if ((n->nud_state & NUD_IN_TIMER) &&
180             del_timer(&n->timer)) {
181                 neigh_release(n);
182                 return 1;
183         }
184         return 0;
185 }
186
187 static void pneigh_queue_purge(struct sk_buff_head *list)
188 {
189         struct sk_buff *skb;
190
191         while ((skb = skb_dequeue(list)) != NULL) {
192                 dev_put(skb->dev);
193                 kfree_skb(skb);
194         }
195 }
196
197 static void neigh_flush_dev(struct neigh_table *tbl, struct net_device *dev)
198 {
199         int i;
200         struct neigh_hash_table *nht;
201
202         nht = rcu_dereference_protected(tbl->nht,
203                                         lockdep_is_held(&tbl->lock));
204
205         for (i = 0; i < (1 << nht->hash_shift); i++) {
206                 struct neighbour *n;
207                 struct neighbour __rcu **np = &nht->hash_buckets[i];
208
209                 while ((n = rcu_dereference_protected(*np,
210                                         lockdep_is_held(&tbl->lock))) != NULL) {
211                         if (dev && n->dev != dev) {
212                                 np = &n->next;
213                                 continue;
214                         }
215                         rcu_assign_pointer(*np,
216                                    rcu_dereference_protected(n->next,
217                                                 lockdep_is_held(&tbl->lock)));
218                         write_lock(&n->lock);
219                         neigh_del_timer(n);
220                         n->dead = 1;
221
222                         if (atomic_read(&n->refcnt) != 1) {
223                                 /* The most unpleasant situation.
224                                    We must destroy neighbour entry,
225                                    but someone still uses it.
226
227                                    The destroy will be delayed until
228                                    the last user releases us, but
229                                    we must kill timers etc. and move
230                                    it to safe state.
231                                  */
232                                 __skb_queue_purge(&n->arp_queue);
233                                 n->arp_queue_len_bytes = 0;
234                                 n->output = neigh_blackhole;
235                                 if (n->nud_state & NUD_VALID)
236                                         n->nud_state = NUD_NOARP;
237                                 else
238                                         n->nud_state = NUD_NONE;
239                                 neigh_dbg(2, "neigh %p is stray\n", n);
240                         }
241                         write_unlock(&n->lock);
242                         neigh_cleanup_and_release(n);
243                 }
244         }
245 }
246
247 void neigh_changeaddr(struct neigh_table *tbl, struct net_device *dev)
248 {
249         write_lock_bh(&tbl->lock);
250         neigh_flush_dev(tbl, dev);
251         write_unlock_bh(&tbl->lock);
252 }
253 EXPORT_SYMBOL(neigh_changeaddr);
254
255 int neigh_ifdown(struct neigh_table *tbl, struct net_device *dev)
256 {
257         write_lock_bh(&tbl->lock);
258         neigh_flush_dev(tbl, dev);
259         pneigh_ifdown(tbl, dev);
260         write_unlock_bh(&tbl->lock);
261
262         del_timer_sync(&tbl->proxy_timer);
263         pneigh_queue_purge(&tbl->proxy_queue);
264         return 0;
265 }
266 EXPORT_SYMBOL(neigh_ifdown);
267
268 static struct neighbour *neigh_alloc(struct neigh_table *tbl, struct net_device *dev)
269 {
270         struct neighbour *n = NULL;
271         unsigned long now = jiffies;
272         int entries;
273
274         entries = atomic_inc_return(&tbl->entries) - 1;
275         if (entries >= tbl->gc_thresh3 ||
276             (entries >= tbl->gc_thresh2 &&
277              time_after(now, tbl->last_flush + 5 * HZ))) {
278                 if (!neigh_forced_gc(tbl) &&
279                     entries >= tbl->gc_thresh3) {
280                         net_info_ratelimited("%s: neighbor table overflow!\n",
281                                              tbl->id);
282                         NEIGH_CACHE_STAT_INC(tbl, table_fulls);
283                         goto out_entries;
284                 }
285         }
286
287         n = kzalloc(tbl->entry_size + dev->neigh_priv_len, GFP_ATOMIC);
288         if (!n)
289                 goto out_entries;
290
291         __skb_queue_head_init(&n->arp_queue);
292         rwlock_init(&n->lock);
293         seqlock_init(&n->ha_lock);
294         n->updated        = n->used = now;
295         n->nud_state      = NUD_NONE;
296         n->output         = neigh_blackhole;
297         seqlock_init(&n->hh.hh_lock);
298         n->parms          = neigh_parms_clone(&tbl->parms);
299         setup_timer(&n->timer, neigh_timer_handler, (unsigned long)n);
300
301         NEIGH_CACHE_STAT_INC(tbl, allocs);
302         n->tbl            = tbl;
303         atomic_set(&n->refcnt, 1);
304         n->dead           = 1;
305 out:
306         return n;
307
308 out_entries:
309         atomic_dec(&tbl->entries);
310         goto out;
311 }
312
313 static void neigh_get_hash_rnd(u32 *x)
314 {
315         get_random_bytes(x, sizeof(*x));
316         *x |= 1;
317 }
318
319 static struct neigh_hash_table *neigh_hash_alloc(unsigned int shift)
320 {
321         size_t size = (1 << shift) * sizeof(struct neighbour *);
322         struct neigh_hash_table *ret;
323         struct neighbour __rcu **buckets;
324         int i;
325
326         ret = kmalloc(sizeof(*ret), GFP_ATOMIC);
327         if (!ret)
328                 return NULL;
329         if (size <= PAGE_SIZE)
330                 buckets = kzalloc(size, GFP_ATOMIC);
331         else
332                 buckets = (struct neighbour __rcu **)
333                           __get_free_pages(GFP_ATOMIC | __GFP_ZERO,
334                                            get_order(size));
335         if (!buckets) {
336                 kfree(ret);
337                 return NULL;
338         }
339         ret->hash_buckets = buckets;
340         ret->hash_shift = shift;
341         for (i = 0; i < NEIGH_NUM_HASH_RND; i++)
342                 neigh_get_hash_rnd(&ret->hash_rnd[i]);
343         return ret;
344 }
345
346 static void neigh_hash_free_rcu(struct rcu_head *head)
347 {
348         struct neigh_hash_table *nht = container_of(head,
349                                                     struct neigh_hash_table,
350                                                     rcu);
351         size_t size = (1 << nht->hash_shift) * sizeof(struct neighbour *);
352         struct neighbour __rcu **buckets = nht->hash_buckets;
353
354         if (size <= PAGE_SIZE)
355                 kfree(buckets);
356         else
357                 free_pages((unsigned long)buckets, get_order(size));
358         kfree(nht);
359 }
360
361 static struct neigh_hash_table *neigh_hash_grow(struct neigh_table *tbl,
362                                                 unsigned long new_shift)
363 {
364         unsigned int i, hash;
365         struct neigh_hash_table *new_nht, *old_nht;
366
367         NEIGH_CACHE_STAT_INC(tbl, hash_grows);
368
369         old_nht = rcu_dereference_protected(tbl->nht,
370                                             lockdep_is_held(&tbl->lock));
371         new_nht = neigh_hash_alloc(new_shift);
372         if (!new_nht)
373                 return old_nht;
374
375         for (i = 0; i < (1 << old_nht->hash_shift); i++) {
376                 struct neighbour *n, *next;
377
378                 for (n = rcu_dereference_protected(old_nht->hash_buckets[i],
379                                                    lockdep_is_held(&tbl->lock));
380                      n != NULL;
381                      n = next) {
382                         hash = tbl->hash(n->primary_key, n->dev,
383                                          new_nht->hash_rnd);
384
385                         hash >>= (32 - new_nht->hash_shift);
386                         next = rcu_dereference_protected(n->next,
387                                                 lockdep_is_held(&tbl->lock));
388
389                         rcu_assign_pointer(n->next,
390                                            rcu_dereference_protected(
391                                                 new_nht->hash_buckets[hash],
392                                                 lockdep_is_held(&tbl->lock)));
393                         rcu_assign_pointer(new_nht->hash_buckets[hash], n);
394                 }
395         }
396
397         rcu_assign_pointer(tbl->nht, new_nht);
398         call_rcu(&old_nht->rcu, neigh_hash_free_rcu);
399         return new_nht;
400 }
401
402 struct neighbour *neigh_lookup(struct neigh_table *tbl, const void *pkey,
403                                struct net_device *dev)
404 {
405         struct neighbour *n;
406
407         NEIGH_CACHE_STAT_INC(tbl, lookups);
408
409         rcu_read_lock_bh();
410         n = __neigh_lookup_noref(tbl, pkey, dev);
411         if (n) {
412                 if (!atomic_inc_not_zero(&n->refcnt))
413                         n = NULL;
414                 NEIGH_CACHE_STAT_INC(tbl, hits);
415         }
416
417         rcu_read_unlock_bh();
418         return n;
419 }
420 EXPORT_SYMBOL(neigh_lookup);
421
422 struct neighbour *neigh_lookup_nodev(struct neigh_table *tbl, struct net *net,
423                                      const void *pkey)
424 {
425         struct neighbour *n;
426         int key_len = tbl->key_len;
427         u32 hash_val;
428         struct neigh_hash_table *nht;
429
430         NEIGH_CACHE_STAT_INC(tbl, lookups);
431
432         rcu_read_lock_bh();
433         nht = rcu_dereference_bh(tbl->nht);
434         hash_val = tbl->hash(pkey, NULL, nht->hash_rnd) >> (32 - nht->hash_shift);
435
436         for (n = rcu_dereference_bh(nht->hash_buckets[hash_val]);
437              n != NULL;
438              n = rcu_dereference_bh(n->next)) {
439                 if (!memcmp(n->primary_key, pkey, key_len) &&
440                     net_eq(dev_net(n->dev), net)) {
441                         if (!atomic_inc_not_zero(&n->refcnt))
442                                 n = NULL;
443                         NEIGH_CACHE_STAT_INC(tbl, hits);
444                         break;
445                 }
446         }
447
448         rcu_read_unlock_bh();
449         return n;
450 }
451 EXPORT_SYMBOL(neigh_lookup_nodev);
452
453 struct neighbour *__neigh_create(struct neigh_table *tbl, const void *pkey,
454                                  struct net_device *dev, bool want_ref)
455 {
456         u32 hash_val;
457         int key_len = tbl->key_len;
458         int error;
459         struct neighbour *n1, *rc, *n = neigh_alloc(tbl, dev);
460         struct neigh_hash_table *nht;
461
462         if (!n) {
463                 rc = ERR_PTR(-ENOBUFS);
464                 goto out;
465         }
466
467         memcpy(n->primary_key, pkey, key_len);
468         n->dev = dev;
469         dev_hold(dev);
470
471         /* Protocol specific setup. */
472         if (tbl->constructor && (error = tbl->constructor(n)) < 0) {
473                 rc = ERR_PTR(error);
474                 goto out_neigh_release;
475         }
476
477         if (dev->netdev_ops->ndo_neigh_construct) {
478                 error = dev->netdev_ops->ndo_neigh_construct(dev, n);
479                 if (error < 0) {
480                         rc = ERR_PTR(error);
481                         goto out_neigh_release;
482                 }
483         }
484
485         /* Device specific setup. */
486         if (n->parms->neigh_setup &&
487             (error = n->parms->neigh_setup(n)) < 0) {
488                 rc = ERR_PTR(error);
489                 goto out_neigh_release;
490         }
491
492         n->confirmed = jiffies - (NEIGH_VAR(n->parms, BASE_REACHABLE_TIME) << 1);
493
494         write_lock_bh(&tbl->lock);
495         nht = rcu_dereference_protected(tbl->nht,
496                                         lockdep_is_held(&tbl->lock));
497
498         if (atomic_read(&tbl->entries) > (1 << nht->hash_shift))
499                 nht = neigh_hash_grow(tbl, nht->hash_shift + 1);
500
501         hash_val = tbl->hash(pkey, dev, nht->hash_rnd) >> (32 - nht->hash_shift);
502
503         if (n->parms->dead) {
504                 rc = ERR_PTR(-EINVAL);
505                 goto out_tbl_unlock;
506         }
507
508         for (n1 = rcu_dereference_protected(nht->hash_buckets[hash_val],
509                                             lockdep_is_held(&tbl->lock));
510              n1 != NULL;
511              n1 = rcu_dereference_protected(n1->next,
512                         lockdep_is_held(&tbl->lock))) {
513                 if (dev == n1->dev && !memcmp(n1->primary_key, pkey, key_len)) {
514                         if (want_ref)
515                                 neigh_hold(n1);
516                         rc = n1;
517                         goto out_tbl_unlock;
518                 }
519         }
520
521         n->dead = 0;
522         if (want_ref)
523                 neigh_hold(n);
524         rcu_assign_pointer(n->next,
525                            rcu_dereference_protected(nht->hash_buckets[hash_val],
526                                                      lockdep_is_held(&tbl->lock)));
527         rcu_assign_pointer(nht->hash_buckets[hash_val], n);
528         write_unlock_bh(&tbl->lock);
529         neigh_dbg(2, "neigh %p is created\n", n);
530         rc = n;
531 out:
532         return rc;
533 out_tbl_unlock:
534         write_unlock_bh(&tbl->lock);
535 out_neigh_release:
536         neigh_release(n);
537         goto out;
538 }
539 EXPORT_SYMBOL(__neigh_create);
540
541 static u32 pneigh_hash(const void *pkey, int key_len)
542 {
543         u32 hash_val = *(u32 *)(pkey + key_len - 4);
544         hash_val ^= (hash_val >> 16);
545         hash_val ^= hash_val >> 8;
546         hash_val ^= hash_val >> 4;
547         hash_val &= PNEIGH_HASHMASK;
548         return hash_val;
549 }
550
551 static struct pneigh_entry *__pneigh_lookup_1(struct pneigh_entry *n,
552                                               struct net *net,
553                                               const void *pkey,
554                                               int key_len,
555                                               struct net_device *dev)
556 {
557         while (n) {
558                 if (!memcmp(n->key, pkey, key_len) &&
559                     net_eq(pneigh_net(n), net) &&
560                     (n->dev == dev || !n->dev))
561                         return n;
562                 n = n->next;
563         }
564         return NULL;
565 }
566
567 struct pneigh_entry *__pneigh_lookup(struct neigh_table *tbl,
568                 struct net *net, const void *pkey, struct net_device *dev)
569 {
570         int key_len = tbl->key_len;
571         u32 hash_val = pneigh_hash(pkey, key_len);
572
573         return __pneigh_lookup_1(tbl->phash_buckets[hash_val],
574                                  net, pkey, key_len, dev);
575 }
576 EXPORT_SYMBOL_GPL(__pneigh_lookup);
577
578 struct pneigh_entry * pneigh_lookup(struct neigh_table *tbl,
579                                     struct net *net, const void *pkey,
580                                     struct net_device *dev, int creat)
581 {
582         struct pneigh_entry *n;
583         int key_len = tbl->key_len;
584         u32 hash_val = pneigh_hash(pkey, key_len);
585
586         read_lock_bh(&tbl->lock);
587         n = __pneigh_lookup_1(tbl->phash_buckets[hash_val],
588                               net, pkey, key_len, dev);
589         read_unlock_bh(&tbl->lock);
590
591         if (n || !creat)
592                 goto out;
593
594         ASSERT_RTNL();
595
596         n = kmalloc(sizeof(*n) + key_len, GFP_KERNEL);
597         if (!n)
598                 goto out;
599
600         write_pnet(&n->net, net);
601         memcpy(n->key, pkey, key_len);
602         n->dev = dev;
603         if (dev)
604                 dev_hold(dev);
605
606         if (tbl->pconstructor && tbl->pconstructor(n)) {
607                 if (dev)
608                         dev_put(dev);
609                 kfree(n);
610                 n = NULL;
611                 goto out;
612         }
613
614         write_lock_bh(&tbl->lock);
615         n->next = tbl->phash_buckets[hash_val];
616         tbl->phash_buckets[hash_val] = n;
617         write_unlock_bh(&tbl->lock);
618 out:
619         return n;
620 }
621 EXPORT_SYMBOL(pneigh_lookup);
622
623
624 int pneigh_delete(struct neigh_table *tbl, struct net *net, const void *pkey,
625                   struct net_device *dev)
626 {
627         struct pneigh_entry *n, **np;
628         int key_len = tbl->key_len;
629         u32 hash_val = pneigh_hash(pkey, key_len);
630
631         write_lock_bh(&tbl->lock);
632         for (np = &tbl->phash_buckets[hash_val]; (n = *np) != NULL;
633              np = &n->next) {
634                 if (!memcmp(n->key, pkey, key_len) && n->dev == dev &&
635                     net_eq(pneigh_net(n), net)) {
636                         *np = n->next;
637                         write_unlock_bh(&tbl->lock);
638                         if (tbl->pdestructor)
639                                 tbl->pdestructor(n);
640                         if (n->dev)
641                                 dev_put(n->dev);
642                         kfree(n);
643                         return 0;
644                 }
645         }
646         write_unlock_bh(&tbl->lock);
647         return -ENOENT;
648 }
649
650 static int pneigh_ifdown(struct neigh_table *tbl, struct net_device *dev)
651 {
652         struct pneigh_entry *n, **np;
653         u32 h;
654
655         for (h = 0; h <= PNEIGH_HASHMASK; h++) {
656                 np = &tbl->phash_buckets[h];
657                 while ((n = *np) != NULL) {
658                         if (!dev || n->dev == dev) {
659                                 *np = n->next;
660                                 if (tbl->pdestructor)
661                                         tbl->pdestructor(n);
662                                 if (n->dev)
663                                         dev_put(n->dev);
664                                 kfree(n);
665                                 continue;
666                         }
667                         np = &n->next;
668                 }
669         }
670         return -ENOENT;
671 }
672
673 static void neigh_parms_destroy(struct neigh_parms *parms);
674
675 static inline void neigh_parms_put(struct neigh_parms *parms)
676 {
677         if (atomic_dec_and_test(&parms->refcnt))
678                 neigh_parms_destroy(parms);
679 }
680
681 /*
682  *      neighbour must already be out of the table;
683  *
684  */
685 void neigh_destroy(struct neighbour *neigh)
686 {
687         struct net_device *dev = neigh->dev;
688
689         NEIGH_CACHE_STAT_INC(neigh->tbl, destroys);
690
691         if (!neigh->dead) {
692                 pr_warn("Destroying alive neighbour %p\n", neigh);
693                 dump_stack();
694                 return;
695         }
696
697         if (neigh_del_timer(neigh))
698                 pr_warn("Impossible event\n");
699
700         write_lock_bh(&neigh->lock);
701         __skb_queue_purge(&neigh->arp_queue);
702         write_unlock_bh(&neigh->lock);
703         neigh->arp_queue_len_bytes = 0;
704
705         if (dev->netdev_ops->ndo_neigh_destroy)
706                 dev->netdev_ops->ndo_neigh_destroy(dev, neigh);
707
708         dev_put(dev);
709         neigh_parms_put(neigh->parms);
710
711         neigh_dbg(2, "neigh %p is destroyed\n", neigh);
712
713         atomic_dec(&neigh->tbl->entries);
714         kfree_rcu(neigh, rcu);
715 }
716 EXPORT_SYMBOL(neigh_destroy);
717
718 /* Neighbour state is suspicious;
719    disable fast path.
720
721    Called with write_locked neigh.
722  */
723 static void neigh_suspect(struct neighbour *neigh)
724 {
725         neigh_dbg(2, "neigh %p is suspected\n", neigh);
726
727         neigh->output = neigh->ops->output;
728 }
729
730 /* Neighbour state is OK;
731    enable fast path.
732
733    Called with write_locked neigh.
734  */
735 static void neigh_connect(struct neighbour *neigh)
736 {
737         neigh_dbg(2, "neigh %p is connected\n", neigh);
738
739         neigh->output = neigh->ops->connected_output;
740 }
741
742 static void neigh_periodic_work(struct work_struct *work)
743 {
744         struct neigh_table *tbl = container_of(work, struct neigh_table, gc_work.work);
745         struct neighbour *n;
746         struct neighbour __rcu **np;
747         unsigned int i;
748         struct neigh_hash_table *nht;
749
750         NEIGH_CACHE_STAT_INC(tbl, periodic_gc_runs);
751
752         write_lock_bh(&tbl->lock);
753         nht = rcu_dereference_protected(tbl->nht,
754                                         lockdep_is_held(&tbl->lock));
755
756         /*
757          *      periodically recompute ReachableTime from random function
758          */
759
760         if (time_after(jiffies, tbl->last_rand + 300 * HZ)) {
761                 struct neigh_parms *p;
762                 tbl->last_rand = jiffies;
763                 list_for_each_entry(p, &tbl->parms_list, list)
764                         p->reachable_time =
765                                 neigh_rand_reach_time(NEIGH_VAR(p, BASE_REACHABLE_TIME));
766         }
767
768         if (atomic_read(&tbl->entries) < tbl->gc_thresh1)
769                 goto out;
770
771         for (i = 0 ; i < (1 << nht->hash_shift); i++) {
772                 np = &nht->hash_buckets[i];
773
774                 while ((n = rcu_dereference_protected(*np,
775                                 lockdep_is_held(&tbl->lock))) != NULL) {
776                         unsigned int state;
777
778                         write_lock(&n->lock);
779
780                         state = n->nud_state;
781                         if (state & (NUD_PERMANENT | NUD_IN_TIMER)) {
782                                 write_unlock(&n->lock);
783                                 goto next_elt;
784                         }
785
786                         if (time_before(n->used, n->confirmed))
787                                 n->used = n->confirmed;
788
789                         if (atomic_read(&n->refcnt) == 1 &&
790                             (state == NUD_FAILED ||
791                              time_after(jiffies, n->used + NEIGH_VAR(n->parms, GC_STALETIME)))) {
792                                 *np = n->next;
793                                 n->dead = 1;
794                                 write_unlock(&n->lock);
795                                 neigh_cleanup_and_release(n);
796                                 continue;
797                         }
798                         write_unlock(&n->lock);
799
800 next_elt:
801                         np = &n->next;
802                 }
803                 /*
804                  * It's fine to release lock here, even if hash table
805                  * grows while we are preempted.
806                  */
807                 write_unlock_bh(&tbl->lock);
808                 cond_resched();
809                 write_lock_bh(&tbl->lock);
810                 nht = rcu_dereference_protected(tbl->nht,
811                                                 lockdep_is_held(&tbl->lock));
812         }
813 out:
814         /* Cycle through all hash buckets every BASE_REACHABLE_TIME/2 ticks.
815          * ARP entry timeouts range from 1/2 BASE_REACHABLE_TIME to 3/2
816          * BASE_REACHABLE_TIME.
817          */
818         queue_delayed_work(system_power_efficient_wq, &tbl->gc_work,
819                               NEIGH_VAR(&tbl->parms, BASE_REACHABLE_TIME) >> 1);
820         write_unlock_bh(&tbl->lock);
821 }
822
823 static __inline__ int neigh_max_probes(struct neighbour *n)
824 {
825         struct neigh_parms *p = n->parms;
826         return NEIGH_VAR(p, UCAST_PROBES) + NEIGH_VAR(p, APP_PROBES) +
827                (n->nud_state & NUD_PROBE ? NEIGH_VAR(p, MCAST_REPROBES) :
828                 NEIGH_VAR(p, MCAST_PROBES));
829 }
830
831 static void neigh_invalidate(struct neighbour *neigh)
832         __releases(neigh->lock)
833         __acquires(neigh->lock)
834 {
835         struct sk_buff *skb;
836
837         NEIGH_CACHE_STAT_INC(neigh->tbl, res_failed);
838         neigh_dbg(2, "neigh %p is failed\n", neigh);
839         neigh->updated = jiffies;
840
841         /* It is very thin place. report_unreachable is very complicated
842            routine. Particularly, it can hit the same neighbour entry!
843
844            So that, we try to be accurate and avoid dead loop. --ANK
845          */
846         while (neigh->nud_state == NUD_FAILED &&
847                (skb = __skb_dequeue(&neigh->arp_queue)) != NULL) {
848                 write_unlock(&neigh->lock);
849                 neigh->ops->error_report(neigh, skb);
850                 write_lock(&neigh->lock);
851         }
852         __skb_queue_purge(&neigh->arp_queue);
853         neigh->arp_queue_len_bytes = 0;
854 }
855
856 static void neigh_probe(struct neighbour *neigh)
857         __releases(neigh->lock)
858 {
859         struct sk_buff *skb = skb_peek_tail(&neigh->arp_queue);
860         /* keep skb alive even if arp_queue overflows */
861         if (skb)
862                 skb = skb_clone(skb, GFP_ATOMIC);
863         write_unlock(&neigh->lock);
864         if (neigh->ops->solicit)
865                 neigh->ops->solicit(neigh, skb);
866         atomic_inc(&neigh->probes);
867         kfree_skb(skb);
868 }
869
870 /* Called when a timer expires for a neighbour entry. */
871
872 static void neigh_timer_handler(unsigned long arg)
873 {
874         unsigned long now, next;
875         struct neighbour *neigh = (struct neighbour *)arg;
876         unsigned int state;
877         int notify = 0;
878
879         write_lock(&neigh->lock);
880
881         state = neigh->nud_state;
882         now = jiffies;
883         next = now + HZ;
884
885         if (!(state & NUD_IN_TIMER))
886                 goto out;
887
888         if (state & NUD_REACHABLE) {
889                 if (time_before_eq(now,
890                                    neigh->confirmed + neigh->parms->reachable_time)) {
891                         neigh_dbg(2, "neigh %p is still alive\n", neigh);
892                         next = neigh->confirmed + neigh->parms->reachable_time;
893                 } else if (time_before_eq(now,
894                                           neigh->used +
895                                           NEIGH_VAR(neigh->parms, DELAY_PROBE_TIME))) {
896                         neigh_dbg(2, "neigh %p is delayed\n", neigh);
897                         neigh->nud_state = NUD_DELAY;
898                         neigh->updated = jiffies;
899                         neigh_suspect(neigh);
900                         next = now + NEIGH_VAR(neigh->parms, DELAY_PROBE_TIME);
901                 } else {
902                         neigh_dbg(2, "neigh %p is suspected\n", neigh);
903                         neigh->nud_state = NUD_STALE;
904                         neigh->updated = jiffies;
905                         neigh_suspect(neigh);
906                         notify = 1;
907                 }
908         } else if (state & NUD_DELAY) {
909                 if (time_before_eq(now,
910                                    neigh->confirmed +
911                                    NEIGH_VAR(neigh->parms, DELAY_PROBE_TIME))) {
912                         neigh_dbg(2, "neigh %p is now reachable\n", neigh);
913                         neigh->nud_state = NUD_REACHABLE;
914                         neigh->updated = jiffies;
915                         neigh_connect(neigh);
916                         notify = 1;
917                         next = neigh->confirmed + neigh->parms->reachable_time;
918                 } else {
919                         neigh_dbg(2, "neigh %p is probed\n", neigh);
920                         neigh->nud_state = NUD_PROBE;
921                         neigh->updated = jiffies;
922                         atomic_set(&neigh->probes, 0);
923                         notify = 1;
924                         next = now + NEIGH_VAR(neigh->parms, RETRANS_TIME);
925                 }
926         } else {
927                 /* NUD_PROBE|NUD_INCOMPLETE */
928                 next = now + NEIGH_VAR(neigh->parms, RETRANS_TIME);
929         }
930
931         if ((neigh->nud_state & (NUD_INCOMPLETE | NUD_PROBE)) &&
932             atomic_read(&neigh->probes) >= neigh_max_probes(neigh)) {
933                 neigh->nud_state = NUD_FAILED;
934                 notify = 1;
935                 neigh_invalidate(neigh);
936                 goto out;
937         }
938
939         if (neigh->nud_state & NUD_IN_TIMER) {
940                 if (time_before(next, jiffies + HZ/2))
941                         next = jiffies + HZ/2;
942                 if (!mod_timer(&neigh->timer, next))
943                         neigh_hold(neigh);
944         }
945         if (neigh->nud_state & (NUD_INCOMPLETE | NUD_PROBE)) {
946                 neigh_probe(neigh);
947         } else {
948 out:
949                 write_unlock(&neigh->lock);
950         }
951
952         if (notify)
953                 neigh_update_notify(neigh, 0);
954
955         neigh_release(neigh);
956 }
957
958 int __neigh_event_send(struct neighbour *neigh, struct sk_buff *skb)
959 {
960         int rc;
961         bool immediate_probe = false;
962
963         write_lock_bh(&neigh->lock);
964
965         rc = 0;
966         if (neigh->nud_state & (NUD_CONNECTED | NUD_DELAY | NUD_PROBE))
967                 goto out_unlock_bh;
968         if (neigh->dead)
969                 goto out_dead;
970
971         if (!(neigh->nud_state & (NUD_STALE | NUD_INCOMPLETE))) {
972                 if (NEIGH_VAR(neigh->parms, MCAST_PROBES) +
973                     NEIGH_VAR(neigh->parms, APP_PROBES)) {
974                         unsigned long next, now = jiffies;
975
976                         atomic_set(&neigh->probes,
977                                    NEIGH_VAR(neigh->parms, UCAST_PROBES));
978                         neigh->nud_state     = NUD_INCOMPLETE;
979                         neigh->updated = now;
980                         next = now + max(NEIGH_VAR(neigh->parms, RETRANS_TIME),
981                                          HZ/2);
982                         neigh_add_timer(neigh, next);
983                         immediate_probe = true;
984                 } else {
985                         neigh->nud_state = NUD_FAILED;
986                         neigh->updated = jiffies;
987                         write_unlock_bh(&neigh->lock);
988
989                         kfree_skb(skb);
990                         return 1;
991                 }
992         } else if (neigh->nud_state & NUD_STALE) {
993                 neigh_dbg(2, "neigh %p is delayed\n", neigh);
994                 neigh->nud_state = NUD_DELAY;
995                 neigh->updated = jiffies;
996                 neigh_add_timer(neigh, jiffies +
997                                 NEIGH_VAR(neigh->parms, DELAY_PROBE_TIME));
998         }
999
1000         if (neigh->nud_state == NUD_INCOMPLETE) {
1001                 if (skb) {
1002                         while (neigh->arp_queue_len_bytes + skb->truesize >
1003                                NEIGH_VAR(neigh->parms, QUEUE_LEN_BYTES)) {
1004                                 struct sk_buff *buff;
1005
1006                                 buff = __skb_dequeue(&neigh->arp_queue);
1007                                 if (!buff)
1008                                         break;
1009                                 neigh->arp_queue_len_bytes -= buff->truesize;
1010                                 kfree_skb(buff);
1011                                 NEIGH_CACHE_STAT_INC(neigh->tbl, unres_discards);
1012                         }
1013                         skb_dst_force(skb);
1014                         __skb_queue_tail(&neigh->arp_queue, skb);
1015                         neigh->arp_queue_len_bytes += skb->truesize;
1016                 }
1017                 rc = 1;
1018         }
1019 out_unlock_bh:
1020         if (immediate_probe)
1021                 neigh_probe(neigh);
1022         else
1023                 write_unlock(&neigh->lock);
1024         local_bh_enable();
1025         return rc;
1026
1027 out_dead:
1028         if (neigh->nud_state & NUD_STALE)
1029                 goto out_unlock_bh;
1030         write_unlock_bh(&neigh->lock);
1031         kfree_skb(skb);
1032         return 1;
1033 }
1034 EXPORT_SYMBOL(__neigh_event_send);
1035
1036 static void neigh_update_hhs(struct neighbour *neigh)
1037 {
1038         struct hh_cache *hh;
1039         void (*update)(struct hh_cache*, const struct net_device*, const unsigned char *)
1040                 = NULL;
1041
1042         if (neigh->dev->header_ops)
1043                 update = neigh->dev->header_ops->cache_update;
1044
1045         if (update) {
1046                 hh = &neigh->hh;
1047                 if (hh->hh_len) {
1048                         write_seqlock_bh(&hh->hh_lock);
1049                         update(hh, neigh->dev, neigh->ha);
1050                         write_sequnlock_bh(&hh->hh_lock);
1051                 }
1052         }
1053 }
1054
1055
1056
1057 /* Generic update routine.
1058    -- lladdr is new lladdr or NULL, if it is not supplied.
1059    -- new    is new state.
1060    -- flags
1061         NEIGH_UPDATE_F_OVERRIDE allows to override existing lladdr,
1062                                 if it is different.
1063         NEIGH_UPDATE_F_WEAK_OVERRIDE will suspect existing "connected"
1064                                 lladdr instead of overriding it
1065                                 if it is different.
1066         NEIGH_UPDATE_F_ADMIN    means that the change is administrative.
1067
1068         NEIGH_UPDATE_F_OVERRIDE_ISROUTER allows to override existing
1069                                 NTF_ROUTER flag.
1070         NEIGH_UPDATE_F_ISROUTER indicates if the neighbour is known as
1071                                 a router.
1072
1073    Caller MUST hold reference count on the entry.
1074  */
1075
1076 int neigh_update(struct neighbour *neigh, const u8 *lladdr, u8 new,
1077                  u32 flags, u32 nlmsg_pid)
1078 {
1079         u8 old;
1080         int err;
1081         int notify = 0;
1082         struct net_device *dev;
1083         int update_isrouter = 0;
1084
1085         write_lock_bh(&neigh->lock);
1086
1087         dev    = neigh->dev;
1088         old    = neigh->nud_state;
1089         err    = -EPERM;
1090
1091         if (!(flags & NEIGH_UPDATE_F_ADMIN) &&
1092             (old & (NUD_NOARP | NUD_PERMANENT)))
1093                 goto out;
1094         if (neigh->dead)
1095                 goto out;
1096
1097         if (!(new & NUD_VALID)) {
1098                 neigh_del_timer(neigh);
1099                 if (old & NUD_CONNECTED)
1100                         neigh_suspect(neigh);
1101                 neigh->nud_state = new;
1102                 err = 0;
1103                 notify = old & NUD_VALID;
1104                 if ((old & (NUD_INCOMPLETE | NUD_PROBE)) &&
1105                     (new & NUD_FAILED)) {
1106                         neigh_invalidate(neigh);
1107                         notify = 1;
1108                 }
1109                 goto out;
1110         }
1111
1112         /* Compare new lladdr with cached one */
1113         if (!dev->addr_len) {
1114                 /* First case: device needs no address. */
1115                 lladdr = neigh->ha;
1116         } else if (lladdr) {
1117                 /* The second case: if something is already cached
1118                    and a new address is proposed:
1119                    - compare new & old
1120                    - if they are different, check override flag
1121                  */
1122                 if ((old & NUD_VALID) &&
1123                     !memcmp(lladdr, neigh->ha, dev->addr_len))
1124                         lladdr = neigh->ha;
1125         } else {
1126                 /* No address is supplied; if we know something,
1127                    use it, otherwise discard the request.
1128                  */
1129                 err = -EINVAL;
1130                 if (!(old & NUD_VALID))
1131                         goto out;
1132                 lladdr = neigh->ha;
1133         }
1134
1135         /* If entry was valid and address is not changed,
1136            do not change entry state, if new one is STALE.
1137          */
1138         err = 0;
1139         update_isrouter = flags & NEIGH_UPDATE_F_OVERRIDE_ISROUTER;
1140         if (old & NUD_VALID) {
1141                 if (lladdr != neigh->ha && !(flags & NEIGH_UPDATE_F_OVERRIDE)) {
1142                         update_isrouter = 0;
1143                         if ((flags & NEIGH_UPDATE_F_WEAK_OVERRIDE) &&
1144                             (old & NUD_CONNECTED)) {
1145                                 lladdr = neigh->ha;
1146                                 new = NUD_STALE;
1147                         } else
1148                                 goto out;
1149                 } else {
1150                         if (lladdr == neigh->ha && new == NUD_STALE &&
1151                             !(flags & NEIGH_UPDATE_F_ADMIN))
1152                                 new = old;
1153                 }
1154         }
1155
1156         /* Update timestamps only once we know we will make a change to the
1157          * neighbour entry. Otherwise we risk to move the locktime window with
1158          * noop updates and ignore relevant ARP updates.
1159          */
1160         if (new != old || lladdr != neigh->ha) {
1161                 if (new & NUD_CONNECTED)
1162                         neigh->confirmed = jiffies;
1163                 neigh->updated = jiffies;
1164         }
1165
1166         if (new != old) {
1167                 neigh_del_timer(neigh);
1168                 if (new & NUD_PROBE)
1169                         atomic_set(&neigh->probes, 0);
1170                 if (new & NUD_IN_TIMER)
1171                         neigh_add_timer(neigh, (jiffies +
1172                                                 ((new & NUD_REACHABLE) ?
1173                                                  neigh->parms->reachable_time :
1174                                                  0)));
1175                 neigh->nud_state = new;
1176                 notify = 1;
1177         }
1178
1179         if (lladdr != neigh->ha) {
1180                 write_seqlock(&neigh->ha_lock);
1181                 memcpy(&neigh->ha, lladdr, dev->addr_len);
1182                 write_sequnlock(&neigh->ha_lock);
1183                 neigh_update_hhs(neigh);
1184                 if (!(new & NUD_CONNECTED))
1185                         neigh->confirmed = jiffies -
1186                                       (NEIGH_VAR(neigh->parms, BASE_REACHABLE_TIME) << 1);
1187                 notify = 1;
1188         }
1189         if (new == old)
1190                 goto out;
1191         if (new & NUD_CONNECTED)
1192                 neigh_connect(neigh);
1193         else
1194                 neigh_suspect(neigh);
1195         if (!(old & NUD_VALID)) {
1196                 struct sk_buff *skb;
1197
1198                 /* Again: avoid dead loop if something went wrong */
1199
1200                 while (neigh->nud_state & NUD_VALID &&
1201                        (skb = __skb_dequeue(&neigh->arp_queue)) != NULL) {
1202                         struct dst_entry *dst = skb_dst(skb);
1203                         struct neighbour *n2, *n1 = neigh;
1204                         write_unlock_bh(&neigh->lock);
1205
1206                         rcu_read_lock();
1207
1208                         /* Why not just use 'neigh' as-is?  The problem is that
1209                          * things such as shaper, eql, and sch_teql can end up
1210                          * using alternative, different, neigh objects to output
1211                          * the packet in the output path.  So what we need to do
1212                          * here is re-lookup the top-level neigh in the path so
1213                          * we can reinject the packet there.
1214                          */
1215                         n2 = NULL;
1216                         if (dst) {
1217                                 n2 = dst_neigh_lookup_skb(dst, skb);
1218                                 if (n2)
1219                                         n1 = n2;
1220                         }
1221                         n1->output(n1, skb);
1222                         if (n2)
1223                                 neigh_release(n2);
1224                         rcu_read_unlock();
1225
1226                         write_lock_bh(&neigh->lock);
1227                 }
1228                 __skb_queue_purge(&neigh->arp_queue);
1229                 neigh->arp_queue_len_bytes = 0;
1230         }
1231 out:
1232         if (update_isrouter) {
1233                 neigh->flags = (flags & NEIGH_UPDATE_F_ISROUTER) ?
1234                         (neigh->flags | NTF_ROUTER) :
1235                         (neigh->flags & ~NTF_ROUTER);
1236         }
1237         write_unlock_bh(&neigh->lock);
1238
1239         if (notify)
1240                 neigh_update_notify(neigh, nlmsg_pid);
1241
1242         return err;
1243 }
1244 EXPORT_SYMBOL(neigh_update);
1245
1246 /* Update the neigh to listen temporarily for probe responses, even if it is
1247  * in a NUD_FAILED state. The caller has to hold neigh->lock for writing.
1248  */
1249 void __neigh_set_probe_once(struct neighbour *neigh)
1250 {
1251         if (neigh->dead)
1252                 return;
1253         neigh->updated = jiffies;
1254         if (!(neigh->nud_state & NUD_FAILED))
1255                 return;
1256         neigh->nud_state = NUD_INCOMPLETE;
1257         atomic_set(&neigh->probes, neigh_max_probes(neigh));
1258         neigh_add_timer(neigh,
1259                         jiffies + NEIGH_VAR(neigh->parms, RETRANS_TIME));
1260 }
1261 EXPORT_SYMBOL(__neigh_set_probe_once);
1262
1263 struct neighbour *neigh_event_ns(struct neigh_table *tbl,
1264                                  u8 *lladdr, void *saddr,
1265                                  struct net_device *dev)
1266 {
1267         struct neighbour *neigh = __neigh_lookup(tbl, saddr, dev,
1268                                                  lladdr || !dev->addr_len);
1269         if (neigh)
1270                 neigh_update(neigh, lladdr, NUD_STALE,
1271                              NEIGH_UPDATE_F_OVERRIDE, 0);
1272         return neigh;
1273 }
1274 EXPORT_SYMBOL(neigh_event_ns);
1275
1276 /* called with read_lock_bh(&n->lock); */
1277 static void neigh_hh_init(struct neighbour *n)
1278 {
1279         struct net_device *dev = n->dev;
1280         __be16 prot = n->tbl->protocol;
1281         struct hh_cache *hh = &n->hh;
1282
1283         write_lock_bh(&n->lock);
1284
1285         /* Only one thread can come in here and initialize the
1286          * hh_cache entry.
1287          */
1288         if (!hh->hh_len)
1289                 dev->header_ops->cache(n, hh, prot);
1290
1291         write_unlock_bh(&n->lock);
1292 }
1293
1294 /* Slow and careful. */
1295
1296 int neigh_resolve_output(struct neighbour *neigh, struct sk_buff *skb)
1297 {
1298         int rc = 0;
1299
1300         if (!neigh_event_send(neigh, skb)) {
1301                 int err;
1302                 struct net_device *dev = neigh->dev;
1303                 unsigned int seq;
1304
1305                 if (dev->header_ops->cache && !neigh->hh.hh_len)
1306                         neigh_hh_init(neigh);
1307
1308                 do {
1309                         __skb_pull(skb, skb_network_offset(skb));
1310                         seq = read_seqbegin(&neigh->ha_lock);
1311                         err = dev_hard_header(skb, dev, ntohs(skb->protocol),
1312                                               neigh->ha, NULL, skb->len);
1313                 } while (read_seqretry(&neigh->ha_lock, seq));
1314
1315                 if (err >= 0)
1316                         rc = dev_queue_xmit(skb);
1317                 else
1318                         goto out_kfree_skb;
1319         }
1320 out:
1321         return rc;
1322 out_kfree_skb:
1323         rc = -EINVAL;
1324         kfree_skb(skb);
1325         goto out;
1326 }
1327 EXPORT_SYMBOL(neigh_resolve_output);
1328
1329 /* As fast as possible without hh cache */
1330
1331 int neigh_connected_output(struct neighbour *neigh, struct sk_buff *skb)
1332 {
1333         struct net_device *dev = neigh->dev;
1334         unsigned int seq;
1335         int err;
1336
1337         do {
1338                 __skb_pull(skb, skb_network_offset(skb));
1339                 seq = read_seqbegin(&neigh->ha_lock);
1340                 err = dev_hard_header(skb, dev, ntohs(skb->protocol),
1341                                       neigh->ha, NULL, skb->len);
1342         } while (read_seqretry(&neigh->ha_lock, seq));
1343
1344         if (err >= 0)
1345                 err = dev_queue_xmit(skb);
1346         else {
1347                 err = -EINVAL;
1348                 kfree_skb(skb);
1349         }
1350         return err;
1351 }
1352 EXPORT_SYMBOL(neigh_connected_output);
1353
1354 int neigh_direct_output(struct neighbour *neigh, struct sk_buff *skb)
1355 {
1356         return dev_queue_xmit(skb);
1357 }
1358 EXPORT_SYMBOL(neigh_direct_output);
1359
1360 static void neigh_proxy_process(unsigned long arg)
1361 {
1362         struct neigh_table *tbl = (struct neigh_table *)arg;
1363         long sched_next = 0;
1364         unsigned long now = jiffies;
1365         struct sk_buff *skb, *n;
1366
1367         spin_lock(&tbl->proxy_queue.lock);
1368
1369         skb_queue_walk_safe(&tbl->proxy_queue, skb, n) {
1370                 long tdif = NEIGH_CB(skb)->sched_next - now;
1371
1372                 if (tdif <= 0) {
1373                         struct net_device *dev = skb->dev;
1374
1375                         __skb_unlink(skb, &tbl->proxy_queue);
1376                         if (tbl->proxy_redo && netif_running(dev)) {
1377                                 rcu_read_lock();
1378                                 tbl->proxy_redo(skb);
1379                                 rcu_read_unlock();
1380                         } else {
1381                                 kfree_skb(skb);
1382                         }
1383
1384                         dev_put(dev);
1385                 } else if (!sched_next || tdif < sched_next)
1386                         sched_next = tdif;
1387         }
1388         del_timer(&tbl->proxy_timer);
1389         if (sched_next)
1390                 mod_timer(&tbl->proxy_timer, jiffies + sched_next);
1391         spin_unlock(&tbl->proxy_queue.lock);
1392 }
1393
1394 void pneigh_enqueue(struct neigh_table *tbl, struct neigh_parms *p,
1395                     struct sk_buff *skb)
1396 {
1397         unsigned long now = jiffies;
1398
1399         unsigned long sched_next = now + (prandom_u32() %
1400                                           NEIGH_VAR(p, PROXY_DELAY));
1401
1402         if (tbl->proxy_queue.qlen > NEIGH_VAR(p, PROXY_QLEN)) {
1403                 kfree_skb(skb);
1404                 return;
1405         }
1406
1407         NEIGH_CB(skb)->sched_next = sched_next;
1408         NEIGH_CB(skb)->flags |= LOCALLY_ENQUEUED;
1409
1410         spin_lock(&tbl->proxy_queue.lock);
1411         if (del_timer(&tbl->proxy_timer)) {
1412                 if (time_before(tbl->proxy_timer.expires, sched_next))
1413                         sched_next = tbl->proxy_timer.expires;
1414         }
1415         skb_dst_drop(skb);
1416         dev_hold(skb->dev);
1417         __skb_queue_tail(&tbl->proxy_queue, skb);
1418         mod_timer(&tbl->proxy_timer, sched_next);
1419         spin_unlock(&tbl->proxy_queue.lock);
1420 }
1421 EXPORT_SYMBOL(pneigh_enqueue);
1422
1423 static inline struct neigh_parms *lookup_neigh_parms(struct neigh_table *tbl,
1424                                                       struct net *net, int ifindex)
1425 {
1426         struct neigh_parms *p;
1427
1428         list_for_each_entry(p, &tbl->parms_list, list) {
1429                 if ((p->dev && p->dev->ifindex == ifindex && net_eq(neigh_parms_net(p), net)) ||
1430                     (!p->dev && !ifindex && net_eq(net, &init_net)))
1431                         return p;
1432         }
1433
1434         return NULL;
1435 }
1436
1437 struct neigh_parms *neigh_parms_alloc(struct net_device *dev,
1438                                       struct neigh_table *tbl)
1439 {
1440         struct neigh_parms *p;
1441         struct net *net = dev_net(dev);
1442         const struct net_device_ops *ops = dev->netdev_ops;
1443
1444         p = kmemdup(&tbl->parms, sizeof(*p), GFP_KERNEL);
1445         if (p) {
1446                 p->tbl            = tbl;
1447                 atomic_set(&p->refcnt, 1);
1448                 p->reachable_time =
1449                                 neigh_rand_reach_time(NEIGH_VAR(p, BASE_REACHABLE_TIME));
1450                 dev_hold(dev);
1451                 p->dev = dev;
1452                 write_pnet(&p->net, net);
1453                 p->sysctl_table = NULL;
1454
1455                 if (ops->ndo_neigh_setup && ops->ndo_neigh_setup(dev, p)) {
1456                         dev_put(dev);
1457                         kfree(p);
1458                         return NULL;
1459                 }
1460
1461                 write_lock_bh(&tbl->lock);
1462                 list_add(&p->list, &tbl->parms.list);
1463                 write_unlock_bh(&tbl->lock);
1464
1465                 neigh_parms_data_state_cleanall(p);
1466         }
1467         return p;
1468 }
1469 EXPORT_SYMBOL(neigh_parms_alloc);
1470
1471 static void neigh_rcu_free_parms(struct rcu_head *head)
1472 {
1473         struct neigh_parms *parms =
1474                 container_of(head, struct neigh_parms, rcu_head);
1475
1476         neigh_parms_put(parms);
1477 }
1478
1479 void neigh_parms_release(struct neigh_table *tbl, struct neigh_parms *parms)
1480 {
1481         if (!parms || parms == &tbl->parms)
1482                 return;
1483         write_lock_bh(&tbl->lock);
1484         list_del(&parms->list);
1485         parms->dead = 1;
1486         write_unlock_bh(&tbl->lock);
1487         if (parms->dev)
1488                 dev_put(parms->dev);
1489         call_rcu(&parms->rcu_head, neigh_rcu_free_parms);
1490 }
1491 EXPORT_SYMBOL(neigh_parms_release);
1492
1493 static void neigh_parms_destroy(struct neigh_parms *parms)
1494 {
1495         kfree(parms);
1496 }
1497
1498 static struct lock_class_key neigh_table_proxy_queue_class;
1499
1500 static struct neigh_table *neigh_tables[NEIGH_NR_TABLES] __read_mostly;
1501
1502 void neigh_table_init(int index, struct neigh_table *tbl)
1503 {
1504         unsigned long now = jiffies;
1505         unsigned long phsize;
1506
1507         INIT_LIST_HEAD(&tbl->parms_list);
1508         list_add(&tbl->parms.list, &tbl->parms_list);
1509         write_pnet(&tbl->parms.net, &init_net);
1510         atomic_set(&tbl->parms.refcnt, 1);
1511         tbl->parms.reachable_time =
1512                           neigh_rand_reach_time(NEIGH_VAR(&tbl->parms, BASE_REACHABLE_TIME));
1513
1514         tbl->stats = alloc_percpu(struct neigh_statistics);
1515         if (!tbl->stats)
1516                 panic("cannot create neighbour cache statistics");
1517
1518 #ifdef CONFIG_PROC_FS
1519         if (!proc_create_data(tbl->id, 0, init_net.proc_net_stat,
1520                               &neigh_stat_seq_fops, tbl))
1521                 panic("cannot create neighbour proc dir entry");
1522 #endif
1523
1524         RCU_INIT_POINTER(tbl->nht, neigh_hash_alloc(3));
1525
1526         phsize = (PNEIGH_HASHMASK + 1) * sizeof(struct pneigh_entry *);
1527         tbl->phash_buckets = kzalloc(phsize, GFP_KERNEL);
1528
1529         if (!tbl->nht || !tbl->phash_buckets)
1530                 panic("cannot allocate neighbour cache hashes");
1531
1532         if (!tbl->entry_size)
1533                 tbl->entry_size = ALIGN(offsetof(struct neighbour, primary_key) +
1534                                         tbl->key_len, NEIGH_PRIV_ALIGN);
1535         else
1536                 WARN_ON(tbl->entry_size % NEIGH_PRIV_ALIGN);
1537
1538         rwlock_init(&tbl->lock);
1539         INIT_DEFERRABLE_WORK(&tbl->gc_work, neigh_periodic_work);
1540         queue_delayed_work(system_power_efficient_wq, &tbl->gc_work,
1541                         tbl->parms.reachable_time);
1542         setup_timer(&tbl->proxy_timer, neigh_proxy_process, (unsigned long)tbl);
1543         skb_queue_head_init_class(&tbl->proxy_queue,
1544                         &neigh_table_proxy_queue_class);
1545
1546         tbl->last_flush = now;
1547         tbl->last_rand  = now + tbl->parms.reachable_time * 20;
1548
1549         neigh_tables[index] = tbl;
1550 }
1551 EXPORT_SYMBOL(neigh_table_init);
1552
1553 int neigh_table_clear(int index, struct neigh_table *tbl)
1554 {
1555         neigh_tables[index] = NULL;
1556         /* It is not clean... Fix it to unload IPv6 module safely */
1557         cancel_delayed_work_sync(&tbl->gc_work);
1558         del_timer_sync(&tbl->proxy_timer);
1559         pneigh_queue_purge(&tbl->proxy_queue);
1560         neigh_ifdown(tbl, NULL);
1561         if (atomic_read(&tbl->entries))
1562                 pr_crit("neighbour leakage\n");
1563
1564         call_rcu(&rcu_dereference_protected(tbl->nht, 1)->rcu,
1565                  neigh_hash_free_rcu);
1566         tbl->nht = NULL;
1567
1568         kfree(tbl->phash_buckets);
1569         tbl->phash_buckets = NULL;
1570
1571         remove_proc_entry(tbl->id, init_net.proc_net_stat);
1572
1573         free_percpu(tbl->stats);
1574         tbl->stats = NULL;
1575
1576         return 0;
1577 }
1578 EXPORT_SYMBOL(neigh_table_clear);
1579
1580 static struct neigh_table *neigh_find_table(int family)
1581 {
1582         struct neigh_table *tbl = NULL;
1583
1584         switch (family) {
1585         case AF_INET:
1586                 tbl = neigh_tables[NEIGH_ARP_TABLE];
1587                 break;
1588         case AF_INET6:
1589                 tbl = neigh_tables[NEIGH_ND_TABLE];
1590                 break;
1591         case AF_DECnet:
1592                 tbl = neigh_tables[NEIGH_DN_TABLE];
1593                 break;
1594         }
1595
1596         return tbl;
1597 }
1598
1599 static int neigh_delete(struct sk_buff *skb, struct nlmsghdr *nlh,
1600                         struct netlink_ext_ack *extack)
1601 {
1602         struct net *net = sock_net(skb->sk);
1603         struct ndmsg *ndm;
1604         struct nlattr *dst_attr;
1605         struct neigh_table *tbl;
1606         struct neighbour *neigh;
1607         struct net_device *dev = NULL;
1608         int err = -EINVAL;
1609
1610         ASSERT_RTNL();
1611         if (nlmsg_len(nlh) < sizeof(*ndm))
1612                 goto out;
1613
1614         dst_attr = nlmsg_find_attr(nlh, sizeof(*ndm), NDA_DST);
1615         if (dst_attr == NULL)
1616                 goto out;
1617
1618         ndm = nlmsg_data(nlh);
1619         if (ndm->ndm_ifindex) {
1620                 dev = __dev_get_by_index(net, ndm->ndm_ifindex);
1621                 if (dev == NULL) {
1622                         err = -ENODEV;
1623                         goto out;
1624                 }
1625         }
1626
1627         tbl = neigh_find_table(ndm->ndm_family);
1628         if (tbl == NULL)
1629                 return -EAFNOSUPPORT;
1630
1631         if (nla_len(dst_attr) < tbl->key_len)
1632                 goto out;
1633
1634         if (ndm->ndm_flags & NTF_PROXY) {
1635                 err = pneigh_delete(tbl, net, nla_data(dst_attr), dev);
1636                 goto out;
1637         }
1638
1639         if (dev == NULL)
1640                 goto out;
1641
1642         neigh = neigh_lookup(tbl, nla_data(dst_attr), dev);
1643         if (neigh == NULL) {
1644                 err = -ENOENT;
1645                 goto out;
1646         }
1647
1648         err = neigh_update(neigh, NULL, NUD_FAILED,
1649                            NEIGH_UPDATE_F_OVERRIDE |
1650                            NEIGH_UPDATE_F_ADMIN,
1651                            NETLINK_CB(skb).portid);
1652         neigh_release(neigh);
1653
1654 out:
1655         return err;
1656 }
1657
1658 static int neigh_add(struct sk_buff *skb, struct nlmsghdr *nlh,
1659                      struct netlink_ext_ack *extack)
1660 {
1661         int flags = NEIGH_UPDATE_F_ADMIN | NEIGH_UPDATE_F_OVERRIDE;
1662         struct net *net = sock_net(skb->sk);
1663         struct ndmsg *ndm;
1664         struct nlattr *tb[NDA_MAX+1];
1665         struct neigh_table *tbl;
1666         struct net_device *dev = NULL;
1667         struct neighbour *neigh;
1668         void *dst, *lladdr;
1669         int err;
1670
1671         ASSERT_RTNL();
1672         err = nlmsg_parse(nlh, sizeof(*ndm), tb, NDA_MAX, NULL, extack);
1673         if (err < 0)
1674                 goto out;
1675
1676         err = -EINVAL;
1677         if (tb[NDA_DST] == NULL)
1678                 goto out;
1679
1680         ndm = nlmsg_data(nlh);
1681         if (ndm->ndm_ifindex) {
1682                 dev = __dev_get_by_index(net, ndm->ndm_ifindex);
1683                 if (dev == NULL) {
1684                         err = -ENODEV;
1685                         goto out;
1686                 }
1687
1688                 if (tb[NDA_LLADDR] && nla_len(tb[NDA_LLADDR]) < dev->addr_len)
1689                         goto out;
1690         }
1691
1692         tbl = neigh_find_table(ndm->ndm_family);
1693         if (tbl == NULL)
1694                 return -EAFNOSUPPORT;
1695
1696         if (nla_len(tb[NDA_DST]) < tbl->key_len)
1697                 goto out;
1698         dst = nla_data(tb[NDA_DST]);
1699         lladdr = tb[NDA_LLADDR] ? nla_data(tb[NDA_LLADDR]) : NULL;
1700
1701         if (ndm->ndm_flags & NTF_PROXY) {
1702                 struct pneigh_entry *pn;
1703
1704                 err = -ENOBUFS;
1705                 pn = pneigh_lookup(tbl, net, dst, dev, 1);
1706                 if (pn) {
1707                         pn->flags = ndm->ndm_flags;
1708                         err = 0;
1709                 }
1710                 goto out;
1711         }
1712
1713         if (dev == NULL)
1714                 goto out;
1715
1716         neigh = neigh_lookup(tbl, dst, dev);
1717         if (neigh == NULL) {
1718                 if (!(nlh->nlmsg_flags & NLM_F_CREATE)) {
1719                         err = -ENOENT;
1720                         goto out;
1721                 }
1722
1723                 neigh = __neigh_lookup_errno(tbl, dst, dev);
1724                 if (IS_ERR(neigh)) {
1725                         err = PTR_ERR(neigh);
1726                         goto out;
1727                 }
1728         } else {
1729                 if (nlh->nlmsg_flags & NLM_F_EXCL) {
1730                         err = -EEXIST;
1731                         neigh_release(neigh);
1732                         goto out;
1733                 }
1734
1735                 if (!(nlh->nlmsg_flags & NLM_F_REPLACE))
1736                         flags &= ~NEIGH_UPDATE_F_OVERRIDE;
1737         }
1738
1739         if (ndm->ndm_flags & NTF_USE) {
1740                 neigh_event_send(neigh, NULL);
1741                 err = 0;
1742         } else
1743                 err = neigh_update(neigh, lladdr, ndm->ndm_state, flags,
1744                                    NETLINK_CB(skb).portid);
1745         neigh_release(neigh);
1746
1747 out:
1748         return err;
1749 }
1750
1751 static int neightbl_fill_parms(struct sk_buff *skb, struct neigh_parms *parms)
1752 {
1753         struct nlattr *nest;
1754
1755         nest = nla_nest_start(skb, NDTA_PARMS);
1756         if (nest == NULL)
1757                 return -ENOBUFS;
1758
1759         if ((parms->dev &&
1760              nla_put_u32(skb, NDTPA_IFINDEX, parms->dev->ifindex)) ||
1761             nla_put_u32(skb, NDTPA_REFCNT, atomic_read(&parms->refcnt)) ||
1762             nla_put_u32(skb, NDTPA_QUEUE_LENBYTES,
1763                         NEIGH_VAR(parms, QUEUE_LEN_BYTES)) ||
1764             /* approximative value for deprecated QUEUE_LEN (in packets) */
1765             nla_put_u32(skb, NDTPA_QUEUE_LEN,
1766                         NEIGH_VAR(parms, QUEUE_LEN_BYTES) / SKB_TRUESIZE(ETH_FRAME_LEN)) ||
1767             nla_put_u32(skb, NDTPA_PROXY_QLEN, NEIGH_VAR(parms, PROXY_QLEN)) ||
1768             nla_put_u32(skb, NDTPA_APP_PROBES, NEIGH_VAR(parms, APP_PROBES)) ||
1769             nla_put_u32(skb, NDTPA_UCAST_PROBES,
1770                         NEIGH_VAR(parms, UCAST_PROBES)) ||
1771             nla_put_u32(skb, NDTPA_MCAST_PROBES,
1772                         NEIGH_VAR(parms, MCAST_PROBES)) ||
1773             nla_put_u32(skb, NDTPA_MCAST_REPROBES,
1774                         NEIGH_VAR(parms, MCAST_REPROBES)) ||
1775             nla_put_msecs(skb, NDTPA_REACHABLE_TIME, parms->reachable_time,
1776                           NDTPA_PAD) ||
1777             nla_put_msecs(skb, NDTPA_BASE_REACHABLE_TIME,
1778                           NEIGH_VAR(parms, BASE_REACHABLE_TIME), NDTPA_PAD) ||
1779             nla_put_msecs(skb, NDTPA_GC_STALETIME,
1780                           NEIGH_VAR(parms, GC_STALETIME), NDTPA_PAD) ||
1781             nla_put_msecs(skb, NDTPA_DELAY_PROBE_TIME,
1782                           NEIGH_VAR(parms, DELAY_PROBE_TIME), NDTPA_PAD) ||
1783             nla_put_msecs(skb, NDTPA_RETRANS_TIME,
1784                           NEIGH_VAR(parms, RETRANS_TIME), NDTPA_PAD) ||
1785             nla_put_msecs(skb, NDTPA_ANYCAST_DELAY,
1786                           NEIGH_VAR(parms, ANYCAST_DELAY), NDTPA_PAD) ||
1787             nla_put_msecs(skb, NDTPA_PROXY_DELAY,
1788                           NEIGH_VAR(parms, PROXY_DELAY), NDTPA_PAD) ||
1789             nla_put_msecs(skb, NDTPA_LOCKTIME,
1790                           NEIGH_VAR(parms, LOCKTIME), NDTPA_PAD))
1791                 goto nla_put_failure;
1792         return nla_nest_end(skb, nest);
1793
1794 nla_put_failure:
1795         nla_nest_cancel(skb, nest);
1796         return -EMSGSIZE;
1797 }
1798
1799 static int neightbl_fill_info(struct sk_buff *skb, struct neigh_table *tbl,
1800                               u32 pid, u32 seq, int type, int flags)
1801 {
1802         struct nlmsghdr *nlh;
1803         struct ndtmsg *ndtmsg;
1804
1805         nlh = nlmsg_put(skb, pid, seq, type, sizeof(*ndtmsg), flags);
1806         if (nlh == NULL)
1807                 return -EMSGSIZE;
1808
1809         ndtmsg = nlmsg_data(nlh);
1810
1811         read_lock_bh(&tbl->lock);
1812         ndtmsg->ndtm_family = tbl->family;
1813         ndtmsg->ndtm_pad1   = 0;
1814         ndtmsg->ndtm_pad2   = 0;
1815
1816         if (nla_put_string(skb, NDTA_NAME, tbl->id) ||
1817             nla_put_msecs(skb, NDTA_GC_INTERVAL, tbl->gc_interval, NDTA_PAD) ||
1818             nla_put_u32(skb, NDTA_THRESH1, tbl->gc_thresh1) ||
1819             nla_put_u32(skb, NDTA_THRESH2, tbl->gc_thresh2) ||
1820             nla_put_u32(skb, NDTA_THRESH3, tbl->gc_thresh3))
1821                 goto nla_put_failure;
1822         {
1823                 unsigned long now = jiffies;
1824                 unsigned int flush_delta = now - tbl->last_flush;
1825                 unsigned int rand_delta = now - tbl->last_rand;
1826                 struct neigh_hash_table *nht;
1827                 struct ndt_config ndc = {
1828                         .ndtc_key_len           = tbl->key_len,
1829                         .ndtc_entry_size        = tbl->entry_size,
1830                         .ndtc_entries           = atomic_read(&tbl->entries),
1831                         .ndtc_last_flush        = jiffies_to_msecs(flush_delta),
1832                         .ndtc_last_rand         = jiffies_to_msecs(rand_delta),
1833                         .ndtc_proxy_qlen        = tbl->proxy_queue.qlen,
1834                 };
1835
1836                 rcu_read_lock_bh();
1837                 nht = rcu_dereference_bh(tbl->nht);
1838                 ndc.ndtc_hash_rnd = nht->hash_rnd[0];
1839                 ndc.ndtc_hash_mask = ((1 << nht->hash_shift) - 1);
1840                 rcu_read_unlock_bh();
1841
1842                 if (nla_put(skb, NDTA_CONFIG, sizeof(ndc), &ndc))
1843                         goto nla_put_failure;
1844         }
1845
1846         {
1847                 int cpu;
1848                 struct ndt_stats ndst;
1849
1850                 memset(&ndst, 0, sizeof(ndst));
1851
1852                 for_each_possible_cpu(cpu) {
1853                         struct neigh_statistics *st;
1854
1855                         st = per_cpu_ptr(tbl->stats, cpu);
1856                         ndst.ndts_allocs                += st->allocs;
1857                         ndst.ndts_destroys              += st->destroys;
1858                         ndst.ndts_hash_grows            += st->hash_grows;
1859                         ndst.ndts_res_failed            += st->res_failed;
1860                         ndst.ndts_lookups               += st->lookups;
1861                         ndst.ndts_hits                  += st->hits;
1862                         ndst.ndts_rcv_probes_mcast      += st->rcv_probes_mcast;
1863                         ndst.ndts_rcv_probes_ucast      += st->rcv_probes_ucast;
1864                         ndst.ndts_periodic_gc_runs      += st->periodic_gc_runs;
1865                         ndst.ndts_forced_gc_runs        += st->forced_gc_runs;
1866                         ndst.ndts_table_fulls           += st->table_fulls;
1867                 }
1868
1869                 if (nla_put_64bit(skb, NDTA_STATS, sizeof(ndst), &ndst,
1870                                   NDTA_PAD))
1871                         goto nla_put_failure;
1872         }
1873
1874         BUG_ON(tbl->parms.dev);
1875         if (neightbl_fill_parms(skb, &tbl->parms) < 0)
1876                 goto nla_put_failure;
1877
1878         read_unlock_bh(&tbl->lock);
1879         nlmsg_end(skb, nlh);
1880         return 0;
1881
1882 nla_put_failure:
1883         read_unlock_bh(&tbl->lock);
1884         nlmsg_cancel(skb, nlh);
1885         return -EMSGSIZE;
1886 }
1887
1888 static int neightbl_fill_param_info(struct sk_buff *skb,
1889                                     struct neigh_table *tbl,
1890                                     struct neigh_parms *parms,
1891                                     u32 pid, u32 seq, int type,
1892                                     unsigned int flags)
1893 {
1894         struct ndtmsg *ndtmsg;
1895         struct nlmsghdr *nlh;
1896
1897         nlh = nlmsg_put(skb, pid, seq, type, sizeof(*ndtmsg), flags);
1898         if (nlh == NULL)
1899                 return -EMSGSIZE;
1900
1901         ndtmsg = nlmsg_data(nlh);
1902
1903         read_lock_bh(&tbl->lock);
1904         ndtmsg->ndtm_family = tbl->family;
1905         ndtmsg->ndtm_pad1   = 0;
1906         ndtmsg->ndtm_pad2   = 0;
1907
1908         if (nla_put_string(skb, NDTA_NAME, tbl->id) < 0 ||
1909             neightbl_fill_parms(skb, parms) < 0)
1910                 goto errout;
1911
1912         read_unlock_bh(&tbl->lock);
1913         nlmsg_end(skb, nlh);
1914         return 0;
1915 errout:
1916         read_unlock_bh(&tbl->lock);
1917         nlmsg_cancel(skb, nlh);
1918         return -EMSGSIZE;
1919 }
1920
1921 static const struct nla_policy nl_neightbl_policy[NDTA_MAX+1] = {
1922         [NDTA_NAME]             = { .type = NLA_STRING },
1923         [NDTA_THRESH1]          = { .type = NLA_U32 },
1924         [NDTA_THRESH2]          = { .type = NLA_U32 },
1925         [NDTA_THRESH3]          = { .type = NLA_U32 },
1926         [NDTA_GC_INTERVAL]      = { .type = NLA_U64 },
1927         [NDTA_PARMS]            = { .type = NLA_NESTED },
1928 };
1929
1930 static const struct nla_policy nl_ntbl_parm_policy[NDTPA_MAX+1] = {
1931         [NDTPA_IFINDEX]                 = { .type = NLA_U32 },
1932         [NDTPA_QUEUE_LEN]               = { .type = NLA_U32 },
1933         [NDTPA_PROXY_QLEN]              = { .type = NLA_U32 },
1934         [NDTPA_APP_PROBES]              = { .type = NLA_U32 },
1935         [NDTPA_UCAST_PROBES]            = { .type = NLA_U32 },
1936         [NDTPA_MCAST_PROBES]            = { .type = NLA_U32 },
1937         [NDTPA_MCAST_REPROBES]          = { .type = NLA_U32 },
1938         [NDTPA_BASE_REACHABLE_TIME]     = { .type = NLA_U64 },
1939         [NDTPA_GC_STALETIME]            = { .type = NLA_U64 },
1940         [NDTPA_DELAY_PROBE_TIME]        = { .type = NLA_U64 },
1941         [NDTPA_RETRANS_TIME]            = { .type = NLA_U64 },
1942         [NDTPA_ANYCAST_DELAY]           = { .type = NLA_U64 },
1943         [NDTPA_PROXY_DELAY]             = { .type = NLA_U64 },
1944         [NDTPA_LOCKTIME]                = { .type = NLA_U64 },
1945 };
1946
1947 static int neightbl_set(struct sk_buff *skb, struct nlmsghdr *nlh,
1948                         struct netlink_ext_ack *extack)
1949 {
1950         struct net *net = sock_net(skb->sk);
1951         struct neigh_table *tbl;
1952         struct ndtmsg *ndtmsg;
1953         struct nlattr *tb[NDTA_MAX+1];
1954         bool found = false;
1955         int err, tidx;
1956
1957         err = nlmsg_parse(nlh, sizeof(*ndtmsg), tb, NDTA_MAX,
1958                           nl_neightbl_policy, extack);
1959         if (err < 0)
1960                 goto errout;
1961
1962         if (tb[NDTA_NAME] == NULL) {
1963                 err = -EINVAL;
1964                 goto errout;
1965         }
1966
1967         ndtmsg = nlmsg_data(nlh);
1968
1969         for (tidx = 0; tidx < NEIGH_NR_TABLES; tidx++) {
1970                 tbl = neigh_tables[tidx];
1971                 if (!tbl)
1972                         continue;
1973                 if (ndtmsg->ndtm_family && tbl->family != ndtmsg->ndtm_family)
1974                         continue;
1975                 if (nla_strcmp(tb[NDTA_NAME], tbl->id) == 0) {
1976                         found = true;
1977                         break;
1978                 }
1979         }
1980
1981         if (!found)
1982                 return -ENOENT;
1983
1984         /*
1985          * We acquire tbl->lock to be nice to the periodic timers and
1986          * make sure they always see a consistent set of values.
1987          */
1988         write_lock_bh(&tbl->lock);
1989
1990         if (tb[NDTA_PARMS]) {
1991                 struct nlattr *tbp[NDTPA_MAX+1];
1992                 struct neigh_parms *p;
1993                 int i, ifindex = 0;
1994
1995                 err = nla_parse_nested(tbp, NDTPA_MAX, tb[NDTA_PARMS],
1996                                        nl_ntbl_parm_policy, extack);
1997                 if (err < 0)
1998                         goto errout_tbl_lock;
1999
2000                 if (tbp[NDTPA_IFINDEX])
2001                         ifindex = nla_get_u32(tbp[NDTPA_IFINDEX]);
2002
2003                 p = lookup_neigh_parms(tbl, net, ifindex);
2004                 if (p == NULL) {
2005                         err = -ENOENT;
2006                         goto errout_tbl_lock;
2007                 }
2008
2009                 for (i = 1; i <= NDTPA_MAX; i++) {
2010                         if (tbp[i] == NULL)
2011                                 continue;
2012
2013                         switch (i) {
2014                         case NDTPA_QUEUE_LEN:
2015                                 NEIGH_VAR_SET(p, QUEUE_LEN_BYTES,
2016                                               nla_get_u32(tbp[i]) *
2017                                               SKB_TRUESIZE(ETH_FRAME_LEN));
2018                                 break;
2019                         case NDTPA_QUEUE_LENBYTES:
2020                                 NEIGH_VAR_SET(p, QUEUE_LEN_BYTES,
2021                                               nla_get_u32(tbp[i]));
2022                                 break;
2023                         case NDTPA_PROXY_QLEN:
2024                                 NEIGH_VAR_SET(p, PROXY_QLEN,
2025                                               nla_get_u32(tbp[i]));
2026                                 break;
2027                         case NDTPA_APP_PROBES:
2028                                 NEIGH_VAR_SET(p, APP_PROBES,
2029                                               nla_get_u32(tbp[i]));
2030                                 break;
2031                         case NDTPA_UCAST_PROBES:
2032                                 NEIGH_VAR_SET(p, UCAST_PROBES,
2033                                               nla_get_u32(tbp[i]));
2034                                 break;
2035                         case NDTPA_MCAST_PROBES:
2036                                 NEIGH_VAR_SET(p, MCAST_PROBES,
2037                                               nla_get_u32(tbp[i]));
2038                                 break;
2039                         case NDTPA_MCAST_REPROBES:
2040                                 NEIGH_VAR_SET(p, MCAST_REPROBES,
2041                                               nla_get_u32(tbp[i]));
2042                                 break;
2043                         case NDTPA_BASE_REACHABLE_TIME:
2044                                 NEIGH_VAR_SET(p, BASE_REACHABLE_TIME,
2045                                               nla_get_msecs(tbp[i]));
2046                                 /* update reachable_time as well, otherwise, the change will
2047                                  * only be effective after the next time neigh_periodic_work
2048                                  * decides to recompute it (can be multiple minutes)
2049                                  */
2050                                 p->reachable_time =
2051                                         neigh_rand_reach_time(NEIGH_VAR(p, BASE_REACHABLE_TIME));
2052                                 break;
2053                         case NDTPA_GC_STALETIME:
2054                                 NEIGH_VAR_SET(p, GC_STALETIME,
2055                                               nla_get_msecs(tbp[i]));
2056                                 break;
2057                         case NDTPA_DELAY_PROBE_TIME:
2058                                 NEIGH_VAR_SET(p, DELAY_PROBE_TIME,
2059                                               nla_get_msecs(tbp[i]));
2060                                 call_netevent_notifiers(NETEVENT_DELAY_PROBE_TIME_UPDATE, p);
2061                                 break;
2062                         case NDTPA_RETRANS_TIME:
2063                                 NEIGH_VAR_SET(p, RETRANS_TIME,
2064                                               nla_get_msecs(tbp[i]));
2065                                 break;
2066                         case NDTPA_ANYCAST_DELAY:
2067                                 NEIGH_VAR_SET(p, ANYCAST_DELAY,
2068                                               nla_get_msecs(tbp[i]));
2069                                 break;
2070                         case NDTPA_PROXY_DELAY:
2071                                 NEIGH_VAR_SET(p, PROXY_DELAY,
2072                                               nla_get_msecs(tbp[i]));
2073                                 break;
2074                         case NDTPA_LOCKTIME:
2075                                 NEIGH_VAR_SET(p, LOCKTIME,
2076                                               nla_get_msecs(tbp[i]));
2077                                 break;
2078                         }
2079                 }
2080         }
2081
2082         err = -ENOENT;
2083         if ((tb[NDTA_THRESH1] || tb[NDTA_THRESH2] ||
2084              tb[NDTA_THRESH3] || tb[NDTA_GC_INTERVAL]) &&
2085             !net_eq(net, &init_net))
2086                 goto errout_tbl_lock;
2087
2088         if (tb[NDTA_THRESH1])
2089                 tbl->gc_thresh1 = nla_get_u32(tb[NDTA_THRESH1]);
2090
2091         if (tb[NDTA_THRESH2])
2092                 tbl->gc_thresh2 = nla_get_u32(tb[NDTA_THRESH2]);
2093
2094         if (tb[NDTA_THRESH3])
2095                 tbl->gc_thresh3 = nla_get_u32(tb[NDTA_THRESH3]);
2096
2097         if (tb[NDTA_GC_INTERVAL])
2098                 tbl->gc_interval = nla_get_msecs(tb[NDTA_GC_INTERVAL]);
2099
2100         err = 0;
2101
2102 errout_tbl_lock:
2103         write_unlock_bh(&tbl->lock);
2104 errout:
2105         return err;
2106 }
2107
2108 static int neightbl_dump_info(struct sk_buff *skb, struct netlink_callback *cb)
2109 {
2110         struct net *net = sock_net(skb->sk);
2111         int family, tidx, nidx = 0;
2112         int tbl_skip = cb->args[0];
2113         int neigh_skip = cb->args[1];
2114         struct neigh_table *tbl;
2115
2116         family = ((struct rtgenmsg *) nlmsg_data(cb->nlh))->rtgen_family;
2117
2118         for (tidx = 0; tidx < NEIGH_NR_TABLES; tidx++) {
2119                 struct neigh_parms *p;
2120
2121                 tbl = neigh_tables[tidx];
2122                 if (!tbl)
2123                         continue;
2124
2125                 if (tidx < tbl_skip || (family && tbl->family != family))
2126                         continue;
2127
2128                 if (neightbl_fill_info(skb, tbl, NETLINK_CB(cb->skb).portid,
2129                                        cb->nlh->nlmsg_seq, RTM_NEWNEIGHTBL,
2130                                        NLM_F_MULTI) < 0)
2131                         break;
2132
2133                 nidx = 0;
2134                 p = list_next_entry(&tbl->parms, list);
2135                 list_for_each_entry_from(p, &tbl->parms_list, list) {
2136                         if (!net_eq(neigh_parms_net(p), net))
2137                                 continue;
2138
2139                         if (nidx < neigh_skip)
2140                                 goto next;
2141
2142                         if (neightbl_fill_param_info(skb, tbl, p,
2143                                                      NETLINK_CB(cb->skb).portid,
2144                                                      cb->nlh->nlmsg_seq,
2145                                                      RTM_NEWNEIGHTBL,
2146                                                      NLM_F_MULTI) < 0)
2147                                 goto out;
2148                 next:
2149                         nidx++;
2150                 }
2151
2152                 neigh_skip = 0;
2153         }
2154 out:
2155         cb->args[0] = tidx;
2156         cb->args[1] = nidx;
2157
2158         return skb->len;
2159 }
2160
2161 static int neigh_fill_info(struct sk_buff *skb, struct neighbour *neigh,
2162                            u32 pid, u32 seq, int type, unsigned int flags)
2163 {
2164         unsigned long now = jiffies;
2165         struct nda_cacheinfo ci;
2166         struct nlmsghdr *nlh;
2167         struct ndmsg *ndm;
2168
2169         nlh = nlmsg_put(skb, pid, seq, type, sizeof(*ndm), flags);
2170         if (nlh == NULL)
2171                 return -EMSGSIZE;
2172
2173         ndm = nlmsg_data(nlh);
2174         ndm->ndm_family  = neigh->ops->family;
2175         ndm->ndm_pad1    = 0;
2176         ndm->ndm_pad2    = 0;
2177         ndm->ndm_flags   = neigh->flags;
2178         ndm->ndm_type    = neigh->type;
2179         ndm->ndm_ifindex = neigh->dev->ifindex;
2180
2181         if (nla_put(skb, NDA_DST, neigh->tbl->key_len, neigh->primary_key))
2182                 goto nla_put_failure;
2183
2184         read_lock_bh(&neigh->lock);
2185         ndm->ndm_state   = neigh->nud_state;
2186         if (neigh->nud_state & NUD_VALID) {
2187                 char haddr[MAX_ADDR_LEN];
2188
2189                 neigh_ha_snapshot(haddr, neigh, neigh->dev);
2190                 if (nla_put(skb, NDA_LLADDR, neigh->dev->addr_len, haddr) < 0) {
2191                         read_unlock_bh(&neigh->lock);
2192                         goto nla_put_failure;
2193                 }
2194         }
2195
2196         ci.ndm_used      = jiffies_to_clock_t(now - neigh->used);
2197         ci.ndm_confirmed = jiffies_to_clock_t(now - neigh->confirmed);
2198         ci.ndm_updated   = jiffies_to_clock_t(now - neigh->updated);
2199         ci.ndm_refcnt    = atomic_read(&neigh->refcnt) - 1;
2200         read_unlock_bh(&neigh->lock);
2201
2202         if (nla_put_u32(skb, NDA_PROBES, atomic_read(&neigh->probes)) ||
2203             nla_put(skb, NDA_CACHEINFO, sizeof(ci), &ci))
2204                 goto nla_put_failure;
2205
2206         nlmsg_end(skb, nlh);
2207         return 0;
2208
2209 nla_put_failure:
2210         nlmsg_cancel(skb, nlh);
2211         return -EMSGSIZE;
2212 }
2213
2214 static int pneigh_fill_info(struct sk_buff *skb, struct pneigh_entry *pn,
2215                             u32 pid, u32 seq, int type, unsigned int flags,
2216                             struct neigh_table *tbl)
2217 {
2218         struct nlmsghdr *nlh;
2219         struct ndmsg *ndm;
2220
2221         nlh = nlmsg_put(skb, pid, seq, type, sizeof(*ndm), flags);
2222         if (nlh == NULL)
2223                 return -EMSGSIZE;
2224
2225         ndm = nlmsg_data(nlh);
2226         ndm->ndm_family  = tbl->family;
2227         ndm->ndm_pad1    = 0;
2228         ndm->ndm_pad2    = 0;
2229         ndm->ndm_flags   = pn->flags | NTF_PROXY;
2230         ndm->ndm_type    = RTN_UNICAST;
2231         ndm->ndm_ifindex = pn->dev ? pn->dev->ifindex : 0;
2232         ndm->ndm_state   = NUD_NONE;
2233
2234         if (nla_put(skb, NDA_DST, tbl->key_len, pn->key))
2235                 goto nla_put_failure;
2236
2237         nlmsg_end(skb, nlh);
2238         return 0;
2239
2240 nla_put_failure:
2241         nlmsg_cancel(skb, nlh);
2242         return -EMSGSIZE;
2243 }
2244
2245 static void neigh_update_notify(struct neighbour *neigh, u32 nlmsg_pid)
2246 {
2247         call_netevent_notifiers(NETEVENT_NEIGH_UPDATE, neigh);
2248         __neigh_notify(neigh, RTM_NEWNEIGH, 0, nlmsg_pid);
2249 }
2250
2251 static bool neigh_master_filtered(struct net_device *dev, int master_idx)
2252 {
2253         struct net_device *master;
2254
2255         if (!master_idx)
2256                 return false;
2257
2258         master = netdev_master_upper_dev_get(dev);
2259         if (!master || master->ifindex != master_idx)
2260                 return true;
2261
2262         return false;
2263 }
2264
2265 static bool neigh_ifindex_filtered(struct net_device *dev, int filter_idx)
2266 {
2267         if (filter_idx && dev->ifindex != filter_idx)
2268                 return true;
2269
2270         return false;
2271 }
2272
2273 static int neigh_dump_table(struct neigh_table *tbl, struct sk_buff *skb,
2274                             struct netlink_callback *cb)
2275 {
2276         struct net *net = sock_net(skb->sk);
2277         const struct nlmsghdr *nlh = cb->nlh;
2278         struct nlattr *tb[NDA_MAX + 1];
2279         struct neighbour *n;
2280         int rc, h, s_h = cb->args[1];
2281         int idx, s_idx = idx = cb->args[2];
2282         struct neigh_hash_table *nht;
2283         int filter_master_idx = 0, filter_idx = 0;
2284         unsigned int flags = NLM_F_MULTI;
2285         int err;
2286
2287         err = nlmsg_parse(nlh, sizeof(struct ndmsg), tb, NDA_MAX, NULL, NULL);
2288         if (!err) {
2289                 if (tb[NDA_IFINDEX])
2290                         filter_idx = nla_get_u32(tb[NDA_IFINDEX]);
2291
2292                 if (tb[NDA_MASTER])
2293                         filter_master_idx = nla_get_u32(tb[NDA_MASTER]);
2294
2295                 if (filter_idx || filter_master_idx)
2296                         flags |= NLM_F_DUMP_FILTERED;
2297         }
2298
2299         rcu_read_lock_bh();
2300         nht = rcu_dereference_bh(tbl->nht);
2301
2302         for (h = s_h; h < (1 << nht->hash_shift); h++) {
2303                 if (h > s_h)
2304                         s_idx = 0;
2305                 for (n = rcu_dereference_bh(nht->hash_buckets[h]), idx = 0;
2306                      n != NULL;
2307                      n = rcu_dereference_bh(n->next)) {
2308                         if (idx < s_idx || !net_eq(dev_net(n->dev), net))
2309                                 goto next;
2310                         if (neigh_ifindex_filtered(n->dev, filter_idx) ||
2311                             neigh_master_filtered(n->dev, filter_master_idx))
2312                                 goto next;
2313                         if (neigh_fill_info(skb, n, NETLINK_CB(cb->skb).portid,
2314                                             cb->nlh->nlmsg_seq,
2315                                             RTM_NEWNEIGH,
2316                                             flags) < 0) {
2317                                 rc = -1;
2318                                 goto out;
2319                         }
2320 next:
2321                         idx++;
2322                 }
2323         }
2324         rc = skb->len;
2325 out:
2326         rcu_read_unlock_bh();
2327         cb->args[1] = h;
2328         cb->args[2] = idx;
2329         return rc;
2330 }
2331
2332 static int pneigh_dump_table(struct neigh_table *tbl, struct sk_buff *skb,
2333                              struct netlink_callback *cb)
2334 {
2335         struct pneigh_entry *n;
2336         struct net *net = sock_net(skb->sk);
2337         int rc, h, s_h = cb->args[3];
2338         int idx, s_idx = idx = cb->args[4];
2339
2340         read_lock_bh(&tbl->lock);
2341
2342         for (h = s_h; h <= PNEIGH_HASHMASK; h++) {
2343                 if (h > s_h)
2344                         s_idx = 0;
2345                 for (n = tbl->phash_buckets[h], idx = 0; n; n = n->next) {
2346                         if (idx < s_idx || pneigh_net(n) != net)
2347                                 goto next;
2348                         if (pneigh_fill_info(skb, n, NETLINK_CB(cb->skb).portid,
2349                                             cb->nlh->nlmsg_seq,
2350                                             RTM_NEWNEIGH,
2351                                             NLM_F_MULTI, tbl) < 0) {
2352                                 read_unlock_bh(&tbl->lock);
2353                                 rc = -1;
2354                                 goto out;
2355                         }
2356                 next:
2357                         idx++;
2358                 }
2359         }
2360
2361         read_unlock_bh(&tbl->lock);
2362         rc = skb->len;
2363 out:
2364         cb->args[3] = h;
2365         cb->args[4] = idx;
2366         return rc;
2367
2368 }
2369
2370 static int neigh_dump_info(struct sk_buff *skb, struct netlink_callback *cb)
2371 {
2372         struct neigh_table *tbl;
2373         int t, family, s_t;
2374         int proxy = 0;
2375         int err;
2376
2377         family = ((struct rtgenmsg *) nlmsg_data(cb->nlh))->rtgen_family;
2378
2379         /* check for full ndmsg structure presence, family member is
2380          * the same for both structures
2381          */
2382         if (nlmsg_len(cb->nlh) >= sizeof(struct ndmsg) &&
2383             ((struct ndmsg *) nlmsg_data(cb->nlh))->ndm_flags == NTF_PROXY)
2384                 proxy = 1;
2385
2386         s_t = cb->args[0];
2387
2388         for (t = 0; t < NEIGH_NR_TABLES; t++) {
2389                 tbl = neigh_tables[t];
2390
2391                 if (!tbl)
2392                         continue;
2393                 if (t < s_t || (family && tbl->family != family))
2394                         continue;
2395                 if (t > s_t)
2396                         memset(&cb->args[1], 0, sizeof(cb->args) -
2397                                                 sizeof(cb->args[0]));
2398                 if (proxy)
2399                         err = pneigh_dump_table(tbl, skb, cb);
2400                 else
2401                         err = neigh_dump_table(tbl, skb, cb);
2402                 if (err < 0)
2403                         break;
2404         }
2405
2406         cb->args[0] = t;
2407         return skb->len;
2408 }
2409
2410 void neigh_for_each(struct neigh_table *tbl, void (*cb)(struct neighbour *, void *), void *cookie)
2411 {
2412         int chain;
2413         struct neigh_hash_table *nht;
2414
2415         rcu_read_lock_bh();
2416         nht = rcu_dereference_bh(tbl->nht);
2417
2418         read_lock(&tbl->lock); /* avoid resizes */
2419         for (chain = 0; chain < (1 << nht->hash_shift); chain++) {
2420                 struct neighbour *n;
2421
2422                 for (n = rcu_dereference_bh(nht->hash_buckets[chain]);
2423                      n != NULL;
2424                      n = rcu_dereference_bh(n->next))
2425                         cb(n, cookie);
2426         }
2427         read_unlock(&tbl->lock);
2428         rcu_read_unlock_bh();
2429 }
2430 EXPORT_SYMBOL(neigh_for_each);
2431
2432 /* The tbl->lock must be held as a writer and BH disabled. */
2433 void __neigh_for_each_release(struct neigh_table *tbl,
2434                               int (*cb)(struct neighbour *))
2435 {
2436         int chain;
2437         struct neigh_hash_table *nht;
2438
2439         nht = rcu_dereference_protected(tbl->nht,
2440                                         lockdep_is_held(&tbl->lock));
2441         for (chain = 0; chain < (1 << nht->hash_shift); chain++) {
2442                 struct neighbour *n;
2443                 struct neighbour __rcu **np;
2444
2445                 np = &nht->hash_buckets[chain];
2446                 while ((n = rcu_dereference_protected(*np,
2447                                         lockdep_is_held(&tbl->lock))) != NULL) {
2448                         int release;
2449
2450                         write_lock(&n->lock);
2451                         release = cb(n);
2452                         if (release) {
2453                                 rcu_assign_pointer(*np,
2454                                         rcu_dereference_protected(n->next,
2455                                                 lockdep_is_held(&tbl->lock)));
2456                                 n->dead = 1;
2457                         } else
2458                                 np = &n->next;
2459                         write_unlock(&n->lock);
2460                         if (release)
2461                                 neigh_cleanup_and_release(n);
2462                 }
2463         }
2464 }
2465 EXPORT_SYMBOL(__neigh_for_each_release);
2466
2467 int neigh_xmit(int index, struct net_device *dev,
2468                const void *addr, struct sk_buff *skb)
2469 {
2470         int err = -EAFNOSUPPORT;
2471         if (likely(index < NEIGH_NR_TABLES)) {
2472                 struct neigh_table *tbl;
2473                 struct neighbour *neigh;
2474
2475                 tbl = neigh_tables[index];
2476                 if (!tbl)
2477                         goto out;
2478                 rcu_read_lock_bh();
2479                 neigh = __neigh_lookup_noref(tbl, addr, dev);
2480                 if (!neigh)
2481                         neigh = __neigh_create(tbl, addr, dev, false);
2482                 err = PTR_ERR(neigh);
2483                 if (IS_ERR(neigh)) {
2484                         rcu_read_unlock_bh();
2485                         goto out_kfree_skb;
2486                 }
2487                 err = neigh->output(neigh, skb);
2488                 rcu_read_unlock_bh();
2489         }
2490         else if (index == NEIGH_LINK_TABLE) {
2491                 err = dev_hard_header(skb, dev, ntohs(skb->protocol),
2492                                       addr, NULL, skb->len);
2493                 if (err < 0)
2494                         goto out_kfree_skb;
2495                 err = dev_queue_xmit(skb);
2496         }
2497 out:
2498         return err;
2499 out_kfree_skb:
2500         kfree_skb(skb);
2501         goto out;
2502 }
2503 EXPORT_SYMBOL(neigh_xmit);
2504
2505 #ifdef CONFIG_PROC_FS
2506
2507 static struct neighbour *neigh_get_first(struct seq_file *seq)
2508 {
2509         struct neigh_seq_state *state = seq->private;
2510         struct net *net = seq_file_net(seq);
2511         struct neigh_hash_table *nht = state->nht;
2512         struct neighbour *n = NULL;
2513         int bucket = state->bucket;
2514
2515         state->flags &= ~NEIGH_SEQ_IS_PNEIGH;
2516         for (bucket = 0; bucket < (1 << nht->hash_shift); bucket++) {
2517                 n = rcu_dereference_bh(nht->hash_buckets[bucket]);
2518
2519                 while (n) {
2520                         if (!net_eq(dev_net(n->dev), net))
2521                                 goto next;
2522                         if (state->neigh_sub_iter) {
2523                                 loff_t fakep = 0;
2524                                 void *v;
2525
2526                                 v = state->neigh_sub_iter(state, n, &fakep);
2527                                 if (!v)
2528                                         goto next;
2529                         }
2530                         if (!(state->flags & NEIGH_SEQ_SKIP_NOARP))
2531                                 break;
2532                         if (n->nud_state & ~NUD_NOARP)
2533                                 break;
2534 next:
2535                         n = rcu_dereference_bh(n->next);
2536                 }
2537
2538                 if (n)
2539                         break;
2540         }
2541         state->bucket = bucket;
2542
2543         return n;
2544 }
2545
2546 static struct neighbour *neigh_get_next(struct seq_file *seq,
2547                                         struct neighbour *n,
2548                                         loff_t *pos)
2549 {
2550         struct neigh_seq_state *state = seq->private;
2551         struct net *net = seq_file_net(seq);
2552         struct neigh_hash_table *nht = state->nht;
2553
2554         if (state->neigh_sub_iter) {
2555                 void *v = state->neigh_sub_iter(state, n, pos);
2556                 if (v)
2557                         return n;
2558         }
2559         n = rcu_dereference_bh(n->next);
2560
2561         while (1) {
2562                 while (n) {
2563                         if (!net_eq(dev_net(n->dev), net))
2564                                 goto next;
2565                         if (state->neigh_sub_iter) {
2566                                 void *v = state->neigh_sub_iter(state, n, pos);
2567                                 if (v)
2568                                         return n;
2569                                 goto next;
2570                         }
2571                         if (!(state->flags & NEIGH_SEQ_SKIP_NOARP))
2572                                 break;
2573
2574                         if (n->nud_state & ~NUD_NOARP)
2575                                 break;
2576 next:
2577                         n = rcu_dereference_bh(n->next);
2578                 }
2579
2580                 if (n)
2581                         break;
2582
2583                 if (++state->bucket >= (1 << nht->hash_shift))
2584                         break;
2585
2586                 n = rcu_dereference_bh(nht->hash_buckets[state->bucket]);
2587         }
2588
2589         if (n && pos)
2590                 --(*pos);
2591         return n;
2592 }
2593
2594 static struct neighbour *neigh_get_idx(struct seq_file *seq, loff_t *pos)
2595 {
2596         struct neighbour *n = neigh_get_first(seq);
2597
2598         if (n) {
2599                 --(*pos);
2600                 while (*pos) {
2601                         n = neigh_get_next(seq, n, pos);
2602                         if (!n)
2603                                 break;
2604                 }
2605         }
2606         return *pos ? NULL : n;
2607 }
2608
2609 static struct pneigh_entry *pneigh_get_first(struct seq_file *seq)
2610 {
2611         struct neigh_seq_state *state = seq->private;
2612         struct net *net = seq_file_net(seq);
2613         struct neigh_table *tbl = state->tbl;
2614         struct pneigh_entry *pn = NULL;
2615         int bucket = state->bucket;
2616
2617         state->flags |= NEIGH_SEQ_IS_PNEIGH;
2618         for (bucket = 0; bucket <= PNEIGH_HASHMASK; bucket++) {
2619                 pn = tbl->phash_buckets[bucket];
2620                 while (pn && !net_eq(pneigh_net(pn), net))
2621                         pn = pn->next;
2622                 if (pn)
2623                         break;
2624         }
2625         state->bucket = bucket;
2626
2627         return pn;
2628 }
2629
2630 static struct pneigh_entry *pneigh_get_next(struct seq_file *seq,
2631                                             struct pneigh_entry *pn,
2632                                             loff_t *pos)
2633 {
2634         struct neigh_seq_state *state = seq->private;
2635         struct net *net = seq_file_net(seq);
2636         struct neigh_table *tbl = state->tbl;
2637
2638         do {
2639                 pn = pn->next;
2640         } while (pn && !net_eq(pneigh_net(pn), net));
2641
2642         while (!pn) {
2643                 if (++state->bucket > PNEIGH_HASHMASK)
2644                         break;
2645                 pn = tbl->phash_buckets[state->bucket];
2646                 while (pn && !net_eq(pneigh_net(pn), net))
2647                         pn = pn->next;
2648                 if (pn)
2649                         break;
2650         }
2651
2652         if (pn && pos)
2653                 --(*pos);
2654
2655         return pn;
2656 }
2657
2658 static struct pneigh_entry *pneigh_get_idx(struct seq_file *seq, loff_t *pos)
2659 {
2660         struct pneigh_entry *pn = pneigh_get_first(seq);
2661
2662         if (pn) {
2663                 --(*pos);
2664                 while (*pos) {
2665                         pn = pneigh_get_next(seq, pn, pos);
2666                         if (!pn)
2667                                 break;
2668                 }
2669         }
2670         return *pos ? NULL : pn;
2671 }
2672
2673 static void *neigh_get_idx_any(struct seq_file *seq, loff_t *pos)
2674 {
2675         struct neigh_seq_state *state = seq->private;
2676         void *rc;
2677         loff_t idxpos = *pos;
2678
2679         rc = neigh_get_idx(seq, &idxpos);
2680         if (!rc && !(state->flags & NEIGH_SEQ_NEIGH_ONLY))
2681                 rc = pneigh_get_idx(seq, &idxpos);
2682
2683         return rc;
2684 }
2685
2686 void *neigh_seq_start(struct seq_file *seq, loff_t *pos, struct neigh_table *tbl, unsigned int neigh_seq_flags)
2687         __acquires(rcu_bh)
2688 {
2689         struct neigh_seq_state *state = seq->private;
2690
2691         state->tbl = tbl;
2692         state->bucket = 0;
2693         state->flags = (neigh_seq_flags & ~NEIGH_SEQ_IS_PNEIGH);
2694
2695         rcu_read_lock_bh();
2696         state->nht = rcu_dereference_bh(tbl->nht);
2697
2698         return *pos ? neigh_get_idx_any(seq, pos) : SEQ_START_TOKEN;
2699 }
2700 EXPORT_SYMBOL(neigh_seq_start);
2701
2702 void *neigh_seq_next(struct seq_file *seq, void *v, loff_t *pos)
2703 {
2704         struct neigh_seq_state *state;
2705         void *rc;
2706
2707         if (v == SEQ_START_TOKEN) {
2708                 rc = neigh_get_first(seq);
2709                 goto out;
2710         }
2711
2712         state = seq->private;
2713         if (!(state->flags & NEIGH_SEQ_IS_PNEIGH)) {
2714                 rc = neigh_get_next(seq, v, NULL);
2715                 if (rc)
2716                         goto out;
2717                 if (!(state->flags & NEIGH_SEQ_NEIGH_ONLY))
2718                         rc = pneigh_get_first(seq);
2719         } else {
2720                 BUG_ON(state->flags & NEIGH_SEQ_NEIGH_ONLY);
2721                 rc = pneigh_get_next(seq, v, NULL);
2722         }
2723 out:
2724         ++(*pos);
2725         return rc;
2726 }
2727 EXPORT_SYMBOL(neigh_seq_next);
2728
2729 void neigh_seq_stop(struct seq_file *seq, void *v)
2730         __releases(rcu_bh)
2731 {
2732         rcu_read_unlock_bh();
2733 }
2734 EXPORT_SYMBOL(neigh_seq_stop);
2735
2736 /* statistics via seq_file */
2737
2738 static void *neigh_stat_seq_start(struct seq_file *seq, loff_t *pos)
2739 {
2740         struct neigh_table *tbl = seq->private;
2741         int cpu;
2742
2743         if (*pos == 0)
2744                 return SEQ_START_TOKEN;
2745
2746         for (cpu = *pos-1; cpu < nr_cpu_ids; ++cpu) {
2747                 if (!cpu_possible(cpu))
2748                         continue;
2749                 *pos = cpu+1;
2750                 return per_cpu_ptr(tbl->stats, cpu);
2751         }
2752         return NULL;
2753 }
2754
2755 static void *neigh_stat_seq_next(struct seq_file *seq, void *v, loff_t *pos)
2756 {
2757         struct neigh_table *tbl = seq->private;
2758         int cpu;
2759
2760         for (cpu = *pos; cpu < nr_cpu_ids; ++cpu) {
2761                 if (!cpu_possible(cpu))
2762                         continue;
2763                 *pos = cpu+1;
2764                 return per_cpu_ptr(tbl->stats, cpu);
2765         }
2766         return NULL;
2767 }
2768
2769 static void neigh_stat_seq_stop(struct seq_file *seq, void *v)
2770 {
2771
2772 }
2773
2774 static int neigh_stat_seq_show(struct seq_file *seq, void *v)
2775 {
2776         struct neigh_table *tbl = seq->private;
2777         struct neigh_statistics *st = v;
2778
2779         if (v == SEQ_START_TOKEN) {
2780                 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");
2781                 return 0;
2782         }
2783
2784         seq_printf(seq, "%08x  %08lx %08lx %08lx  %08lx %08lx  %08lx  "
2785                         "%08lx %08lx  %08lx %08lx %08lx %08lx\n",
2786                    atomic_read(&tbl->entries),
2787
2788                    st->allocs,
2789                    st->destroys,
2790                    st->hash_grows,
2791
2792                    st->lookups,
2793                    st->hits,
2794
2795                    st->res_failed,
2796
2797                    st->rcv_probes_mcast,
2798                    st->rcv_probes_ucast,
2799
2800                    st->periodic_gc_runs,
2801                    st->forced_gc_runs,
2802                    st->unres_discards,
2803                    st->table_fulls
2804                    );
2805
2806         return 0;
2807 }
2808
2809 static const struct seq_operations neigh_stat_seq_ops = {
2810         .start  = neigh_stat_seq_start,
2811         .next   = neigh_stat_seq_next,
2812         .stop   = neigh_stat_seq_stop,
2813         .show   = neigh_stat_seq_show,
2814 };
2815
2816 static int neigh_stat_seq_open(struct inode *inode, struct file *file)
2817 {
2818         int ret = seq_open(file, &neigh_stat_seq_ops);
2819
2820         if (!ret) {
2821                 struct seq_file *sf = file->private_data;
2822                 sf->private = PDE_DATA(inode);
2823         }
2824         return ret;
2825 };
2826
2827 static const struct file_operations neigh_stat_seq_fops = {
2828         .owner   = THIS_MODULE,
2829         .open    = neigh_stat_seq_open,
2830         .read    = seq_read,
2831         .llseek  = seq_lseek,
2832         .release = seq_release,
2833 };
2834
2835 #endif /* CONFIG_PROC_FS */
2836
2837 static inline size_t neigh_nlmsg_size(void)
2838 {
2839         return NLMSG_ALIGN(sizeof(struct ndmsg))
2840                + nla_total_size(MAX_ADDR_LEN) /* NDA_DST */
2841                + nla_total_size(MAX_ADDR_LEN) /* NDA_LLADDR */
2842                + nla_total_size(sizeof(struct nda_cacheinfo))
2843                + nla_total_size(4); /* NDA_PROBES */
2844 }
2845
2846 static void __neigh_notify(struct neighbour *n, int type, int flags,
2847                            u32 pid)
2848 {
2849         struct net *net = dev_net(n->dev);
2850         struct sk_buff *skb;
2851         int err = -ENOBUFS;
2852
2853         skb = nlmsg_new(neigh_nlmsg_size(), GFP_ATOMIC);
2854         if (skb == NULL)
2855                 goto errout;
2856
2857         err = neigh_fill_info(skb, n, pid, 0, type, flags);
2858         if (err < 0) {
2859                 /* -EMSGSIZE implies BUG in neigh_nlmsg_size() */
2860                 WARN_ON(err == -EMSGSIZE);
2861                 kfree_skb(skb);
2862                 goto errout;
2863         }
2864         rtnl_notify(skb, net, 0, RTNLGRP_NEIGH, NULL, GFP_ATOMIC);
2865         return;
2866 errout:
2867         if (err < 0)
2868                 rtnl_set_sk_err(net, RTNLGRP_NEIGH, err);
2869 }
2870
2871 void neigh_app_ns(struct neighbour *n)
2872 {
2873         __neigh_notify(n, RTM_GETNEIGH, NLM_F_REQUEST, 0);
2874 }
2875 EXPORT_SYMBOL(neigh_app_ns);
2876
2877 #ifdef CONFIG_SYSCTL
2878 static int zero;
2879 static int int_max = INT_MAX;
2880 static int unres_qlen_max = INT_MAX / SKB_TRUESIZE(ETH_FRAME_LEN);
2881
2882 static int proc_unres_qlen(struct ctl_table *ctl, int write,
2883                            void __user *buffer, size_t *lenp, loff_t *ppos)
2884 {
2885         int size, ret;
2886         struct ctl_table tmp = *ctl;
2887
2888         tmp.extra1 = &zero;
2889         tmp.extra2 = &unres_qlen_max;
2890         tmp.data = &size;
2891
2892         size = *(int *)ctl->data / SKB_TRUESIZE(ETH_FRAME_LEN);
2893         ret = proc_dointvec_minmax(&tmp, write, buffer, lenp, ppos);
2894
2895         if (write && !ret)
2896                 *(int *)ctl->data = size * SKB_TRUESIZE(ETH_FRAME_LEN);
2897         return ret;
2898 }
2899
2900 static struct neigh_parms *neigh_get_dev_parms_rcu(struct net_device *dev,
2901                                                    int family)
2902 {
2903         switch (family) {
2904         case AF_INET:
2905                 return __in_dev_arp_parms_get_rcu(dev);
2906         case AF_INET6:
2907                 return __in6_dev_nd_parms_get_rcu(dev);
2908         }
2909         return NULL;
2910 }
2911
2912 static void neigh_copy_dflt_parms(struct net *net, struct neigh_parms *p,
2913                                   int index)
2914 {
2915         struct net_device *dev;
2916         int family = neigh_parms_family(p);
2917
2918         rcu_read_lock();
2919         for_each_netdev_rcu(net, dev) {
2920                 struct neigh_parms *dst_p =
2921                                 neigh_get_dev_parms_rcu(dev, family);
2922
2923                 if (dst_p && !test_bit(index, dst_p->data_state))
2924                         dst_p->data[index] = p->data[index];
2925         }
2926         rcu_read_unlock();
2927 }
2928
2929 static void neigh_proc_update(struct ctl_table *ctl, int write)
2930 {
2931         struct net_device *dev = ctl->extra1;
2932         struct neigh_parms *p = ctl->extra2;
2933         struct net *net = neigh_parms_net(p);
2934         int index = (int *) ctl->data - p->data;
2935
2936         if (!write)
2937                 return;
2938
2939         set_bit(index, p->data_state);
2940         if (index == NEIGH_VAR_DELAY_PROBE_TIME)
2941                 call_netevent_notifiers(NETEVENT_DELAY_PROBE_TIME_UPDATE, p);
2942         if (!dev) /* NULL dev means this is default value */
2943                 neigh_copy_dflt_parms(net, p, index);
2944 }
2945
2946 static int neigh_proc_dointvec_zero_intmax(struct ctl_table *ctl, int write,
2947                                            void __user *buffer,
2948                                            size_t *lenp, loff_t *ppos)
2949 {
2950         struct ctl_table tmp = *ctl;
2951         int ret;
2952
2953         tmp.extra1 = &zero;
2954         tmp.extra2 = &int_max;
2955
2956         ret = proc_dointvec_minmax(&tmp, write, buffer, lenp, ppos);
2957         neigh_proc_update(ctl, write);
2958         return ret;
2959 }
2960
2961 int neigh_proc_dointvec(struct ctl_table *ctl, int write,
2962                         void __user *buffer, size_t *lenp, loff_t *ppos)
2963 {
2964         int ret = proc_dointvec(ctl, write, buffer, lenp, ppos);
2965
2966         neigh_proc_update(ctl, write);
2967         return ret;
2968 }
2969 EXPORT_SYMBOL(neigh_proc_dointvec);
2970
2971 int neigh_proc_dointvec_jiffies(struct ctl_table *ctl, int write,
2972                                 void __user *buffer,
2973                                 size_t *lenp, loff_t *ppos)
2974 {
2975         int ret = proc_dointvec_jiffies(ctl, write, buffer, lenp, ppos);
2976
2977         neigh_proc_update(ctl, write);
2978         return ret;
2979 }
2980 EXPORT_SYMBOL(neigh_proc_dointvec_jiffies);
2981
2982 static int neigh_proc_dointvec_userhz_jiffies(struct ctl_table *ctl, int write,
2983                                               void __user *buffer,
2984                                               size_t *lenp, loff_t *ppos)
2985 {
2986         int ret = proc_dointvec_userhz_jiffies(ctl, write, buffer, lenp, ppos);
2987
2988         neigh_proc_update(ctl, write);
2989         return ret;
2990 }
2991
2992 int neigh_proc_dointvec_ms_jiffies(struct ctl_table *ctl, int write,
2993                                    void __user *buffer,
2994                                    size_t *lenp, loff_t *ppos)
2995 {
2996         int ret = proc_dointvec_ms_jiffies(ctl, write, buffer, lenp, ppos);
2997
2998         neigh_proc_update(ctl, write);
2999         return ret;
3000 }
3001 EXPORT_SYMBOL(neigh_proc_dointvec_ms_jiffies);
3002
3003 static int neigh_proc_dointvec_unres_qlen(struct ctl_table *ctl, int write,
3004                                           void __user *buffer,
3005                                           size_t *lenp, loff_t *ppos)
3006 {
3007         int ret = proc_unres_qlen(ctl, write, buffer, lenp, ppos);
3008
3009         neigh_proc_update(ctl, write);
3010         return ret;
3011 }
3012
3013 static int neigh_proc_base_reachable_time(struct ctl_table *ctl, int write,
3014                                           void __user *buffer,
3015                                           size_t *lenp, loff_t *ppos)
3016 {
3017         struct neigh_parms *p = ctl->extra2;
3018         int ret;
3019
3020         if (strcmp(ctl->procname, "base_reachable_time") == 0)
3021                 ret = neigh_proc_dointvec_jiffies(ctl, write, buffer, lenp, ppos);
3022         else if (strcmp(ctl->procname, "base_reachable_time_ms") == 0)
3023                 ret = neigh_proc_dointvec_ms_jiffies(ctl, write, buffer, lenp, ppos);
3024         else
3025                 ret = -1;
3026
3027         if (write && ret == 0) {
3028                 /* update reachable_time as well, otherwise, the change will
3029                  * only be effective after the next time neigh_periodic_work
3030                  * decides to recompute it
3031                  */
3032                 p->reachable_time =
3033                         neigh_rand_reach_time(NEIGH_VAR(p, BASE_REACHABLE_TIME));
3034         }
3035         return ret;
3036 }
3037
3038 #define NEIGH_PARMS_DATA_OFFSET(index)  \
3039         (&((struct neigh_parms *) 0)->data[index])
3040
3041 #define NEIGH_SYSCTL_ENTRY(attr, data_attr, name, mval, proc) \
3042         [NEIGH_VAR_ ## attr] = { \
3043                 .procname       = name, \
3044                 .data           = NEIGH_PARMS_DATA_OFFSET(NEIGH_VAR_ ## data_attr), \
3045                 .maxlen         = sizeof(int), \
3046                 .mode           = mval, \
3047                 .proc_handler   = proc, \
3048         }
3049
3050 #define NEIGH_SYSCTL_ZERO_INTMAX_ENTRY(attr, name) \
3051         NEIGH_SYSCTL_ENTRY(attr, attr, name, 0644, neigh_proc_dointvec_zero_intmax)
3052
3053 #define NEIGH_SYSCTL_JIFFIES_ENTRY(attr, name) \
3054         NEIGH_SYSCTL_ENTRY(attr, attr, name, 0644, neigh_proc_dointvec_jiffies)
3055
3056 #define NEIGH_SYSCTL_USERHZ_JIFFIES_ENTRY(attr, name) \
3057         NEIGH_SYSCTL_ENTRY(attr, attr, name, 0644, neigh_proc_dointvec_userhz_jiffies)
3058
3059 #define NEIGH_SYSCTL_MS_JIFFIES_ENTRY(attr, name) \
3060         NEIGH_SYSCTL_ENTRY(attr, attr, name, 0644, neigh_proc_dointvec_ms_jiffies)
3061
3062 #define NEIGH_SYSCTL_MS_JIFFIES_REUSED_ENTRY(attr, data_attr, name) \
3063         NEIGH_SYSCTL_ENTRY(attr, data_attr, name, 0644, neigh_proc_dointvec_ms_jiffies)
3064
3065 #define NEIGH_SYSCTL_UNRES_QLEN_REUSED_ENTRY(attr, data_attr, name) \
3066         NEIGH_SYSCTL_ENTRY(attr, data_attr, name, 0644, neigh_proc_dointvec_unres_qlen)
3067
3068 static struct neigh_sysctl_table {
3069         struct ctl_table_header *sysctl_header;
3070         struct ctl_table neigh_vars[NEIGH_VAR_MAX + 1];
3071 } neigh_sysctl_template __read_mostly = {
3072         .neigh_vars = {
3073                 NEIGH_SYSCTL_ZERO_INTMAX_ENTRY(MCAST_PROBES, "mcast_solicit"),
3074                 NEIGH_SYSCTL_ZERO_INTMAX_ENTRY(UCAST_PROBES, "ucast_solicit"),
3075                 NEIGH_SYSCTL_ZERO_INTMAX_ENTRY(APP_PROBES, "app_solicit"),
3076                 NEIGH_SYSCTL_ZERO_INTMAX_ENTRY(MCAST_REPROBES, "mcast_resolicit"),
3077                 NEIGH_SYSCTL_USERHZ_JIFFIES_ENTRY(RETRANS_TIME, "retrans_time"),
3078                 NEIGH_SYSCTL_JIFFIES_ENTRY(BASE_REACHABLE_TIME, "base_reachable_time"),
3079                 NEIGH_SYSCTL_JIFFIES_ENTRY(DELAY_PROBE_TIME, "delay_first_probe_time"),
3080                 NEIGH_SYSCTL_JIFFIES_ENTRY(GC_STALETIME, "gc_stale_time"),
3081                 NEIGH_SYSCTL_ZERO_INTMAX_ENTRY(QUEUE_LEN_BYTES, "unres_qlen_bytes"),
3082                 NEIGH_SYSCTL_ZERO_INTMAX_ENTRY(PROXY_QLEN, "proxy_qlen"),
3083                 NEIGH_SYSCTL_USERHZ_JIFFIES_ENTRY(ANYCAST_DELAY, "anycast_delay"),
3084                 NEIGH_SYSCTL_USERHZ_JIFFIES_ENTRY(PROXY_DELAY, "proxy_delay"),
3085                 NEIGH_SYSCTL_USERHZ_JIFFIES_ENTRY(LOCKTIME, "locktime"),
3086                 NEIGH_SYSCTL_UNRES_QLEN_REUSED_ENTRY(QUEUE_LEN, QUEUE_LEN_BYTES, "unres_qlen"),
3087                 NEIGH_SYSCTL_MS_JIFFIES_REUSED_ENTRY(RETRANS_TIME_MS, RETRANS_TIME, "retrans_time_ms"),
3088                 NEIGH_SYSCTL_MS_JIFFIES_REUSED_ENTRY(BASE_REACHABLE_TIME_MS, BASE_REACHABLE_TIME, "base_reachable_time_ms"),
3089                 [NEIGH_VAR_GC_INTERVAL] = {
3090                         .procname       = "gc_interval",
3091                         .maxlen         = sizeof(int),
3092                         .mode           = 0644,
3093                         .proc_handler   = proc_dointvec_jiffies,
3094                 },
3095                 [NEIGH_VAR_GC_THRESH1] = {
3096                         .procname       = "gc_thresh1",
3097                         .maxlen         = sizeof(int),
3098                         .mode           = 0644,
3099                         .extra1         = &zero,
3100                         .extra2         = &int_max,
3101                         .proc_handler   = proc_dointvec_minmax,
3102                 },
3103                 [NEIGH_VAR_GC_THRESH2] = {
3104                         .procname       = "gc_thresh2",
3105                         .maxlen         = sizeof(int),
3106                         .mode           = 0644,
3107                         .extra1         = &zero,
3108                         .extra2         = &int_max,
3109                         .proc_handler   = proc_dointvec_minmax,
3110                 },
3111                 [NEIGH_VAR_GC_THRESH3] = {
3112                         .procname       = "gc_thresh3",
3113                         .maxlen         = sizeof(int),
3114                         .mode           = 0644,
3115                         .extra1         = &zero,
3116                         .extra2         = &int_max,
3117                         .proc_handler   = proc_dointvec_minmax,
3118                 },
3119                 {},
3120         },
3121 };
3122
3123 int neigh_sysctl_register(struct net_device *dev, struct neigh_parms *p,
3124                           proc_handler *handler)
3125 {
3126         int i;
3127         struct neigh_sysctl_table *t;
3128         const char *dev_name_source;
3129         char neigh_path[ sizeof("net//neigh/") + IFNAMSIZ + IFNAMSIZ ];
3130         char *p_name;
3131
3132         t = kmemdup(&neigh_sysctl_template, sizeof(*t), GFP_KERNEL);
3133         if (!t)
3134                 goto err;
3135
3136         for (i = 0; i < NEIGH_VAR_GC_INTERVAL; i++) {
3137                 t->neigh_vars[i].data += (long) p;
3138                 t->neigh_vars[i].extra1 = dev;
3139                 t->neigh_vars[i].extra2 = p;
3140         }
3141
3142         if (dev) {
3143                 dev_name_source = dev->name;
3144                 /* Terminate the table early */
3145                 memset(&t->neigh_vars[NEIGH_VAR_GC_INTERVAL], 0,
3146                        sizeof(t->neigh_vars[NEIGH_VAR_GC_INTERVAL]));
3147         } else {
3148                 struct neigh_table *tbl = p->tbl;
3149                 dev_name_source = "default";
3150                 t->neigh_vars[NEIGH_VAR_GC_INTERVAL].data = &tbl->gc_interval;
3151                 t->neigh_vars[NEIGH_VAR_GC_THRESH1].data = &tbl->gc_thresh1;
3152                 t->neigh_vars[NEIGH_VAR_GC_THRESH2].data = &tbl->gc_thresh2;
3153                 t->neigh_vars[NEIGH_VAR_GC_THRESH3].data = &tbl->gc_thresh3;
3154         }
3155
3156         if (handler) {
3157                 /* RetransTime */
3158                 t->neigh_vars[NEIGH_VAR_RETRANS_TIME].proc_handler = handler;
3159                 /* ReachableTime */
3160                 t->neigh_vars[NEIGH_VAR_BASE_REACHABLE_TIME].proc_handler = handler;
3161                 /* RetransTime (in milliseconds)*/
3162                 t->neigh_vars[NEIGH_VAR_RETRANS_TIME_MS].proc_handler = handler;
3163                 /* ReachableTime (in milliseconds) */
3164                 t->neigh_vars[NEIGH_VAR_BASE_REACHABLE_TIME_MS].proc_handler = handler;
3165         } else {
3166                 /* Those handlers will update p->reachable_time after
3167                  * base_reachable_time(_ms) is set to ensure the new timer starts being
3168                  * applied after the next neighbour update instead of waiting for
3169                  * neigh_periodic_work to update its value (can be multiple minutes)
3170                  * So any handler that replaces them should do this as well
3171                  */
3172                 /* ReachableTime */
3173                 t->neigh_vars[NEIGH_VAR_BASE_REACHABLE_TIME].proc_handler =
3174                         neigh_proc_base_reachable_time;
3175                 /* ReachableTime (in milliseconds) */
3176                 t->neigh_vars[NEIGH_VAR_BASE_REACHABLE_TIME_MS].proc_handler =
3177                         neigh_proc_base_reachable_time;
3178         }
3179
3180         /* Don't export sysctls to unprivileged users */
3181         if (neigh_parms_net(p)->user_ns != &init_user_ns)
3182                 t->neigh_vars[0].procname = NULL;
3183
3184         switch (neigh_parms_family(p)) {
3185         case AF_INET:
3186               p_name = "ipv4";
3187               break;
3188         case AF_INET6:
3189               p_name = "ipv6";
3190               break;
3191         default:
3192               BUG();
3193         }
3194
3195         snprintf(neigh_path, sizeof(neigh_path), "net/%s/neigh/%s",
3196                 p_name, dev_name_source);
3197         t->sysctl_header =
3198                 register_net_sysctl(neigh_parms_net(p), neigh_path, t->neigh_vars);
3199         if (!t->sysctl_header)
3200                 goto free;
3201
3202         p->sysctl_table = t;
3203         return 0;
3204
3205 free:
3206         kfree(t);
3207 err:
3208         return -ENOBUFS;
3209 }
3210 EXPORT_SYMBOL(neigh_sysctl_register);
3211
3212 void neigh_sysctl_unregister(struct neigh_parms *p)
3213 {
3214         if (p->sysctl_table) {
3215                 struct neigh_sysctl_table *t = p->sysctl_table;
3216                 p->sysctl_table = NULL;
3217                 unregister_net_sysctl_table(t->sysctl_header);
3218                 kfree(t);
3219         }
3220 }
3221 EXPORT_SYMBOL(neigh_sysctl_unregister);
3222
3223 #endif  /* CONFIG_SYSCTL */
3224
3225 static int __init neigh_init(void)
3226 {
3227         rtnl_register(PF_UNSPEC, RTM_NEWNEIGH, neigh_add, NULL, NULL);
3228         rtnl_register(PF_UNSPEC, RTM_DELNEIGH, neigh_delete, NULL, NULL);
3229         rtnl_register(PF_UNSPEC, RTM_GETNEIGH, NULL, neigh_dump_info, NULL);
3230
3231         rtnl_register(PF_UNSPEC, RTM_GETNEIGHTBL, NULL, neightbl_dump_info,
3232                       NULL);
3233         rtnl_register(PF_UNSPEC, RTM_SETNEIGHTBL, neightbl_set, NULL, NULL);
3234
3235         return 0;
3236 }
3237
3238 subsys_initcall(neigh_init);
3239