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