Lines Matching refs:bat_priv

38 	struct batadv_priv *bat_priv;
42 bat_priv = info->bat_priv;
45 spin_lock_bh(&bat_priv->vis.list_lock);
51 spin_unlock_bh(&bat_priv->vis.list_lock);
96 batadv_vis_hash_find(struct batadv_priv *bat_priv, const void *data)
98 struct batadv_hashtable *hash = bat_priv->vis.hash;
250 struct batadv_priv *bat_priv = netdev_priv(net_dev);
251 struct batadv_hashtable *hash = bat_priv->vis.hash;
254 int vis_server = atomic_read(&bat_priv->vis_mode);
256 primary_if = batadv_primary_if_get_selected(bat_priv);
263 spin_lock_bh(&bat_priv->vis.hash_lock);
268 spin_unlock_bh(&bat_priv->vis.hash_lock);
279 static void batadv_send_list_add(struct batadv_priv *bat_priv,
284 list_add_tail(&info->send_list, &bat_priv->vis.send_list);
300 static void batadv_recv_list_add(struct batadv_priv *bat_priv,
310 spin_lock_bh(&bat_priv->vis.list_lock);
312 spin_unlock_bh(&bat_priv->vis.list_lock);
316 static int batadv_recv_list_is_in(struct batadv_priv *bat_priv,
322 spin_lock_bh(&bat_priv->vis.list_lock);
325 spin_unlock_bh(&bat_priv->vis.list_lock);
329 spin_unlock_bh(&bat_priv->vis.list_lock);
338 batadv_add_packet(struct batadv_priv *bat_priv,
353 if (!bat_priv->vis.hash)
365 old_info = batadv_vis_hash_find(bat_priv, &search_elem);
374 batadv_recv_list_add(bat_priv,
384 batadv_hash_remove(bat_priv->vis.hash, batadv_vis_info_cmp,
407 info->bat_priv = bat_priv;
422 batadv_recv_list_add(bat_priv, &info->recv_list, packet->sender_orig);
425 hash_added = batadv_hash_add(bat_priv->vis.hash, batadv_vis_info_cmp,
438 void batadv_receive_server_sync_packet(struct batadv_priv *bat_priv,
444 int vis_server = atomic_read(&bat_priv->vis_mode);
448 spin_lock_bh(&bat_priv->vis.hash_lock);
449 info = batadv_add_packet(bat_priv, vis_packet, vis_info_len,
458 batadv_send_list_add(bat_priv, info);
460 spin_unlock_bh(&bat_priv->vis.hash_lock);
464 void batadv_receive_client_update_packet(struct batadv_priv *bat_priv,
471 int vis_server = atomic_read(&bat_priv->vis_mode);
480 batadv_is_my_mac(bat_priv, vis_packet->target_orig))
483 spin_lock_bh(&bat_priv->vis.hash_lock);
484 info = batadv_add_packet(bat_priv, vis_packet, vis_info_len,
496 batadv_send_list_add(bat_priv, info);
499 } else if (!batadv_is_my_mac(bat_priv, packet->target_orig)) {
500 batadv_send_list_add(bat_priv, info);
504 spin_unlock_bh(&bat_priv->vis.hash_lock);
512 static int batadv_find_best_vis_server(struct batadv_priv *bat_priv,
515 struct batadv_hashtable *hash = bat_priv->orig_hash;
565 static int batadv_generate_vis_packet(struct batadv_priv *bat_priv)
567 struct batadv_hashtable *hash = bat_priv->orig_hash;
571 struct batadv_vis_info *info = bat_priv->vis.my_info;
581 packet->vis_type = atomic_read(&bat_priv->vis_mode);
591 best_tq = batadv_find_best_vis_server(bat_priv, info);
634 hash = bat_priv->tt.local_hash;
665 static void batadv_purge_vis_packets(struct batadv_priv *bat_priv)
668 struct batadv_hashtable *hash = bat_priv->vis.hash;
679 if (info == bat_priv->vis.my_info)
692 static void batadv_broadcast_vis_packet(struct batadv_priv *bat_priv,
695 struct batadv_hashtable *hash = bat_priv->orig_hash;
718 if (batadv_recv_list_is_in(bat_priv, &info->recv_list,
734 static void batadv_unicast_vis_packet(struct batadv_priv *bat_priv,
743 orig_node = batadv_orig_hash_find(bat_priv, packet->target_orig);
760 static void batadv_send_vis_packet(struct batadv_priv *bat_priv,
766 primary_if = batadv_primary_if_get_selected(bat_priv);
780 batadv_broadcast_vis_packet(bat_priv, info);
782 batadv_unicast_vis_packet(bat_priv, info);
794 struct batadv_priv *bat_priv;
800 bat_priv = container_of(priv_vis, struct batadv_priv, vis);
801 spin_lock_bh(&bat_priv->vis.hash_lock);
802 batadv_purge_vis_packets(bat_priv);
804 if (batadv_generate_vis_packet(bat_priv) == 0) {
806 batadv_send_list_add(bat_priv, bat_priv->vis.my_info);
809 while (!list_empty(&bat_priv->vis.send_list)) {
810 info = list_first_entry(&bat_priv->vis.send_list,
814 spin_unlock_bh(&bat_priv->vis.hash_lock);
816 batadv_send_vis_packet(bat_priv, info);
818 spin_lock_bh(&bat_priv->vis.hash_lock);
822 spin_unlock_bh(&bat_priv->vis.hash_lock);
824 queue_delayed_work(batadv_event_workqueue, &bat_priv->vis.work,
831 int batadv_vis_init(struct batadv_priv *bat_priv)
839 if (bat_priv->vis.hash)
842 spin_lock_bh(&bat_priv->vis.hash_lock);
844 bat_priv->vis.hash = batadv_hash_new(256);
845 if (!bat_priv->vis.hash) {
850 batadv_hash_set_lock_class(bat_priv->vis.hash,
853 bat_priv->vis.my_info = kmalloc(BATADV_MAX_VIS_PACKET_SIZE, GFP_ATOMIC);
854 if (!bat_priv->vis.my_info)
859 bat_priv->vis.my_info->skb_packet = dev_alloc_skb(len);
860 if (!bat_priv->vis.my_info->skb_packet)
863 skb_reserve(bat_priv->vis.my_info->skb_packet, ETH_HLEN + NET_IP_ALIGN);
864 tmp_skb = bat_priv->vis.my_info->skb_packet;
869 bat_priv->vis.my_info->first_seen = first_seen;
870 INIT_LIST_HEAD(&bat_priv->vis.my_info->recv_list);
871 INIT_LIST_HEAD(&bat_priv->vis.my_info->send_list);
872 kref_init(&bat_priv->vis.my_info->refcount);
873 bat_priv->vis.my_info->bat_priv = bat_priv;
881 INIT_LIST_HEAD(&bat_priv->vis.send_list);
883 hash_added = batadv_hash_add(bat_priv->vis.hash, batadv_vis_info_cmp,
885 bat_priv->vis.my_info,
886 &bat_priv->vis.my_info->hash_entry);
890 kref_put(&bat_priv->vis.my_info->refcount, batadv_free_info);
894 spin_unlock_bh(&bat_priv->vis.hash_lock);
896 INIT_DELAYED_WORK(&bat_priv->vis.work, batadv_send_vis_packets);
897 queue_delayed_work(batadv_event_workqueue, &bat_priv->vis.work,
903 kfree(bat_priv->vis.my_info);
904 bat_priv->vis.my_info = NULL;
906 spin_unlock_bh(&bat_priv->vis.hash_lock);
907 batadv_vis_quit(bat_priv);
922 void batadv_vis_quit(struct batadv_priv *bat_priv)
924 if (!bat_priv->vis.hash)
927 cancel_delayed_work_sync(&bat_priv->vis.work);
929 spin_lock_bh(&bat_priv->vis.hash_lock);
931 batadv_hash_delete(bat_priv->vis.hash, batadv_free_info_ref, NULL);
932 bat_priv->vis.hash = NULL;
933 bat_priv->vis.my_info = NULL;
934 spin_unlock_bh(&bat_priv->vis.hash_lock);