OSDN Git Service

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