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