Lines Matching refs:sdata
53 static void mesh_fast_tx_deinit(struct ieee80211_sub_if_data *sdata) in mesh_fast_tx_deinit() argument
57 cache = &sdata->u.mesh.tx_cache; in mesh_fast_tx_deinit()
62 static void mesh_fast_tx_init(struct ieee80211_sub_if_data *sdata) in mesh_fast_tx_init() argument
66 cache = &sdata->u.mesh.tx_cache; in mesh_fast_tx_init()
127 memcpy(hdr->addr2, mpath->sdata->vif.addr, ETH_ALEN); in mesh_path_assign_nexthop()
128 ieee80211_mps_set_frame_flags(sta->sdata, sta, hdr); in mesh_path_assign_nexthop()
170 memcpy(hdr->addr2, gate_mpath->sdata->vif.addr, ETH_ALEN); in prepare_for_gate()
213 mpath_dbg(gate_mpath->sdata, "mpath queue full!\n"); in mesh_path_move_to_queue()
231 mpath_dbg(gate_mpath->sdata, "Mpath queue for gate %pM has %d frames\n", in mesh_path_move_to_queue()
244 struct ieee80211_sub_if_data *sdata) in mpath_lookup() argument
268 mesh_path_lookup(struct ieee80211_sub_if_data *sdata, const u8 *dst) in mesh_path_lookup() argument
270 return mpath_lookup(&sdata->u.mesh.mesh_paths, dst, sdata); in mesh_path_lookup()
274 mpp_path_lookup(struct ieee80211_sub_if_data *sdata, const u8 *dst) in mpp_path_lookup() argument
276 return mpath_lookup(&sdata->u.mesh.mpp_paths, dst, sdata); in mpp_path_lookup()
311 mesh_path_lookup_by_idx(struct ieee80211_sub_if_data *sdata, int idx) in mesh_path_lookup_by_idx() argument
313 return __mesh_path_lookup_by_idx(&sdata->u.mesh.mesh_paths, idx); in mesh_path_lookup_by_idx()
326 mpp_path_lookup_by_idx(struct ieee80211_sub_if_data *sdata, int idx) in mpp_path_lookup_by_idx() argument
328 return __mesh_path_lookup_by_idx(&sdata->u.mesh.mpp_paths, idx); in mpp_path_lookup_by_idx()
343 tbl = &mpath->sdata->u.mesh.mesh_paths; in mesh_path_add_gate()
352 mpath->sdata->u.mesh.num_gates++; in mesh_path_add_gate()
360 mpath_dbg(mpath->sdata, in mesh_path_add_gate()
362 mpath->dst, mpath->sdata->u.mesh.num_gates); in mesh_path_add_gate()
383 mpath->sdata->u.mesh.num_gates--; in mesh_gate_del()
386 mpath_dbg(mpath->sdata, in mesh_gate_del()
388 mpath->dst, mpath->sdata->u.mesh.num_gates); in mesh_gate_del()
397 int mesh_gate_num(struct ieee80211_sub_if_data *sdata) in mesh_gate_num() argument
399 return sdata->u.mesh.num_gates; in mesh_gate_num()
403 struct mesh_path *mesh_path_new(struct ieee80211_sub_if_data *sdata, in mesh_path_new() argument
415 new_mpath->sdata = sdata; in mesh_path_new()
434 mesh_fast_tx_get(struct ieee80211_sub_if_data *sdata, in mesh_fast_tx_get() argument
440 cache = &sdata->u.mesh.tx_cache; in mesh_fast_tx_get()
455 mesh_path_refresh(sdata, entry->mpath, NULL); in mesh_fast_tx_get()
463 void mesh_fast_tx_cache(struct ieee80211_sub_if_data *sdata, in mesh_fast_tx_cache() argument
477 if (sdata->noack_map || in mesh_fast_tx_cache()
485 cache = &sdata->u.mesh.tx_cache; in mesh_fast_tx_cache()
496 mppath = mpp_path_lookup(sdata, meshhdr->eaddr1); in mesh_fast_tx_cache()
500 if (!ether_addr_equal(meshhdr->eaddr2, sdata->vif.addr)) in mesh_fast_tx_cache()
508 if (!ether_addr_equal(hdr->addr4, sdata->vif.addr)) in mesh_fast_tx_cache()
524 key = rcu_access_pointer(sdata->default_unicast_key); in mesh_fast_tx_cache()
607 void mesh_fast_tx_gc(struct ieee80211_sub_if_data *sdata) in mesh_fast_tx_gc() argument
610 struct mesh_tx_cache *cache = &sdata->u.mesh.tx_cache; in mesh_fast_tx_gc()
626 struct ieee80211_sub_if_data *sdata = mpath->sdata; in mesh_fast_tx_flush_mpath() local
627 struct mesh_tx_cache *cache = &sdata->u.mesh.tx_cache; in mesh_fast_tx_flush_mpath()
638 void mesh_fast_tx_flush_sta(struct ieee80211_sub_if_data *sdata, in mesh_fast_tx_flush_sta() argument
641 struct mesh_tx_cache *cache = &sdata->u.mesh.tx_cache; in mesh_fast_tx_flush_sta()
652 void mesh_fast_tx_flush_addr(struct ieee80211_sub_if_data *sdata, in mesh_fast_tx_flush_addr() argument
655 struct mesh_tx_cache *cache = &sdata->u.mesh.tx_cache; in mesh_fast_tx_flush_addr()
680 struct mesh_path *mesh_path_add(struct ieee80211_sub_if_data *sdata, in mesh_path_add() argument
686 if (ether_addr_equal(dst, sdata->vif.addr)) in mesh_path_add()
693 if (atomic_add_unless(&sdata->u.mesh.mpaths, 1, MESH_MAX_MPATHS) == 0) in mesh_path_add()
696 new_mpath = mesh_path_new(sdata, dst, GFP_ATOMIC); in mesh_path_add()
700 tbl = &sdata->u.mesh.mesh_paths; in mesh_path_add()
718 sdata->u.mesh.mesh_paths_generation++; in mesh_path_add()
722 int mpp_path_add(struct ieee80211_sub_if_data *sdata, in mpp_path_add() argument
729 if (ether_addr_equal(dst, sdata->vif.addr)) in mpp_path_add()
736 new_mpath = mesh_path_new(sdata, dst, GFP_ATOMIC); in mpp_path_add()
742 tbl = &sdata->u.mesh.mpp_paths; in mpp_path_add()
755 mesh_fast_tx_flush_addr(sdata, dst); in mpp_path_add()
757 sdata->u.mesh.mpp_paths_generation++; in mpp_path_add()
772 struct ieee80211_sub_if_data *sdata = sta->sdata; in mesh_plink_broken() local
773 struct mesh_table *tbl = &sdata->u.mesh.mesh_paths; in mesh_plink_broken()
786 mesh_path_error_tx(sdata, in mesh_plink_broken()
787 sdata->u.mesh.mshcfg.element_ttl, in mesh_plink_broken()
798 struct ieee80211_sub_if_data *sdata = mpath->sdata; in mesh_path_free_rcu() local
805 atomic_dec(&sdata->u.mesh.mpaths); in mesh_path_free_rcu()
815 if (tbl == &mpath->sdata->u.mesh.mpp_paths) in __mesh_path_del()
816 mesh_fast_tx_flush_addr(mpath->sdata, mpath->dst); in __mesh_path_del()
835 struct ieee80211_sub_if_data *sdata = sta->sdata; in mesh_path_flush_by_nexthop() local
836 struct mesh_table *tbl = &sdata->u.mesh.mesh_paths; in mesh_path_flush_by_nexthop()
848 static void mpp_flush_by_proxy(struct ieee80211_sub_if_data *sdata, in mpp_flush_by_proxy() argument
851 struct mesh_table *tbl = &sdata->u.mesh.mpp_paths; in mpp_flush_by_proxy()
882 void mesh_path_flush_by_iface(struct ieee80211_sub_if_data *sdata) in mesh_path_flush_by_iface() argument
884 table_flush_by_iface(&sdata->u.mesh.mesh_paths); in mesh_path_flush_by_iface()
885 table_flush_by_iface(&sdata->u.mesh.mpp_paths); in mesh_path_flush_by_iface()
898 struct ieee80211_sub_if_data *sdata, in table_path_del() argument
924 int mesh_path_del(struct ieee80211_sub_if_data *sdata, const u8 *addr) in mesh_path_del() argument
929 mpp_flush_by_proxy(sdata, addr); in mesh_path_del()
931 err = table_path_del(&sdata->u.mesh.mesh_paths, sdata, addr); in mesh_path_del()
932 sdata->u.mesh.mesh_paths_generation++; in mesh_path_del()
947 ieee80211_add_pending_skbs(mpath->sdata->local, in mesh_path_tx_pending()
965 struct ieee80211_sub_if_data *sdata = mpath->sdata; in mesh_path_send_to_gates() local
971 tbl = &sdata->u.mesh.mesh_paths; in mesh_path_send_to_gates()
976 mpath_dbg(sdata, "Forwarding to %pM\n", gate->dst); in mesh_path_send_to_gates()
981 mpath_dbg(sdata, in mesh_path_send_to_gates()
988 mpath_dbg(sdata, "Sending to %pM\n", gate->dst); in mesh_path_send_to_gates()
1004 void mesh_path_discard_frame(struct ieee80211_sub_if_data *sdata, in mesh_path_discard_frame() argument
1007 ieee80211_free_txskb(&sdata->local->hw, skb); in mesh_path_discard_frame()
1008 sdata->u.mesh.mshstats.dropped_frames_no_route++; in mesh_path_discard_frame()
1020 struct ieee80211_sub_if_data *sdata = mpath->sdata; in mesh_path_flush_pending() local
1021 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; in mesh_path_flush_pending()
1026 mesh_path_discard_frame(mpath->sdata, skb); in mesh_path_flush_pending()
1065 void mesh_pathtbl_init(struct ieee80211_sub_if_data *sdata) in mesh_pathtbl_init() argument
1067 mesh_table_init(&sdata->u.mesh.mesh_paths); in mesh_pathtbl_init()
1068 mesh_table_init(&sdata->u.mesh.mpp_paths); in mesh_pathtbl_init()
1069 mesh_fast_tx_init(sdata); in mesh_pathtbl_init()
1073 void mesh_path_tbl_expire(struct ieee80211_sub_if_data *sdata, in mesh_path_tbl_expire() argument
1089 void mesh_path_expire(struct ieee80211_sub_if_data *sdata) in mesh_path_expire() argument
1091 mesh_path_tbl_expire(sdata, &sdata->u.mesh.mesh_paths); in mesh_path_expire()
1092 mesh_path_tbl_expire(sdata, &sdata->u.mesh.mpp_paths); in mesh_path_expire()
1095 void mesh_pathtbl_unregister(struct ieee80211_sub_if_data *sdata) in mesh_pathtbl_unregister() argument
1097 mesh_fast_tx_deinit(sdata); in mesh_pathtbl_unregister()
1098 mesh_table_free(&sdata->u.mesh.mesh_paths); in mesh_pathtbl_unregister()
1099 mesh_table_free(&sdata->u.mesh.mpp_paths); in mesh_pathtbl_unregister()