]> git.proxmox.com Git - mirror_ubuntu-focal-kernel.git/blob - net/core/neighbour.c
pinctrl: sh-pfc: r8a77965: Add DRIF pins, groups and functions
[mirror_ubuntu-focal-kernel.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);