Lines Matching refs:bat_priv

69 static void batadv_dat_start_timer(struct batadv_priv *bat_priv)  in batadv_dat_start_timer()  argument
71 INIT_DELAYED_WORK(&bat_priv->dat.work, batadv_dat_purge); in batadv_dat_start_timer()
72 queue_delayed_work(batadv_event_workqueue, &bat_priv->dat.work, in batadv_dat_start_timer()
123 static void __batadv_dat_purge(struct batadv_priv *bat_priv, in __batadv_dat_purge() argument
132 if (!bat_priv->dat.hash) in __batadv_dat_purge()
135 for (i = 0; i < bat_priv->dat.hash->size; i++) { in __batadv_dat_purge()
136 head = &bat_priv->dat.hash->table[i]; in __batadv_dat_purge()
137 list_lock = &bat_priv->dat.hash->list_locks[i]; in __batadv_dat_purge()
164 struct batadv_priv *bat_priv; in batadv_dat_purge() local
168 bat_priv = container_of(priv_dat, struct batadv_priv, dat); in batadv_dat_purge()
170 __batadv_dat_purge(bat_priv, batadv_dat_to_purge); in batadv_dat_purge()
171 batadv_dat_start_timer(bat_priv); in batadv_dat_purge()
287 batadv_dat_entry_hash_find(struct batadv_priv *bat_priv, __be32 ip, in batadv_dat_entry_hash_find() argument
292 struct batadv_hashtable *hash = bat_priv->dat.hash; in batadv_dat_entry_hash_find()
327 static void batadv_dat_entry_add(struct batadv_priv *bat_priv, __be32 ip, in batadv_dat_entry_add() argument
333 dat_entry = batadv_dat_entry_hash_find(bat_priv, ip, vid); in batadv_dat_entry_add()
339 batadv_dbg(BATADV_DBG_DAT, bat_priv, in batadv_dat_entry_add()
357 hash_added = batadv_hash_add(bat_priv->dat.hash, batadv_compare_dat, in batadv_dat_entry_add()
367 batadv_dbg(BATADV_DBG_DAT, bat_priv, "New entry added: %pI4 %pM (vid: %d)\n", in batadv_dat_entry_add()
385 static void batadv_dbg_arp(struct batadv_priv *bat_priv, struct sk_buff *skb, in batadv_dbg_arp() argument
394 batadv_dbg(BATADV_DBG_DAT, bat_priv, "%s\n", msg); in batadv_dbg_arp()
398 batadv_dbg(BATADV_DBG_DAT, bat_priv, in batadv_dbg_arp()
410 batadv_dbg(BATADV_DBG_DAT, bat_priv, in batadv_dbg_arp()
414 batadv_dbg(BATADV_DBG_DAT, bat_priv, in batadv_dbg_arp()
419 batadv_dbg(BATADV_DBG_DAT, bat_priv, "* type: DAT_DHT_PUT\n"); in batadv_dbg_arp()
422 batadv_dbg(BATADV_DBG_DAT, bat_priv, "* type: DAT_DHT_GET\n"); in batadv_dbg_arp()
425 batadv_dbg(BATADV_DBG_DAT, bat_priv, in batadv_dbg_arp()
429 batadv_dbg(BATADV_DBG_DAT, bat_priv, "* type: DATA\n"); in batadv_dbg_arp()
432 batadv_dbg(BATADV_DBG_DAT, bat_priv, "* type: Unknown (%u)!\n", in batadv_dbg_arp()
439 batadv_dbg(BATADV_DBG_DAT, bat_priv, in batadv_dbg_arp()
444 batadv_dbg(BATADV_DBG_DAT, bat_priv, in batadv_dbg_arp()
452 static void batadv_dbg_arp(struct batadv_priv *bat_priv, struct sk_buff *skb, in batadv_dbg_arp() argument
521 static void batadv_choose_next_candidate(struct batadv_priv *bat_priv, in batadv_choose_next_candidate() argument
529 struct batadv_hashtable *hash = bat_priv->orig_hash; in batadv_choose_next_candidate()
569 batadv_dbg(BATADV_DBG_DAT, bat_priv, in batadv_choose_next_candidate()
591 batadv_dat_select_candidates(struct batadv_priv *bat_priv, __be32 ip_dst, in batadv_dat_select_candidates() argument
599 if (!bat_priv->orig_hash) in batadv_dat_select_candidates()
612 batadv_dbg(BATADV_DBG_DAT, bat_priv, in batadv_dat_select_candidates()
617 batadv_choose_next_candidate(bat_priv, res, select, ip_key, in batadv_dat_select_candidates()
637 static bool batadv_dat_send_data(struct batadv_priv *bat_priv, in batadv_dat_send_data() argument
648 cand = batadv_dat_select_candidates(bat_priv, ip, vid); in batadv_dat_send_data()
652 batadv_dbg(BATADV_DBG_DAT, bat_priv, "DHT_SEND for %pI4\n", &ip); in batadv_dat_send_data()
664 if (!batadv_send_skb_prepare_unicast_4addr(bat_priv, tmp_skb, in batadv_dat_send_data()
676 batadv_inc_counter(bat_priv, in batadv_dat_send_data()
680 batadv_inc_counter(bat_priv, in batadv_dat_send_data()
704 static void batadv_dat_tvlv_container_update(struct batadv_priv *bat_priv) in batadv_dat_tvlv_container_update() argument
708 dat_mode = atomic_read(&bat_priv->distributed_arp_table); in batadv_dat_tvlv_container_update()
712 batadv_tvlv_container_unregister(bat_priv, BATADV_TVLV_DAT, 1); in batadv_dat_tvlv_container_update()
715 batadv_tvlv_container_register(bat_priv, BATADV_TVLV_DAT, 1, in batadv_dat_tvlv_container_update()
728 struct batadv_priv *bat_priv = netdev_priv(net_dev); in batadv_dat_status_update() local
730 batadv_dat_tvlv_container_update(bat_priv); in batadv_dat_status_update()
741 static void batadv_dat_tvlv_ogm_handler_v1(struct batadv_priv *bat_priv, in batadv_dat_tvlv_ogm_handler_v1() argument
756 static void batadv_dat_hash_free(struct batadv_priv *bat_priv) in batadv_dat_hash_free() argument
758 if (!bat_priv->dat.hash) in batadv_dat_hash_free()
761 __batadv_dat_purge(bat_priv, NULL); in batadv_dat_hash_free()
763 batadv_hash_destroy(bat_priv->dat.hash); in batadv_dat_hash_free()
765 bat_priv->dat.hash = NULL; in batadv_dat_hash_free()
774 int batadv_dat_init(struct batadv_priv *bat_priv) in batadv_dat_init() argument
776 if (bat_priv->dat.hash) in batadv_dat_init()
779 bat_priv->dat.hash = batadv_hash_new(1024); in batadv_dat_init()
781 if (!bat_priv->dat.hash) in batadv_dat_init()
784 batadv_dat_start_timer(bat_priv); in batadv_dat_init()
786 batadv_tvlv_handler_register(bat_priv, batadv_dat_tvlv_ogm_handler_v1, in batadv_dat_init()
789 batadv_dat_tvlv_container_update(bat_priv); in batadv_dat_init()
797 void batadv_dat_free(struct batadv_priv *bat_priv) in batadv_dat_free() argument
799 batadv_tvlv_container_unregister(bat_priv, BATADV_TVLV_DAT, 1); in batadv_dat_free()
800 batadv_tvlv_handler_unregister(bat_priv, BATADV_TVLV_DAT, 1); in batadv_dat_free()
802 cancel_delayed_work_sync(&bat_priv->dat.work); in batadv_dat_free()
804 batadv_dat_hash_free(bat_priv); in batadv_dat_free()
818 struct batadv_priv *bat_priv = netdev_priv(net_dev); in batadv_dat_cache_seq_print_text() local
819 struct batadv_hashtable *hash = bat_priv->dat.hash; in batadv_dat_cache_seq_print_text()
952 struct batadv_priv *bat_priv; in batadv_dat_cache_dump() local
970 bat_priv = netdev_priv(soft_iface); in batadv_dat_cache_dump()
971 hash = bat_priv->dat.hash; in batadv_dat_cache_dump()
973 primary_if = batadv_primary_if_get_selected(bat_priv); in batadv_dat_cache_dump()
1014 static u16 batadv_arp_get_type(struct batadv_priv *bat_priv, in batadv_arp_get_type() argument
1121 batadv_dat_arp_create_reply(struct batadv_priv *bat_priv, __be32 ip_src, in batadv_dat_arp_create_reply() argument
1127 skb = arp_create(ARPOP_REPLY, ETH_P_ARP, ip_dst, bat_priv->soft_iface, in batadv_dat_arp_create_reply()
1151 bool batadv_dat_snoop_outgoing_arp_request(struct batadv_priv *bat_priv, in batadv_dat_snoop_outgoing_arp_request() argument
1160 struct net_device *soft_iface = bat_priv->soft_iface; in batadv_dat_snoop_outgoing_arp_request()
1164 if (!atomic_read(&bat_priv->distributed_arp_table)) in batadv_dat_snoop_outgoing_arp_request()
1169 type = batadv_arp_get_type(bat_priv, skb, hdr_size); in batadv_dat_snoop_outgoing_arp_request()
1176 batadv_dbg_arp(bat_priv, skb, hdr_size, "Parsing outgoing ARP REQUEST"); in batadv_dat_snoop_outgoing_arp_request()
1182 batadv_dat_entry_add(bat_priv, ip_src, hw_src, vid); in batadv_dat_snoop_outgoing_arp_request()
1184 dat_entry = batadv_dat_entry_hash_find(bat_priv, ip_dst, vid); in batadv_dat_snoop_outgoing_arp_request()
1194 if (batadv_is_my_client(bat_priv, dat_entry->mac_addr, vid)) { in batadv_dat_snoop_outgoing_arp_request()
1204 if (!batadv_bla_check_claim(bat_priv, in batadv_dat_snoop_outgoing_arp_request()
1206 batadv_dbg(BATADV_DBG_DAT, bat_priv, in batadv_dat_snoop_outgoing_arp_request()
1213 skb_new = batadv_dat_arp_create_reply(bat_priv, ip_dst, ip_src, in batadv_dat_snoop_outgoing_arp_request()
1221 batadv_inc_counter(bat_priv, BATADV_CNT_RX); in batadv_dat_snoop_outgoing_arp_request()
1222 batadv_add_counter(bat_priv, BATADV_CNT_RX_BYTES, in batadv_dat_snoop_outgoing_arp_request()
1226 batadv_dbg(BATADV_DBG_DAT, bat_priv, "ARP request replied locally\n"); in batadv_dat_snoop_outgoing_arp_request()
1230 ret = batadv_dat_send_data(bat_priv, skb, ip_dst, vid, in batadv_dat_snoop_outgoing_arp_request()
1248 bool batadv_dat_snoop_incoming_arp_request(struct batadv_priv *bat_priv, in batadv_dat_snoop_incoming_arp_request() argument
1260 if (!atomic_read(&bat_priv->distributed_arp_table)) in batadv_dat_snoop_incoming_arp_request()
1265 type = batadv_arp_get_type(bat_priv, skb, hdr_size); in batadv_dat_snoop_incoming_arp_request()
1273 batadv_dbg_arp(bat_priv, skb, hdr_size, "Parsing incoming ARP REQUEST"); in batadv_dat_snoop_incoming_arp_request()
1275 batadv_dat_entry_add(bat_priv, ip_src, hw_src, vid); in batadv_dat_snoop_incoming_arp_request()
1277 dat_entry = batadv_dat_entry_hash_find(bat_priv, ip_dst, vid); in batadv_dat_snoop_incoming_arp_request()
1281 skb_new = batadv_dat_arp_create_reply(bat_priv, ip_dst, ip_src, in batadv_dat_snoop_incoming_arp_request()
1291 err = batadv_send_skb_via_tt_4addr(bat_priv, skb_new, in batadv_dat_snoop_incoming_arp_request()
1295 err = batadv_send_skb_via_tt(bat_priv, skb_new, NULL, vid); in batadv_dat_snoop_incoming_arp_request()
1298 batadv_inc_counter(bat_priv, BATADV_CNT_DAT_CACHED_REPLY_TX); in batadv_dat_snoop_incoming_arp_request()
1314 void batadv_dat_snoop_outgoing_arp_reply(struct batadv_priv *bat_priv, in batadv_dat_snoop_outgoing_arp_reply() argument
1323 if (!atomic_read(&bat_priv->distributed_arp_table)) in batadv_dat_snoop_outgoing_arp_reply()
1328 type = batadv_arp_get_type(bat_priv, skb, hdr_size); in batadv_dat_snoop_outgoing_arp_reply()
1332 batadv_dbg_arp(bat_priv, skb, hdr_size, "Parsing outgoing ARP REPLY"); in batadv_dat_snoop_outgoing_arp_reply()
1339 batadv_dat_entry_add(bat_priv, ip_src, hw_src, vid); in batadv_dat_snoop_outgoing_arp_reply()
1340 batadv_dat_entry_add(bat_priv, ip_dst, hw_dst, vid); in batadv_dat_snoop_outgoing_arp_reply()
1345 batadv_dat_send_data(bat_priv, skb, ip_src, vid, BATADV_P_DAT_DHT_PUT); in batadv_dat_snoop_outgoing_arp_reply()
1346 batadv_dat_send_data(bat_priv, skb, ip_dst, vid, BATADV_P_DAT_DHT_PUT); in batadv_dat_snoop_outgoing_arp_reply()
1359 bool batadv_dat_snoop_incoming_arp_reply(struct batadv_priv *bat_priv, in batadv_dat_snoop_incoming_arp_reply() argument
1369 if (!atomic_read(&bat_priv->distributed_arp_table)) in batadv_dat_snoop_incoming_arp_reply()
1374 type = batadv_arp_get_type(bat_priv, skb, hdr_size); in batadv_dat_snoop_incoming_arp_reply()
1378 batadv_dbg_arp(bat_priv, skb, hdr_size, "Parsing incoming ARP REPLY"); in batadv_dat_snoop_incoming_arp_reply()
1391 dat_entry = batadv_dat_entry_hash_find(bat_priv, ip_src, vid); in batadv_dat_snoop_incoming_arp_reply()
1393 …batadv_dbg(BATADV_DBG_DAT, bat_priv, "Doubled ARP reply removed: ARP MSG = [src: %pM-%pI4 dst: %pM… in batadv_dat_snoop_incoming_arp_reply()
1403 batadv_dat_entry_add(bat_priv, ip_src, hw_src, vid); in batadv_dat_snoop_incoming_arp_reply()
1404 batadv_dat_entry_add(bat_priv, ip_dst, hw_dst, vid); in batadv_dat_snoop_incoming_arp_reply()
1412 if (!batadv_bla_check_claim(bat_priv, hw_src, vid)) { in batadv_dat_snoop_incoming_arp_reply()
1413 batadv_dbg(BATADV_DBG_DAT, bat_priv, in batadv_dat_snoop_incoming_arp_reply()
1423 dropped = !batadv_is_my_client(bat_priv, hw_dst, vid); in batadv_dat_snoop_incoming_arp_reply()
1428 dropped |= batadv_is_my_client(bat_priv, hw_src, vid); in batadv_dat_snoop_incoming_arp_reply()
1446 bool batadv_dat_drop_broadcast_packet(struct batadv_priv *bat_priv, in batadv_dat_drop_broadcast_packet() argument
1456 if (!atomic_read(&bat_priv->distributed_arp_table)) in batadv_dat_drop_broadcast_packet()
1467 type = batadv_arp_get_type(bat_priv, forw_packet->skb, hdr_size); in batadv_dat_drop_broadcast_packet()
1472 dat_entry = batadv_dat_entry_hash_find(bat_priv, ip_dst, vid); in batadv_dat_drop_broadcast_packet()
1475 batadv_dbg(BATADV_DBG_DAT, bat_priv, in batadv_dat_drop_broadcast_packet()
1480 batadv_dbg(BATADV_DBG_DAT, bat_priv, in batadv_dat_drop_broadcast_packet()