Lines Matching refs:bat_priv
103 static void batadv_dat_start_timer(struct batadv_priv *bat_priv) in batadv_dat_start_timer() argument
105 INIT_DELAYED_WORK(&bat_priv->dat.work, batadv_dat_purge); in batadv_dat_start_timer()
106 queue_delayed_work(batadv_event_workqueue, &bat_priv->dat.work, in batadv_dat_start_timer()
160 static void __batadv_dat_purge(struct batadv_priv *bat_priv, in __batadv_dat_purge() argument
169 if (!bat_priv->dat.hash) in __batadv_dat_purge()
172 for (i = 0; i < bat_priv->dat.hash->size; i++) { in __batadv_dat_purge()
173 head = &bat_priv->dat.hash->table[i]; in __batadv_dat_purge()
174 list_lock = &bat_priv->dat.hash->list_locks[i]; in __batadv_dat_purge()
201 struct batadv_priv *bat_priv; in batadv_dat_purge() local
205 bat_priv = container_of(priv_dat, struct batadv_priv, dat); in batadv_dat_purge()
207 __batadv_dat_purge(bat_priv, batadv_dat_to_purge); in batadv_dat_purge()
208 batadv_dat_start_timer(bat_priv); in batadv_dat_purge()
328 batadv_dat_entry_hash_find(struct batadv_priv *bat_priv, __be32 ip, in batadv_dat_entry_hash_find() argument
333 struct batadv_hashtable *hash = bat_priv->dat.hash; in batadv_dat_entry_hash_find()
368 static void batadv_dat_entry_add(struct batadv_priv *bat_priv, __be32 ip, in batadv_dat_entry_add() argument
374 dat_entry = batadv_dat_entry_hash_find(bat_priv, ip, vid); in batadv_dat_entry_add()
380 batadv_dbg(BATADV_DBG_DAT, bat_priv, in batadv_dat_entry_add()
398 hash_added = batadv_hash_add(bat_priv->dat.hash, batadv_compare_dat, in batadv_dat_entry_add()
408 batadv_dbg(BATADV_DBG_DAT, bat_priv, "New entry added: %pI4 %pM (vid: %d)\n", in batadv_dat_entry_add()
426 static void batadv_dbg_arp(struct batadv_priv *bat_priv, struct sk_buff *skb, in batadv_dbg_arp() argument
435 batadv_dbg(BATADV_DBG_DAT, bat_priv, "%s\n", msg); in batadv_dbg_arp()
439 batadv_dbg(BATADV_DBG_DAT, bat_priv, in batadv_dbg_arp()
451 batadv_dbg(BATADV_DBG_DAT, bat_priv, in batadv_dbg_arp()
455 batadv_dbg(BATADV_DBG_DAT, bat_priv, in batadv_dbg_arp()
460 batadv_dbg(BATADV_DBG_DAT, bat_priv, "* type: DAT_DHT_PUT\n"); in batadv_dbg_arp()
463 batadv_dbg(BATADV_DBG_DAT, bat_priv, "* type: DAT_DHT_GET\n"); in batadv_dbg_arp()
466 batadv_dbg(BATADV_DBG_DAT, bat_priv, in batadv_dbg_arp()
470 batadv_dbg(BATADV_DBG_DAT, bat_priv, "* type: DATA\n"); in batadv_dbg_arp()
473 batadv_dbg(BATADV_DBG_DAT, bat_priv, "* type: Unknown (%u)!\n", in batadv_dbg_arp()
480 batadv_dbg(BATADV_DBG_DAT, bat_priv, in batadv_dbg_arp()
485 batadv_dbg(BATADV_DBG_DAT, bat_priv, in batadv_dbg_arp()
493 static void batadv_dbg_arp(struct batadv_priv *bat_priv, struct sk_buff *skb, in batadv_dbg_arp() argument
562 static void batadv_choose_next_candidate(struct batadv_priv *bat_priv, in batadv_choose_next_candidate() argument
570 struct batadv_hashtable *hash = bat_priv->orig_hash; in batadv_choose_next_candidate()
610 batadv_dbg(BATADV_DBG_DAT, bat_priv, in batadv_choose_next_candidate()
632 batadv_dat_select_candidates(struct batadv_priv *bat_priv, __be32 ip_dst, in batadv_dat_select_candidates() argument
640 if (!bat_priv->orig_hash) in batadv_dat_select_candidates()
653 batadv_dbg(BATADV_DBG_DAT, bat_priv, in batadv_dat_select_candidates()
658 batadv_choose_next_candidate(bat_priv, res, select, ip_key, in batadv_dat_select_candidates()
678 static bool batadv_dat_forward_data(struct batadv_priv *bat_priv, in batadv_dat_forward_data() argument
689 cand = batadv_dat_select_candidates(bat_priv, ip, vid); in batadv_dat_forward_data()
693 batadv_dbg(BATADV_DBG_DAT, bat_priv, "DHT_SEND for %pI4\n", &ip); in batadv_dat_forward_data()
705 if (!batadv_send_skb_prepare_unicast_4addr(bat_priv, tmp_skb, in batadv_dat_forward_data()
717 batadv_inc_counter(bat_priv, in batadv_dat_forward_data()
721 batadv_inc_counter(bat_priv, in batadv_dat_forward_data()
745 static void batadv_dat_tvlv_container_update(struct batadv_priv *bat_priv) in batadv_dat_tvlv_container_update() argument
749 dat_mode = atomic_read(&bat_priv->distributed_arp_table); in batadv_dat_tvlv_container_update()
753 batadv_tvlv_container_unregister(bat_priv, BATADV_TVLV_DAT, 1); in batadv_dat_tvlv_container_update()
756 batadv_tvlv_container_register(bat_priv, BATADV_TVLV_DAT, 1, in batadv_dat_tvlv_container_update()
769 struct batadv_priv *bat_priv = netdev_priv(net_dev); in batadv_dat_status_update() local
771 batadv_dat_tvlv_container_update(bat_priv); in batadv_dat_status_update()
782 static void batadv_dat_tvlv_ogm_handler_v1(struct batadv_priv *bat_priv, in batadv_dat_tvlv_ogm_handler_v1() argument
797 static void batadv_dat_hash_free(struct batadv_priv *bat_priv) in batadv_dat_hash_free() argument
799 if (!bat_priv->dat.hash) in batadv_dat_hash_free()
802 __batadv_dat_purge(bat_priv, NULL); in batadv_dat_hash_free()
804 batadv_hash_destroy(bat_priv->dat.hash); in batadv_dat_hash_free()
806 bat_priv->dat.hash = NULL; in batadv_dat_hash_free()
815 int batadv_dat_init(struct batadv_priv *bat_priv) in batadv_dat_init() argument
817 if (bat_priv->dat.hash) in batadv_dat_init()
820 bat_priv->dat.hash = batadv_hash_new(1024); in batadv_dat_init()
822 if (!bat_priv->dat.hash) in batadv_dat_init()
825 batadv_dat_start_timer(bat_priv); in batadv_dat_init()
827 batadv_tvlv_handler_register(bat_priv, batadv_dat_tvlv_ogm_handler_v1, in batadv_dat_init()
830 batadv_dat_tvlv_container_update(bat_priv); in batadv_dat_init()
838 void batadv_dat_free(struct batadv_priv *bat_priv) in batadv_dat_free() argument
840 batadv_tvlv_container_unregister(bat_priv, BATADV_TVLV_DAT, 1); in batadv_dat_free()
841 batadv_tvlv_handler_unregister(bat_priv, BATADV_TVLV_DAT, 1); in batadv_dat_free()
843 cancel_delayed_work_sync(&bat_priv->dat.work); in batadv_dat_free()
845 batadv_dat_hash_free(bat_priv); in batadv_dat_free()
859 struct batadv_priv *bat_priv = netdev_priv(net_dev); in batadv_dat_cache_seq_print_text() local
860 struct batadv_hashtable *hash = bat_priv->dat.hash; in batadv_dat_cache_seq_print_text()
1001 struct batadv_priv *bat_priv; in batadv_dat_cache_dump() local
1018 bat_priv = netdev_priv(soft_iface); in batadv_dat_cache_dump()
1019 hash = bat_priv->dat.hash; in batadv_dat_cache_dump()
1021 primary_if = batadv_primary_if_get_selected(bat_priv); in batadv_dat_cache_dump()
1059 static u16 batadv_arp_get_type(struct batadv_priv *bat_priv, in batadv_arp_get_type() argument
1166 batadv_dat_arp_create_reply(struct batadv_priv *bat_priv, __be32 ip_src, in batadv_dat_arp_create_reply() argument
1172 skb = arp_create(ARPOP_REPLY, ETH_P_ARP, ip_dst, bat_priv->soft_iface, in batadv_dat_arp_create_reply()
1196 bool batadv_dat_snoop_outgoing_arp_request(struct batadv_priv *bat_priv, in batadv_dat_snoop_outgoing_arp_request() argument
1205 struct net_device *soft_iface = bat_priv->soft_iface; in batadv_dat_snoop_outgoing_arp_request()
1209 if (!atomic_read(&bat_priv->distributed_arp_table)) in batadv_dat_snoop_outgoing_arp_request()
1214 type = batadv_arp_get_type(bat_priv, skb, hdr_size); in batadv_dat_snoop_outgoing_arp_request()
1221 batadv_dbg_arp(bat_priv, skb, hdr_size, "Parsing outgoing ARP REQUEST"); in batadv_dat_snoop_outgoing_arp_request()
1227 batadv_dat_entry_add(bat_priv, ip_src, hw_src, vid); in batadv_dat_snoop_outgoing_arp_request()
1229 dat_entry = batadv_dat_entry_hash_find(bat_priv, ip_dst, vid); in batadv_dat_snoop_outgoing_arp_request()
1239 if (batadv_is_my_client(bat_priv, dat_entry->mac_addr, vid)) { in batadv_dat_snoop_outgoing_arp_request()
1249 if (!batadv_bla_check_claim(bat_priv, in batadv_dat_snoop_outgoing_arp_request()
1251 batadv_dbg(BATADV_DBG_DAT, bat_priv, in batadv_dat_snoop_outgoing_arp_request()
1258 skb_new = batadv_dat_arp_create_reply(bat_priv, ip_dst, ip_src, in batadv_dat_snoop_outgoing_arp_request()
1266 batadv_inc_counter(bat_priv, BATADV_CNT_RX); in batadv_dat_snoop_outgoing_arp_request()
1267 batadv_add_counter(bat_priv, BATADV_CNT_RX_BYTES, in batadv_dat_snoop_outgoing_arp_request()
1271 batadv_dbg(BATADV_DBG_DAT, bat_priv, "ARP request replied locally\n"); in batadv_dat_snoop_outgoing_arp_request()
1275 ret = batadv_dat_forward_data(bat_priv, skb, ip_dst, vid, in batadv_dat_snoop_outgoing_arp_request()
1293 bool batadv_dat_snoop_incoming_arp_request(struct batadv_priv *bat_priv, in batadv_dat_snoop_incoming_arp_request() argument
1305 if (!atomic_read(&bat_priv->distributed_arp_table)) in batadv_dat_snoop_incoming_arp_request()
1310 type = batadv_arp_get_type(bat_priv, skb, hdr_size); in batadv_dat_snoop_incoming_arp_request()
1318 batadv_dbg_arp(bat_priv, skb, hdr_size, "Parsing incoming ARP REQUEST"); in batadv_dat_snoop_incoming_arp_request()
1320 batadv_dat_entry_add(bat_priv, ip_src, hw_src, vid); in batadv_dat_snoop_incoming_arp_request()
1322 dat_entry = batadv_dat_entry_hash_find(bat_priv, ip_dst, vid); in batadv_dat_snoop_incoming_arp_request()
1326 skb_new = batadv_dat_arp_create_reply(bat_priv, ip_dst, ip_src, in batadv_dat_snoop_incoming_arp_request()
1336 err = batadv_send_skb_via_tt_4addr(bat_priv, skb_new, in batadv_dat_snoop_incoming_arp_request()
1340 err = batadv_send_skb_via_tt(bat_priv, skb_new, NULL, vid); in batadv_dat_snoop_incoming_arp_request()
1343 batadv_inc_counter(bat_priv, BATADV_CNT_DAT_CACHED_REPLY_TX); in batadv_dat_snoop_incoming_arp_request()
1359 void batadv_dat_snoop_outgoing_arp_reply(struct batadv_priv *bat_priv, in batadv_dat_snoop_outgoing_arp_reply() argument
1368 if (!atomic_read(&bat_priv->distributed_arp_table)) in batadv_dat_snoop_outgoing_arp_reply()
1373 type = batadv_arp_get_type(bat_priv, skb, hdr_size); in batadv_dat_snoop_outgoing_arp_reply()
1377 batadv_dbg_arp(bat_priv, skb, hdr_size, "Parsing outgoing ARP REPLY"); in batadv_dat_snoop_outgoing_arp_reply()
1384 batadv_dat_entry_add(bat_priv, ip_src, hw_src, vid); in batadv_dat_snoop_outgoing_arp_reply()
1385 batadv_dat_entry_add(bat_priv, ip_dst, hw_dst, vid); in batadv_dat_snoop_outgoing_arp_reply()
1390 batadv_dat_forward_data(bat_priv, skb, ip_src, vid, in batadv_dat_snoop_outgoing_arp_reply()
1392 batadv_dat_forward_data(bat_priv, skb, ip_dst, vid, in batadv_dat_snoop_outgoing_arp_reply()
1406 bool batadv_dat_snoop_incoming_arp_reply(struct batadv_priv *bat_priv, in batadv_dat_snoop_incoming_arp_reply() argument
1416 if (!atomic_read(&bat_priv->distributed_arp_table)) in batadv_dat_snoop_incoming_arp_reply()
1421 type = batadv_arp_get_type(bat_priv, skb, hdr_size); in batadv_dat_snoop_incoming_arp_reply()
1425 batadv_dbg_arp(bat_priv, skb, hdr_size, "Parsing incoming ARP REPLY"); in batadv_dat_snoop_incoming_arp_reply()
1438 dat_entry = batadv_dat_entry_hash_find(bat_priv, ip_src, vid); in batadv_dat_snoop_incoming_arp_reply()
1440 …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()
1449 batadv_dat_entry_add(bat_priv, ip_src, hw_src, vid); in batadv_dat_snoop_incoming_arp_reply()
1450 batadv_dat_entry_add(bat_priv, ip_dst, hw_dst, vid); in batadv_dat_snoop_incoming_arp_reply()
1461 if (!batadv_bla_check_claim(bat_priv, hw_src, vid)) { in batadv_dat_snoop_incoming_arp_reply()
1462 batadv_dbg(BATADV_DBG_DAT, bat_priv, in batadv_dat_snoop_incoming_arp_reply()
1472 dropped = !batadv_is_my_client(bat_priv, hw_dst, vid); in batadv_dat_snoop_incoming_arp_reply()
1477 dropped |= batadv_is_my_client(bat_priv, hw_src, vid); in batadv_dat_snoop_incoming_arp_reply()
1694 static void batadv_dat_put_dhcp(struct batadv_priv *bat_priv, u8 *chaddr, in batadv_dat_put_dhcp() argument
1700 skb = batadv_dat_arp_create_reply(bat_priv, yiaddr, ip_dst, chaddr, in batadv_dat_put_dhcp()
1707 batadv_dat_entry_add(bat_priv, yiaddr, chaddr, vid); in batadv_dat_put_dhcp()
1708 batadv_dat_entry_add(bat_priv, ip_dst, hw_dst, vid); in batadv_dat_put_dhcp()
1710 batadv_dat_forward_data(bat_priv, skb, yiaddr, vid, in batadv_dat_put_dhcp()
1712 batadv_dat_forward_data(bat_priv, skb, ip_dst, vid, in batadv_dat_put_dhcp()
1717 batadv_dbg(BATADV_DBG_DAT, bat_priv, in batadv_dat_put_dhcp()
1720 batadv_dbg(BATADV_DBG_DAT, bat_priv, in batadv_dat_put_dhcp()
1779 void batadv_dat_snoop_outgoing_dhcp_ack(struct batadv_priv *bat_priv, in batadv_dat_snoop_outgoing_dhcp_ack() argument
1787 if (!atomic_read(&bat_priv->distributed_arp_table)) in batadv_dat_snoop_outgoing_dhcp_ack()
1793 batadv_dat_put_dhcp(bat_priv, chaddr, yiaddr, eth_hdr(skb)->h_source, in batadv_dat_snoop_outgoing_dhcp_ack()
1807 void batadv_dat_snoop_incoming_dhcp_ack(struct batadv_priv *bat_priv, in batadv_dat_snoop_incoming_dhcp_ack() argument
1817 if (!atomic_read(&bat_priv->distributed_arp_table)) in batadv_dat_snoop_incoming_dhcp_ack()
1833 batadv_dat_entry_add(bat_priv, yiaddr, chaddr, vid); in batadv_dat_snoop_incoming_dhcp_ack()
1834 batadv_dat_entry_add(bat_priv, ip_src, hw_src, vid); in batadv_dat_snoop_incoming_dhcp_ack()
1836 batadv_dbg(BATADV_DBG_DAT, bat_priv, in batadv_dat_snoop_incoming_dhcp_ack()
1839 batadv_dbg(BATADV_DBG_DAT, bat_priv, in batadv_dat_snoop_incoming_dhcp_ack()
1852 bool batadv_dat_drop_broadcast_packet(struct batadv_priv *bat_priv, in batadv_dat_drop_broadcast_packet() argument
1862 if (!atomic_read(&bat_priv->distributed_arp_table)) in batadv_dat_drop_broadcast_packet()
1873 type = batadv_arp_get_type(bat_priv, forw_packet->skb, hdr_size); in batadv_dat_drop_broadcast_packet()
1878 dat_entry = batadv_dat_entry_hash_find(bat_priv, ip_dst, vid); in batadv_dat_drop_broadcast_packet()
1881 batadv_dbg(BATADV_DBG_DAT, bat_priv, in batadv_dat_drop_broadcast_packet()
1886 batadv_dbg(BATADV_DBG_DAT, bat_priv, in batadv_dat_drop_broadcast_packet()