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