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