Lines Matching refs:bat_priv

52 batadv_gw_get_selected_gw_node(struct batadv_priv *bat_priv)  in batadv_gw_get_selected_gw_node()  argument
57 gw_node = rcu_dereference(bat_priv->gw.curr_gw); in batadv_gw_get_selected_gw_node()
70 batadv_gw_get_selected_orig(struct batadv_priv *bat_priv) in batadv_gw_get_selected_orig() argument
75 gw_node = batadv_gw_get_selected_gw_node(bat_priv); in batadv_gw_get_selected_orig()
95 static void batadv_gw_select(struct batadv_priv *bat_priv, in batadv_gw_select() argument
100 spin_lock_bh(&bat_priv->gw.list_lock); in batadv_gw_select()
105 curr_gw_node = rcu_dereference_protected(bat_priv->gw.curr_gw, 1); in batadv_gw_select()
106 rcu_assign_pointer(bat_priv->gw.curr_gw, new_gw_node); in batadv_gw_select()
111 spin_unlock_bh(&bat_priv->gw.list_lock); in batadv_gw_select()
125 void batadv_gw_reselect(struct batadv_priv *bat_priv) in batadv_gw_reselect() argument
127 atomic_set(&bat_priv->gw.reselect, 1); in batadv_gw_reselect()
131 batadv_gw_get_best_gw_node(struct batadv_priv *bat_priv) in batadv_gw_get_best_gw_node() argument
146 hlist_for_each_entry_rcu(gw_node, &bat_priv->gw.list, list) { in batadv_gw_get_best_gw_node()
165 switch (atomic_read(&bat_priv->gw_sel_class)) { in batadv_gw_get_best_gw_node()
224 void batadv_gw_check_client_stop(struct batadv_priv *bat_priv) in batadv_gw_check_client_stop() argument
228 if (atomic_read(&bat_priv->gw_mode) != BATADV_GW_MODE_CLIENT) in batadv_gw_check_client_stop()
231 curr_gw = batadv_gw_get_selected_gw_node(bat_priv); in batadv_gw_check_client_stop()
238 batadv_gw_select(bat_priv, NULL); in batadv_gw_check_client_stop()
243 batadv_throw_uevent(bat_priv, BATADV_UEV_GW, BATADV_UEV_DEL, NULL); in batadv_gw_check_client_stop()
248 void batadv_gw_election(struct batadv_priv *bat_priv) in batadv_gw_election() argument
255 if (atomic_read(&bat_priv->gw_mode) != BATADV_GW_MODE_CLIENT) in batadv_gw_election()
258 curr_gw = batadv_gw_get_selected_gw_node(bat_priv); in batadv_gw_election()
260 if (!batadv_atomic_dec_not_zero(&bat_priv->gw.reselect) && curr_gw) in batadv_gw_election()
263 next_gw = batadv_gw_get_best_gw_node(bat_priv); in batadv_gw_election()
274 batadv_gw_reselect(bat_priv); in batadv_gw_election()
281 batadv_gw_reselect(bat_priv); in batadv_gw_election()
287 batadv_dbg(BATADV_DBG_BATMAN, bat_priv, in batadv_gw_election()
289 batadv_throw_uevent(bat_priv, BATADV_UEV_GW, BATADV_UEV_DEL, in batadv_gw_election()
292 batadv_dbg(BATADV_DBG_BATMAN, bat_priv, in batadv_gw_election()
300 batadv_throw_uevent(bat_priv, BATADV_UEV_GW, BATADV_UEV_ADD, in batadv_gw_election()
303 batadv_dbg(BATADV_DBG_BATMAN, bat_priv, in batadv_gw_election()
311 batadv_throw_uevent(bat_priv, BATADV_UEV_GW, BATADV_UEV_CHANGE, in batadv_gw_election()
315 batadv_gw_select(bat_priv, next_gw); in batadv_gw_election()
328 void batadv_gw_check_election(struct batadv_priv *bat_priv, in batadv_gw_check_election() argument
337 curr_gw_orig = batadv_gw_get_selected_orig(bat_priv); in batadv_gw_check_election()
373 if ((atomic_read(&bat_priv->gw_sel_class) > 3) && in batadv_gw_check_election()
374 (orig_tq_avg - gw_tq_avg < atomic_read(&bat_priv->gw_sel_class))) in batadv_gw_check_election()
377 batadv_dbg(BATADV_DBG_BATMAN, bat_priv, in batadv_gw_check_election()
382 batadv_gw_reselect(bat_priv); in batadv_gw_check_election()
402 static void batadv_gw_node_add(struct batadv_priv *bat_priv, in batadv_gw_node_add() argument
424 spin_lock_bh(&bat_priv->gw.list_lock); in batadv_gw_node_add()
425 hlist_add_head_rcu(&gw_node->list, &bat_priv->gw.list); in batadv_gw_node_add()
426 spin_unlock_bh(&bat_priv->gw.list_lock); in batadv_gw_node_add()
428 batadv_dbg(BATADV_DBG_BATMAN, bat_priv, in batadv_gw_node_add()
445 batadv_gw_node_get(struct batadv_priv *bat_priv, in batadv_gw_node_get() argument
451 hlist_for_each_entry_rcu(gw_node_tmp, &bat_priv->gw.list, list) { in batadv_gw_node_get()
476 void batadv_gw_node_update(struct batadv_priv *bat_priv, in batadv_gw_node_update() argument
482 gw_node = batadv_gw_node_get(bat_priv, orig_node); in batadv_gw_node_update()
484 batadv_gw_node_add(bat_priv, orig_node, gateway); in batadv_gw_node_update()
492 batadv_dbg(BATADV_DBG_BATMAN, bat_priv, in batadv_gw_node_update()
510 batadv_dbg(BATADV_DBG_BATMAN, bat_priv, in batadv_gw_node_update()
517 curr_gw = batadv_gw_get_selected_gw_node(bat_priv); in batadv_gw_node_update()
519 batadv_gw_reselect(bat_priv); in batadv_gw_node_update()
529 void batadv_gw_node_delete(struct batadv_priv *bat_priv, in batadv_gw_node_delete() argument
537 batadv_gw_node_update(bat_priv, orig_node, &gateway); in batadv_gw_node_delete()
540 void batadv_gw_node_purge(struct batadv_priv *bat_priv) in batadv_gw_node_purge() argument
547 curr_gw = batadv_gw_get_selected_gw_node(bat_priv); in batadv_gw_node_purge()
549 spin_lock_bh(&bat_priv->gw.list_lock); in batadv_gw_node_purge()
552 &bat_priv->gw.list, list) { in batadv_gw_node_purge()
555 atomic_read(&bat_priv->mesh_state) == BATADV_MESH_ACTIVE) in batadv_gw_node_purge()
565 spin_unlock_bh(&bat_priv->gw.list_lock); in batadv_gw_node_purge()
569 batadv_gw_reselect(bat_priv); in batadv_gw_node_purge()
576 static int batadv_write_buffer_text(struct batadv_priv *bat_priv, in batadv_write_buffer_text() argument
593 curr_gw = batadv_gw_get_selected_gw_node(bat_priv); in batadv_write_buffer_text()
619 struct batadv_priv *bat_priv = netdev_priv(net_dev); in batadv_gw_client_seq_print_text() local
635 hlist_for_each_entry_rcu(gw_node, &bat_priv->gw.list, list) { in batadv_gw_client_seq_print_text()
640 if (batadv_write_buffer_text(bat_priv, seq, gw_node) < 0) in batadv_gw_client_seq_print_text()
795 bool batadv_gw_out_of_range(struct batadv_priv *bat_priv, in batadv_gw_out_of_range() argument
809 orig_dst_node = batadv_transtable_search(bat_priv, ethhdr->h_source, in batadv_gw_out_of_range()
814 gw_node = batadv_gw_node_get(bat_priv, orig_dst_node); in batadv_gw_out_of_range()
818 switch (atomic_read(&bat_priv->gw_mode)) { in batadv_gw_out_of_range()
826 curr_gw = batadv_gw_get_selected_gw_node(bat_priv); in batadv_gw_out_of_range()
838 neigh_curr = batadv_find_router(bat_priv, curr_gw->orig_node, in batadv_gw_out_of_range()
857 neigh_old = batadv_find_router(bat_priv, orig_dst_node, NULL); in batadv_gw_out_of_range()