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