xref: /linux/net/core/neighbour.c (revision b454cc6636d254fbf6049b73e9560aee76fb04a3)
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  	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 -ENOBUFS;
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 	return nlmsg_cancel(skb, nlh);
1710 }
1711 
1712 static int neightbl_fill_param_info(struct sk_buff *skb,
1713 				    struct neigh_table *tbl,
1714 				    struct neigh_parms *parms,
1715 				    u32 pid, u32 seq, int type,
1716 				    unsigned int flags)
1717 {
1718 	struct ndtmsg *ndtmsg;
1719 	struct nlmsghdr *nlh;
1720 
1721 	nlh = nlmsg_put(skb, pid, seq, type, sizeof(*ndtmsg), flags);
1722 	if (nlh == NULL)
1723 		return -ENOBUFS;
1724 
1725 	ndtmsg = nlmsg_data(nlh);
1726 
1727 	read_lock_bh(&tbl->lock);
1728 	ndtmsg->ndtm_family = tbl->family;
1729 	ndtmsg->ndtm_pad1   = 0;
1730 	ndtmsg->ndtm_pad2   = 0;
1731 
1732 	if (nla_put_string(skb, NDTA_NAME, tbl->id) < 0 ||
1733 	    neightbl_fill_parms(skb, parms) < 0)
1734 		goto errout;
1735 
1736 	read_unlock_bh(&tbl->lock);
1737 	return nlmsg_end(skb, nlh);
1738 errout:
1739 	read_unlock_bh(&tbl->lock);
1740 	return nlmsg_cancel(skb, nlh);
1741 }
1742 
1743 static inline struct neigh_parms *lookup_neigh_params(struct neigh_table *tbl,
1744 						      int ifindex)
1745 {
1746 	struct neigh_parms *p;
1747 
1748 	for (p = &tbl->parms; p; p = p->next)
1749 		if ((p->dev && p->dev->ifindex == ifindex) ||
1750 		    (!p->dev && !ifindex))
1751 			return p;
1752 
1753 	return NULL;
1754 }
1755 
1756 static struct nla_policy nl_neightbl_policy[NDTA_MAX+1] __read_mostly = {
1757 	[NDTA_NAME]		= { .type = NLA_STRING },
1758 	[NDTA_THRESH1]		= { .type = NLA_U32 },
1759 	[NDTA_THRESH2]		= { .type = NLA_U32 },
1760 	[NDTA_THRESH3]		= { .type = NLA_U32 },
1761 	[NDTA_GC_INTERVAL]	= { .type = NLA_U64 },
1762 	[NDTA_PARMS]		= { .type = NLA_NESTED },
1763 };
1764 
1765 static struct nla_policy nl_ntbl_parm_policy[NDTPA_MAX+1] __read_mostly = {
1766 	[NDTPA_IFINDEX]			= { .type = NLA_U32 },
1767 	[NDTPA_QUEUE_LEN]		= { .type = NLA_U32 },
1768 	[NDTPA_PROXY_QLEN]		= { .type = NLA_U32 },
1769 	[NDTPA_APP_PROBES]		= { .type = NLA_U32 },
1770 	[NDTPA_UCAST_PROBES]		= { .type = NLA_U32 },
1771 	[NDTPA_MCAST_PROBES]		= { .type = NLA_U32 },
1772 	[NDTPA_BASE_REACHABLE_TIME]	= { .type = NLA_U64 },
1773 	[NDTPA_GC_STALETIME]		= { .type = NLA_U64 },
1774 	[NDTPA_DELAY_PROBE_TIME]	= { .type = NLA_U64 },
1775 	[NDTPA_RETRANS_TIME]		= { .type = NLA_U64 },
1776 	[NDTPA_ANYCAST_DELAY]		= { .type = NLA_U64 },
1777 	[NDTPA_PROXY_DELAY]		= { .type = NLA_U64 },
1778 	[NDTPA_LOCKTIME]		= { .type = NLA_U64 },
1779 };
1780 
1781 int neightbl_set(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
1782 {
1783 	struct neigh_table *tbl;
1784 	struct ndtmsg *ndtmsg;
1785 	struct nlattr *tb[NDTA_MAX+1];
1786 	int err;
1787 
1788 	err = nlmsg_parse(nlh, sizeof(*ndtmsg), tb, NDTA_MAX,
1789 			  nl_neightbl_policy);
1790 	if (err < 0)
1791 		goto errout;
1792 
1793 	if (tb[NDTA_NAME] == NULL) {
1794 		err = -EINVAL;
1795 		goto errout;
1796 	}
1797 
1798 	ndtmsg = nlmsg_data(nlh);
1799 	read_lock(&neigh_tbl_lock);
1800 	for (tbl = neigh_tables; tbl; tbl = tbl->next) {
1801 		if (ndtmsg->ndtm_family && tbl->family != ndtmsg->ndtm_family)
1802 			continue;
1803 
1804 		if (nla_strcmp(tb[NDTA_NAME], tbl->id) == 0)
1805 			break;
1806 	}
1807 
1808 	if (tbl == NULL) {
1809 		err = -ENOENT;
1810 		goto errout_locked;
1811 	}
1812 
1813 	/*
1814 	 * We acquire tbl->lock to be nice to the periodic timers and
1815 	 * make sure they always see a consistent set of values.
1816 	 */
1817 	write_lock_bh(&tbl->lock);
1818 
1819 	if (tb[NDTA_PARMS]) {
1820 		struct nlattr *tbp[NDTPA_MAX+1];
1821 		struct neigh_parms *p;
1822 		int i, ifindex = 0;
1823 
1824 		err = nla_parse_nested(tbp, NDTPA_MAX, tb[NDTA_PARMS],
1825 				       nl_ntbl_parm_policy);
1826 		if (err < 0)
1827 			goto errout_tbl_lock;
1828 
1829 		if (tbp[NDTPA_IFINDEX])
1830 			ifindex = nla_get_u32(tbp[NDTPA_IFINDEX]);
1831 
1832 		p = lookup_neigh_params(tbl, ifindex);
1833 		if (p == NULL) {
1834 			err = -ENOENT;
1835 			goto errout_tbl_lock;
1836 		}
1837 
1838 		for (i = 1; i <= NDTPA_MAX; i++) {
1839 			if (tbp[i] == NULL)
1840 				continue;
1841 
1842 			switch (i) {
1843 			case NDTPA_QUEUE_LEN:
1844 				p->queue_len = nla_get_u32(tbp[i]);
1845 				break;
1846 			case NDTPA_PROXY_QLEN:
1847 				p->proxy_qlen = nla_get_u32(tbp[i]);
1848 				break;
1849 			case NDTPA_APP_PROBES:
1850 				p->app_probes = nla_get_u32(tbp[i]);
1851 				break;
1852 			case NDTPA_UCAST_PROBES:
1853 				p->ucast_probes = nla_get_u32(tbp[i]);
1854 				break;
1855 			case NDTPA_MCAST_PROBES:
1856 				p->mcast_probes = nla_get_u32(tbp[i]);
1857 				break;
1858 			case NDTPA_BASE_REACHABLE_TIME:
1859 				p->base_reachable_time = nla_get_msecs(tbp[i]);
1860 				break;
1861 			case NDTPA_GC_STALETIME:
1862 				p->gc_staletime = nla_get_msecs(tbp[i]);
1863 				break;
1864 			case NDTPA_DELAY_PROBE_TIME:
1865 				p->delay_probe_time = nla_get_msecs(tbp[i]);
1866 				break;
1867 			case NDTPA_RETRANS_TIME:
1868 				p->retrans_time = nla_get_msecs(tbp[i]);
1869 				break;
1870 			case NDTPA_ANYCAST_DELAY:
1871 				p->anycast_delay = nla_get_msecs(tbp[i]);
1872 				break;
1873 			case NDTPA_PROXY_DELAY:
1874 				p->proxy_delay = nla_get_msecs(tbp[i]);
1875 				break;
1876 			case NDTPA_LOCKTIME:
1877 				p->locktime = nla_get_msecs(tbp[i]);
1878 				break;
1879 			}
1880 		}
1881 	}
1882 
1883 	if (tb[NDTA_THRESH1])
1884 		tbl->gc_thresh1 = nla_get_u32(tb[NDTA_THRESH1]);
1885 
1886 	if (tb[NDTA_THRESH2])
1887 		tbl->gc_thresh2 = nla_get_u32(tb[NDTA_THRESH2]);
1888 
1889 	if (tb[NDTA_THRESH3])
1890 		tbl->gc_thresh3 = nla_get_u32(tb[NDTA_THRESH3]);
1891 
1892 	if (tb[NDTA_GC_INTERVAL])
1893 		tbl->gc_interval = nla_get_msecs(tb[NDTA_GC_INTERVAL]);
1894 
1895 	err = 0;
1896 
1897 errout_tbl_lock:
1898 	write_unlock_bh(&tbl->lock);
1899 errout_locked:
1900 	read_unlock(&neigh_tbl_lock);
1901 errout:
1902 	return err;
1903 }
1904 
1905 int neightbl_dump_info(struct sk_buff *skb, struct netlink_callback *cb)
1906 {
1907 	int family, tidx, nidx = 0;
1908 	int tbl_skip = cb->args[0];
1909 	int neigh_skip = cb->args[1];
1910 	struct neigh_table *tbl;
1911 
1912 	family = ((struct rtgenmsg *) nlmsg_data(cb->nlh))->rtgen_family;
1913 
1914 	read_lock(&neigh_tbl_lock);
1915 	for (tbl = neigh_tables, tidx = 0; tbl; tbl = tbl->next, tidx++) {
1916 		struct neigh_parms *p;
1917 
1918 		if (tidx < tbl_skip || (family && tbl->family != family))
1919 			continue;
1920 
1921 		if (neightbl_fill_info(skb, tbl, NETLINK_CB(cb->skb).pid,
1922 				       cb->nlh->nlmsg_seq, RTM_NEWNEIGHTBL,
1923 				       NLM_F_MULTI) <= 0)
1924 			break;
1925 
1926 		for (nidx = 0, p = tbl->parms.next; p; p = p->next, nidx++) {
1927 			if (nidx < neigh_skip)
1928 				continue;
1929 
1930 			if (neightbl_fill_param_info(skb, tbl, p,
1931 						     NETLINK_CB(cb->skb).pid,
1932 						     cb->nlh->nlmsg_seq,
1933 						     RTM_NEWNEIGHTBL,
1934 						     NLM_F_MULTI) <= 0)
1935 				goto out;
1936 		}
1937 
1938 		neigh_skip = 0;
1939 	}
1940 out:
1941 	read_unlock(&neigh_tbl_lock);
1942 	cb->args[0] = tidx;
1943 	cb->args[1] = nidx;
1944 
1945 	return skb->len;
1946 }
1947 
1948 static int neigh_fill_info(struct sk_buff *skb, struct neighbour *neigh,
1949 			   u32 pid, u32 seq, int type, unsigned int flags)
1950 {
1951 	unsigned long now = jiffies;
1952 	struct nda_cacheinfo ci;
1953 	struct nlmsghdr *nlh;
1954 	struct ndmsg *ndm;
1955 
1956 	nlh = nlmsg_put(skb, pid, seq, type, sizeof(*ndm), flags);
1957 	if (nlh == NULL)
1958 		return -ENOBUFS;
1959 
1960 	ndm = nlmsg_data(nlh);
1961 	ndm->ndm_family	 = neigh->ops->family;
1962 	ndm->ndm_pad1    = 0;
1963 	ndm->ndm_pad2    = 0;
1964 	ndm->ndm_flags	 = neigh->flags;
1965 	ndm->ndm_type	 = neigh->type;
1966 	ndm->ndm_ifindex = neigh->dev->ifindex;
1967 
1968 	NLA_PUT(skb, NDA_DST, neigh->tbl->key_len, neigh->primary_key);
1969 
1970 	read_lock_bh(&neigh->lock);
1971 	ndm->ndm_state	 = neigh->nud_state;
1972 	if ((neigh->nud_state & NUD_VALID) &&
1973 	    nla_put(skb, NDA_LLADDR, neigh->dev->addr_len, neigh->ha) < 0) {
1974 		read_unlock_bh(&neigh->lock);
1975 		goto nla_put_failure;
1976 	}
1977 
1978 	ci.ndm_used	 = now - neigh->used;
1979 	ci.ndm_confirmed = now - neigh->confirmed;
1980 	ci.ndm_updated	 = now - neigh->updated;
1981 	ci.ndm_refcnt	 = atomic_read(&neigh->refcnt) - 1;
1982 	read_unlock_bh(&neigh->lock);
1983 
1984 	NLA_PUT_U32(skb, NDA_PROBES, atomic_read(&neigh->probes));
1985 	NLA_PUT(skb, NDA_CACHEINFO, sizeof(ci), &ci);
1986 
1987 	return nlmsg_end(skb, nlh);
1988 
1989 nla_put_failure:
1990 	return nlmsg_cancel(skb, nlh);
1991 }
1992 
1993 
1994 static int neigh_dump_table(struct neigh_table *tbl, struct sk_buff *skb,
1995 			    struct netlink_callback *cb)
1996 {
1997 	struct neighbour *n;
1998 	int rc, h, s_h = cb->args[1];
1999 	int idx, s_idx = idx = cb->args[2];
2000 
2001 	read_lock_bh(&tbl->lock);
2002 	for (h = 0; h <= tbl->hash_mask; h++) {
2003 		if (h < s_h)
2004 			continue;
2005 		if (h > s_h)
2006 			s_idx = 0;
2007 		for (n = tbl->hash_buckets[h], idx = 0; n; n = n->next, idx++) {
2008 			if (idx < s_idx)
2009 				continue;
2010 			if (neigh_fill_info(skb, n, NETLINK_CB(cb->skb).pid,
2011 					    cb->nlh->nlmsg_seq,
2012 					    RTM_NEWNEIGH,
2013 					    NLM_F_MULTI) <= 0) {
2014 				read_unlock_bh(&tbl->lock);
2015 				rc = -1;
2016 				goto out;
2017 			}
2018 		}
2019 	}
2020 	read_unlock_bh(&tbl->lock);
2021 	rc = skb->len;
2022 out:
2023 	cb->args[1] = h;
2024 	cb->args[2] = idx;
2025 	return rc;
2026 }
2027 
2028 int neigh_dump_info(struct sk_buff *skb, struct netlink_callback *cb)
2029 {
2030 	struct neigh_table *tbl;
2031 	int t, family, s_t;
2032 
2033 	read_lock(&neigh_tbl_lock);
2034 	family = ((struct rtgenmsg *) nlmsg_data(cb->nlh))->rtgen_family;
2035 	s_t = cb->args[0];
2036 
2037 	for (tbl = neigh_tables, t = 0; tbl; tbl = tbl->next, t++) {
2038 		if (t < s_t || (family && tbl->family != family))
2039 			continue;
2040 		if (t > s_t)
2041 			memset(&cb->args[1], 0, sizeof(cb->args) -
2042 						sizeof(cb->args[0]));
2043 		if (neigh_dump_table(tbl, skb, cb) < 0)
2044 			break;
2045 	}
2046 	read_unlock(&neigh_tbl_lock);
2047 
2048 	cb->args[0] = t;
2049 	return skb->len;
2050 }
2051 
2052 void neigh_for_each(struct neigh_table *tbl, void (*cb)(struct neighbour *, void *), void *cookie)
2053 {
2054 	int chain;
2055 
2056 	read_lock_bh(&tbl->lock);
2057 	for (chain = 0; chain <= tbl->hash_mask; chain++) {
2058 		struct neighbour *n;
2059 
2060 		for (n = tbl->hash_buckets[chain]; n; n = n->next)
2061 			cb(n, cookie);
2062 	}
2063 	read_unlock_bh(&tbl->lock);
2064 }
2065 EXPORT_SYMBOL(neigh_for_each);
2066 
2067 /* The tbl->lock must be held as a writer and BH disabled. */
2068 void __neigh_for_each_release(struct neigh_table *tbl,
2069 			      int (*cb)(struct neighbour *))
2070 {
2071 	int chain;
2072 
2073 	for (chain = 0; chain <= tbl->hash_mask; chain++) {
2074 		struct neighbour *n, **np;
2075 
2076 		np = &tbl->hash_buckets[chain];
2077 		while ((n = *np) != NULL) {
2078 			int release;
2079 
2080 			write_lock(&n->lock);
2081 			release = cb(n);
2082 			if (release) {
2083 				*np = n->next;
2084 				n->dead = 1;
2085 			} else
2086 				np = &n->next;
2087 			write_unlock(&n->lock);
2088 			if (release)
2089 				neigh_release(n);
2090 		}
2091 	}
2092 }
2093 EXPORT_SYMBOL(__neigh_for_each_release);
2094 
2095 #ifdef CONFIG_PROC_FS
2096 
2097 static struct neighbour *neigh_get_first(struct seq_file *seq)
2098 {
2099 	struct neigh_seq_state *state = seq->private;
2100 	struct neigh_table *tbl = state->tbl;
2101 	struct neighbour *n = NULL;
2102 	int bucket = state->bucket;
2103 
2104 	state->flags &= ~NEIGH_SEQ_IS_PNEIGH;
2105 	for (bucket = 0; bucket <= tbl->hash_mask; bucket++) {
2106 		n = tbl->hash_buckets[bucket];
2107 
2108 		while (n) {
2109 			if (state->neigh_sub_iter) {
2110 				loff_t fakep = 0;
2111 				void *v;
2112 
2113 				v = state->neigh_sub_iter(state, n, &fakep);
2114 				if (!v)
2115 					goto next;
2116 			}
2117 			if (!(state->flags & NEIGH_SEQ_SKIP_NOARP))
2118 				break;
2119 			if (n->nud_state & ~NUD_NOARP)
2120 				break;
2121 		next:
2122 			n = n->next;
2123 		}
2124 
2125 		if (n)
2126 			break;
2127 	}
2128 	state->bucket = bucket;
2129 
2130 	return n;
2131 }
2132 
2133 static struct neighbour *neigh_get_next(struct seq_file *seq,
2134 					struct neighbour *n,
2135 					loff_t *pos)
2136 {
2137 	struct neigh_seq_state *state = seq->private;
2138 	struct neigh_table *tbl = state->tbl;
2139 
2140 	if (state->neigh_sub_iter) {
2141 		void *v = state->neigh_sub_iter(state, n, pos);
2142 		if (v)
2143 			return n;
2144 	}
2145 	n = n->next;
2146 
2147 	while (1) {
2148 		while (n) {
2149 			if (state->neigh_sub_iter) {
2150 				void *v = state->neigh_sub_iter(state, n, pos);
2151 				if (v)
2152 					return n;
2153 				goto next;
2154 			}
2155 			if (!(state->flags & NEIGH_SEQ_SKIP_NOARP))
2156 				break;
2157 
2158 			if (n->nud_state & ~NUD_NOARP)
2159 				break;
2160 		next:
2161 			n = n->next;
2162 		}
2163 
2164 		if (n)
2165 			break;
2166 
2167 		if (++state->bucket > tbl->hash_mask)
2168 			break;
2169 
2170 		n = tbl->hash_buckets[state->bucket];
2171 	}
2172 
2173 	if (n && pos)
2174 		--(*pos);
2175 	return n;
2176 }
2177 
2178 static struct neighbour *neigh_get_idx(struct seq_file *seq, loff_t *pos)
2179 {
2180 	struct neighbour *n = neigh_get_first(seq);
2181 
2182 	if (n) {
2183 		while (*pos) {
2184 			n = neigh_get_next(seq, n, pos);
2185 			if (!n)
2186 				break;
2187 		}
2188 	}
2189 	return *pos ? NULL : n;
2190 }
2191 
2192 static struct pneigh_entry *pneigh_get_first(struct seq_file *seq)
2193 {
2194 	struct neigh_seq_state *state = seq->private;
2195 	struct neigh_table *tbl = state->tbl;
2196 	struct pneigh_entry *pn = NULL;
2197 	int bucket = state->bucket;
2198 
2199 	state->flags |= NEIGH_SEQ_IS_PNEIGH;
2200 	for (bucket = 0; bucket <= PNEIGH_HASHMASK; bucket++) {
2201 		pn = tbl->phash_buckets[bucket];
2202 		if (pn)
2203 			break;
2204 	}
2205 	state->bucket = bucket;
2206 
2207 	return pn;
2208 }
2209 
2210 static struct pneigh_entry *pneigh_get_next(struct seq_file *seq,
2211 					    struct pneigh_entry *pn,
2212 					    loff_t *pos)
2213 {
2214 	struct neigh_seq_state *state = seq->private;
2215 	struct neigh_table *tbl = state->tbl;
2216 
2217 	pn = pn->next;
2218 	while (!pn) {
2219 		if (++state->bucket > PNEIGH_HASHMASK)
2220 			break;
2221 		pn = tbl->phash_buckets[state->bucket];
2222 		if (pn)
2223 			break;
2224 	}
2225 
2226 	if (pn && pos)
2227 		--(*pos);
2228 
2229 	return pn;
2230 }
2231 
2232 static struct pneigh_entry *pneigh_get_idx(struct seq_file *seq, loff_t *pos)
2233 {
2234 	struct pneigh_entry *pn = pneigh_get_first(seq);
2235 
2236 	if (pn) {
2237 		while (*pos) {
2238 			pn = pneigh_get_next(seq, pn, pos);
2239 			if (!pn)
2240 				break;
2241 		}
2242 	}
2243 	return *pos ? NULL : pn;
2244 }
2245 
2246 static void *neigh_get_idx_any(struct seq_file *seq, loff_t *pos)
2247 {
2248 	struct neigh_seq_state *state = seq->private;
2249 	void *rc;
2250 
2251 	rc = neigh_get_idx(seq, pos);
2252 	if (!rc && !(state->flags & NEIGH_SEQ_NEIGH_ONLY))
2253 		rc = pneigh_get_idx(seq, pos);
2254 
2255 	return rc;
2256 }
2257 
2258 void *neigh_seq_start(struct seq_file *seq, loff_t *pos, struct neigh_table *tbl, unsigned int neigh_seq_flags)
2259 {
2260 	struct neigh_seq_state *state = seq->private;
2261 	loff_t pos_minus_one;
2262 
2263 	state->tbl = tbl;
2264 	state->bucket = 0;
2265 	state->flags = (neigh_seq_flags & ~NEIGH_SEQ_IS_PNEIGH);
2266 
2267 	read_lock_bh(&tbl->lock);
2268 
2269 	pos_minus_one = *pos - 1;
2270 	return *pos ? neigh_get_idx_any(seq, &pos_minus_one) : SEQ_START_TOKEN;
2271 }
2272 EXPORT_SYMBOL(neigh_seq_start);
2273 
2274 void *neigh_seq_next(struct seq_file *seq, void *v, loff_t *pos)
2275 {
2276 	struct neigh_seq_state *state;
2277 	void *rc;
2278 
2279 	if (v == SEQ_START_TOKEN) {
2280 		rc = neigh_get_idx(seq, pos);
2281 		goto out;
2282 	}
2283 
2284 	state = seq->private;
2285 	if (!(state->flags & NEIGH_SEQ_IS_PNEIGH)) {
2286 		rc = neigh_get_next(seq, v, NULL);
2287 		if (rc)
2288 			goto out;
2289 		if (!(state->flags & NEIGH_SEQ_NEIGH_ONLY))
2290 			rc = pneigh_get_first(seq);
2291 	} else {
2292 		BUG_ON(state->flags & NEIGH_SEQ_NEIGH_ONLY);
2293 		rc = pneigh_get_next(seq, v, NULL);
2294 	}
2295 out:
2296 	++(*pos);
2297 	return rc;
2298 }
2299 EXPORT_SYMBOL(neigh_seq_next);
2300 
2301 void neigh_seq_stop(struct seq_file *seq, void *v)
2302 {
2303 	struct neigh_seq_state *state = seq->private;
2304 	struct neigh_table *tbl = state->tbl;
2305 
2306 	read_unlock_bh(&tbl->lock);
2307 }
2308 EXPORT_SYMBOL(neigh_seq_stop);
2309 
2310 /* statistics via seq_file */
2311 
2312 static void *neigh_stat_seq_start(struct seq_file *seq, loff_t *pos)
2313 {
2314 	struct proc_dir_entry *pde = seq->private;
2315 	struct neigh_table *tbl = pde->data;
2316 	int cpu;
2317 
2318 	if (*pos == 0)
2319 		return SEQ_START_TOKEN;
2320 
2321 	for (cpu = *pos-1; cpu < NR_CPUS; ++cpu) {
2322 		if (!cpu_possible(cpu))
2323 			continue;
2324 		*pos = cpu+1;
2325 		return per_cpu_ptr(tbl->stats, cpu);
2326 	}
2327 	return NULL;
2328 }
2329 
2330 static void *neigh_stat_seq_next(struct seq_file *seq, void *v, loff_t *pos)
2331 {
2332 	struct proc_dir_entry *pde = seq->private;
2333 	struct neigh_table *tbl = pde->data;
2334 	int cpu;
2335 
2336 	for (cpu = *pos; cpu < NR_CPUS; ++cpu) {
2337 		if (!cpu_possible(cpu))
2338 			continue;
2339 		*pos = cpu+1;
2340 		return per_cpu_ptr(tbl->stats, cpu);
2341 	}
2342 	return NULL;
2343 }
2344 
2345 static void neigh_stat_seq_stop(struct seq_file *seq, void *v)
2346 {
2347 
2348 }
2349 
2350 static int neigh_stat_seq_show(struct seq_file *seq, void *v)
2351 {
2352 	struct proc_dir_entry *pde = seq->private;
2353 	struct neigh_table *tbl = pde->data;
2354 	struct neigh_statistics *st = v;
2355 
2356 	if (v == SEQ_START_TOKEN) {
2357 		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");
2358 		return 0;
2359 	}
2360 
2361 	seq_printf(seq, "%08x  %08lx %08lx %08lx  %08lx %08lx  %08lx  "
2362 			"%08lx %08lx  %08lx %08lx\n",
2363 		   atomic_read(&tbl->entries),
2364 
2365 		   st->allocs,
2366 		   st->destroys,
2367 		   st->hash_grows,
2368 
2369 		   st->lookups,
2370 		   st->hits,
2371 
2372 		   st->res_failed,
2373 
2374 		   st->rcv_probes_mcast,
2375 		   st->rcv_probes_ucast,
2376 
2377 		   st->periodic_gc_runs,
2378 		   st->forced_gc_runs
2379 		   );
2380 
2381 	return 0;
2382 }
2383 
2384 static struct seq_operations neigh_stat_seq_ops = {
2385 	.start	= neigh_stat_seq_start,
2386 	.next	= neigh_stat_seq_next,
2387 	.stop	= neigh_stat_seq_stop,
2388 	.show	= neigh_stat_seq_show,
2389 };
2390 
2391 static int neigh_stat_seq_open(struct inode *inode, struct file *file)
2392 {
2393 	int ret = seq_open(file, &neigh_stat_seq_ops);
2394 
2395 	if (!ret) {
2396 		struct seq_file *sf = file->private_data;
2397 		sf->private = PDE(inode);
2398 	}
2399 	return ret;
2400 };
2401 
2402 static struct file_operations neigh_stat_seq_fops = {
2403 	.owner	 = THIS_MODULE,
2404 	.open 	 = neigh_stat_seq_open,
2405 	.read	 = seq_read,
2406 	.llseek	 = seq_lseek,
2407 	.release = seq_release,
2408 };
2409 
2410 #endif /* CONFIG_PROC_FS */
2411 
2412 #ifdef CONFIG_ARPD
2413 static inline size_t neigh_nlmsg_size(void)
2414 {
2415 	return NLMSG_ALIGN(sizeof(struct ndmsg))
2416 	       + nla_total_size(MAX_ADDR_LEN) /* NDA_DST */
2417 	       + nla_total_size(MAX_ADDR_LEN) /* NDA_LLADDR */
2418 	       + nla_total_size(sizeof(struct nda_cacheinfo))
2419 	       + nla_total_size(4); /* NDA_PROBES */
2420 }
2421 
2422 static void __neigh_notify(struct neighbour *n, int type, int flags)
2423 {
2424 	struct sk_buff *skb;
2425 	int err = -ENOBUFS;
2426 
2427 	skb = nlmsg_new(neigh_nlmsg_size(), GFP_ATOMIC);
2428 	if (skb == NULL)
2429 		goto errout;
2430 
2431 	err = neigh_fill_info(skb, n, 0, 0, type, flags);
2432 	/* failure implies BUG in neigh_nlmsg_size() */
2433 	BUG_ON(err < 0);
2434 
2435 	err = rtnl_notify(skb, 0, RTNLGRP_NEIGH, NULL, GFP_ATOMIC);
2436 errout:
2437 	if (err < 0)
2438 		rtnl_set_sk_err(RTNLGRP_NEIGH, err);
2439 }
2440 
2441 void neigh_app_ns(struct neighbour *n)
2442 {
2443 	__neigh_notify(n, RTM_GETNEIGH, NLM_F_REQUEST);
2444 }
2445 
2446 static void neigh_app_notify(struct neighbour *n)
2447 {
2448 	__neigh_notify(n, RTM_NEWNEIGH, 0);
2449 }
2450 
2451 #endif /* CONFIG_ARPD */
2452 
2453 #ifdef CONFIG_SYSCTL
2454 
2455 static struct neigh_sysctl_table {
2456 	struct ctl_table_header *sysctl_header;
2457 	ctl_table		neigh_vars[__NET_NEIGH_MAX];
2458 	ctl_table		neigh_dev[2];
2459 	ctl_table		neigh_neigh_dir[2];
2460 	ctl_table		neigh_proto_dir[2];
2461 	ctl_table		neigh_root_dir[2];
2462 } neigh_sysctl_template __read_mostly = {
2463 	.neigh_vars = {
2464 		{
2465 			.ctl_name	= NET_NEIGH_MCAST_SOLICIT,
2466 			.procname	= "mcast_solicit",
2467 			.maxlen		= sizeof(int),
2468 			.mode		= 0644,
2469 			.proc_handler	= &proc_dointvec,
2470 		},
2471 		{
2472 			.ctl_name	= NET_NEIGH_UCAST_SOLICIT,
2473 			.procname	= "ucast_solicit",
2474 			.maxlen		= sizeof(int),
2475 			.mode		= 0644,
2476 			.proc_handler	= &proc_dointvec,
2477 		},
2478 		{
2479 			.ctl_name	= NET_NEIGH_APP_SOLICIT,
2480 			.procname	= "app_solicit",
2481 			.maxlen		= sizeof(int),
2482 			.mode		= 0644,
2483 			.proc_handler	= &proc_dointvec,
2484 		},
2485 		{
2486 			.ctl_name	= NET_NEIGH_RETRANS_TIME,
2487 			.procname	= "retrans_time",
2488 			.maxlen		= sizeof(int),
2489 			.mode		= 0644,
2490 			.proc_handler	= &proc_dointvec_userhz_jiffies,
2491 		},
2492 		{
2493 			.ctl_name	= NET_NEIGH_REACHABLE_TIME,
2494 			.procname	= "base_reachable_time",
2495 			.maxlen		= sizeof(int),
2496 			.mode		= 0644,
2497 			.proc_handler	= &proc_dointvec_jiffies,
2498 			.strategy	= &sysctl_jiffies,
2499 		},
2500 		{
2501 			.ctl_name	= NET_NEIGH_DELAY_PROBE_TIME,
2502 			.procname	= "delay_first_probe_time",
2503 			.maxlen		= sizeof(int),
2504 			.mode		= 0644,
2505 			.proc_handler	= &proc_dointvec_jiffies,
2506 			.strategy	= &sysctl_jiffies,
2507 		},
2508 		{
2509 			.ctl_name	= NET_NEIGH_GC_STALE_TIME,
2510 			.procname	= "gc_stale_time",
2511 			.maxlen		= sizeof(int),
2512 			.mode		= 0644,
2513 			.proc_handler	= &proc_dointvec_jiffies,
2514 			.strategy	= &sysctl_jiffies,
2515 		},
2516 		{
2517 			.ctl_name	= NET_NEIGH_UNRES_QLEN,
2518 			.procname	= "unres_qlen",
2519 			.maxlen		= sizeof(int),
2520 			.mode		= 0644,
2521 			.proc_handler	= &proc_dointvec,
2522 		},
2523 		{
2524 			.ctl_name	= NET_NEIGH_PROXY_QLEN,
2525 			.procname	= "proxy_qlen",
2526 			.maxlen		= sizeof(int),
2527 			.mode		= 0644,
2528 			.proc_handler	= &proc_dointvec,
2529 		},
2530 		{
2531 			.ctl_name	= NET_NEIGH_ANYCAST_DELAY,
2532 			.procname	= "anycast_delay",
2533 			.maxlen		= sizeof(int),
2534 			.mode		= 0644,
2535 			.proc_handler	= &proc_dointvec_userhz_jiffies,
2536 		},
2537 		{
2538 			.ctl_name	= NET_NEIGH_PROXY_DELAY,
2539 			.procname	= "proxy_delay",
2540 			.maxlen		= sizeof(int),
2541 			.mode		= 0644,
2542 			.proc_handler	= &proc_dointvec_userhz_jiffies,
2543 		},
2544 		{
2545 			.ctl_name	= NET_NEIGH_LOCKTIME,
2546 			.procname	= "locktime",
2547 			.maxlen		= sizeof(int),
2548 			.mode		= 0644,
2549 			.proc_handler	= &proc_dointvec_userhz_jiffies,
2550 		},
2551 		{
2552 			.ctl_name	= NET_NEIGH_GC_INTERVAL,
2553 			.procname	= "gc_interval",
2554 			.maxlen		= sizeof(int),
2555 			.mode		= 0644,
2556 			.proc_handler	= &proc_dointvec_jiffies,
2557 			.strategy	= &sysctl_jiffies,
2558 		},
2559 		{
2560 			.ctl_name	= NET_NEIGH_GC_THRESH1,
2561 			.procname	= "gc_thresh1",
2562 			.maxlen		= sizeof(int),
2563 			.mode		= 0644,
2564 			.proc_handler	= &proc_dointvec,
2565 		},
2566 		{
2567 			.ctl_name	= NET_NEIGH_GC_THRESH2,
2568 			.procname	= "gc_thresh2",
2569 			.maxlen		= sizeof(int),
2570 			.mode		= 0644,
2571 			.proc_handler	= &proc_dointvec,
2572 		},
2573 		{
2574 			.ctl_name	= NET_NEIGH_GC_THRESH3,
2575 			.procname	= "gc_thresh3",
2576 			.maxlen		= sizeof(int),
2577 			.mode		= 0644,
2578 			.proc_handler	= &proc_dointvec,
2579 		},
2580 		{
2581 			.ctl_name	= NET_NEIGH_RETRANS_TIME_MS,
2582 			.procname	= "retrans_time_ms",
2583 			.maxlen		= sizeof(int),
2584 			.mode		= 0644,
2585 			.proc_handler	= &proc_dointvec_ms_jiffies,
2586 			.strategy	= &sysctl_ms_jiffies,
2587 		},
2588 		{
2589 			.ctl_name	= NET_NEIGH_REACHABLE_TIME_MS,
2590 			.procname	= "base_reachable_time_ms",
2591 			.maxlen		= sizeof(int),
2592 			.mode		= 0644,
2593 			.proc_handler	= &proc_dointvec_ms_jiffies,
2594 			.strategy	= &sysctl_ms_jiffies,
2595 		},
2596 	},
2597 	.neigh_dev = {
2598 		{
2599 			.ctl_name	= NET_PROTO_CONF_DEFAULT,
2600 			.procname	= "default",
2601 			.mode		= 0555,
2602 		},
2603 	},
2604 	.neigh_neigh_dir = {
2605 		{
2606 			.procname	= "neigh",
2607 			.mode		= 0555,
2608 		},
2609 	},
2610 	.neigh_proto_dir = {
2611 		{
2612 			.mode		= 0555,
2613 		},
2614 	},
2615 	.neigh_root_dir = {
2616 		{
2617 			.ctl_name	= CTL_NET,
2618 			.procname	= "net",
2619 			.mode		= 0555,
2620 		},
2621 	},
2622 };
2623 
2624 int neigh_sysctl_register(struct net_device *dev, struct neigh_parms *p,
2625 			  int p_id, int pdev_id, char *p_name,
2626 			  proc_handler *handler, ctl_handler *strategy)
2627 {
2628 	struct neigh_sysctl_table *t = kmemdup(&neigh_sysctl_template,
2629 					       sizeof(*t), GFP_KERNEL);
2630 	const char *dev_name_source = NULL;
2631 	char *dev_name = NULL;
2632 	int err = 0;
2633 
2634 	if (!t)
2635 		return -ENOBUFS;
2636 	t->neigh_vars[0].data  = &p->mcast_probes;
2637 	t->neigh_vars[1].data  = &p->ucast_probes;
2638 	t->neigh_vars[2].data  = &p->app_probes;
2639 	t->neigh_vars[3].data  = &p->retrans_time;
2640 	t->neigh_vars[4].data  = &p->base_reachable_time;
2641 	t->neigh_vars[5].data  = &p->delay_probe_time;
2642 	t->neigh_vars[6].data  = &p->gc_staletime;
2643 	t->neigh_vars[7].data  = &p->queue_len;
2644 	t->neigh_vars[8].data  = &p->proxy_qlen;
2645 	t->neigh_vars[9].data  = &p->anycast_delay;
2646 	t->neigh_vars[10].data = &p->proxy_delay;
2647 	t->neigh_vars[11].data = &p->locktime;
2648 
2649 	if (dev) {
2650 		dev_name_source = dev->name;
2651 		t->neigh_dev[0].ctl_name = dev->ifindex;
2652 		t->neigh_vars[12].procname = NULL;
2653 		t->neigh_vars[13].procname = NULL;
2654 		t->neigh_vars[14].procname = NULL;
2655 		t->neigh_vars[15].procname = NULL;
2656 	} else {
2657  		dev_name_source = t->neigh_dev[0].procname;
2658 		t->neigh_vars[12].data = (int *)(p + 1);
2659 		t->neigh_vars[13].data = (int *)(p + 1) + 1;
2660 		t->neigh_vars[14].data = (int *)(p + 1) + 2;
2661 		t->neigh_vars[15].data = (int *)(p + 1) + 3;
2662 	}
2663 
2664 	t->neigh_vars[16].data  = &p->retrans_time;
2665 	t->neigh_vars[17].data  = &p->base_reachable_time;
2666 
2667 	if (handler || strategy) {
2668 		/* RetransTime */
2669 		t->neigh_vars[3].proc_handler = handler;
2670 		t->neigh_vars[3].strategy = strategy;
2671 		t->neigh_vars[3].extra1 = dev;
2672 		/* ReachableTime */
2673 		t->neigh_vars[4].proc_handler = handler;
2674 		t->neigh_vars[4].strategy = strategy;
2675 		t->neigh_vars[4].extra1 = dev;
2676 		/* RetransTime (in milliseconds)*/
2677 		t->neigh_vars[16].proc_handler = handler;
2678 		t->neigh_vars[16].strategy = strategy;
2679 		t->neigh_vars[16].extra1 = dev;
2680 		/* ReachableTime (in milliseconds) */
2681 		t->neigh_vars[17].proc_handler = handler;
2682 		t->neigh_vars[17].strategy = strategy;
2683 		t->neigh_vars[17].extra1 = dev;
2684 	}
2685 
2686 	dev_name = kstrdup(dev_name_source, GFP_KERNEL);
2687 	if (!dev_name) {
2688 		err = -ENOBUFS;
2689 		goto free;
2690 	}
2691 
2692  	t->neigh_dev[0].procname = dev_name;
2693 
2694 	t->neigh_neigh_dir[0].ctl_name = pdev_id;
2695 
2696 	t->neigh_proto_dir[0].procname = p_name;
2697 	t->neigh_proto_dir[0].ctl_name = p_id;
2698 
2699 	t->neigh_dev[0].child	       = t->neigh_vars;
2700 	t->neigh_neigh_dir[0].child    = t->neigh_dev;
2701 	t->neigh_proto_dir[0].child    = t->neigh_neigh_dir;
2702 	t->neigh_root_dir[0].child     = t->neigh_proto_dir;
2703 
2704 	t->sysctl_header = register_sysctl_table(t->neigh_root_dir, 0);
2705 	if (!t->sysctl_header) {
2706 		err = -ENOBUFS;
2707 		goto free_procname;
2708 	}
2709 	p->sysctl_table = t;
2710 	return 0;
2711 
2712 	/* error path */
2713  free_procname:
2714 	kfree(dev_name);
2715  free:
2716 	kfree(t);
2717 
2718 	return err;
2719 }
2720 
2721 void neigh_sysctl_unregister(struct neigh_parms *p)
2722 {
2723 	if (p->sysctl_table) {
2724 		struct neigh_sysctl_table *t = p->sysctl_table;
2725 		p->sysctl_table = NULL;
2726 		unregister_sysctl_table(t->sysctl_header);
2727 		kfree(t->neigh_dev[0].procname);
2728 		kfree(t);
2729 	}
2730 }
2731 
2732 #endif	/* CONFIG_SYSCTL */
2733 
2734 EXPORT_SYMBOL(__neigh_event_send);
2735 EXPORT_SYMBOL(neigh_changeaddr);
2736 EXPORT_SYMBOL(neigh_compat_output);
2737 EXPORT_SYMBOL(neigh_connected_output);
2738 EXPORT_SYMBOL(neigh_create);
2739 EXPORT_SYMBOL(neigh_delete);
2740 EXPORT_SYMBOL(neigh_destroy);
2741 EXPORT_SYMBOL(neigh_dump_info);
2742 EXPORT_SYMBOL(neigh_event_ns);
2743 EXPORT_SYMBOL(neigh_ifdown);
2744 EXPORT_SYMBOL(neigh_lookup);
2745 EXPORT_SYMBOL(neigh_lookup_nodev);
2746 EXPORT_SYMBOL(neigh_parms_alloc);
2747 EXPORT_SYMBOL(neigh_parms_release);
2748 EXPORT_SYMBOL(neigh_rand_reach_time);
2749 EXPORT_SYMBOL(neigh_resolve_output);
2750 EXPORT_SYMBOL(neigh_table_clear);
2751 EXPORT_SYMBOL(neigh_table_init);
2752 EXPORT_SYMBOL(neigh_table_init_no_netlink);
2753 EXPORT_SYMBOL(neigh_update);
2754 EXPORT_SYMBOL(pneigh_enqueue);
2755 EXPORT_SYMBOL(pneigh_lookup);
2756 
2757 #ifdef CONFIG_ARPD
2758 EXPORT_SYMBOL(neigh_app_ns);
2759 #endif
2760 #ifdef CONFIG_SYSCTL
2761 EXPORT_SYMBOL(neigh_sysctl_register);
2762 EXPORT_SYMBOL(neigh_sysctl_unregister);
2763 #endif
2764