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