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