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