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
93 set_bit(index, p->data_state); in neigh_var_set()
94 p->data[index] = val; in neigh_var_set()
97 #define NEIGH_VAR(p, attr) ((p)->data[NEIGH_VAR_ ## attr])
107 bitmap_fill(p->data_state, NEIGH_VAR_DATA_MAX); in neigh_parms_data_state_setall()
112 bitmap_zero(p->data_state, NEIGH_VAR_DATA_MAX); in neigh_parms_data_state_cleanall()
135 #define NEIGH_CACHE_STAT_INC(tbl, field) this_cpu_inc((tbl)->stats->field)
187 * neighbour table manipulation
249 return p->tbl->family; in neigh_parms_family()
257 return (char *)n + n->tbl->entry_size; in neighbour_priv()
261 #define NEIGH_UPDATE_F_OVERRIDE BIT(0)
262 #define NEIGH_UPDATE_F_WEAK_OVERRIDE BIT(1)
263 #define NEIGH_UPDATE_F_OVERRIDE_ISROUTER BIT(2)
264 #define NEIGH_UPDATE_F_USE BIT(3)
265 #define NEIGH_UPDATE_F_MANAGED BIT(4)
266 #define NEIGH_UPDATE_F_EXT_LEARNED BIT(5)
267 #define NEIGH_UPDATE_F_ISROUTER BIT(6)
268 #define NEIGH_UPDATE_F_ADMIN BIT(7)
270 /* 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 for (n = rcu_dereference(nht->hash_buckets[hash_val]); in ___neigh_lookup_noref()
309 n = rcu_dereference(n->next)) { in ___neigh_lookup_noref()
310 if (n->dev == dev && key_eq(n, pkey)) in ___neigh_lookup_noref()
321 return ___neigh_lookup_noref(tbl, tbl->key_eq, tbl->hash, pkey, dev); in __neigh_lookup_noref()
330 if (READ_ONCE(n->confirmed) != now) in neigh_confirm()
331 WRITE_ONCE(n->confirmed, now); in neigh_confirm()
371 return read_pnet(&parms->net); in neigh_parms_net()
388 return read_pnet(&pneigh->net); in pneigh_net()
429 refcount_dec(&parms->refcnt); in __neigh_parms_put()
434 refcount_inc(&parms->refcnt); in neigh_parms_clone()
444 if (refcount_dec_and_test(&neigh->refcnt)) in neigh_release()
451 refcount_inc(&neigh->refcnt); in neigh_clone()
455 #define neigh_hold(n) refcount_inc(&(n)->refcnt)
463 if (READ_ONCE(neigh->used) != now) in neigh_event_send_probe()
464 WRITE_ONCE(neigh->used, now); in neigh_event_send_probe()
465 if (!(READ_ONCE(neigh->nud_state) & (NUD_CONNECTED | NUD_DELAY | NUD_PROBE))) in neigh_event_send_probe()
481 seq = read_seqbegin(&hh->hh_lock); in neigh_hh_bridge()
483 memcpy(skb->data - hh_alen, hh->hh_data, ETH_ALEN + hh_alen - ETH_HLEN); in neigh_hh_bridge()
484 } while (read_seqretry(&hh->hh_lock, seq)); in neigh_hh_bridge()
496 seq = read_seqbegin(&hh->hh_lock); in neigh_hh_output()
497 hh_len = READ_ONCE(hh->hh_len); in neigh_hh_output()
507 memcpy(skb->data - HH_DATA_MOD, hh->hh_data, in neigh_hh_output()
514 memcpy(skb->data - hh_alen, hh->hh_data, in neigh_hh_output()
518 } while (read_seqretry(&hh->hh_lock, seq)); in neigh_hh_output()
532 const struct hh_cache *hh = &n->hh; in neigh_output()
534 /* n->nud_state and hh->hh_len could be changed under us. in neigh_output()
538 (READ_ONCE(n->nud_state) & NUD_CONNECTED) && in neigh_output()
539 READ_ONCE(hh->hh_len)) in neigh_output()
542 return READ_ONCE(n->output)(n, skb); in neigh_output()
576 #define NEIGH_CB(skb) ((struct neighbour_cb *)(skb)->cb)
584 seq = read_seqbegin(&n->ha_lock); in neigh_ha_snapshot()
585 memcpy(dst, n->ha, dev->addr_len); in neigh_ha_snapshot()
586 } while (read_seqretry(&n->ha_lock, seq)); in neigh_ha_snapshot()
595 if ((neigh->flags ^ ndm_flags) & NTF_ROUTER) { in neigh_update_is_router()
597 neigh->flags |= NTF_ROUTER; in neigh_update_is_router()
599 neigh->flags &= ~NTF_ROUTER; in neigh_update_is_router()