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