Lines Matching refs:bat_priv
90 batadv_gw_get_selected_gw_node(struct batadv_priv *bat_priv) in batadv_gw_get_selected_gw_node() argument
95 gw_node = rcu_dereference(bat_priv->gw.curr_gw); in batadv_gw_get_selected_gw_node()
114 batadv_gw_get_selected_orig(struct batadv_priv *bat_priv) in batadv_gw_get_selected_orig() argument
119 gw_node = batadv_gw_get_selected_gw_node(bat_priv); in batadv_gw_get_selected_orig()
139 static void batadv_gw_select(struct batadv_priv *bat_priv, in batadv_gw_select() argument
144 spin_lock_bh(&bat_priv->gw.list_lock); in batadv_gw_select()
149 curr_gw_node = rcu_dereference_protected(bat_priv->gw.curr_gw, 1); in batadv_gw_select()
150 rcu_assign_pointer(bat_priv->gw.curr_gw, new_gw_node); in batadv_gw_select()
155 spin_unlock_bh(&bat_priv->gw.list_lock); in batadv_gw_select()
169 void batadv_gw_reselect(struct batadv_priv *bat_priv) in batadv_gw_reselect() argument
171 atomic_set(&bat_priv->gw.reselect, 1); in batadv_gw_reselect()
182 void batadv_gw_check_client_stop(struct batadv_priv *bat_priv) in batadv_gw_check_client_stop() argument
186 if (atomic_read(&bat_priv->gw.mode) != BATADV_GW_MODE_CLIENT) in batadv_gw_check_client_stop()
189 curr_gw = batadv_gw_get_selected_gw_node(bat_priv); in batadv_gw_check_client_stop()
196 batadv_gw_select(bat_priv, NULL); in batadv_gw_check_client_stop()
201 batadv_throw_uevent(bat_priv, BATADV_UEV_GW, BATADV_UEV_DEL, NULL); in batadv_gw_check_client_stop()
210 void batadv_gw_election(struct batadv_priv *bat_priv) in batadv_gw_election() argument
218 if (atomic_read(&bat_priv->gw.mode) != BATADV_GW_MODE_CLIENT) in batadv_gw_election()
221 if (!bat_priv->algo_ops->gw.get_best_gw_node) in batadv_gw_election()
224 curr_gw = batadv_gw_get_selected_gw_node(bat_priv); in batadv_gw_election()
226 if (!batadv_atomic_dec_not_zero(&bat_priv->gw.reselect) && curr_gw) in batadv_gw_election()
233 next_gw = bat_priv->algo_ops->gw.get_best_gw_node(bat_priv); in batadv_gw_election()
244 batadv_gw_reselect(bat_priv); in batadv_gw_election()
251 batadv_gw_reselect(bat_priv); in batadv_gw_election()
257 batadv_dbg(BATADV_DBG_BATMAN, bat_priv, in batadv_gw_election()
259 batadv_throw_uevent(bat_priv, BATADV_UEV_GW, BATADV_UEV_DEL, in batadv_gw_election()
262 batadv_dbg(BATADV_DBG_BATMAN, bat_priv, in batadv_gw_election()
270 batadv_throw_uevent(bat_priv, BATADV_UEV_GW, BATADV_UEV_ADD, in batadv_gw_election()
273 batadv_dbg(BATADV_DBG_BATMAN, bat_priv, in batadv_gw_election()
281 batadv_throw_uevent(bat_priv, BATADV_UEV_GW, BATADV_UEV_CHANGE, in batadv_gw_election()
285 batadv_gw_select(bat_priv, next_gw); in batadv_gw_election()
303 void batadv_gw_check_election(struct batadv_priv *bat_priv, in batadv_gw_check_election() argument
311 if (!bat_priv->algo_ops->gw.is_eligible) in batadv_gw_check_election()
314 curr_gw_orig = batadv_gw_get_selected_orig(bat_priv); in batadv_gw_check_election()
322 if (!bat_priv->algo_ops->gw.is_eligible(bat_priv, curr_gw_orig, in batadv_gw_check_election()
327 batadv_gw_reselect(bat_priv); in batadv_gw_check_election()
342 static void batadv_gw_node_add(struct batadv_priv *bat_priv, in batadv_gw_node_add() argument
348 lockdep_assert_held(&bat_priv->gw.list_lock); in batadv_gw_node_add()
365 hlist_add_head_rcu(&gw_node->list, &bat_priv->gw.gateway_list); in batadv_gw_node_add()
366 bat_priv->gw.generation++; in batadv_gw_node_add()
368 batadv_dbg(BATADV_DBG_BATMAN, bat_priv, in batadv_gw_node_add()
387 struct batadv_gw_node *batadv_gw_node_get(struct batadv_priv *bat_priv, in batadv_gw_node_get() argument
393 hlist_for_each_entry_rcu(gw_node_tmp, &bat_priv->gw.gateway_list, in batadv_gw_node_get()
416 void batadv_gw_node_update(struct batadv_priv *bat_priv, in batadv_gw_node_update() argument
422 spin_lock_bh(&bat_priv->gw.list_lock); in batadv_gw_node_update()
423 gw_node = batadv_gw_node_get(bat_priv, orig_node); in batadv_gw_node_update()
425 batadv_gw_node_add(bat_priv, orig_node, gateway); in batadv_gw_node_update()
426 spin_unlock_bh(&bat_priv->gw.list_lock); in batadv_gw_node_update()
429 spin_unlock_bh(&bat_priv->gw.list_lock); in batadv_gw_node_update()
435 batadv_dbg(BATADV_DBG_BATMAN, bat_priv, in batadv_gw_node_update()
451 batadv_dbg(BATADV_DBG_BATMAN, bat_priv, in batadv_gw_node_update()
458 spin_lock_bh(&bat_priv->gw.list_lock); in batadv_gw_node_update()
462 bat_priv->gw.generation++; in batadv_gw_node_update()
464 spin_unlock_bh(&bat_priv->gw.list_lock); in batadv_gw_node_update()
466 curr_gw = batadv_gw_get_selected_gw_node(bat_priv); in batadv_gw_node_update()
468 batadv_gw_reselect(bat_priv); in batadv_gw_node_update()
484 void batadv_gw_node_delete(struct batadv_priv *bat_priv, in batadv_gw_node_delete() argument
492 batadv_gw_node_update(bat_priv, orig_node, &gateway); in batadv_gw_node_delete()
499 void batadv_gw_node_free(struct batadv_priv *bat_priv) in batadv_gw_node_free() argument
504 spin_lock_bh(&bat_priv->gw.list_lock); in batadv_gw_node_free()
506 &bat_priv->gw.gateway_list, list) { in batadv_gw_node_free()
509 bat_priv->gw.generation++; in batadv_gw_node_free()
511 spin_unlock_bh(&bat_priv->gw.list_lock); in batadv_gw_node_free()
526 struct batadv_priv *bat_priv = netdev_priv(net_dev); in batadv_gw_client_seq_print_text() local
536 bat_priv->algo_ops->name); in batadv_gw_client_seq_print_text()
540 if (!bat_priv->algo_ops->gw.print) { in batadv_gw_client_seq_print_text()
546 bat_priv->algo_ops->gw.print(bat_priv, seq); in batadv_gw_client_seq_print_text()
564 struct batadv_priv *bat_priv; in batadv_gw_dump() local
579 bat_priv = netdev_priv(soft_iface); in batadv_gw_dump()
581 primary_if = batadv_primary_if_get_selected(bat_priv); in batadv_gw_dump()
587 if (!bat_priv->algo_ops->gw.dump) { in batadv_gw_dump()
592 bat_priv->algo_ops->gw.dump(msg, cb, bat_priv); in batadv_gw_dump()
740 bool batadv_gw_out_of_range(struct batadv_priv *bat_priv, in batadv_gw_out_of_range() argument
759 orig_dst_node = batadv_transtable_search(bat_priv, ethhdr->h_source, in batadv_gw_out_of_range()
764 gw_node = batadv_gw_node_get(bat_priv, orig_dst_node); in batadv_gw_out_of_range()
768 switch (atomic_read(&bat_priv->gw.mode)) { in batadv_gw_out_of_range()
776 curr_gw = batadv_gw_get_selected_gw_node(bat_priv); in batadv_gw_out_of_range()
788 neigh_curr = batadv_find_router(bat_priv, curr_gw->orig_node, in batadv_gw_out_of_range()
807 neigh_old = batadv_find_router(bat_priv, orig_dst_node, NULL); in batadv_gw_out_of_range()