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)
194 * 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)
269 #define NEIGH_UPDATE_F_EXT_VALIDATED BIT(8)
271 /* In-kernel representation for NDA_FLAGS_EXT flags: */
289 return *(const u32 *)n->primary_key == *(const u32 *)pkey; in neigh_key_eq32()
294 const u32 *n32 = (const u32 *)n->primary_key; in neigh_key_eq128()
310 struct neigh_hash_table *nht = rcu_dereference(tbl->nht); in ___neigh_lookup_noref()
314 hash_val = hash(pkey, dev, nht->hash_rnd) >> (32 - nht->hash_shift); in ___neigh_lookup_noref()
315 neigh_for_each_in_bucket_rcu(n, &nht->hash_heads[hash_val]) in ___neigh_lookup_noref()
316 if (n->dev == dev && key_eq(n, pkey)) in ___neigh_lookup_noref()
326 return ___neigh_lookup_noref(tbl, tbl->key_eq, tbl->hash, pkey, dev); in __neigh_lookup_noref()
335 if (READ_ONCE(n->confirmed) != now) in neigh_confirm()
336 WRITE_ONCE(n->confirmed, now); in neigh_confirm()
376 return read_pnet(&parms->net); in neigh_parms_net()
393 return read_pnet(&pneigh->net); in pneigh_net()
434 refcount_dec(&parms->refcnt); in __neigh_parms_put()
439 refcount_inc(&parms->refcnt); in neigh_parms_clone()
449 if (refcount_dec_and_test(&neigh->refcnt)) in neigh_release()
456 refcount_inc(&neigh->refcnt); in neigh_clone()
460 #define neigh_hold(n) refcount_inc(&(n)->refcnt)
468 if (READ_ONCE(neigh->used) != now) in neigh_event_send_probe()
469 WRITE_ONCE(neigh->used, now); in neigh_event_send_probe()
470 if (!(READ_ONCE(neigh->nud_state) & (NUD_CONNECTED | NUD_DELAY | NUD_PROBE))) in neigh_event_send_probe()
486 seq = read_seqbegin(&hh->hh_lock); in neigh_hh_bridge()
488 memcpy(skb->data - hh_alen, hh->hh_data, ETH_ALEN + hh_alen - ETH_HLEN); in neigh_hh_bridge()
489 } while (read_seqretry(&hh->hh_lock, seq)); in neigh_hh_bridge()
501 seq = read_seqbegin(&hh->hh_lock); in neigh_hh_output()
502 hh_len = READ_ONCE(hh->hh_len); in neigh_hh_output()
512 memcpy(skb->data - HH_DATA_MOD, hh->hh_data, in neigh_hh_output()
519 memcpy(skb->data - hh_alen, hh->hh_data, in neigh_hh_output()
523 } while (read_seqretry(&hh->hh_lock, seq)); in neigh_hh_output()
537 const struct hh_cache *hh = &n->hh; in neigh_output()
539 /* n->nud_state and hh->hh_len could be changed under us. in neigh_output()
543 (READ_ONCE(n->nud_state) & NUD_CONNECTED) && in neigh_output()
544 READ_ONCE(hh->hh_len)) in neigh_output()
547 return READ_ONCE(n->output)(n, skb); in neigh_output()
581 #define NEIGH_CB(skb) ((struct neighbour_cb *)(skb)->cb)
589 seq = read_seqbegin(&n->ha_lock); in neigh_ha_snapshot()
590 memcpy(dst, n->ha, dev->addr_len); in neigh_ha_snapshot()
591 } while (read_seqretry(&n->ha_lock, seq)); in neigh_ha_snapshot()
600 if ((neigh->flags ^ ndm_flags) & NTF_ROUTER) { in neigh_update_is_router()
602 neigh->flags |= NTF_ROUTER; in neigh_update_is_router()
604 neigh->flags &= ~NTF_ROUTER; in neigh_update_is_router()