2 * Generic address resolution entity
5 * Pedro Roque <roque@di.fc.ul.pt>
6 * Alexey Kuznetsov <kuznet@ms2.inr.ac.ru>
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.
14 * Vitaly E. Lavrov releasing NULL neighbor in neigh_add.
15 * Harald Welte Add neighbour cache statistics like rtstat
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>
26 #include <linux/sysctl.h>
28 #include <linux/times.h>
29 #include <net/net_namespace.h>
30 #include <net/neighbour.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>
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
49 #define NEIGH_PRINTK1 NEIGH_PRINTK
53 #define NEIGH_PRINTK2 NEIGH_PRINTK
56 #define PNEIGH_HASHMASK 0xF
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
);
63 static struct neigh_table
*neigh_tables
;
65 static const struct file_operations neigh_stat_seq_fops
;
69 Neighbour hash table buckets are protected with rwlock tbl->lock.
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
76 - If the entry requires some non-trivial actions, increase
77 its reference count and release table lock.
79 Neighbour entries are protected:
80 - with reference count.
81 - with rwlock neigh->lock
83 Reference count prevents destruction.
85 neigh->lock mainly serializes ll address data and its validity state.
86 However, the same lock is used to protect another entry fields:
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.
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,
99 static DEFINE_RWLOCK(neigh_tbl_lock
);
101 static int neigh_blackhole(struct neighbour
*neigh
, struct sk_buff
*skb
)
107 static void neigh_cleanup_and_release(struct neighbour
*neigh
)
109 if (neigh
->parms
->neigh_cleanup
)
110 neigh
->parms
->neigh_cleanup(neigh
);
112 __neigh_notify(neigh
, RTM_DELNEIGH
, 0);
113 neigh_release(neigh
);
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.
122 unsigned long neigh_rand_reach_time(unsigned long base
)
124 return base
? (net_random() % base
) + (base
>> 1) : 0;
126 EXPORT_SYMBOL(neigh_rand_reach_time
);
129 static int neigh_forced_gc(struct neigh_table
*tbl
)
133 struct neigh_hash_table
*nht
;
135 NEIGH_CACHE_STAT_INC(tbl
, forced_gc_runs
);
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
++) {
142 struct neighbour __rcu
**np
;
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
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
)));
159 write_unlock(&n
->lock
);
160 neigh_cleanup_and_release(n
);
163 write_unlock(&n
->lock
);
168 tbl
->last_flush
= jiffies
;
170 write_unlock_bh(&tbl
->lock
);
175 static void neigh_add_timer(struct neighbour
*n
, unsigned long when
)
178 if (unlikely(mod_timer(&n
->timer
, when
))) {
179 printk("NEIGH: BUG, double timer add, state is %x\n",
185 static int neigh_del_timer(struct neighbour
*n
)
187 if ((n
->nud_state
& NUD_IN_TIMER
) &&
188 del_timer(&n
->timer
)) {
195 static void pneigh_queue_purge(struct sk_buff_head
*list
)
199 while ((skb
= skb_dequeue(list
)) != NULL
) {
205 static void neigh_flush_dev(struct neigh_table
*tbl
, struct net_device
*dev
)
208 struct neigh_hash_table
*nht
;
210 nht
= rcu_dereference_protected(tbl
->nht
,
211 lockdep_is_held(&tbl
->lock
));
213 for (i
= 0; i
< (1 << nht
->hash_shift
); i
++) {
215 struct neighbour __rcu
**np
= &nht
->hash_buckets
[i
];
217 while ((n
= rcu_dereference_protected(*np
,
218 lockdep_is_held(&tbl
->lock
))) != NULL
) {
219 if (dev
&& n
->dev
!= dev
) {
223 rcu_assign_pointer(*np
,
224 rcu_dereference_protected(n
->next
,
225 lockdep_is_held(&tbl
->lock
)));
226 write_lock(&n
->lock
);
230 if (atomic_read(&n
->refcnt
) != 1) {
231 /* The most unpleasant situation.
232 We must destroy neighbour entry,
233 but someone still uses it.
235 The destroy will be delayed until
236 the last user releases us, but
237 we must kill timers etc. and move
240 skb_queue_purge(&n
->arp_queue
);
241 n
->output
= neigh_blackhole
;
242 if (n
->nud_state
& NUD_VALID
)
243 n
->nud_state
= NUD_NOARP
;
245 n
->nud_state
= NUD_NONE
;
246 NEIGH_PRINTK2("neigh %p is stray.\n", n
);
248 write_unlock(&n
->lock
);
249 neigh_cleanup_and_release(n
);
254 void neigh_changeaddr(struct neigh_table
*tbl
, struct net_device
*dev
)
256 write_lock_bh(&tbl
->lock
);
257 neigh_flush_dev(tbl
, dev
);
258 write_unlock_bh(&tbl
->lock
);
260 EXPORT_SYMBOL(neigh_changeaddr
);
262 int neigh_ifdown(struct neigh_table
*tbl
, struct net_device
*dev
)
264 write_lock_bh(&tbl
->lock
);
265 neigh_flush_dev(tbl
, dev
);
266 pneigh_ifdown(tbl
, dev
);
267 write_unlock_bh(&tbl
->lock
);
269 del_timer_sync(&tbl
->proxy_timer
);
270 pneigh_queue_purge(&tbl
->proxy_queue
);
273 EXPORT_SYMBOL(neigh_ifdown
);
275 static struct neighbour
*neigh_alloc(struct neigh_table
*tbl
)
277 struct neighbour
*n
= NULL
;
278 unsigned long now
= jiffies
;
281 entries
= atomic_inc_return(&tbl
->entries
) - 1;
282 if (entries
>= tbl
->gc_thresh3
||
283 (entries
>= tbl
->gc_thresh2
&&
284 time_after(now
, tbl
->last_flush
+ 5 * HZ
))) {
285 if (!neigh_forced_gc(tbl
) &&
286 entries
>= tbl
->gc_thresh3
)
290 n
= kmem_cache_zalloc(tbl
->kmem_cachep
, GFP_ATOMIC
);
294 skb_queue_head_init(&n
->arp_queue
);
295 rwlock_init(&n
->lock
);
296 seqlock_init(&n
->ha_lock
);
297 n
->updated
= n
->used
= now
;
298 n
->nud_state
= NUD_NONE
;
299 n
->output
= neigh_blackhole
;
300 seqlock_init(&n
->hh
.hh_lock
);
301 n
->parms
= neigh_parms_clone(&tbl
->parms
);
302 setup_timer(&n
->timer
, neigh_timer_handler
, (unsigned long)n
);
304 NEIGH_CACHE_STAT_INC(tbl
, allocs
);
306 atomic_set(&n
->refcnt
, 1);
312 atomic_dec(&tbl
->entries
);
316 static struct neigh_hash_table
*neigh_hash_alloc(unsigned int shift
)
318 size_t size
= (1 << shift
) * sizeof(struct neighbour
*);
319 struct neigh_hash_table
*ret
;
320 struct neighbour __rcu
**buckets
;
322 ret
= kmalloc(sizeof(*ret
), GFP_ATOMIC
);
325 if (size
<= PAGE_SIZE
)
326 buckets
= kzalloc(size
, GFP_ATOMIC
);
328 buckets
= (struct neighbour __rcu
**)
329 __get_free_pages(GFP_ATOMIC
| __GFP_ZERO
,
335 ret
->hash_buckets
= buckets
;
336 ret
->hash_shift
= shift
;
337 get_random_bytes(&ret
->hash_rnd
, sizeof(ret
->hash_rnd
));
342 static void neigh_hash_free_rcu(struct rcu_head
*head
)
344 struct neigh_hash_table
*nht
= container_of(head
,
345 struct neigh_hash_table
,
347 size_t size
= (1 << nht
->hash_shift
) * sizeof(struct neighbour
*);
348 struct neighbour __rcu
**buckets
= nht
->hash_buckets
;
350 if (size
<= PAGE_SIZE
)
353 free_pages((unsigned long)buckets
, get_order(size
));
357 static struct neigh_hash_table
*neigh_hash_grow(struct neigh_table
*tbl
,
358 unsigned long new_shift
)
360 unsigned int i
, hash
;
361 struct neigh_hash_table
*new_nht
, *old_nht
;
363 NEIGH_CACHE_STAT_INC(tbl
, hash_grows
);
365 old_nht
= rcu_dereference_protected(tbl
->nht
,
366 lockdep_is_held(&tbl
->lock
));
367 new_nht
= neigh_hash_alloc(new_shift
);
371 for (i
= 0; i
< (1 << old_nht
->hash_shift
); i
++) {
372 struct neighbour
*n
, *next
;
374 for (n
= rcu_dereference_protected(old_nht
->hash_buckets
[i
],
375 lockdep_is_held(&tbl
->lock
));
378 hash
= tbl
->hash(n
->primary_key
, n
->dev
,
381 hash
>>= (32 - new_nht
->hash_shift
);
382 next
= rcu_dereference_protected(n
->next
,
383 lockdep_is_held(&tbl
->lock
));
385 rcu_assign_pointer(n
->next
,
386 rcu_dereference_protected(
387 new_nht
->hash_buckets
[hash
],
388 lockdep_is_held(&tbl
->lock
)));
389 rcu_assign_pointer(new_nht
->hash_buckets
[hash
], n
);
393 rcu_assign_pointer(tbl
->nht
, new_nht
);
394 call_rcu(&old_nht
->rcu
, neigh_hash_free_rcu
);
398 struct neighbour
*neigh_lookup(struct neigh_table
*tbl
, const void *pkey
,
399 struct net_device
*dev
)
402 int key_len
= tbl
->key_len
;
404 struct neigh_hash_table
*nht
;
406 NEIGH_CACHE_STAT_INC(tbl
, lookups
);
409 nht
= rcu_dereference_bh(tbl
->nht
);
410 hash_val
= tbl
->hash(pkey
, dev
, nht
->hash_rnd
) >> (32 - nht
->hash_shift
);
412 for (n
= rcu_dereference_bh(nht
->hash_buckets
[hash_val
]);
414 n
= rcu_dereference_bh(n
->next
)) {
415 if (dev
== n
->dev
&& !memcmp(n
->primary_key
, pkey
, key_len
)) {
416 if (!atomic_inc_not_zero(&n
->refcnt
))
418 NEIGH_CACHE_STAT_INC(tbl
, hits
);
423 rcu_read_unlock_bh();
426 EXPORT_SYMBOL(neigh_lookup
);
428 struct neighbour
*neigh_lookup_nodev(struct neigh_table
*tbl
, struct net
*net
,
432 int key_len
= tbl
->key_len
;
434 struct neigh_hash_table
*nht
;
436 NEIGH_CACHE_STAT_INC(tbl
, lookups
);
439 nht
= rcu_dereference_bh(tbl
->nht
);
440 hash_val
= tbl
->hash(pkey
, NULL
, nht
->hash_rnd
) >> (32 - nht
->hash_shift
);
442 for (n
= rcu_dereference_bh(nht
->hash_buckets
[hash_val
]);
444 n
= rcu_dereference_bh(n
->next
)) {
445 if (!memcmp(n
->primary_key
, pkey
, key_len
) &&
446 net_eq(dev_net(n
->dev
), net
)) {
447 if (!atomic_inc_not_zero(&n
->refcnt
))
449 NEIGH_CACHE_STAT_INC(tbl
, hits
);
454 rcu_read_unlock_bh();
457 EXPORT_SYMBOL(neigh_lookup_nodev
);
459 struct neighbour
*neigh_create(struct neigh_table
*tbl
, const void *pkey
,
460 struct net_device
*dev
)
463 int key_len
= tbl
->key_len
;
465 struct neighbour
*n1
, *rc
, *n
= neigh_alloc(tbl
);
466 struct neigh_hash_table
*nht
;
469 rc
= ERR_PTR(-ENOBUFS
);
473 memcpy(n
->primary_key
, pkey
, key_len
);
477 /* Protocol specific setup. */
478 if (tbl
->constructor
&& (error
= tbl
->constructor(n
)) < 0) {
480 goto out_neigh_release
;
483 /* Device specific setup. */
484 if (n
->parms
->neigh_setup
&&
485 (error
= n
->parms
->neigh_setup(n
)) < 0) {
487 goto out_neigh_release
;
490 n
->confirmed
= jiffies
- (n
->parms
->base_reachable_time
<< 1);
492 write_lock_bh(&tbl
->lock
);
493 nht
= rcu_dereference_protected(tbl
->nht
,
494 lockdep_is_held(&tbl
->lock
));
496 if (atomic_read(&tbl
->entries
) > (1 << nht
->hash_shift
))
497 nht
= neigh_hash_grow(tbl
, nht
->hash_shift
+ 1);
499 hash_val
= tbl
->hash(pkey
, dev
, nht
->hash_rnd
) >> (32 - nht
->hash_shift
);
501 if (n
->parms
->dead
) {
502 rc
= ERR_PTR(-EINVAL
);
506 for (n1
= rcu_dereference_protected(nht
->hash_buckets
[hash_val
],
507 lockdep_is_held(&tbl
->lock
));
509 n1
= rcu_dereference_protected(n1
->next
,
510 lockdep_is_held(&tbl
->lock
))) {
511 if (dev
== n1
->dev
&& !memcmp(n1
->primary_key
, pkey
, key_len
)) {
520 rcu_assign_pointer(n
->next
,
521 rcu_dereference_protected(nht
->hash_buckets
[hash_val
],
522 lockdep_is_held(&tbl
->lock
)));
523 rcu_assign_pointer(nht
->hash_buckets
[hash_val
], n
);
524 write_unlock_bh(&tbl
->lock
);
525 NEIGH_PRINTK2("neigh %p is created.\n", n
);
530 write_unlock_bh(&tbl
->lock
);
535 EXPORT_SYMBOL(neigh_create
);
537 static u32
pneigh_hash(const void *pkey
, int key_len
)
539 u32 hash_val
= *(u32
*)(pkey
+ key_len
- 4);
540 hash_val
^= (hash_val
>> 16);
541 hash_val
^= hash_val
>> 8;
542 hash_val
^= hash_val
>> 4;
543 hash_val
&= PNEIGH_HASHMASK
;
547 static struct pneigh_entry
*__pneigh_lookup_1(struct pneigh_entry
*n
,
551 struct net_device
*dev
)
554 if (!memcmp(n
->key
, pkey
, key_len
) &&
555 net_eq(pneigh_net(n
), net
) &&
556 (n
->dev
== dev
|| !n
->dev
))
563 struct pneigh_entry
*__pneigh_lookup(struct neigh_table
*tbl
,
564 struct net
*net
, const void *pkey
, struct net_device
*dev
)
566 int key_len
= tbl
->key_len
;
567 u32 hash_val
= pneigh_hash(pkey
, key_len
);
569 return __pneigh_lookup_1(tbl
->phash_buckets
[hash_val
],
570 net
, pkey
, key_len
, dev
);
572 EXPORT_SYMBOL_GPL(__pneigh_lookup
);
574 struct pneigh_entry
* pneigh_lookup(struct neigh_table
*tbl
,
575 struct net
*net
, const void *pkey
,
576 struct net_device
*dev
, int creat
)
578 struct pneigh_entry
*n
;
579 int key_len
= tbl
->key_len
;
580 u32 hash_val
= pneigh_hash(pkey
, key_len
);
582 read_lock_bh(&tbl
->lock
);
583 n
= __pneigh_lookup_1(tbl
->phash_buckets
[hash_val
],
584 net
, pkey
, key_len
, dev
);
585 read_unlock_bh(&tbl
->lock
);
592 n
= kmalloc(sizeof(*n
) + key_len
, GFP_KERNEL
);
596 write_pnet(&n
->net
, hold_net(net
));
597 memcpy(n
->key
, pkey
, key_len
);
602 if (tbl
->pconstructor
&& tbl
->pconstructor(n
)) {
611 write_lock_bh(&tbl
->lock
);
612 n
->next
= tbl
->phash_buckets
[hash_val
];
613 tbl
->phash_buckets
[hash_val
] = n
;
614 write_unlock_bh(&tbl
->lock
);
618 EXPORT_SYMBOL(pneigh_lookup
);
621 int pneigh_delete(struct neigh_table
*tbl
, struct net
*net
, const void *pkey
,
622 struct net_device
*dev
)
624 struct pneigh_entry
*n
, **np
;
625 int key_len
= tbl
->key_len
;
626 u32 hash_val
= pneigh_hash(pkey
, key_len
);
628 write_lock_bh(&tbl
->lock
);
629 for (np
= &tbl
->phash_buckets
[hash_val
]; (n
= *np
) != NULL
;
631 if (!memcmp(n
->key
, pkey
, key_len
) && n
->dev
== dev
&&
632 net_eq(pneigh_net(n
), net
)) {
634 write_unlock_bh(&tbl
->lock
);
635 if (tbl
->pdestructor
)
639 release_net(pneigh_net(n
));
644 write_unlock_bh(&tbl
->lock
);
648 static int pneigh_ifdown(struct neigh_table
*tbl
, struct net_device
*dev
)
650 struct pneigh_entry
*n
, **np
;
653 for (h
= 0; h
<= PNEIGH_HASHMASK
; h
++) {
654 np
= &tbl
->phash_buckets
[h
];
655 while ((n
= *np
) != NULL
) {
656 if (!dev
|| n
->dev
== dev
) {
658 if (tbl
->pdestructor
)
662 release_net(pneigh_net(n
));
672 static void neigh_parms_destroy(struct neigh_parms
*parms
);
674 static inline void neigh_parms_put(struct neigh_parms
*parms
)
676 if (atomic_dec_and_test(&parms
->refcnt
))
677 neigh_parms_destroy(parms
);
680 static void neigh_destroy_rcu(struct rcu_head
*head
)
682 struct neighbour
*neigh
= container_of(head
, struct neighbour
, rcu
);
684 kmem_cache_free(neigh
->tbl
->kmem_cachep
, neigh
);
687 * neighbour must already be out of the table;
690 void neigh_destroy(struct neighbour
*neigh
)
692 NEIGH_CACHE_STAT_INC(neigh
->tbl
, destroys
);
696 "Destroying alive neighbour %p\n", neigh
);
701 if (neigh_del_timer(neigh
))
702 printk(KERN_WARNING
"Impossible event.\n");
704 skb_queue_purge(&neigh
->arp_queue
);
707 neigh_parms_put(neigh
->parms
);
709 NEIGH_PRINTK2("neigh %p is destroyed.\n", neigh
);
711 atomic_dec(&neigh
->tbl
->entries
);
712 call_rcu(&neigh
->rcu
, neigh_destroy_rcu
);
714 EXPORT_SYMBOL(neigh_destroy
);
716 /* Neighbour state is suspicious;
719 Called with write_locked neigh.
721 static void neigh_suspect(struct neighbour
*neigh
)
723 NEIGH_PRINTK2("neigh %p is suspected.\n", neigh
);
725 neigh
->output
= neigh
->ops
->output
;
728 /* Neighbour state is OK;
731 Called with write_locked neigh.
733 static void neigh_connect(struct neighbour
*neigh
)
735 NEIGH_PRINTK2("neigh %p is connected.\n", neigh
);
737 neigh
->output
= neigh
->ops
->connected_output
;
740 static void neigh_periodic_work(struct work_struct
*work
)
742 struct neigh_table
*tbl
= container_of(work
, struct neigh_table
, gc_work
.work
);
744 struct neighbour __rcu
**np
;
746 struct neigh_hash_table
*nht
;
748 NEIGH_CACHE_STAT_INC(tbl
, periodic_gc_runs
);
750 write_lock_bh(&tbl
->lock
);
751 nht
= rcu_dereference_protected(tbl
->nht
,
752 lockdep_is_held(&tbl
->lock
));
755 * periodically recompute ReachableTime from random function
758 if (time_after(jiffies
, tbl
->last_rand
+ 300 * HZ
)) {
759 struct neigh_parms
*p
;
760 tbl
->last_rand
= jiffies
;
761 for (p
= &tbl
->parms
; p
; p
= p
->next
)
763 neigh_rand_reach_time(p
->base_reachable_time
);
766 for (i
= 0 ; i
< (1 << nht
->hash_shift
); i
++) {
767 np
= &nht
->hash_buckets
[i
];
769 while ((n
= rcu_dereference_protected(*np
,
770 lockdep_is_held(&tbl
->lock
))) != NULL
) {
773 write_lock(&n
->lock
);
775 state
= n
->nud_state
;
776 if (state
& (NUD_PERMANENT
| NUD_IN_TIMER
)) {
777 write_unlock(&n
->lock
);
781 if (time_before(n
->used
, n
->confirmed
))
782 n
->used
= n
->confirmed
;
784 if (atomic_read(&n
->refcnt
) == 1 &&
785 (state
== NUD_FAILED
||
786 time_after(jiffies
, n
->used
+ n
->parms
->gc_staletime
))) {
789 write_unlock(&n
->lock
);
790 neigh_cleanup_and_release(n
);
793 write_unlock(&n
->lock
);
799 * It's fine to release lock here, even if hash table
800 * grows while we are preempted.
802 write_unlock_bh(&tbl
->lock
);
804 write_lock_bh(&tbl
->lock
);
806 /* Cycle through all hash buckets every base_reachable_time/2 ticks.
807 * ARP entry timeouts range from 1/2 base_reachable_time to 3/2
808 * base_reachable_time.
810 schedule_delayed_work(&tbl
->gc_work
,
811 tbl
->parms
.base_reachable_time
>> 1);
812 write_unlock_bh(&tbl
->lock
);
815 static __inline__
int neigh_max_probes(struct neighbour
*n
)
817 struct neigh_parms
*p
= n
->parms
;
818 return (n
->nud_state
& NUD_PROBE
) ?
820 p
->ucast_probes
+ p
->app_probes
+ p
->mcast_probes
;
823 static void neigh_invalidate(struct neighbour
*neigh
)
824 __releases(neigh
->lock
)
825 __acquires(neigh
->lock
)
829 NEIGH_CACHE_STAT_INC(neigh
->tbl
, res_failed
);
830 NEIGH_PRINTK2("neigh %p is failed.\n", neigh
);
831 neigh
->updated
= jiffies
;
833 /* It is very thin place. report_unreachable is very complicated
834 routine. Particularly, it can hit the same neighbour entry!
836 So that, we try to be accurate and avoid dead loop. --ANK
838 while (neigh
->nud_state
== NUD_FAILED
&&
839 (skb
= __skb_dequeue(&neigh
->arp_queue
)) != NULL
) {
840 write_unlock(&neigh
->lock
);
841 neigh
->ops
->error_report(neigh
, skb
);
842 write_lock(&neigh
->lock
);
844 skb_queue_purge(&neigh
->arp_queue
);
847 /* Called when a timer expires for a neighbour entry. */
849 static void neigh_timer_handler(unsigned long arg
)
851 unsigned long now
, next
;
852 struct neighbour
*neigh
= (struct neighbour
*)arg
;
856 write_lock(&neigh
->lock
);
858 state
= neigh
->nud_state
;
862 if (!(state
& NUD_IN_TIMER
)) {
864 printk(KERN_WARNING
"neigh: timer & !nud_in_timer\n");
869 if (state
& NUD_REACHABLE
) {
870 if (time_before_eq(now
,
871 neigh
->confirmed
+ neigh
->parms
->reachable_time
)) {
872 NEIGH_PRINTK2("neigh %p is still alive.\n", neigh
);
873 next
= neigh
->confirmed
+ neigh
->parms
->reachable_time
;
874 } else if (time_before_eq(now
,
875 neigh
->used
+ neigh
->parms
->delay_probe_time
)) {
876 NEIGH_PRINTK2("neigh %p is delayed.\n", neigh
);
877 neigh
->nud_state
= NUD_DELAY
;
878 neigh
->updated
= jiffies
;
879 neigh_suspect(neigh
);
880 next
= now
+ neigh
->parms
->delay_probe_time
;
882 NEIGH_PRINTK2("neigh %p is suspected.\n", neigh
);
883 neigh
->nud_state
= NUD_STALE
;
884 neigh
->updated
= jiffies
;
885 neigh_suspect(neigh
);
888 } else if (state
& NUD_DELAY
) {
889 if (time_before_eq(now
,
890 neigh
->confirmed
+ neigh
->parms
->delay_probe_time
)) {
891 NEIGH_PRINTK2("neigh %p is now reachable.\n", neigh
);
892 neigh
->nud_state
= NUD_REACHABLE
;
893 neigh
->updated
= jiffies
;
894 neigh_connect(neigh
);
896 next
= neigh
->confirmed
+ neigh
->parms
->reachable_time
;
898 NEIGH_PRINTK2("neigh %p is probed.\n", neigh
);
899 neigh
->nud_state
= NUD_PROBE
;
900 neigh
->updated
= jiffies
;
901 atomic_set(&neigh
->probes
, 0);
902 next
= now
+ neigh
->parms
->retrans_time
;
905 /* NUD_PROBE|NUD_INCOMPLETE */
906 next
= now
+ neigh
->parms
->retrans_time
;
909 if ((neigh
->nud_state
& (NUD_INCOMPLETE
| NUD_PROBE
)) &&
910 atomic_read(&neigh
->probes
) >= neigh_max_probes(neigh
)) {
911 neigh
->nud_state
= NUD_FAILED
;
913 neigh_invalidate(neigh
);
916 if (neigh
->nud_state
& NUD_IN_TIMER
) {
917 if (time_before(next
, jiffies
+ HZ
/2))
918 next
= jiffies
+ HZ
/2;
919 if (!mod_timer(&neigh
->timer
, next
))
922 if (neigh
->nud_state
& (NUD_INCOMPLETE
| NUD_PROBE
)) {
923 struct sk_buff
*skb
= skb_peek(&neigh
->arp_queue
);
924 /* keep skb alive even if arp_queue overflows */
926 skb
= skb_copy(skb
, GFP_ATOMIC
);
927 write_unlock(&neigh
->lock
);
928 neigh
->ops
->solicit(neigh
, skb
);
929 atomic_inc(&neigh
->probes
);
933 write_unlock(&neigh
->lock
);
937 neigh_update_notify(neigh
);
939 neigh_release(neigh
);
942 int __neigh_event_send(struct neighbour
*neigh
, struct sk_buff
*skb
)
947 write_lock_bh(&neigh
->lock
);
950 if (neigh
->nud_state
& (NUD_CONNECTED
| NUD_DELAY
| NUD_PROBE
))
955 if (!(neigh
->nud_state
& (NUD_STALE
| NUD_INCOMPLETE
))) {
956 if (neigh
->parms
->mcast_probes
+ neigh
->parms
->app_probes
) {
957 atomic_set(&neigh
->probes
, neigh
->parms
->ucast_probes
);
958 neigh
->nud_state
= NUD_INCOMPLETE
;
959 neigh
->updated
= jiffies
;
960 neigh_add_timer(neigh
, now
+ 1);
962 neigh
->nud_state
= NUD_FAILED
;
963 neigh
->updated
= jiffies
;
964 write_unlock_bh(&neigh
->lock
);
969 } else if (neigh
->nud_state
& NUD_STALE
) {
970 NEIGH_PRINTK2("neigh %p is delayed.\n", neigh
);
971 neigh
->nud_state
= NUD_DELAY
;
972 neigh
->updated
= jiffies
;
973 neigh_add_timer(neigh
,
974 jiffies
+ neigh
->parms
->delay_probe_time
);
977 if (neigh
->nud_state
== NUD_INCOMPLETE
) {
979 if (skb_queue_len(&neigh
->arp_queue
) >=
980 neigh
->parms
->queue_len
) {
981 struct sk_buff
*buff
;
982 buff
= __skb_dequeue(&neigh
->arp_queue
);
984 NEIGH_CACHE_STAT_INC(neigh
->tbl
, unres_discards
);
987 __skb_queue_tail(&neigh
->arp_queue
, skb
);
992 write_unlock_bh(&neigh
->lock
);
995 EXPORT_SYMBOL(__neigh_event_send
);
997 static void neigh_update_hhs(struct neighbour
*neigh
)
1000 void (*update
)(struct hh_cache
*, const struct net_device
*, const unsigned char *)
1003 if (neigh
->dev
->header_ops
)
1004 update
= neigh
->dev
->header_ops
->cache_update
;
1009 write_seqlock_bh(&hh
->hh_lock
);
1010 update(hh
, neigh
->dev
, neigh
->ha
);
1011 write_sequnlock_bh(&hh
->hh_lock
);
1018 /* Generic update routine.
1019 -- lladdr is new lladdr or NULL, if it is not supplied.
1020 -- new is new state.
1022 NEIGH_UPDATE_F_OVERRIDE allows to override existing lladdr,
1024 NEIGH_UPDATE_F_WEAK_OVERRIDE will suspect existing "connected"
1025 lladdr instead of overriding it
1027 It also allows to retain current state
1028 if lladdr is unchanged.
1029 NEIGH_UPDATE_F_ADMIN means that the change is administrative.
1031 NEIGH_UPDATE_F_OVERRIDE_ISROUTER allows to override existing
1033 NEIGH_UPDATE_F_ISROUTER indicates if the neighbour is known as
1036 Caller MUST hold reference count on the entry.
1039 int neigh_update(struct neighbour
*neigh
, const u8
*lladdr
, u8
new,
1045 struct net_device
*dev
;
1046 int update_isrouter
= 0;
1048 write_lock_bh(&neigh
->lock
);
1051 old
= neigh
->nud_state
;
1054 if (!(flags
& NEIGH_UPDATE_F_ADMIN
) &&
1055 (old
& (NUD_NOARP
| NUD_PERMANENT
)))
1058 if (!(new & NUD_VALID
)) {
1059 neigh_del_timer(neigh
);
1060 if (old
& NUD_CONNECTED
)
1061 neigh_suspect(neigh
);
1062 neigh
->nud_state
= new;
1064 notify
= old
& NUD_VALID
;
1065 if ((old
& (NUD_INCOMPLETE
| NUD_PROBE
)) &&
1066 (new & NUD_FAILED
)) {
1067 neigh_invalidate(neigh
);
1073 /* Compare new lladdr with cached one */
1074 if (!dev
->addr_len
) {
1075 /* First case: device needs no address. */
1077 } else if (lladdr
) {
1078 /* The second case: if something is already cached
1079 and a new address is proposed:
1081 - if they are different, check override flag
1083 if ((old
& NUD_VALID
) &&
1084 !memcmp(lladdr
, neigh
->ha
, dev
->addr_len
))
1087 /* No address is supplied; if we know something,
1088 use it, otherwise discard the request.
1091 if (!(old
& NUD_VALID
))
1096 if (new & NUD_CONNECTED
)
1097 neigh
->confirmed
= jiffies
;
1098 neigh
->updated
= jiffies
;
1100 /* If entry was valid and address is not changed,
1101 do not change entry state, if new one is STALE.
1104 update_isrouter
= flags
& NEIGH_UPDATE_F_OVERRIDE_ISROUTER
;
1105 if (old
& NUD_VALID
) {
1106 if (lladdr
!= neigh
->ha
&& !(flags
& NEIGH_UPDATE_F_OVERRIDE
)) {
1107 update_isrouter
= 0;
1108 if ((flags
& NEIGH_UPDATE_F_WEAK_OVERRIDE
) &&
1109 (old
& NUD_CONNECTED
)) {
1115 if (lladdr
== neigh
->ha
&& new == NUD_STALE
&&
1116 ((flags
& NEIGH_UPDATE_F_WEAK_OVERRIDE
) ||
1117 (old
& NUD_CONNECTED
))
1124 neigh_del_timer(neigh
);
1125 if (new & NUD_IN_TIMER
)
1126 neigh_add_timer(neigh
, (jiffies
+
1127 ((new & NUD_REACHABLE
) ?
1128 neigh
->parms
->reachable_time
:
1130 neigh
->nud_state
= new;
1133 if (lladdr
!= neigh
->ha
) {
1134 write_seqlock(&neigh
->ha_lock
);
1135 memcpy(&neigh
->ha
, lladdr
, dev
->addr_len
);
1136 write_sequnlock(&neigh
->ha_lock
);
1137 neigh_update_hhs(neigh
);
1138 if (!(new & NUD_CONNECTED
))
1139 neigh
->confirmed
= jiffies
-
1140 (neigh
->parms
->base_reachable_time
<< 1);
1145 if (new & NUD_CONNECTED
)
1146 neigh_connect(neigh
);
1148 neigh_suspect(neigh
);
1149 if (!(old
& NUD_VALID
)) {
1150 struct sk_buff
*skb
;
1152 /* Again: avoid dead loop if something went wrong */
1154 while (neigh
->nud_state
& NUD_VALID
&&
1155 (skb
= __skb_dequeue(&neigh
->arp_queue
)) != NULL
) {
1156 struct dst_entry
*dst
= skb_dst(skb
);
1157 struct neighbour
*n2
, *n1
= neigh
;
1158 write_unlock_bh(&neigh
->lock
);
1159 /* On shaper/eql skb->dst->neighbour != neigh :( */
1160 if (dst
&& (n2
= dst_get_neighbour(dst
)) != NULL
)
1162 n1
->output(n1
, skb
);
1163 write_lock_bh(&neigh
->lock
);
1165 skb_queue_purge(&neigh
->arp_queue
);
1168 if (update_isrouter
) {
1169 neigh
->flags
= (flags
& NEIGH_UPDATE_F_ISROUTER
) ?
1170 (neigh
->flags
| NTF_ROUTER
) :
1171 (neigh
->flags
& ~NTF_ROUTER
);
1173 write_unlock_bh(&neigh
->lock
);
1176 neigh_update_notify(neigh
);
1180 EXPORT_SYMBOL(neigh_update
);
1182 struct neighbour
*neigh_event_ns(struct neigh_table
*tbl
,
1183 u8
*lladdr
, void *saddr
,
1184 struct net_device
*dev
)
1186 struct neighbour
*neigh
= __neigh_lookup(tbl
, saddr
, dev
,
1187 lladdr
|| !dev
->addr_len
);
1189 neigh_update(neigh
, lladdr
, NUD_STALE
,
1190 NEIGH_UPDATE_F_OVERRIDE
);
1193 EXPORT_SYMBOL(neigh_event_ns
);
1195 /* called with read_lock_bh(&n->lock); */
1196 static void neigh_hh_init(struct neighbour
*n
, struct dst_entry
*dst
)
1198 struct net_device
*dev
= dst
->dev
;
1199 __be16 prot
= dst
->ops
->protocol
;
1200 struct hh_cache
*hh
= &n
->hh
;
1202 write_lock_bh(&n
->lock
);
1204 /* Only one thread can come in here and initialize the
1208 dev
->header_ops
->cache(n
, hh
, prot
);
1210 write_unlock_bh(&n
->lock
);
1213 /* This function can be used in contexts, where only old dev_queue_xmit
1214 * worked, f.e. if you want to override normal output path (eql, shaper),
1215 * but resolution is not made yet.
1218 int neigh_compat_output(struct neighbour
*neigh
, struct sk_buff
*skb
)
1220 struct net_device
*dev
= skb
->dev
;
1222 __skb_pull(skb
, skb_network_offset(skb
));
1224 if (dev_hard_header(skb
, dev
, ntohs(skb
->protocol
), NULL
, NULL
,
1226 dev
->header_ops
->rebuild(skb
))
1229 return dev_queue_xmit(skb
);
1231 EXPORT_SYMBOL(neigh_compat_output
);
1233 /* Slow and careful. */
1235 int neigh_resolve_output(struct neighbour
*neigh
, struct sk_buff
*skb
)
1237 struct dst_entry
*dst
= skb_dst(skb
);
1243 __skb_pull(skb
, skb_network_offset(skb
));
1245 if (!neigh_event_send(neigh
, skb
)) {
1247 struct net_device
*dev
= neigh
->dev
;
1250 if (dev
->header_ops
->cache
&& !neigh
->hh
.hh_len
)
1251 neigh_hh_init(neigh
, dst
);
1254 seq
= read_seqbegin(&neigh
->ha_lock
);
1255 err
= dev_hard_header(skb
, dev
, ntohs(skb
->protocol
),
1256 neigh
->ha
, NULL
, skb
->len
);
1257 } while (read_seqretry(&neigh
->ha_lock
, seq
));
1260 rc
= dev_queue_xmit(skb
);
1267 NEIGH_PRINTK1("neigh_resolve_output: dst=%p neigh=%p\n",
1274 EXPORT_SYMBOL(neigh_resolve_output
);
1276 /* As fast as possible without hh cache */
1278 int neigh_connected_output(struct neighbour
*neigh
, struct sk_buff
*skb
)
1280 struct net_device
*dev
= neigh
->dev
;
1284 __skb_pull(skb
, skb_network_offset(skb
));
1287 seq
= read_seqbegin(&neigh
->ha_lock
);
1288 err
= dev_hard_header(skb
, dev
, ntohs(skb
->protocol
),
1289 neigh
->ha
, NULL
, skb
->len
);
1290 } while (read_seqretry(&neigh
->ha_lock
, seq
));
1293 err
= dev_queue_xmit(skb
);
1300 EXPORT_SYMBOL(neigh_connected_output
);
1302 int neigh_direct_output(struct neighbour
*neigh
, struct sk_buff
*skb
)
1304 return dev_queue_xmit(skb
);
1306 EXPORT_SYMBOL(neigh_direct_output
);
1308 static void neigh_proxy_process(unsigned long arg
)
1310 struct neigh_table
*tbl
= (struct neigh_table
*)arg
;
1311 long sched_next
= 0;
1312 unsigned long now
= jiffies
;
1313 struct sk_buff
*skb
, *n
;
1315 spin_lock(&tbl
->proxy_queue
.lock
);
1317 skb_queue_walk_safe(&tbl
->proxy_queue
, skb
, n
) {
1318 long tdif
= NEIGH_CB(skb
)->sched_next
- now
;
1321 struct net_device
*dev
= skb
->dev
;
1323 __skb_unlink(skb
, &tbl
->proxy_queue
);
1324 if (tbl
->proxy_redo
&& netif_running(dev
)) {
1326 tbl
->proxy_redo(skb
);
1333 } else if (!sched_next
|| tdif
< sched_next
)
1336 del_timer(&tbl
->proxy_timer
);
1338 mod_timer(&tbl
->proxy_timer
, jiffies
+ sched_next
);
1339 spin_unlock(&tbl
->proxy_queue
.lock
);
1342 void pneigh_enqueue(struct neigh_table
*tbl
, struct neigh_parms
*p
,
1343 struct sk_buff
*skb
)
1345 unsigned long now
= jiffies
;
1346 unsigned long sched_next
= now
+ (net_random() % p
->proxy_delay
);
1348 if (tbl
->proxy_queue
.qlen
> p
->proxy_qlen
) {
1353 NEIGH_CB(skb
)->sched_next
= sched_next
;
1354 NEIGH_CB(skb
)->flags
|= LOCALLY_ENQUEUED
;
1356 spin_lock(&tbl
->proxy_queue
.lock
);
1357 if (del_timer(&tbl
->proxy_timer
)) {
1358 if (time_before(tbl
->proxy_timer
.expires
, sched_next
))
1359 sched_next
= tbl
->proxy_timer
.expires
;
1363 __skb_queue_tail(&tbl
->proxy_queue
, skb
);
1364 mod_timer(&tbl
->proxy_timer
, sched_next
);
1365 spin_unlock(&tbl
->proxy_queue
.lock
);
1367 EXPORT_SYMBOL(pneigh_enqueue
);
1369 static inline struct neigh_parms
*lookup_neigh_parms(struct neigh_table
*tbl
,
1370 struct net
*net
, int ifindex
)
1372 struct neigh_parms
*p
;
1374 for (p
= &tbl
->parms
; p
; p
= p
->next
) {
1375 if ((p
->dev
&& p
->dev
->ifindex
== ifindex
&& net_eq(neigh_parms_net(p
), net
)) ||
1376 (!p
->dev
&& !ifindex
))
1383 struct neigh_parms
*neigh_parms_alloc(struct net_device
*dev
,
1384 struct neigh_table
*tbl
)
1386 struct neigh_parms
*p
, *ref
;
1387 struct net
*net
= dev_net(dev
);
1388 const struct net_device_ops
*ops
= dev
->netdev_ops
;
1390 ref
= lookup_neigh_parms(tbl
, net
, 0);
1394 p
= kmemdup(ref
, sizeof(*p
), GFP_KERNEL
);
1397 atomic_set(&p
->refcnt
, 1);
1399 neigh_rand_reach_time(p
->base_reachable_time
);
1401 if (ops
->ndo_neigh_setup
&& ops
->ndo_neigh_setup(dev
, p
)) {
1408 write_pnet(&p
->net
, hold_net(net
));
1409 p
->sysctl_table
= NULL
;
1410 write_lock_bh(&tbl
->lock
);
1411 p
->next
= tbl
->parms
.next
;
1412 tbl
->parms
.next
= p
;
1413 write_unlock_bh(&tbl
->lock
);
1417 EXPORT_SYMBOL(neigh_parms_alloc
);
1419 static void neigh_rcu_free_parms(struct rcu_head
*head
)
1421 struct neigh_parms
*parms
=
1422 container_of(head
, struct neigh_parms
, rcu_head
);
1424 neigh_parms_put(parms
);
1427 void neigh_parms_release(struct neigh_table
*tbl
, struct neigh_parms
*parms
)
1429 struct neigh_parms
**p
;
1431 if (!parms
|| parms
== &tbl
->parms
)
1433 write_lock_bh(&tbl
->lock
);
1434 for (p
= &tbl
->parms
.next
; *p
; p
= &(*p
)->next
) {
1438 write_unlock_bh(&tbl
->lock
);
1440 dev_put(parms
->dev
);
1441 call_rcu(&parms
->rcu_head
, neigh_rcu_free_parms
);
1445 write_unlock_bh(&tbl
->lock
);
1446 NEIGH_PRINTK1("neigh_parms_release: not found\n");
1448 EXPORT_SYMBOL(neigh_parms_release
);
1450 static void neigh_parms_destroy(struct neigh_parms
*parms
)
1452 release_net(neigh_parms_net(parms
));
1456 static struct lock_class_key neigh_table_proxy_queue_class
;
1458 void neigh_table_init_no_netlink(struct neigh_table
*tbl
)
1460 unsigned long now
= jiffies
;
1461 unsigned long phsize
;
1463 write_pnet(&tbl
->parms
.net
, &init_net
);
1464 atomic_set(&tbl
->parms
.refcnt
, 1);
1465 tbl
->parms
.reachable_time
=
1466 neigh_rand_reach_time(tbl
->parms
.base_reachable_time
);
1468 if (!tbl
->kmem_cachep
)
1470 kmem_cache_create(tbl
->id
, tbl
->entry_size
, 0,
1471 SLAB_HWCACHE_ALIGN
|SLAB_PANIC
,
1473 tbl
->stats
= alloc_percpu(struct neigh_statistics
);
1475 panic("cannot create neighbour cache statistics");
1477 #ifdef CONFIG_PROC_FS
1478 if (!proc_create_data(tbl
->id
, 0, init_net
.proc_net_stat
,
1479 &neigh_stat_seq_fops
, tbl
))
1480 panic("cannot create neighbour proc dir entry");
1483 RCU_INIT_POINTER(tbl
->nht
, neigh_hash_alloc(3));
1485 phsize
= (PNEIGH_HASHMASK
+ 1) * sizeof(struct pneigh_entry
*);
1486 tbl
->phash_buckets
= kzalloc(phsize
, GFP_KERNEL
);
1488 if (!tbl
->nht
|| !tbl
->phash_buckets
)
1489 panic("cannot allocate neighbour cache hashes");
1491 rwlock_init(&tbl
->lock
);
1492 INIT_DELAYED_WORK_DEFERRABLE(&tbl
->gc_work
, neigh_periodic_work
);
1493 schedule_delayed_work(&tbl
->gc_work
, tbl
->parms
.reachable_time
);
1494 setup_timer(&tbl
->proxy_timer
, neigh_proxy_process
, (unsigned long)tbl
);
1495 skb_queue_head_init_class(&tbl
->proxy_queue
,
1496 &neigh_table_proxy_queue_class
);
1498 tbl
->last_flush
= now
;
1499 tbl
->last_rand
= now
+ tbl
->parms
.reachable_time
* 20;
1501 EXPORT_SYMBOL(neigh_table_init_no_netlink
);
1503 void neigh_table_init(struct neigh_table
*tbl
)
1505 struct neigh_table
*tmp
;
1507 neigh_table_init_no_netlink(tbl
);
1508 write_lock(&neigh_tbl_lock
);
1509 for (tmp
= neigh_tables
; tmp
; tmp
= tmp
->next
) {
1510 if (tmp
->family
== tbl
->family
)
1513 tbl
->next
= neigh_tables
;
1515 write_unlock(&neigh_tbl_lock
);
1517 if (unlikely(tmp
)) {
1518 printk(KERN_ERR
"NEIGH: Registering multiple tables for "
1519 "family %d\n", tbl
->family
);
1523 EXPORT_SYMBOL(neigh_table_init
);
1525 int neigh_table_clear(struct neigh_table
*tbl
)
1527 struct neigh_table
**tp
;
1529 /* It is not clean... Fix it to unload IPv6 module safely */
1530 cancel_delayed_work_sync(&tbl
->gc_work
);
1531 del_timer_sync(&tbl
->proxy_timer
);
1532 pneigh_queue_purge(&tbl
->proxy_queue
);
1533 neigh_ifdown(tbl
, NULL
);
1534 if (atomic_read(&tbl
->entries
))
1535 printk(KERN_CRIT
"neighbour leakage\n");
1536 write_lock(&neigh_tbl_lock
);
1537 for (tp
= &neigh_tables
; *tp
; tp
= &(*tp
)->next
) {
1543 write_unlock(&neigh_tbl_lock
);
1545 call_rcu(&rcu_dereference_protected(tbl
->nht
, 1)->rcu
,
1546 neigh_hash_free_rcu
);
1549 kfree(tbl
->phash_buckets
);
1550 tbl
->phash_buckets
= NULL
;
1552 remove_proc_entry(tbl
->id
, init_net
.proc_net_stat
);
1554 free_percpu(tbl
->stats
);
1557 kmem_cache_destroy(tbl
->kmem_cachep
);
1558 tbl
->kmem_cachep
= NULL
;
1562 EXPORT_SYMBOL(neigh_table_clear
);
1564 static int neigh_delete(struct sk_buff
*skb
, struct nlmsghdr
*nlh
, void *arg
)
1566 struct net
*net
= sock_net(skb
->sk
);
1568 struct nlattr
*dst_attr
;
1569 struct neigh_table
*tbl
;
1570 struct net_device
*dev
= NULL
;
1574 if (nlmsg_len(nlh
) < sizeof(*ndm
))
1577 dst_attr
= nlmsg_find_attr(nlh
, sizeof(*ndm
), NDA_DST
);
1578 if (dst_attr
== NULL
)
1581 ndm
= nlmsg_data(nlh
);
1582 if (ndm
->ndm_ifindex
) {
1583 dev
= __dev_get_by_index(net
, ndm
->ndm_ifindex
);
1590 read_lock(&neigh_tbl_lock
);
1591 for (tbl
= neigh_tables
; tbl
; tbl
= tbl
->next
) {
1592 struct neighbour
*neigh
;
1594 if (tbl
->family
!= ndm
->ndm_family
)
1596 read_unlock(&neigh_tbl_lock
);
1598 if (nla_len(dst_attr
) < tbl
->key_len
)
1601 if (ndm
->ndm_flags
& NTF_PROXY
) {
1602 err
= pneigh_delete(tbl
, net
, nla_data(dst_attr
), dev
);
1609 neigh
= neigh_lookup(tbl
, nla_data(dst_attr
), dev
);
1610 if (neigh
== NULL
) {
1615 err
= neigh_update(neigh
, NULL
, NUD_FAILED
,
1616 NEIGH_UPDATE_F_OVERRIDE
|
1617 NEIGH_UPDATE_F_ADMIN
);
1618 neigh_release(neigh
);
1621 read_unlock(&neigh_tbl_lock
);
1622 err
= -EAFNOSUPPORT
;
1628 static int neigh_add(struct sk_buff
*skb
, struct nlmsghdr
*nlh
, void *arg
)
1630 struct net
*net
= sock_net(skb
->sk
);
1632 struct nlattr
*tb
[NDA_MAX
+1];
1633 struct neigh_table
*tbl
;
1634 struct net_device
*dev
= NULL
;
1638 err
= nlmsg_parse(nlh
, sizeof(*ndm
), tb
, NDA_MAX
, NULL
);
1643 if (tb
[NDA_DST
] == NULL
)
1646 ndm
= nlmsg_data(nlh
);
1647 if (ndm
->ndm_ifindex
) {
1648 dev
= __dev_get_by_index(net
, ndm
->ndm_ifindex
);
1654 if (tb
[NDA_LLADDR
] && nla_len(tb
[NDA_LLADDR
]) < dev
->addr_len
)
1658 read_lock(&neigh_tbl_lock
);
1659 for (tbl
= neigh_tables
; tbl
; tbl
= tbl
->next
) {
1660 int flags
= NEIGH_UPDATE_F_ADMIN
| NEIGH_UPDATE_F_OVERRIDE
;
1661 struct neighbour
*neigh
;
1664 if (tbl
->family
!= ndm
->ndm_family
)
1666 read_unlock(&neigh_tbl_lock
);
1668 if (nla_len(tb
[NDA_DST
]) < tbl
->key_len
)
1670 dst
= nla_data(tb
[NDA_DST
]);
1671 lladdr
= tb
[NDA_LLADDR
] ? nla_data(tb
[NDA_LLADDR
]) : NULL
;
1673 if (ndm
->ndm_flags
& NTF_PROXY
) {
1674 struct pneigh_entry
*pn
;
1677 pn
= pneigh_lookup(tbl
, net
, dst
, dev
, 1);
1679 pn
->flags
= ndm
->ndm_flags
;
1688 neigh
= neigh_lookup(tbl
, dst
, dev
);
1689 if (neigh
== NULL
) {
1690 if (!(nlh
->nlmsg_flags
& NLM_F_CREATE
)) {
1695 neigh
= __neigh_lookup_errno(tbl
, dst
, dev
);
1696 if (IS_ERR(neigh
)) {
1697 err
= PTR_ERR(neigh
);
1701 if (nlh
->nlmsg_flags
& NLM_F_EXCL
) {
1703 neigh_release(neigh
);
1707 if (!(nlh
->nlmsg_flags
& NLM_F_REPLACE
))
1708 flags
&= ~NEIGH_UPDATE_F_OVERRIDE
;
1711 if (ndm
->ndm_flags
& NTF_USE
) {
1712 neigh_event_send(neigh
, NULL
);
1715 err
= neigh_update(neigh
, lladdr
, ndm
->ndm_state
, flags
);
1716 neigh_release(neigh
);
1720 read_unlock(&neigh_tbl_lock
);
1721 err
= -EAFNOSUPPORT
;
1726 static int neightbl_fill_parms(struct sk_buff
*skb
, struct neigh_parms
*parms
)
1728 struct nlattr
*nest
;
1730 nest
= nla_nest_start(skb
, NDTA_PARMS
);
1735 NLA_PUT_U32(skb
, NDTPA_IFINDEX
, parms
->dev
->ifindex
);
1737 NLA_PUT_U32(skb
, NDTPA_REFCNT
, atomic_read(&parms
->refcnt
));
1738 NLA_PUT_U32(skb
, NDTPA_QUEUE_LEN
, parms
->queue_len
);
1739 NLA_PUT_U32(skb
, NDTPA_PROXY_QLEN
, parms
->proxy_qlen
);
1740 NLA_PUT_U32(skb
, NDTPA_APP_PROBES
, parms
->app_probes
);
1741 NLA_PUT_U32(skb
, NDTPA_UCAST_PROBES
, parms
->ucast_probes
);
1742 NLA_PUT_U32(skb
, NDTPA_MCAST_PROBES
, parms
->mcast_probes
);
1743 NLA_PUT_MSECS(skb
, NDTPA_REACHABLE_TIME
, parms
->reachable_time
);
1744 NLA_PUT_MSECS(skb
, NDTPA_BASE_REACHABLE_TIME
,
1745 parms
->base_reachable_time
);
1746 NLA_PUT_MSECS(skb
, NDTPA_GC_STALETIME
, parms
->gc_staletime
);
1747 NLA_PUT_MSECS(skb
, NDTPA_DELAY_PROBE_TIME
, parms
->delay_probe_time
);
1748 NLA_PUT_MSECS(skb
, NDTPA_RETRANS_TIME
, parms
->retrans_time
);
1749 NLA_PUT_MSECS(skb
, NDTPA_ANYCAST_DELAY
, parms
->anycast_delay
);
1750 NLA_PUT_MSECS(skb
, NDTPA_PROXY_DELAY
, parms
->proxy_delay
);
1751 NLA_PUT_MSECS(skb
, NDTPA_LOCKTIME
, parms
->locktime
);
1753 return nla_nest_end(skb
, nest
);
1756 nla_nest_cancel(skb
, nest
);
1760 static int neightbl_fill_info(struct sk_buff
*skb
, struct neigh_table
*tbl
,
1761 u32 pid
, u32 seq
, int type
, int flags
)
1763 struct nlmsghdr
*nlh
;
1764 struct ndtmsg
*ndtmsg
;
1766 nlh
= nlmsg_put(skb
, pid
, seq
, type
, sizeof(*ndtmsg
), flags
);
1770 ndtmsg
= nlmsg_data(nlh
);
1772 read_lock_bh(&tbl
->lock
);
1773 ndtmsg
->ndtm_family
= tbl
->family
;
1774 ndtmsg
->ndtm_pad1
= 0;
1775 ndtmsg
->ndtm_pad2
= 0;
1777 NLA_PUT_STRING(skb
, NDTA_NAME
, tbl
->id
);
1778 NLA_PUT_MSECS(skb
, NDTA_GC_INTERVAL
, tbl
->gc_interval
);
1779 NLA_PUT_U32(skb
, NDTA_THRESH1
, tbl
->gc_thresh1
);
1780 NLA_PUT_U32(skb
, NDTA_THRESH2
, tbl
->gc_thresh2
);
1781 NLA_PUT_U32(skb
, NDTA_THRESH3
, tbl
->gc_thresh3
);
1784 unsigned long now
= jiffies
;
1785 unsigned int flush_delta
= now
- tbl
->last_flush
;
1786 unsigned int rand_delta
= now
- tbl
->last_rand
;
1787 struct neigh_hash_table
*nht
;
1788 struct ndt_config ndc
= {
1789 .ndtc_key_len
= tbl
->key_len
,
1790 .ndtc_entry_size
= tbl
->entry_size
,
1791 .ndtc_entries
= atomic_read(&tbl
->entries
),
1792 .ndtc_last_flush
= jiffies_to_msecs(flush_delta
),
1793 .ndtc_last_rand
= jiffies_to_msecs(rand_delta
),
1794 .ndtc_proxy_qlen
= tbl
->proxy_queue
.qlen
,
1798 nht
= rcu_dereference_bh(tbl
->nht
);
1799 ndc
.ndtc_hash_rnd
= nht
->hash_rnd
;
1800 ndc
.ndtc_hash_mask
= ((1 << nht
->hash_shift
) - 1);
1801 rcu_read_unlock_bh();
1803 NLA_PUT(skb
, NDTA_CONFIG
, sizeof(ndc
), &ndc
);
1808 struct ndt_stats ndst
;
1810 memset(&ndst
, 0, sizeof(ndst
));
1812 for_each_possible_cpu(cpu
) {
1813 struct neigh_statistics
*st
;
1815 st
= per_cpu_ptr(tbl
->stats
, cpu
);
1816 ndst
.ndts_allocs
+= st
->allocs
;
1817 ndst
.ndts_destroys
+= st
->destroys
;
1818 ndst
.ndts_hash_grows
+= st
->hash_grows
;
1819 ndst
.ndts_res_failed
+= st
->res_failed
;
1820 ndst
.ndts_lookups
+= st
->lookups
;
1821 ndst
.ndts_hits
+= st
->hits
;
1822 ndst
.ndts_rcv_probes_mcast
+= st
->rcv_probes_mcast
;
1823 ndst
.ndts_rcv_probes_ucast
+= st
->rcv_probes_ucast
;
1824 ndst
.ndts_periodic_gc_runs
+= st
->periodic_gc_runs
;
1825 ndst
.ndts_forced_gc_runs
+= st
->forced_gc_runs
;
1828 NLA_PUT(skb
, NDTA_STATS
, sizeof(ndst
), &ndst
);
1831 BUG_ON(tbl
->parms
.dev
);
1832 if (neightbl_fill_parms(skb
, &tbl
->parms
) < 0)
1833 goto nla_put_failure
;
1835 read_unlock_bh(&tbl
->lock
);
1836 return nlmsg_end(skb
, nlh
);
1839 read_unlock_bh(&tbl
->lock
);
1840 nlmsg_cancel(skb
, nlh
);
1844 static int neightbl_fill_param_info(struct sk_buff
*skb
,
1845 struct neigh_table
*tbl
,
1846 struct neigh_parms
*parms
,
1847 u32 pid
, u32 seq
, int type
,
1850 struct ndtmsg
*ndtmsg
;
1851 struct nlmsghdr
*nlh
;
1853 nlh
= nlmsg_put(skb
, pid
, seq
, type
, sizeof(*ndtmsg
), flags
);
1857 ndtmsg
= nlmsg_data(nlh
);
1859 read_lock_bh(&tbl
->lock
);
1860 ndtmsg
->ndtm_family
= tbl
->family
;
1861 ndtmsg
->ndtm_pad1
= 0;
1862 ndtmsg
->ndtm_pad2
= 0;
1864 if (nla_put_string(skb
, NDTA_NAME
, tbl
->id
) < 0 ||
1865 neightbl_fill_parms(skb
, parms
) < 0)
1868 read_unlock_bh(&tbl
->lock
);
1869 return nlmsg_end(skb
, nlh
);
1871 read_unlock_bh(&tbl
->lock
);
1872 nlmsg_cancel(skb
, nlh
);
1876 static const struct nla_policy nl_neightbl_policy
[NDTA_MAX
+1] = {
1877 [NDTA_NAME
] = { .type
= NLA_STRING
},
1878 [NDTA_THRESH1
] = { .type
= NLA_U32
},
1879 [NDTA_THRESH2
] = { .type
= NLA_U32
},
1880 [NDTA_THRESH3
] = { .type
= NLA_U32
},
1881 [NDTA_GC_INTERVAL
] = { .type
= NLA_U64
},
1882 [NDTA_PARMS
] = { .type
= NLA_NESTED
},
1885 static const struct nla_policy nl_ntbl_parm_policy
[NDTPA_MAX
+1] = {
1886 [NDTPA_IFINDEX
] = { .type
= NLA_U32
},
1887 [NDTPA_QUEUE_LEN
] = { .type
= NLA_U32
},
1888 [NDTPA_PROXY_QLEN
] = { .type
= NLA_U32
},
1889 [NDTPA_APP_PROBES
] = { .type
= NLA_U32
},
1890 [NDTPA_UCAST_PROBES
] = { .type
= NLA_U32
},
1891 [NDTPA_MCAST_PROBES
] = { .type
= NLA_U32
},
1892 [NDTPA_BASE_REACHABLE_TIME
] = { .type
= NLA_U64
},
1893 [NDTPA_GC_STALETIME
] = { .type
= NLA_U64
},
1894 [NDTPA_DELAY_PROBE_TIME
] = { .type
= NLA_U64
},
1895 [NDTPA_RETRANS_TIME
] = { .type
= NLA_U64
},
1896 [NDTPA_ANYCAST_DELAY
] = { .type
= NLA_U64
},
1897 [NDTPA_PROXY_DELAY
] = { .type
= NLA_U64
},
1898 [NDTPA_LOCKTIME
] = { .type
= NLA_U64
},
1901 static int neightbl_set(struct sk_buff
*skb
, struct nlmsghdr
*nlh
, void *arg
)
1903 struct net
*net
= sock_net(skb
->sk
);
1904 struct neigh_table
*tbl
;
1905 struct ndtmsg
*ndtmsg
;
1906 struct nlattr
*tb
[NDTA_MAX
+1];
1909 err
= nlmsg_parse(nlh
, sizeof(*ndtmsg
), tb
, NDTA_MAX
,
1910 nl_neightbl_policy
);
1914 if (tb
[NDTA_NAME
] == NULL
) {
1919 ndtmsg
= nlmsg_data(nlh
);
1920 read_lock(&neigh_tbl_lock
);
1921 for (tbl
= neigh_tables
; tbl
; tbl
= tbl
->next
) {
1922 if (ndtmsg
->ndtm_family
&& tbl
->family
!= ndtmsg
->ndtm_family
)
1925 if (nla_strcmp(tb
[NDTA_NAME
], tbl
->id
) == 0)
1935 * We acquire tbl->lock to be nice to the periodic timers and
1936 * make sure they always see a consistent set of values.
1938 write_lock_bh(&tbl
->lock
);
1940 if (tb
[NDTA_PARMS
]) {
1941 struct nlattr
*tbp
[NDTPA_MAX
+1];
1942 struct neigh_parms
*p
;
1945 err
= nla_parse_nested(tbp
, NDTPA_MAX
, tb
[NDTA_PARMS
],
1946 nl_ntbl_parm_policy
);
1948 goto errout_tbl_lock
;
1950 if (tbp
[NDTPA_IFINDEX
])
1951 ifindex
= nla_get_u32(tbp
[NDTPA_IFINDEX
]);
1953 p
= lookup_neigh_parms(tbl
, net
, ifindex
);
1956 goto errout_tbl_lock
;
1959 for (i
= 1; i
<= NDTPA_MAX
; i
++) {
1964 case NDTPA_QUEUE_LEN
:
1965 p
->queue_len
= nla_get_u32(tbp
[i
]);
1967 case NDTPA_PROXY_QLEN
:
1968 p
->proxy_qlen
= nla_get_u32(tbp
[i
]);
1970 case NDTPA_APP_PROBES
:
1971 p
->app_probes
= nla_get_u32(tbp
[i
]);
1973 case NDTPA_UCAST_PROBES
:
1974 p
->ucast_probes
= nla_get_u32(tbp
[i
]);
1976 case NDTPA_MCAST_PROBES
:
1977 p
->mcast_probes
= nla_get_u32(tbp
[i
]);
1979 case NDTPA_BASE_REACHABLE_TIME
:
1980 p
->base_reachable_time
= nla_get_msecs(tbp
[i
]);
1982 case NDTPA_GC_STALETIME
:
1983 p
->gc_staletime
= nla_get_msecs(tbp
[i
]);
1985 case NDTPA_DELAY_PROBE_TIME
:
1986 p
->delay_probe_time
= nla_get_msecs(tbp
[i
]);
1988 case NDTPA_RETRANS_TIME
:
1989 p
->retrans_time
= nla_get_msecs(tbp
[i
]);
1991 case NDTPA_ANYCAST_DELAY
:
1992 p
->anycast_delay
= nla_get_msecs(tbp
[i
]);
1994 case NDTPA_PROXY_DELAY
:
1995 p
->proxy_delay
= nla_get_msecs(tbp
[i
]);
1997 case NDTPA_LOCKTIME
:
1998 p
->locktime
= nla_get_msecs(tbp
[i
]);
2004 if (tb
[NDTA_THRESH1
])
2005 tbl
->gc_thresh1
= nla_get_u32(tb
[NDTA_THRESH1
]);
2007 if (tb
[NDTA_THRESH2
])
2008 tbl
->gc_thresh2
= nla_get_u32(tb
[NDTA_THRESH2
]);
2010 if (tb
[NDTA_THRESH3
])
2011 tbl
->gc_thresh3
= nla_get_u32(tb
[NDTA_THRESH3
]);
2013 if (tb
[NDTA_GC_INTERVAL
])
2014 tbl
->gc_interval
= nla_get_msecs(tb
[NDTA_GC_INTERVAL
]);
2019 write_unlock_bh(&tbl
->lock
);
2021 read_unlock(&neigh_tbl_lock
);
2026 static int neightbl_dump_info(struct sk_buff
*skb
, struct netlink_callback
*cb
)
2028 struct net
*net
= sock_net(skb
->sk
);
2029 int family
, tidx
, nidx
= 0;
2030 int tbl_skip
= cb
->args
[0];
2031 int neigh_skip
= cb
->args
[1];
2032 struct neigh_table
*tbl
;
2034 family
= ((struct rtgenmsg
*) nlmsg_data(cb
->nlh
))->rtgen_family
;
2036 read_lock(&neigh_tbl_lock
);
2037 for (tbl
= neigh_tables
, tidx
= 0; tbl
; tbl
= tbl
->next
, tidx
++) {
2038 struct neigh_parms
*p
;
2040 if (tidx
< tbl_skip
|| (family
&& tbl
->family
!= family
))
2043 if (neightbl_fill_info(skb
, tbl
, NETLINK_CB(cb
->skb
).pid
,
2044 cb
->nlh
->nlmsg_seq
, RTM_NEWNEIGHTBL
,
2048 for (nidx
= 0, p
= tbl
->parms
.next
; p
; p
= p
->next
) {
2049 if (!net_eq(neigh_parms_net(p
), net
))
2052 if (nidx
< neigh_skip
)
2055 if (neightbl_fill_param_info(skb
, tbl
, p
,
2056 NETLINK_CB(cb
->skb
).pid
,
2068 read_unlock(&neigh_tbl_lock
);
2075 static int neigh_fill_info(struct sk_buff
*skb
, struct neighbour
*neigh
,
2076 u32 pid
, u32 seq
, int type
, unsigned int flags
)
2078 unsigned long now
= jiffies
;
2079 struct nda_cacheinfo ci
;
2080 struct nlmsghdr
*nlh
;
2083 nlh
= nlmsg_put(skb
, pid
, seq
, type
, sizeof(*ndm
), flags
);
2087 ndm
= nlmsg_data(nlh
);
2088 ndm
->ndm_family
= neigh
->ops
->family
;
2091 ndm
->ndm_flags
= neigh
->flags
;
2092 ndm
->ndm_type
= neigh
->type
;
2093 ndm
->ndm_ifindex
= neigh
->dev
->ifindex
;
2095 NLA_PUT(skb
, NDA_DST
, neigh
->tbl
->key_len
, neigh
->primary_key
);
2097 read_lock_bh(&neigh
->lock
);
2098 ndm
->ndm_state
= neigh
->nud_state
;
2099 if (neigh
->nud_state
& NUD_VALID
) {
2100 char haddr
[MAX_ADDR_LEN
];
2102 neigh_ha_snapshot(haddr
, neigh
, neigh
->dev
);
2103 if (nla_put(skb
, NDA_LLADDR
, neigh
->dev
->addr_len
, haddr
) < 0) {
2104 read_unlock_bh(&neigh
->lock
);
2105 goto nla_put_failure
;
2109 ci
.ndm_used
= jiffies_to_clock_t(now
- neigh
->used
);
2110 ci
.ndm_confirmed
= jiffies_to_clock_t(now
- neigh
->confirmed
);
2111 ci
.ndm_updated
= jiffies_to_clock_t(now
- neigh
->updated
);
2112 ci
.ndm_refcnt
= atomic_read(&neigh
->refcnt
) - 1;
2113 read_unlock_bh(&neigh
->lock
);
2115 NLA_PUT_U32(skb
, NDA_PROBES
, atomic_read(&neigh
->probes
));
2116 NLA_PUT(skb
, NDA_CACHEINFO
, sizeof(ci
), &ci
);
2118 return nlmsg_end(skb
, nlh
);
2121 nlmsg_cancel(skb
, nlh
);
2125 static void neigh_update_notify(struct neighbour
*neigh
)
2127 call_netevent_notifiers(NETEVENT_NEIGH_UPDATE
, neigh
);
2128 __neigh_notify(neigh
, RTM_NEWNEIGH
, 0);
2131 static int neigh_dump_table(struct neigh_table
*tbl
, struct sk_buff
*skb
,
2132 struct netlink_callback
*cb
)
2134 struct net
*net
= sock_net(skb
->sk
);
2135 struct neighbour
*n
;
2136 int rc
, h
, s_h
= cb
->args
[1];
2137 int idx
, s_idx
= idx
= cb
->args
[2];
2138 struct neigh_hash_table
*nht
;
2141 nht
= rcu_dereference_bh(tbl
->nht
);
2143 for (h
= 0; h
< (1 << nht
->hash_shift
); h
++) {
2148 for (n
= rcu_dereference_bh(nht
->hash_buckets
[h
]), idx
= 0;
2150 n
= rcu_dereference_bh(n
->next
)) {
2151 if (!net_eq(dev_net(n
->dev
), net
))
2155 if (neigh_fill_info(skb
, n
, NETLINK_CB(cb
->skb
).pid
,
2158 NLM_F_MULTI
) <= 0) {
2168 rcu_read_unlock_bh();
2174 static int neigh_dump_info(struct sk_buff
*skb
, struct netlink_callback
*cb
)
2176 struct neigh_table
*tbl
;
2179 read_lock(&neigh_tbl_lock
);
2180 family
= ((struct rtgenmsg
*) nlmsg_data(cb
->nlh
))->rtgen_family
;
2183 for (tbl
= neigh_tables
, t
= 0; tbl
; tbl
= tbl
->next
, t
++) {
2184 if (t
< s_t
|| (family
&& tbl
->family
!= family
))
2187 memset(&cb
->args
[1], 0, sizeof(cb
->args
) -
2188 sizeof(cb
->args
[0]));
2189 if (neigh_dump_table(tbl
, skb
, cb
) < 0)
2192 read_unlock(&neigh_tbl_lock
);
2198 void neigh_for_each(struct neigh_table
*tbl
, void (*cb
)(struct neighbour
*, void *), void *cookie
)
2201 struct neigh_hash_table
*nht
;
2204 nht
= rcu_dereference_bh(tbl
->nht
);
2206 read_lock(&tbl
->lock
); /* avoid resizes */
2207 for (chain
= 0; chain
< (1 << nht
->hash_shift
); chain
++) {
2208 struct neighbour
*n
;
2210 for (n
= rcu_dereference_bh(nht
->hash_buckets
[chain
]);
2212 n
= rcu_dereference_bh(n
->next
))
2215 read_unlock(&tbl
->lock
);
2216 rcu_read_unlock_bh();
2218 EXPORT_SYMBOL(neigh_for_each
);
2220 /* The tbl->lock must be held as a writer and BH disabled. */
2221 void __neigh_for_each_release(struct neigh_table
*tbl
,
2222 int (*cb
)(struct neighbour
*))
2225 struct neigh_hash_table
*nht
;
2227 nht
= rcu_dereference_protected(tbl
->nht
,
2228 lockdep_is_held(&tbl
->lock
));
2229 for (chain
= 0; chain
< (1 << nht
->hash_shift
); chain
++) {
2230 struct neighbour
*n
;
2231 struct neighbour __rcu
**np
;
2233 np
= &nht
->hash_buckets
[chain
];
2234 while ((n
= rcu_dereference_protected(*np
,
2235 lockdep_is_held(&tbl
->lock
))) != NULL
) {
2238 write_lock(&n
->lock
);
2241 rcu_assign_pointer(*np
,
2242 rcu_dereference_protected(n
->next
,
2243 lockdep_is_held(&tbl
->lock
)));
2247 write_unlock(&n
->lock
);
2249 neigh_cleanup_and_release(n
);
2253 EXPORT_SYMBOL(__neigh_for_each_release
);
2255 #ifdef CONFIG_PROC_FS
2257 static struct neighbour
*neigh_get_first(struct seq_file
*seq
)
2259 struct neigh_seq_state
*state
= seq
->private;
2260 struct net
*net
= seq_file_net(seq
);
2261 struct neigh_hash_table
*nht
= state
->nht
;
2262 struct neighbour
*n
= NULL
;
2263 int bucket
= state
->bucket
;
2265 state
->flags
&= ~NEIGH_SEQ_IS_PNEIGH
;
2266 for (bucket
= 0; bucket
< (1 << nht
->hash_shift
); bucket
++) {
2267 n
= rcu_dereference_bh(nht
->hash_buckets
[bucket
]);
2270 if (!net_eq(dev_net(n
->dev
), net
))
2272 if (state
->neigh_sub_iter
) {
2276 v
= state
->neigh_sub_iter(state
, n
, &fakep
);
2280 if (!(state
->flags
& NEIGH_SEQ_SKIP_NOARP
))
2282 if (n
->nud_state
& ~NUD_NOARP
)
2285 n
= rcu_dereference_bh(n
->next
);
2291 state
->bucket
= bucket
;
2296 static struct neighbour
*neigh_get_next(struct seq_file
*seq
,
2297 struct neighbour
*n
,
2300 struct neigh_seq_state
*state
= seq
->private;
2301 struct net
*net
= seq_file_net(seq
);
2302 struct neigh_hash_table
*nht
= state
->nht
;
2304 if (state
->neigh_sub_iter
) {
2305 void *v
= state
->neigh_sub_iter(state
, n
, pos
);
2309 n
= rcu_dereference_bh(n
->next
);
2313 if (!net_eq(dev_net(n
->dev
), net
))
2315 if (state
->neigh_sub_iter
) {
2316 void *v
= state
->neigh_sub_iter(state
, n
, pos
);
2321 if (!(state
->flags
& NEIGH_SEQ_SKIP_NOARP
))
2324 if (n
->nud_state
& ~NUD_NOARP
)
2327 n
= rcu_dereference_bh(n
->next
);
2333 if (++state
->bucket
>= (1 << nht
->hash_shift
))
2336 n
= rcu_dereference_bh(nht
->hash_buckets
[state
->bucket
]);
2344 static struct neighbour
*neigh_get_idx(struct seq_file
*seq
, loff_t
*pos
)
2346 struct neighbour
*n
= neigh_get_first(seq
);
2351 n
= neigh_get_next(seq
, n
, pos
);
2356 return *pos
? NULL
: n
;
2359 static struct pneigh_entry
*pneigh_get_first(struct seq_file
*seq
)
2361 struct neigh_seq_state
*state
= seq
->private;
2362 struct net
*net
= seq_file_net(seq
);
2363 struct neigh_table
*tbl
= state
->tbl
;
2364 struct pneigh_entry
*pn
= NULL
;
2365 int bucket
= state
->bucket
;
2367 state
->flags
|= NEIGH_SEQ_IS_PNEIGH
;
2368 for (bucket
= 0; bucket
<= PNEIGH_HASHMASK
; bucket
++) {
2369 pn
= tbl
->phash_buckets
[bucket
];
2370 while (pn
&& !net_eq(pneigh_net(pn
), net
))
2375 state
->bucket
= bucket
;
2380 static struct pneigh_entry
*pneigh_get_next(struct seq_file
*seq
,
2381 struct pneigh_entry
*pn
,
2384 struct neigh_seq_state
*state
= seq
->private;
2385 struct net
*net
= seq_file_net(seq
);
2386 struct neigh_table
*tbl
= state
->tbl
;
2390 if (++state
->bucket
> PNEIGH_HASHMASK
)
2392 pn
= tbl
->phash_buckets
[state
->bucket
];
2393 while (pn
&& !net_eq(pneigh_net(pn
), net
))
2405 static struct pneigh_entry
*pneigh_get_idx(struct seq_file
*seq
, loff_t
*pos
)
2407 struct pneigh_entry
*pn
= pneigh_get_first(seq
);
2412 pn
= pneigh_get_next(seq
, pn
, pos
);
2417 return *pos
? NULL
: pn
;
2420 static void *neigh_get_idx_any(struct seq_file
*seq
, loff_t
*pos
)
2422 struct neigh_seq_state
*state
= seq
->private;
2424 loff_t idxpos
= *pos
;
2426 rc
= neigh_get_idx(seq
, &idxpos
);
2427 if (!rc
&& !(state
->flags
& NEIGH_SEQ_NEIGH_ONLY
))
2428 rc
= pneigh_get_idx(seq
, &idxpos
);
2433 void *neigh_seq_start(struct seq_file
*seq
, loff_t
*pos
, struct neigh_table
*tbl
, unsigned int neigh_seq_flags
)
2436 struct neigh_seq_state
*state
= seq
->private;
2440 state
->flags
= (neigh_seq_flags
& ~NEIGH_SEQ_IS_PNEIGH
);
2443 state
->nht
= rcu_dereference_bh(tbl
->nht
);
2445 return *pos
? neigh_get_idx_any(seq
, pos
) : SEQ_START_TOKEN
;
2447 EXPORT_SYMBOL(neigh_seq_start
);
2449 void *neigh_seq_next(struct seq_file
*seq
, void *v
, loff_t
*pos
)
2451 struct neigh_seq_state
*state
;
2454 if (v
== SEQ_START_TOKEN
) {
2455 rc
= neigh_get_first(seq
);
2459 state
= seq
->private;
2460 if (!(state
->flags
& NEIGH_SEQ_IS_PNEIGH
)) {
2461 rc
= neigh_get_next(seq
, v
, NULL
);
2464 if (!(state
->flags
& NEIGH_SEQ_NEIGH_ONLY
))
2465 rc
= pneigh_get_first(seq
);
2467 BUG_ON(state
->flags
& NEIGH_SEQ_NEIGH_ONLY
);
2468 rc
= pneigh_get_next(seq
, v
, NULL
);
2474 EXPORT_SYMBOL(neigh_seq_next
);
2476 void neigh_seq_stop(struct seq_file
*seq
, void *v
)
2479 rcu_read_unlock_bh();
2481 EXPORT_SYMBOL(neigh_seq_stop
);
2483 /* statistics via seq_file */
2485 static void *neigh_stat_seq_start(struct seq_file
*seq
, loff_t
*pos
)
2487 struct neigh_table
*tbl
= seq
->private;
2491 return SEQ_START_TOKEN
;
2493 for (cpu
= *pos
-1; cpu
< nr_cpu_ids
; ++cpu
) {
2494 if (!cpu_possible(cpu
))
2497 return per_cpu_ptr(tbl
->stats
, cpu
);
2502 static void *neigh_stat_seq_next(struct seq_file
*seq
, void *v
, loff_t
*pos
)
2504 struct neigh_table
*tbl
= seq
->private;
2507 for (cpu
= *pos
; cpu
< nr_cpu_ids
; ++cpu
) {
2508 if (!cpu_possible(cpu
))
2511 return per_cpu_ptr(tbl
->stats
, cpu
);
2516 static void neigh_stat_seq_stop(struct seq_file
*seq
, void *v
)
2521 static int neigh_stat_seq_show(struct seq_file
*seq
, void *v
)
2523 struct neigh_table
*tbl
= seq
->private;
2524 struct neigh_statistics
*st
= v
;
2526 if (v
== SEQ_START_TOKEN
) {
2527 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");
2531 seq_printf(seq
, "%08x %08lx %08lx %08lx %08lx %08lx %08lx "
2532 "%08lx %08lx %08lx %08lx %08lx\n",
2533 atomic_read(&tbl
->entries
),
2544 st
->rcv_probes_mcast
,
2545 st
->rcv_probes_ucast
,
2547 st
->periodic_gc_runs
,
2555 static const struct seq_operations neigh_stat_seq_ops
= {
2556 .start
= neigh_stat_seq_start
,
2557 .next
= neigh_stat_seq_next
,
2558 .stop
= neigh_stat_seq_stop
,
2559 .show
= neigh_stat_seq_show
,
2562 static int neigh_stat_seq_open(struct inode
*inode
, struct file
*file
)
2564 int ret
= seq_open(file
, &neigh_stat_seq_ops
);
2567 struct seq_file
*sf
= file
->private_data
;
2568 sf
->private = PDE(inode
)->data
;
2573 static const struct file_operations neigh_stat_seq_fops
= {
2574 .owner
= THIS_MODULE
,
2575 .open
= neigh_stat_seq_open
,
2577 .llseek
= seq_lseek
,
2578 .release
= seq_release
,
2581 #endif /* CONFIG_PROC_FS */
2583 static inline size_t neigh_nlmsg_size(void)
2585 return NLMSG_ALIGN(sizeof(struct ndmsg
))
2586 + nla_total_size(MAX_ADDR_LEN
) /* NDA_DST */
2587 + nla_total_size(MAX_ADDR_LEN
) /* NDA_LLADDR */
2588 + nla_total_size(sizeof(struct nda_cacheinfo
))
2589 + nla_total_size(4); /* NDA_PROBES */
2592 static void __neigh_notify(struct neighbour
*n
, int type
, int flags
)
2594 struct net
*net
= dev_net(n
->dev
);
2595 struct sk_buff
*skb
;
2598 skb
= nlmsg_new(neigh_nlmsg_size(), GFP_ATOMIC
);
2602 err
= neigh_fill_info(skb
, n
, 0, 0, type
, flags
);
2604 /* -EMSGSIZE implies BUG in neigh_nlmsg_size() */
2605 WARN_ON(err
== -EMSGSIZE
);
2609 rtnl_notify(skb
, net
, 0, RTNLGRP_NEIGH
, NULL
, GFP_ATOMIC
);
2613 rtnl_set_sk_err(net
, RTNLGRP_NEIGH
, err
);
2617 void neigh_app_ns(struct neighbour
*n
)
2619 __neigh_notify(n
, RTM_GETNEIGH
, NLM_F_REQUEST
);
2621 EXPORT_SYMBOL(neigh_app_ns
);
2622 #endif /* CONFIG_ARPD */
2624 #ifdef CONFIG_SYSCTL
2626 #define NEIGH_VARS_MAX 19
2628 static struct neigh_sysctl_table
{
2629 struct ctl_table_header
*sysctl_header
;
2630 struct ctl_table neigh_vars
[NEIGH_VARS_MAX
];
2632 } neigh_sysctl_template __read_mostly
= {
2635 .procname
= "mcast_solicit",
2636 .maxlen
= sizeof(int),
2638 .proc_handler
= proc_dointvec
,
2641 .procname
= "ucast_solicit",
2642 .maxlen
= sizeof(int),
2644 .proc_handler
= proc_dointvec
,
2647 .procname
= "app_solicit",
2648 .maxlen
= sizeof(int),
2650 .proc_handler
= proc_dointvec
,
2653 .procname
= "retrans_time",
2654 .maxlen
= sizeof(int),
2656 .proc_handler
= proc_dointvec_userhz_jiffies
,
2659 .procname
= "base_reachable_time",
2660 .maxlen
= sizeof(int),
2662 .proc_handler
= proc_dointvec_jiffies
,
2665 .procname
= "delay_first_probe_time",
2666 .maxlen
= sizeof(int),
2668 .proc_handler
= proc_dointvec_jiffies
,
2671 .procname
= "gc_stale_time",
2672 .maxlen
= sizeof(int),
2674 .proc_handler
= proc_dointvec_jiffies
,
2677 .procname
= "unres_qlen",
2678 .maxlen
= sizeof(int),
2680 .proc_handler
= proc_dointvec
,
2683 .procname
= "proxy_qlen",
2684 .maxlen
= sizeof(int),
2686 .proc_handler
= proc_dointvec
,
2689 .procname
= "anycast_delay",
2690 .maxlen
= sizeof(int),
2692 .proc_handler
= proc_dointvec_userhz_jiffies
,
2695 .procname
= "proxy_delay",
2696 .maxlen
= sizeof(int),
2698 .proc_handler
= proc_dointvec_userhz_jiffies
,
2701 .procname
= "locktime",
2702 .maxlen
= sizeof(int),
2704 .proc_handler
= proc_dointvec_userhz_jiffies
,
2707 .procname
= "retrans_time_ms",
2708 .maxlen
= sizeof(int),
2710 .proc_handler
= proc_dointvec_ms_jiffies
,
2713 .procname
= "base_reachable_time_ms",
2714 .maxlen
= sizeof(int),
2716 .proc_handler
= proc_dointvec_ms_jiffies
,
2719 .procname
= "gc_interval",
2720 .maxlen
= sizeof(int),
2722 .proc_handler
= proc_dointvec_jiffies
,
2725 .procname
= "gc_thresh1",
2726 .maxlen
= sizeof(int),
2728 .proc_handler
= proc_dointvec
,
2731 .procname
= "gc_thresh2",
2732 .maxlen
= sizeof(int),
2734 .proc_handler
= proc_dointvec
,
2737 .procname
= "gc_thresh3",
2738 .maxlen
= sizeof(int),
2740 .proc_handler
= proc_dointvec
,
2746 int neigh_sysctl_register(struct net_device
*dev
, struct neigh_parms
*p
,
2747 char *p_name
, proc_handler
*handler
)
2749 struct neigh_sysctl_table
*t
;
2750 const char *dev_name_source
= NULL
;
2752 #define NEIGH_CTL_PATH_ROOT 0
2753 #define NEIGH_CTL_PATH_PROTO 1
2754 #define NEIGH_CTL_PATH_NEIGH 2
2755 #define NEIGH_CTL_PATH_DEV 3
2757 struct ctl_path neigh_path
[] = {
2758 { .procname
= "net", },
2759 { .procname
= "proto", },
2760 { .procname
= "neigh", },
2761 { .procname
= "default", },
2765 t
= kmemdup(&neigh_sysctl_template
, sizeof(*t
), GFP_KERNEL
);
2769 t
->neigh_vars
[0].data
= &p
->mcast_probes
;
2770 t
->neigh_vars
[1].data
= &p
->ucast_probes
;
2771 t
->neigh_vars
[2].data
= &p
->app_probes
;
2772 t
->neigh_vars
[3].data
= &p
->retrans_time
;
2773 t
->neigh_vars
[4].data
= &p
->base_reachable_time
;
2774 t
->neigh_vars
[5].data
= &p
->delay_probe_time
;
2775 t
->neigh_vars
[6].data
= &p
->gc_staletime
;
2776 t
->neigh_vars
[7].data
= &p
->queue_len
;
2777 t
->neigh_vars
[8].data
= &p
->proxy_qlen
;
2778 t
->neigh_vars
[9].data
= &p
->anycast_delay
;
2779 t
->neigh_vars
[10].data
= &p
->proxy_delay
;
2780 t
->neigh_vars
[11].data
= &p
->locktime
;
2781 t
->neigh_vars
[12].data
= &p
->retrans_time
;
2782 t
->neigh_vars
[13].data
= &p
->base_reachable_time
;
2785 dev_name_source
= dev
->name
;
2786 /* Terminate the table early */
2787 memset(&t
->neigh_vars
[14], 0, sizeof(t
->neigh_vars
[14]));
2789 dev_name_source
= neigh_path
[NEIGH_CTL_PATH_DEV
].procname
;
2790 t
->neigh_vars
[14].data
= (int *)(p
+ 1);
2791 t
->neigh_vars
[15].data
= (int *)(p
+ 1) + 1;
2792 t
->neigh_vars
[16].data
= (int *)(p
+ 1) + 2;
2793 t
->neigh_vars
[17].data
= (int *)(p
+ 1) + 3;
2799 t
->neigh_vars
[3].proc_handler
= handler
;
2800 t
->neigh_vars
[3].extra1
= dev
;
2802 t
->neigh_vars
[4].proc_handler
= handler
;
2803 t
->neigh_vars
[4].extra1
= dev
;
2804 /* RetransTime (in milliseconds)*/
2805 t
->neigh_vars
[12].proc_handler
= handler
;
2806 t
->neigh_vars
[12].extra1
= dev
;
2807 /* ReachableTime (in milliseconds) */
2808 t
->neigh_vars
[13].proc_handler
= handler
;
2809 t
->neigh_vars
[13].extra1
= dev
;
2812 t
->dev_name
= kstrdup(dev_name_source
, GFP_KERNEL
);
2816 neigh_path
[NEIGH_CTL_PATH_DEV
].procname
= t
->dev_name
;
2817 neigh_path
[NEIGH_CTL_PATH_PROTO
].procname
= p_name
;
2820 register_net_sysctl_table(neigh_parms_net(p
), neigh_path
, t
->neigh_vars
);
2821 if (!t
->sysctl_header
)
2824 p
->sysctl_table
= t
;
2834 EXPORT_SYMBOL(neigh_sysctl_register
);
2836 void neigh_sysctl_unregister(struct neigh_parms
*p
)
2838 if (p
->sysctl_table
) {
2839 struct neigh_sysctl_table
*t
= p
->sysctl_table
;
2840 p
->sysctl_table
= NULL
;
2841 unregister_sysctl_table(t
->sysctl_header
);
2846 EXPORT_SYMBOL(neigh_sysctl_unregister
);
2848 #endif /* CONFIG_SYSCTL */
2850 static int __init
neigh_init(void)
2852 rtnl_register(PF_UNSPEC
, RTM_NEWNEIGH
, neigh_add
, NULL
, NULL
);
2853 rtnl_register(PF_UNSPEC
, RTM_DELNEIGH
, neigh_delete
, NULL
, NULL
);
2854 rtnl_register(PF_UNSPEC
, RTM_GETNEIGH
, NULL
, neigh_dump_info
, NULL
);
2856 rtnl_register(PF_UNSPEC
, RTM_GETNEIGHTBL
, NULL
, neightbl_dump_info
,
2858 rtnl_register(PF_UNSPEC
, RTM_SETNEIGHTBL
, neightbl_set
, NULL
, NULL
);
2863 subsys_initcall(neigh_init
);