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