Version:  2.0.40 2.2.26 2.4.37 3.5 3.6 3.7 3.8 3.9 3.10 3.11 3.12 3.13 3.14 3.15 3.16 3.17 3.18 3.19 4.0 4.1

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

This page was automatically generated by LXR 0.3.1 (source).  •  Linux is a registered trademark of Linus Torvalds  •  Contact us