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