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