Lines Matching refs:nc_path
232 static void batadv_nc_path_free_ref(struct batadv_nc_path *nc_path) in batadv_nc_path_free_ref() argument
234 if (atomic_dec_and_test(&nc_path->refcount)) in batadv_nc_path_free_ref()
235 kfree_rcu(nc_path, rcu); in batadv_nc_path_free_ref()
247 batadv_nc_path_free_ref(nc_packet->nc_path); in batadv_nc_packet_free()
275 struct batadv_nc_path *nc_path) in batadv_nc_to_purge_nc_path_coding() argument
283 return batadv_has_timed_out(nc_path->last_valid, in batadv_nc_to_purge_nc_path_coding()
295 struct batadv_nc_path *nc_path) in batadv_nc_to_purge_nc_path_decoding() argument
303 return batadv_has_timed_out(nc_path->last_valid, in batadv_nc_to_purge_nc_path_decoding()
415 struct batadv_nc_path *nc_path; in batadv_nc_purge_paths() local
425 hlist_for_each_entry_safe(nc_path, node_tmp, head, hash_entry) { in batadv_nc_purge_paths()
429 if (to_purge && !to_purge(bat_priv, nc_path)) in batadv_nc_purge_paths()
437 if (!unlikely(list_empty(&nc_path->packet_list))) { in batadv_nc_purge_paths()
441 nc_path->prev_hop, in batadv_nc_purge_paths()
442 nc_path->next_hop); in batadv_nc_purge_paths()
449 nc_path->prev_hop, nc_path->next_hop); in batadv_nc_purge_paths()
450 hlist_del_rcu(&nc_path->hash_entry); in batadv_nc_purge_paths()
451 batadv_nc_path_free_ref(nc_path); in batadv_nc_purge_paths()
479 const struct batadv_nc_path *nc_path = data; in batadv_nc_hash_choose() local
482 hash = jhash(&nc_path->prev_hop, sizeof(nc_path->prev_hop), hash); in batadv_nc_hash_choose()
483 hash = jhash(&nc_path->next_hop, sizeof(nc_path->next_hop), hash); in batadv_nc_hash_choose()
528 struct batadv_nc_path *nc_path, *nc_path_tmp = NULL; in batadv_nc_hash_find() local
538 hlist_for_each_entry_rcu(nc_path, head, hash_entry) { in batadv_nc_hash_find()
539 if (!batadv_nc_hash_compare(&nc_path->hash_entry, data)) in batadv_nc_hash_find()
542 if (!atomic_inc_not_zero(&nc_path->refcount)) in batadv_nc_hash_find()
545 nc_path_tmp = nc_path; in batadv_nc_hash_find()
561 nc_packet->nc_path->next_hop); in batadv_nc_send_packet()
580 struct batadv_nc_path *nc_path, in batadv_nc_sniffed_purge() argument
586 lockdep_assert_held(&nc_path->packet_list_lock); in batadv_nc_sniffed_purge()
619 struct batadv_nc_path *nc_path, in batadv_nc_fwd_flush() argument
624 lockdep_assert_held(&nc_path->packet_list_lock); in batadv_nc_fwd_flush()
661 struct batadv_nc_path *nc_path; in batadv_nc_process_nc_paths() local
674 hlist_for_each_entry_rcu(nc_path, head, hash_entry) { in batadv_nc_process_nc_paths()
676 spin_lock_bh(&nc_path->packet_list_lock); in batadv_nc_process_nc_paths()
678 &nc_path->packet_list, list) { in batadv_nc_process_nc_paths()
679 ret = process_fn(bat_priv, nc_path, nc_packet); in batadv_nc_process_nc_paths()
683 spin_unlock_bh(&nc_path->packet_list_lock); in batadv_nc_process_nc_paths()
946 struct batadv_nc_path *nc_path, nc_path_key; in batadv_nc_get_path() local
951 nc_path = batadv_nc_hash_find(hash, (void *)&nc_path_key); in batadv_nc_get_path()
953 if (nc_path) { in batadv_nc_get_path()
955 nc_path->last_valid = jiffies; in batadv_nc_get_path()
956 return nc_path; in batadv_nc_get_path()
960 nc_path = kzalloc(sizeof(*nc_path), GFP_ATOMIC); in batadv_nc_get_path()
962 if (!nc_path) in batadv_nc_get_path()
966 INIT_LIST_HEAD(&nc_path->packet_list); in batadv_nc_get_path()
967 spin_lock_init(&nc_path->packet_list_lock); in batadv_nc_get_path()
968 atomic_set(&nc_path->refcount, 2); in batadv_nc_get_path()
969 nc_path->last_valid = jiffies; in batadv_nc_get_path()
970 ether_addr_copy(nc_path->next_hop, dst); in batadv_nc_get_path()
971 ether_addr_copy(nc_path->prev_hop, src); in batadv_nc_get_path()
974 nc_path->prev_hop, in batadv_nc_get_path()
975 nc_path->next_hop); in batadv_nc_get_path()
980 &nc_path->hash_entry); in batadv_nc_get_path()
983 kfree(nc_path); in batadv_nc_get_path()
987 return nc_path; in batadv_nc_get_path()
1094 first_dest = nc_packet->nc_path->next_hop; in batadv_nc_code_packets()
1095 first_source = nc_packet->nc_path->prev_hop; in batadv_nc_code_packets()
1107 second_dest = nc_packet->nc_path->next_hop; in batadv_nc_code_packets()
1108 second_source = nc_packet->nc_path->prev_hop; in batadv_nc_code_packets()
1260 struct batadv_nc_path *nc_path, nc_path_key; in batadv_nc_path_search() local
1276 hlist_for_each_entry_rcu(nc_path, &hash->table[idx], hash_entry) { in batadv_nc_path_search()
1277 if (!batadv_compare_eth(nc_path->prev_hop, in_nc_node->addr)) in batadv_nc_path_search()
1280 if (!batadv_compare_eth(nc_path->next_hop, out_nc_node->addr)) in batadv_nc_path_search()
1283 spin_lock_bh(&nc_path->packet_list_lock); in batadv_nc_path_search()
1284 if (list_empty(&nc_path->packet_list)) { in batadv_nc_path_search()
1285 spin_unlock_bh(&nc_path->packet_list_lock); in batadv_nc_path_search()
1290 &nc_path->packet_list, list) { in batadv_nc_path_search()
1302 spin_unlock_bh(&nc_path->packet_list_lock); in batadv_nc_path_search()
1459 struct batadv_nc_path *nc_path, in batadv_nc_skb_add_to_path() argument
1474 nc_packet->nc_path = nc_path; in batadv_nc_skb_add_to_path()
1477 spin_lock_bh(&nc_path->packet_list_lock); in batadv_nc_skb_add_to_path()
1478 list_add_tail(&nc_packet->list, &nc_path->packet_list); in batadv_nc_skb_add_to_path()
1479 spin_unlock_bh(&nc_path->packet_list_lock); in batadv_nc_skb_add_to_path()
1498 struct batadv_nc_path *nc_path; in batadv_nc_skb_forward() local
1518 nc_path = batadv_nc_get_path(bat_priv, in batadv_nc_skb_forward()
1523 if (!nc_path) in batadv_nc_skb_forward()
1528 if (!batadv_nc_skb_add_to_path(skb, nc_path, neigh_node, packet_id)) in batadv_nc_skb_forward()
1535 batadv_nc_path_free_ref(nc_path); in batadv_nc_skb_forward()
1551 struct batadv_nc_path *nc_path; in batadv_nc_skb_store_for_decoding() local
1567 nc_path = batadv_nc_get_path(bat_priv, in batadv_nc_skb_store_for_decoding()
1572 if (!nc_path) in batadv_nc_skb_store_for_decoding()
1588 if (!batadv_nc_skb_add_to_path(skb, nc_path, NULL, packet_id)) in batadv_nc_skb_store_for_decoding()
1597 batadv_nc_path_free_ref(nc_path); in batadv_nc_skb_store_for_decoding()
1732 struct batadv_nc_path *nc_path, nc_path_key; in batadv_nc_find_decoding_packet() local
1755 hlist_for_each_entry_rcu(nc_path, &hash->table[index], hash_entry) { in batadv_nc_find_decoding_packet()
1757 spin_lock_bh(&nc_path->packet_list_lock); in batadv_nc_find_decoding_packet()
1759 &nc_path->packet_list, list) { in batadv_nc_find_decoding_packet()
1767 spin_unlock_bh(&nc_path->packet_list_lock); in batadv_nc_find_decoding_packet()