Lines Matching refs:bat_priv
57 static void batadv_dat_start_timer(struct batadv_priv *bat_priv) in batadv_dat_start_timer() argument
59 INIT_DELAYED_WORK(&bat_priv->dat.work, batadv_dat_purge); in batadv_dat_start_timer()
60 queue_delayed_work(batadv_event_workqueue, &bat_priv->dat.work, in batadv_dat_start_timer()
98 static void __batadv_dat_purge(struct batadv_priv *bat_priv, in __batadv_dat_purge() argument
107 if (!bat_priv->dat.hash) in __batadv_dat_purge()
110 for (i = 0; i < bat_priv->dat.hash->size; i++) { in __batadv_dat_purge()
111 head = &bat_priv->dat.hash->table[i]; in __batadv_dat_purge()
112 list_lock = &bat_priv->dat.hash->list_locks[i]; in __batadv_dat_purge()
139 struct batadv_priv *bat_priv; in batadv_dat_purge() local
143 bat_priv = container_of(priv_dat, struct batadv_priv, dat); in batadv_dat_purge()
145 __batadv_dat_purge(bat_priv, batadv_dat_to_purge); in batadv_dat_purge()
146 batadv_dat_start_timer(bat_priv); in batadv_dat_purge()
262 batadv_dat_entry_hash_find(struct batadv_priv *bat_priv, __be32 ip, in batadv_dat_entry_hash_find() argument
267 struct batadv_hashtable *hash = bat_priv->dat.hash; in batadv_dat_entry_hash_find()
302 static void batadv_dat_entry_add(struct batadv_priv *bat_priv, __be32 ip, in batadv_dat_entry_add() argument
308 dat_entry = batadv_dat_entry_hash_find(bat_priv, ip, vid); in batadv_dat_entry_add()
314 batadv_dbg(BATADV_DBG_DAT, bat_priv, in batadv_dat_entry_add()
331 hash_added = batadv_hash_add(bat_priv->dat.hash, batadv_compare_dat, in batadv_dat_entry_add()
341 batadv_dbg(BATADV_DBG_DAT, bat_priv, "New entry added: %pI4 %pM (vid: %d)\n", in batadv_dat_entry_add()
359 static void batadv_dbg_arp(struct batadv_priv *bat_priv, struct sk_buff *skb, in batadv_dbg_arp() argument
368 batadv_dbg(BATADV_DBG_DAT, bat_priv, "%s\n", msg); in batadv_dbg_arp()
372 batadv_dbg(BATADV_DBG_DAT, bat_priv, in batadv_dbg_arp()
384 batadv_dbg(BATADV_DBG_DAT, bat_priv, in batadv_dbg_arp()
388 batadv_dbg(BATADV_DBG_DAT, bat_priv, in batadv_dbg_arp()
393 batadv_dbg(BATADV_DBG_DAT, bat_priv, "* type: DAT_DHT_PUT\n"); in batadv_dbg_arp()
396 batadv_dbg(BATADV_DBG_DAT, bat_priv, "* type: DAT_DHT_GET\n"); in batadv_dbg_arp()
399 batadv_dbg(BATADV_DBG_DAT, bat_priv, in batadv_dbg_arp()
403 batadv_dbg(BATADV_DBG_DAT, bat_priv, "* type: DATA\n"); in batadv_dbg_arp()
406 batadv_dbg(BATADV_DBG_DAT, bat_priv, "* type: Unknown (%u)!\n", in batadv_dbg_arp()
413 batadv_dbg(BATADV_DBG_DAT, bat_priv, in batadv_dbg_arp()
418 batadv_dbg(BATADV_DBG_DAT, bat_priv, in batadv_dbg_arp()
426 static void batadv_dbg_arp(struct batadv_priv *bat_priv, struct sk_buff *skb, in batadv_dbg_arp() argument
495 static void batadv_choose_next_candidate(struct batadv_priv *bat_priv, in batadv_choose_next_candidate() argument
503 struct batadv_hashtable *hash = bat_priv->orig_hash; in batadv_choose_next_candidate()
543 batadv_dbg(BATADV_DBG_DAT, bat_priv, in batadv_choose_next_candidate()
565 batadv_dat_select_candidates(struct batadv_priv *bat_priv, __be32 ip_dst, in batadv_dat_select_candidates() argument
573 if (!bat_priv->orig_hash) in batadv_dat_select_candidates()
586 batadv_dbg(BATADV_DBG_DAT, bat_priv, in batadv_dat_select_candidates()
591 batadv_choose_next_candidate(bat_priv, res, select, ip_key, in batadv_dat_select_candidates()
611 static bool batadv_dat_send_data(struct batadv_priv *bat_priv, in batadv_dat_send_data() argument
622 cand = batadv_dat_select_candidates(bat_priv, ip, vid); in batadv_dat_send_data()
626 batadv_dbg(BATADV_DBG_DAT, bat_priv, "DHT_SEND for %pI4\n", &ip); in batadv_dat_send_data()
638 if (!batadv_send_skb_prepare_unicast_4addr(bat_priv, tmp_skb, in batadv_dat_send_data()
652 batadv_inc_counter(bat_priv, in batadv_dat_send_data()
656 batadv_inc_counter(bat_priv, in batadv_dat_send_data()
680 static void batadv_dat_tvlv_container_update(struct batadv_priv *bat_priv) in batadv_dat_tvlv_container_update() argument
684 dat_mode = atomic_read(&bat_priv->distributed_arp_table); in batadv_dat_tvlv_container_update()
688 batadv_tvlv_container_unregister(bat_priv, BATADV_TVLV_DAT, 1); in batadv_dat_tvlv_container_update()
691 batadv_tvlv_container_register(bat_priv, BATADV_TVLV_DAT, 1, in batadv_dat_tvlv_container_update()
704 struct batadv_priv *bat_priv = netdev_priv(net_dev); in batadv_dat_status_update() local
706 batadv_dat_tvlv_container_update(bat_priv); in batadv_dat_status_update()
717 static void batadv_dat_tvlv_ogm_handler_v1(struct batadv_priv *bat_priv, in batadv_dat_tvlv_ogm_handler_v1() argument
732 static void batadv_dat_hash_free(struct batadv_priv *bat_priv) in batadv_dat_hash_free() argument
734 if (!bat_priv->dat.hash) in batadv_dat_hash_free()
737 __batadv_dat_purge(bat_priv, NULL); in batadv_dat_hash_free()
739 batadv_hash_destroy(bat_priv->dat.hash); in batadv_dat_hash_free()
741 bat_priv->dat.hash = NULL; in batadv_dat_hash_free()
748 int batadv_dat_init(struct batadv_priv *bat_priv) in batadv_dat_init() argument
750 if (bat_priv->dat.hash) in batadv_dat_init()
753 bat_priv->dat.hash = batadv_hash_new(1024); in batadv_dat_init()
755 if (!bat_priv->dat.hash) in batadv_dat_init()
758 batadv_dat_start_timer(bat_priv); in batadv_dat_init()
760 batadv_tvlv_handler_register(bat_priv, batadv_dat_tvlv_ogm_handler_v1, in batadv_dat_init()
763 batadv_dat_tvlv_container_update(bat_priv); in batadv_dat_init()
771 void batadv_dat_free(struct batadv_priv *bat_priv) in batadv_dat_free() argument
773 batadv_tvlv_container_unregister(bat_priv, BATADV_TVLV_DAT, 1); in batadv_dat_free()
774 batadv_tvlv_handler_unregister(bat_priv, BATADV_TVLV_DAT, 1); in batadv_dat_free()
776 cancel_delayed_work_sync(&bat_priv->dat.work); in batadv_dat_free()
778 batadv_dat_hash_free(bat_priv); in batadv_dat_free()
789 struct batadv_priv *bat_priv = netdev_priv(net_dev); in batadv_dat_cache_seq_print_text() local
790 struct batadv_hashtable *hash = bat_priv->dat.hash; in batadv_dat_cache_seq_print_text()
839 static u16 batadv_arp_get_type(struct batadv_priv *bat_priv, in batadv_arp_get_type() argument
940 bool batadv_dat_snoop_outgoing_arp_request(struct batadv_priv *bat_priv, in batadv_dat_snoop_outgoing_arp_request() argument
952 if (!atomic_read(&bat_priv->distributed_arp_table)) in batadv_dat_snoop_outgoing_arp_request()
957 type = batadv_arp_get_type(bat_priv, skb, hdr_size); in batadv_dat_snoop_outgoing_arp_request()
964 batadv_dbg_arp(bat_priv, skb, type, hdr_size, in batadv_dat_snoop_outgoing_arp_request()
971 batadv_dat_entry_add(bat_priv, ip_src, hw_src, vid); in batadv_dat_snoop_outgoing_arp_request()
973 dat_entry = batadv_dat_entry_hash_find(bat_priv, ip_dst, vid); in batadv_dat_snoop_outgoing_arp_request()
983 if (batadv_is_my_client(bat_priv, dat_entry->mac_addr, vid)) { in batadv_dat_snoop_outgoing_arp_request()
989 bat_priv->soft_iface, ip_dst, hw_src, in batadv_dat_snoop_outgoing_arp_request()
1000 bat_priv->soft_iface); in batadv_dat_snoop_outgoing_arp_request()
1001 bat_priv->stats.rx_packets++; in batadv_dat_snoop_outgoing_arp_request()
1002 bat_priv->stats.rx_bytes += skb->len + ETH_HLEN + hdr_size; in batadv_dat_snoop_outgoing_arp_request()
1003 bat_priv->soft_iface->last_rx = jiffies; in batadv_dat_snoop_outgoing_arp_request()
1006 batadv_dbg(BATADV_DBG_DAT, bat_priv, "ARP request replied locally\n"); in batadv_dat_snoop_outgoing_arp_request()
1010 ret = batadv_dat_send_data(bat_priv, skb, ip_dst, vid, in batadv_dat_snoop_outgoing_arp_request()
1028 bool batadv_dat_snoop_incoming_arp_request(struct batadv_priv *bat_priv, in batadv_dat_snoop_incoming_arp_request() argument
1040 if (!atomic_read(&bat_priv->distributed_arp_table)) in batadv_dat_snoop_incoming_arp_request()
1045 type = batadv_arp_get_type(bat_priv, skb, hdr_size); in batadv_dat_snoop_incoming_arp_request()
1053 batadv_dbg_arp(bat_priv, skb, type, hdr_size, in batadv_dat_snoop_incoming_arp_request()
1056 batadv_dat_entry_add(bat_priv, ip_src, hw_src, vid); in batadv_dat_snoop_incoming_arp_request()
1058 dat_entry = batadv_dat_entry_hash_find(bat_priv, ip_dst, vid); in batadv_dat_snoop_incoming_arp_request()
1063 bat_priv->soft_iface, ip_dst, hw_src, in batadv_dat_snoop_incoming_arp_request()
1083 err = batadv_send_skb_via_tt_4addr(bat_priv, skb_new, in batadv_dat_snoop_incoming_arp_request()
1087 err = batadv_send_skb_via_tt(bat_priv, skb_new, NULL, vid); in batadv_dat_snoop_incoming_arp_request()
1090 batadv_inc_counter(bat_priv, BATADV_CNT_DAT_CACHED_REPLY_TX); in batadv_dat_snoop_incoming_arp_request()
1106 void batadv_dat_snoop_outgoing_arp_reply(struct batadv_priv *bat_priv, in batadv_dat_snoop_outgoing_arp_reply() argument
1115 if (!atomic_read(&bat_priv->distributed_arp_table)) in batadv_dat_snoop_outgoing_arp_reply()
1120 type = batadv_arp_get_type(bat_priv, skb, hdr_size); in batadv_dat_snoop_outgoing_arp_reply()
1124 batadv_dbg_arp(bat_priv, skb, type, hdr_size, in batadv_dat_snoop_outgoing_arp_reply()
1132 batadv_dat_entry_add(bat_priv, ip_src, hw_src, vid); in batadv_dat_snoop_outgoing_arp_reply()
1133 batadv_dat_entry_add(bat_priv, ip_dst, hw_dst, vid); in batadv_dat_snoop_outgoing_arp_reply()
1138 batadv_dat_send_data(bat_priv, skb, ip_src, vid, BATADV_P_DAT_DHT_PUT); in batadv_dat_snoop_outgoing_arp_reply()
1139 batadv_dat_send_data(bat_priv, skb, ip_dst, vid, BATADV_P_DAT_DHT_PUT); in batadv_dat_snoop_outgoing_arp_reply()
1152 bool batadv_dat_snoop_incoming_arp_reply(struct batadv_priv *bat_priv, in batadv_dat_snoop_incoming_arp_reply() argument
1161 if (!atomic_read(&bat_priv->distributed_arp_table)) in batadv_dat_snoop_incoming_arp_reply()
1166 type = batadv_arp_get_type(bat_priv, skb, hdr_size); in batadv_dat_snoop_incoming_arp_reply()
1170 batadv_dbg_arp(bat_priv, skb, type, hdr_size, in batadv_dat_snoop_incoming_arp_reply()
1181 batadv_dat_entry_add(bat_priv, ip_src, hw_src, vid); in batadv_dat_snoop_incoming_arp_reply()
1182 batadv_dat_entry_add(bat_priv, ip_dst, hw_dst, vid); in batadv_dat_snoop_incoming_arp_reply()
1187 dropped = !batadv_is_my_client(bat_priv, hw_dst, vid); in batadv_dat_snoop_incoming_arp_reply()
1192 dropped |= batadv_is_my_client(bat_priv, hw_src, vid); in batadv_dat_snoop_incoming_arp_reply()
1208 bool batadv_dat_drop_broadcast_packet(struct batadv_priv *bat_priv, in batadv_dat_drop_broadcast_packet() argument
1218 if (!atomic_read(&bat_priv->distributed_arp_table)) in batadv_dat_drop_broadcast_packet()
1229 type = batadv_arp_get_type(bat_priv, forw_packet->skb, hdr_size); in batadv_dat_drop_broadcast_packet()
1234 dat_entry = batadv_dat_entry_hash_find(bat_priv, ip_dst, vid); in batadv_dat_drop_broadcast_packet()
1237 batadv_dbg(BATADV_DBG_DAT, bat_priv, in batadv_dat_drop_broadcast_packet()
1242 batadv_dbg(BATADV_DBG_DAT, bat_priv, in batadv_dat_drop_broadcast_packet()