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