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