cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

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, &notify, &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, &notify);
   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);