Lines Matching refs:dat_entry

110  * batadv_dat_entry_release() - release dat_entry from lists and queue for free
112 * @ref: kref pointer of the dat_entry
116 struct batadv_dat_entry *dat_entry;
118 dat_entry = container_of(ref, struct batadv_dat_entry, refcount);
120 kfree_rcu(dat_entry, rcu);
124 * batadv_dat_entry_put() - decrement the dat_entry refcounter and possibly
126 * @dat_entry: dat_entry to be free'd
128 static void batadv_dat_entry_put(struct batadv_dat_entry *dat_entry)
130 if (!dat_entry)
133 kref_put(&dat_entry->refcount, batadv_dat_entry_release);
137 * batadv_dat_to_purge() - check whether a dat_entry has to be purged or not
138 * @dat_entry: the entry to check
142 static bool batadv_dat_to_purge(struct batadv_dat_entry *dat_entry)
144 return batadv_has_timed_out(dat_entry->last_update,
152 * not. This function takes the dat_entry as argument and has to
163 struct batadv_dat_entry *dat_entry;
176 hlist_for_each_entry_safe(dat_entry, node_tmp, head,
181 if (to_purge && !to_purge(dat_entry))
184 hlist_del_rcu(&dat_entry->hash_entry);
185 batadv_dat_entry_put(dat_entry);
318 * batadv_dat_entry_hash_find() - look for a given dat_entry in the local hash
324 * Return: the dat_entry if found, NULL otherwise.
331 struct batadv_dat_entry to_find, *dat_entry, *dat_entry_tmp = NULL;
345 hlist_for_each_entry_rcu(dat_entry, head, hash_entry) {
346 if (dat_entry->ip != ip)
349 if (!kref_get_unless_zero(&dat_entry->refcount))
352 dat_entry_tmp = dat_entry;
370 struct batadv_dat_entry *dat_entry;
373 dat_entry = batadv_dat_entry_hash_find(bat_priv, ip, vid);
375 if (dat_entry) {
376 if (!batadv_compare_eth(dat_entry->mac_addr, mac_addr))
377 ether_addr_copy(dat_entry->mac_addr, mac_addr);
378 dat_entry->last_update = jiffies;
381 &dat_entry->ip, dat_entry->mac_addr,
386 dat_entry = kmalloc(sizeof(*dat_entry), GFP_ATOMIC);
387 if (!dat_entry)
390 dat_entry->ip = ip;
391 dat_entry->vid = vid;
392 ether_addr_copy(dat_entry->mac_addr, mac_addr);
393 dat_entry->last_update = jiffies;
394 kref_init(&dat_entry->refcount);
396 kref_get(&dat_entry->refcount);
398 batadv_hash_dat, dat_entry,
399 &dat_entry->hash_entry);
403 batadv_dat_entry_put(dat_entry);
408 &dat_entry->ip, dat_entry->mac_addr, batadv_print_vid(vid));
411 if (dat_entry)
412 batadv_dat_entry_put(dat_entry);
861 struct batadv_dat_entry *dat_entry;
880 hlist_for_each_entry_rcu(dat_entry, head, hash_entry) {
881 last_seen_jiffies = jiffies - dat_entry->last_update;
888 &dat_entry->ip, dat_entry->mac_addr,
889 batadv_print_vid(dat_entry->vid),
908 * @dat_entry: entry to dump
915 struct batadv_dat_entry *dat_entry)
928 msecs = jiffies_to_msecs(jiffies - dat_entry->last_update);
931 dat_entry->ip) ||
933 dat_entry->mac_addr) ||
934 nla_put_u16(msg, BATADV_ATTR_DAT_CACHE_VID, dat_entry->vid) ||
962 struct batadv_dat_entry *dat_entry;
968 hlist_for_each_entry(dat_entry, &hash->table[bucket], hash_entry) {
972 if (batadv_dat_cache_dump_entry(msg, portid, cb, dat_entry)) {
1203 struct batadv_dat_entry *dat_entry = NULL;
1229 dat_entry = batadv_dat_entry_hash_find(bat_priv, ip_dst, vid);
1230 if (dat_entry) {
1239 if (batadv_is_my_client(bat_priv, dat_entry->mac_addr, vid)) {
1250 dat_entry->mac_addr, vid)) {
1253 dat_entry->mac_addr);
1259 dat_entry->mac_addr,
1279 if (dat_entry)
1280 batadv_dat_entry_put(dat_entry);
1300 struct batadv_dat_entry *dat_entry = NULL;
1322 dat_entry = batadv_dat_entry_hash_find(bat_priv, ip_dst, vid);
1323 if (!dat_entry)
1327 dat_entry->mac_addr, hw_src, vid);
1347 if (dat_entry)
1348 batadv_dat_entry_put(dat_entry);
1409 struct batadv_dat_entry *dat_entry = NULL;
1438 dat_entry = batadv_dat_entry_hash_find(bat_priv, ip_src, vid);
1439 if (dat_entry && batadv_compare_eth(hw_src, dat_entry->mac_addr)) {
1440 batadv_dbg(BATADV_DBG_DAT, bat_priv, "Doubled ARP reply removed: ARP MSG = [src: %pM-%pI4 dst: %pM-%pI4]; dat_entry: %pM-%pI4\n",
1442 dat_entry->mac_addr, &dat_entry->ip);
1481 if (dat_entry)
1482 batadv_dat_entry_put(dat_entry);
1857 struct batadv_dat_entry *dat_entry = NULL;
1878 dat_entry = batadv_dat_entry_hash_find(bat_priv, ip_dst, vid);
1880 if (!dat_entry) {
1891 if (dat_entry)
1892 batadv_dat_entry_put(dat_entry);