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