Lines Matching +full:bit +full:- +full:manipulation
1 /* SPDX-License-Identifier: GPL-2.0 */
8 * Generic neighbour manipulation
17 * - Add neighbour cache statistics like rtstat
94 set_bit(index, p->data_state); in neigh_var_set()
95 p->data[index] = val; in neigh_var_set()
98 #define NEIGH_VAR(p, attr) ((p)->data[NEIGH_VAR_ ## attr])
108 bitmap_fill(p->data_state, NEIGH_VAR_DATA_MAX); in neigh_parms_data_state_setall()
113 bitmap_zero(p->data_state, NEIGH_VAR_DATA_MAX); in neigh_parms_data_state_cleanall()
136 #define NEIGH_CACHE_STAT_INC(tbl, field) this_cpu_inc((tbl)->stats->field)
189 * neighbour table manipulation
243 return p->tbl->family; in neigh_parms_family()
251 return (char *)n + n->tbl->entry_size; in neighbour_priv()
255 #define NEIGH_UPDATE_F_OVERRIDE BIT(0)
256 #define NEIGH_UPDATE_F_WEAK_OVERRIDE BIT(1)
257 #define NEIGH_UPDATE_F_OVERRIDE_ISROUTER BIT(2)
258 #define NEIGH_UPDATE_F_USE BIT(3)
259 #define NEIGH_UPDATE_F_MANAGED BIT(4)
260 #define NEIGH_UPDATE_F_EXT_LEARNED BIT(5)
261 #define NEIGH_UPDATE_F_ISROUTER BIT(6)
262 #define NEIGH_UPDATE_F_ADMIN BIT(7)
264 /* In-kernel representation for NDA_FLAGS_EXT flags: */
281 return *(const u32 *)n->primary_key == *(const u32 *)pkey; in neigh_key_eq32()
286 const u32 *n32 = (const u32 *)n->primary_key; in neigh_key_eq128()
302 struct neigh_hash_table *nht = rcu_dereference(tbl->nht); in ___neigh_lookup_noref()
306 hash_val = hash(pkey, dev, nht->hash_rnd) >> (32 - nht->hash_shift); in ___neigh_lookup_noref()
307 neigh_for_each_in_bucket_rcu(n, &nht->hash_heads[hash_val]) in ___neigh_lookup_noref()
308 if (n->dev == dev && key_eq(n, pkey)) in ___neigh_lookup_noref()
318 return ___neigh_lookup_noref(tbl, tbl->key_eq, tbl->hash, pkey, dev); in __neigh_lookup_noref()
327 if (READ_ONCE(n->confirmed) != now) in neigh_confirm()
328 WRITE_ONCE(n->confirmed, now); in neigh_confirm()
368 return read_pnet(&parms->net); in neigh_parms_net()
385 return read_pnet(&pneigh->net); in pneigh_net()
426 refcount_dec(&parms->refcnt); in __neigh_parms_put()
431 refcount_inc(&parms->refcnt); in neigh_parms_clone()
441 if (refcount_dec_and_test(&neigh->refcnt)) in neigh_release()
448 refcount_inc(&neigh->refcnt); in neigh_clone()
452 #define neigh_hold(n) refcount_inc(&(n)->refcnt)
460 if (READ_ONCE(neigh->used) != now) in neigh_event_send_probe()
461 WRITE_ONCE(neigh->used, now); in neigh_event_send_probe()
462 if (!(READ_ONCE(neigh->nud_state) & (NUD_CONNECTED | NUD_DELAY | NUD_PROBE))) in neigh_event_send_probe()
478 seq = read_seqbegin(&hh->hh_lock); in neigh_hh_bridge()
480 memcpy(skb->data - hh_alen, hh->hh_data, ETH_ALEN + hh_alen - ETH_HLEN); in neigh_hh_bridge()
481 } while (read_seqretry(&hh->hh_lock, seq)); in neigh_hh_bridge()
493 seq = read_seqbegin(&hh->hh_lock); in neigh_hh_output()
494 hh_len = READ_ONCE(hh->hh_len); in neigh_hh_output()
504 memcpy(skb->data - HH_DATA_MOD, hh->hh_data, in neigh_hh_output()
511 memcpy(skb->data - hh_alen, hh->hh_data, in neigh_hh_output()
515 } while (read_seqretry(&hh->hh_lock, seq)); in neigh_hh_output()
529 const struct hh_cache *hh = &n->hh; in neigh_output()
531 /* n->nud_state and hh->hh_len could be changed under us. in neigh_output()
535 (READ_ONCE(n->nud_state) & NUD_CONNECTED) && in neigh_output()
536 READ_ONCE(hh->hh_len)) in neigh_output()
539 return READ_ONCE(n->output)(n, skb); in neigh_output()
573 #define NEIGH_CB(skb) ((struct neighbour_cb *)(skb)->cb)
581 seq = read_seqbegin(&n->ha_lock); in neigh_ha_snapshot()
582 memcpy(dst, n->ha, dev->addr_len); in neigh_ha_snapshot()
583 } while (read_seqretry(&n->ha_lock, seq)); in neigh_ha_snapshot()
592 if ((neigh->flags ^ ndm_flags) & NTF_ROUTER) { in neigh_update_is_router()
594 neigh->flags |= NTF_ROUTER; in neigh_update_is_router()
596 neigh->flags &= ~NTF_ROUTER; in neigh_update_is_router()