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