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