Lines Matching refs:sdata
22 struct ieee80211_sub_if_data *sdata; in ieee80211_tdls_peer_del_work() local
25 sdata = container_of(wk, struct ieee80211_sub_if_data, in ieee80211_tdls_peer_del_work()
27 local = sdata->local; in ieee80211_tdls_peer_del_work()
30 if (!is_zero_ether_addr(sdata->u.mgd.tdls_peer)) { in ieee80211_tdls_peer_del_work()
31 tdls_dbg(sdata, "TDLS del peer %pM\n", sdata->u.mgd.tdls_peer); in ieee80211_tdls_peer_del_work()
32 sta_info_destroy_addr(sdata, sdata->u.mgd.tdls_peer); in ieee80211_tdls_peer_del_work()
33 eth_zero_addr(sdata->u.mgd.tdls_peer); in ieee80211_tdls_peer_del_work()
55 ieee80211_tdls_add_subband(struct ieee80211_sub_if_data *sdata, in ieee80211_tdls_add_subband() argument
68 ch = ieee80211_get_channel(sdata->local->hw.wiphy, i); in ieee80211_tdls_add_subband()
73 if (cfg80211_reg_can_beacon(sdata->local->hw.wiphy, in ieee80211_tdls_add_subband()
75 sdata->wdev.iftype)) { in ieee80211_tdls_add_subband()
112 ieee80211_tdls_add_supp_channels(struct ieee80211_sub_if_data *sdata, in ieee80211_tdls_add_supp_channels() argument
130 subband_cnt = ieee80211_tdls_add_subband(sdata, skb, 2412, 2472, 5); in ieee80211_tdls_add_supp_channels()
133 subband_cnt += ieee80211_tdls_add_subband(sdata, skb, 5000, 5825, 20); in ieee80211_tdls_add_supp_channels()
139 static void ieee80211_tdls_add_oper_classes(struct ieee80211_sub_if_data *sdata, in ieee80211_tdls_add_oper_classes() argument
145 if (!ieee80211_chandef_to_operating_class(&sdata->vif.bss_conf.chandef, in ieee80211_tdls_add_oper_classes()
167 static u16 ieee80211_get_tdls_sta_capab(struct ieee80211_sub_if_data *sdata, in ieee80211_get_tdls_sta_capab() argument
170 struct ieee80211_local *local = sdata->local; in ieee80211_get_tdls_sta_capab()
178 if (ieee80211_get_sdata_band(sdata) != IEEE80211_BAND_2GHZ) in ieee80211_get_tdls_sta_capab()
189 static void ieee80211_tdls_add_link_ie(struct ieee80211_sub_if_data *sdata, in ieee80211_tdls_add_link_ie() argument
197 init_addr = sdata->vif.addr; in ieee80211_tdls_add_link_ie()
201 rsp_addr = sdata->vif.addr; in ieee80211_tdls_add_link_ie()
209 memcpy(lnkid->bssid, sdata->u.mgd.bssid, ETH_ALEN); in ieee80211_tdls_add_link_ie()
215 ieee80211_tdls_add_aid(struct ieee80211_sub_if_data *sdata, struct sk_buff *skb) in ieee80211_tdls_add_aid() argument
217 struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; in ieee80211_tdls_add_aid()
259 static void ieee80211_tdls_add_wmm_param_ie(struct ieee80211_sub_if_data *sdata, in ieee80211_tdls_add_wmm_param_ie() argument
285 txq = &sdata->tx_conf[ieee80211_ac_from_wmm(i)]; in ieee80211_tdls_add_wmm_param_ie()
294 ieee80211_tdls_add_setup_start_ies(struct ieee80211_sub_if_data *sdata, in ieee80211_tdls_add_setup_start_ies() argument
299 enum ieee80211_band band = ieee80211_get_sdata_band(sdata); in ieee80211_tdls_add_setup_start_ies()
300 struct ieee80211_local *local = sdata->local; in ieee80211_tdls_add_setup_start_ies()
308 ieee80211_add_srates_ie(sdata, skb, false, band); in ieee80211_tdls_add_setup_start_ies()
309 ieee80211_add_ext_srates_ie(sdata, skb, false, band); in ieee80211_tdls_add_setup_start_ies()
310 ieee80211_tdls_add_supp_channels(sdata, skb); in ieee80211_tdls_add_setup_start_ies()
364 sta = sta_info_get(sdata, peer); in ieee80211_tdls_add_setup_start_ies()
371 ieee80211_tdls_add_oper_classes(sdata, skb); in ieee80211_tdls_add_setup_start_ies()
384 ieee80211_apply_htcap_overrides(sdata, &ht_cap); in ieee80211_tdls_add_setup_start_ies()
409 ieee80211_tdls_add_link_ie(sdata, skb, peer, initiator); in ieee80211_tdls_add_setup_start_ies()
440 ieee80211_apply_vhtcap_overrides(sdata, &vht_cap); in ieee80211_tdls_add_setup_start_ies()
444 ieee80211_tdls_add_aid(sdata, skb); in ieee80211_tdls_add_setup_start_ies()
454 ieee80211_tdls_add_aid(sdata, skb); in ieee80211_tdls_add_setup_start_ies()
472 ieee80211_tdls_add_setup_cfm_ies(struct ieee80211_sub_if_data *sdata, in ieee80211_tdls_add_setup_cfm_ies() argument
477 struct ieee80211_local *local = sdata->local; in ieee80211_tdls_add_setup_cfm_ies()
478 struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; in ieee80211_tdls_add_setup_cfm_ies()
481 enum ieee80211_band band = ieee80211_get_sdata_band(sdata); in ieee80211_tdls_add_setup_cfm_ies()
486 sta = sta_info_get(sdata, peer); in ieee80211_tdls_add_setup_cfm_ies()
487 ap_sta = sta_info_get(sdata, ifmgd->bssid); in ieee80211_tdls_add_setup_cfm_ies()
509 ieee80211_tdls_add_wmm_param_ie(sdata, skb); in ieee80211_tdls_add_setup_cfm_ies()
531 rcu_dereference(sdata->vif.chanctx_conf); in ieee80211_tdls_add_setup_cfm_ies()
541 ieee80211_tdls_add_link_ie(sdata, skb, peer, initiator); in ieee80211_tdls_add_setup_cfm_ies()
547 rcu_dereference(sdata->vif.chanctx_conf); in ieee80211_tdls_add_setup_cfm_ies()
567 ieee80211_tdls_add_chan_switch_req_ies(struct ieee80211_sub_if_data *sdata, in ieee80211_tdls_add_chan_switch_req_ies() argument
598 ieee80211_tdls_add_link_ie(sdata, skb, peer, initiator); in ieee80211_tdls_add_chan_switch_req_ies()
609 ieee80211_tdls_add_chan_switch_resp_ies(struct ieee80211_sub_if_data *sdata, in ieee80211_tdls_add_chan_switch_resp_ies() argument
616 ieee80211_tdls_add_link_ie(sdata, skb, peer, initiator); in ieee80211_tdls_add_chan_switch_resp_ies()
622 static void ieee80211_tdls_add_ies(struct ieee80211_sub_if_data *sdata, in ieee80211_tdls_add_ies() argument
634 ieee80211_tdls_add_setup_start_ies(sdata, skb, peer, in ieee80211_tdls_add_ies()
642 ieee80211_tdls_add_setup_cfm_ies(sdata, skb, peer, in ieee80211_tdls_add_ies()
652 ieee80211_tdls_add_link_ie(sdata, skb, peer, initiator); in ieee80211_tdls_add_ies()
655 ieee80211_tdls_add_chan_switch_req_ies(sdata, skb, peer, in ieee80211_tdls_add_ies()
661 ieee80211_tdls_add_chan_switch_resp_ies(sdata, skb, peer, in ieee80211_tdls_add_ies()
675 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_prep_tdls_encap_data() local
681 memcpy(tf->sa, sdata->vif.addr, ETH_ALEN); in ieee80211_prep_tdls_encap_data()
696 cpu_to_le16(ieee80211_get_tdls_sta_capab(sdata, in ieee80211_prep_tdls_encap_data()
707 cpu_to_le16(ieee80211_get_tdls_sta_capab(sdata, in ieee80211_prep_tdls_encap_data()
757 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_prep_tdls_direct() local
763 memcpy(mgmt->sa, sdata->vif.addr, ETH_ALEN); in ieee80211_prep_tdls_direct()
764 memcpy(mgmt->bssid, sdata->u.mgd.bssid, ETH_ALEN); in ieee80211_prep_tdls_direct()
778 cpu_to_le16(ieee80211_get_tdls_sta_capab(sdata, in ieee80211_prep_tdls_direct()
789 ieee80211_tdls_build_mgmt_packet_data(struct ieee80211_sub_if_data *sdata, in ieee80211_tdls_build_mgmt_packet_data() argument
796 struct ieee80211_local *local = sdata->local; in ieee80211_tdls_build_mgmt_packet_data()
800 skb = netdev_alloc_skb(sdata->dev, in ieee80211_tdls_build_mgmt_packet_data()
831 sdata->dev, peer, in ieee80211_tdls_build_mgmt_packet_data()
836 ret = ieee80211_prep_tdls_direct(local->hw.wiphy, sdata->dev, in ieee80211_tdls_build_mgmt_packet_data()
849 ieee80211_tdls_add_ies(sdata, skb, peer, action_code, status_code, in ieee80211_tdls_build_mgmt_packet_data()
867 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_tdls_prep_mgmt_packet() local
874 sta = sta_info_get(sdata, peer); in ieee80211_tdls_prep_mgmt_packet()
919 skb = ieee80211_tdls_build_mgmt_packet_data(sdata, peer, action_code, in ieee80211_tdls_prep_mgmt_packet()
930 ieee80211_tx_skb(sdata, skb); in ieee80211_tdls_prep_mgmt_packet()
956 (sdata->local->hw.flags & IEEE80211_HW_REPORTS_TX_ACK_STATUS)) { in ieee80211_tdls_prep_mgmt_packet()
961 sta = sta_info_get(sdata, peer); in ieee80211_tdls_prep_mgmt_packet()
965 spin_lock_bh(&sdata->u.mgd.teardown_lock); in ieee80211_tdls_prep_mgmt_packet()
966 if (try_resend && !sdata->u.mgd.teardown_skb) { in ieee80211_tdls_prep_mgmt_packet()
978 sdata->u.mgd.teardown_skb = skb_copy(skb, GFP_ATOMIC); in ieee80211_tdls_prep_mgmt_packet()
979 sdata->u.mgd.orig_teardown_skb = skb; in ieee80211_tdls_prep_mgmt_packet()
981 spin_unlock_bh(&sdata->u.mgd.teardown_lock); in ieee80211_tdls_prep_mgmt_packet()
1002 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_tdls_mgmt_setup() local
1003 struct ieee80211_local *local = sdata->local; in ieee80211_tdls_mgmt_setup()
1009 if (!is_zero_ether_addr(sdata->u.mgd.tdls_peer) && in ieee80211_tdls_mgmt_setup()
1010 !ether_addr_equal(sdata->u.mgd.tdls_peer, peer)) { in ieee80211_tdls_mgmt_setup()
1024 if (!sta_info_get(sdata, peer)) { in ieee80211_tdls_mgmt_setup()
1032 ieee80211_flush_queues(local, sdata, false); in ieee80211_tdls_mgmt_setup()
1033 memcpy(sdata->u.mgd.tdls_peer, peer, ETH_ALEN); in ieee80211_tdls_mgmt_setup()
1044 eth_zero_addr(sdata->u.mgd.tdls_peer); in ieee80211_tdls_mgmt_setup()
1049 ieee80211_queue_delayed_work(&sdata->local->hw, in ieee80211_tdls_mgmt_setup()
1050 &sdata->u.mgd.tdls_peer_del_work, in ieee80211_tdls_mgmt_setup()
1066 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_tdls_mgmt_teardown() local
1067 struct ieee80211_local *local = sdata->local; in ieee80211_tdls_mgmt_teardown()
1077 ieee80211_stop_vif_queues(local, sdata, in ieee80211_tdls_mgmt_teardown()
1079 ieee80211_flush_queues(local, sdata, false); in ieee80211_tdls_mgmt_teardown()
1087 sdata_err(sdata, "Failed sending TDLS teardown packet %d\n", in ieee80211_tdls_mgmt_teardown()
1095 sta = sta_info_get(sdata, peer); in ieee80211_tdls_mgmt_teardown()
1100 ieee80211_wake_vif_queues(local, sdata, in ieee80211_tdls_mgmt_teardown()
1112 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_tdls_mgmt() local
1119 if (sdata->vif.type != NL80211_IFTYPE_STATION || in ieee80211_tdls_mgmt()
1120 !sdata->u.mgd.associated) in ieee80211_tdls_mgmt()
1144 drv_mgd_protect_tdls_discover(sdata->local, sdata); in ieee80211_tdls_mgmt()
1162 tdls_dbg(sdata, "TDLS mgmt action %d peer %pM status %d\n", in ieee80211_tdls_mgmt()
1171 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_tdls_oper() local
1172 struct ieee80211_local *local = sdata->local; in ieee80211_tdls_oper()
1178 if (sdata->vif.type != NL80211_IFTYPE_STATION) in ieee80211_tdls_oper()
1193 tdls_dbg(sdata, "TDLS oper %d peer %pM\n", oper, peer); in ieee80211_tdls_oper()
1198 sta = sta_info_get(sdata, peer); in ieee80211_tdls_oper()
1208 WARN_ON_ONCE(is_zero_ether_addr(sdata->u.mgd.tdls_peer) || in ieee80211_tdls_oper()
1209 !ether_addr_equal(sdata->u.mgd.tdls_peer, peer)); in ieee80211_tdls_oper()
1225 ieee80211_flush_queues(local, sdata, false); in ieee80211_tdls_oper()
1227 ret = sta_info_destroy_addr(sdata, peer); in ieee80211_tdls_oper()
1234 if (ret == 0 && ether_addr_equal(sdata->u.mgd.tdls_peer, peer)) { in ieee80211_tdls_oper()
1235 cancel_delayed_work(&sdata->u.mgd.tdls_peer_del_work); in ieee80211_tdls_oper()
1236 eth_zero_addr(sdata->u.mgd.tdls_peer); in ieee80211_tdls_oper()
1247 struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); in ieee80211_tdls_oper_request() local
1250 sdata_err(sdata, "Discarding TDLS oper %d - not STA or disconnected\n", in ieee80211_tdls_oper_request()
1255 cfg80211_tdls_oper_request(sdata->dev, peer, oper, reason_code, gfp); in ieee80211_tdls_oper_request()
1295 struct ieee80211_sub_if_data *sdata = sta->sdata; in ieee80211_tdls_ch_sw_tmpl_get() local
1327 skb = ieee80211_tdls_build_mgmt_packet_data(sdata, sta->sta.addr, in ieee80211_tdls_ch_sw_tmpl_get()
1335 skb = ieee80211_build_data_template(sdata, skb, 0); in ieee80211_tdls_ch_sw_tmpl_get()
1337 tdls_dbg(sdata, "Failed building TDLS channel switch frame\n"); in ieee80211_tdls_ch_sw_tmpl_get()
1345 tdls_dbg(sdata, "No switch timing IE in TDLS switch\n"); in ieee80211_tdls_ch_sw_tmpl_get()
1353 tdls_dbg(sdata, in ieee80211_tdls_ch_sw_tmpl_get()
1364 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_tdls_channel_switch() local
1365 struct ieee80211_local *local = sdata->local; in ieee80211_tdls_channel_switch()
1372 sta = sta_info_get(sdata, addr); in ieee80211_tdls_channel_switch()
1374 tdls_dbg(sdata, in ieee80211_tdls_channel_switch()
1382 tdls_dbg(sdata, "TDLS channel switch unsupported by %pM\n", in ieee80211_tdls_channel_switch()
1395 ret = drv_tdls_channel_switch(local, sdata, &sta->sta, oper_class, in ieee80211_tdls_channel_switch()
1411 struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); in ieee80211_tdls_cancel_channel_switch() local
1412 struct ieee80211_local *local = sdata->local; in ieee80211_tdls_cancel_channel_switch()
1416 sta = sta_info_get(sdata, addr); in ieee80211_tdls_cancel_channel_switch()
1418 tdls_dbg(sdata, in ieee80211_tdls_cancel_channel_switch()
1425 tdls_dbg(sdata, "TDLS channel switch not initiated by %pM\n", in ieee80211_tdls_cancel_channel_switch()
1430 drv_tdls_cancel_channel_switch(local, sdata, &sta->sta); in ieee80211_tdls_cancel_channel_switch()
1441 struct ieee80211_sub_if_data *sdata = sta->sdata; in ieee80211_tdls_ch_sw_resp_tmpl_get() local
1448 skb = ieee80211_tdls_build_mgmt_packet_data(sdata, sta->sta.addr, in ieee80211_tdls_ch_sw_resp_tmpl_get()
1455 skb = ieee80211_build_data_template(sdata, skb, 0); in ieee80211_tdls_ch_sw_resp_tmpl_get()
1457 tdls_dbg(sdata, in ieee80211_tdls_ch_sw_resp_tmpl_get()
1466 tdls_dbg(sdata, in ieee80211_tdls_ch_sw_resp_tmpl_get()
1475 tdls_dbg(sdata, "TDLS get channel switch response template for %pM\n", in ieee80211_tdls_ch_sw_resp_tmpl_get()
1481 ieee80211_process_tdls_channel_switch_resp(struct ieee80211_sub_if_data *sdata, in ieee80211_process_tdls_channel_switch_resp() argument
1484 struct ieee80211_local *local = sdata->local; in ieee80211_process_tdls_channel_switch_resp()
1498 tdls_dbg(sdata, "TDLS channel switch resp too short: %d\n", in ieee80211_process_tdls_channel_switch_resp()
1504 sta = sta_info_get(sdata, tf->sa); in ieee80211_process_tdls_channel_switch_resp()
1506 tdls_dbg(sdata, "TDLS chan switch from non-peer sta %pM\n", in ieee80211_process_tdls_channel_switch_resp()
1522 tdls_dbg(sdata, "Invalid IEs in TDLS channel switch resp\n"); in ieee80211_process_tdls_channel_switch_resp()
1528 tdls_dbg(sdata, "TDLS channel switch resp - missing IEs\n"); in ieee80211_process_tdls_channel_switch_resp()
1535 !memcmp(elems.lnk_id->init_sta, sdata->vif.addr, ETH_ALEN); in ieee80211_process_tdls_channel_switch_resp()
1537 tdls_dbg(sdata, "TDLS chan switch invalid lnk-id initiator\n"); in ieee80211_process_tdls_channel_switch_resp()
1553 drv_tdls_recv_channel_switch(sdata->local, sdata, ¶ms); in ieee80211_process_tdls_channel_switch_resp()
1555 tdls_dbg(sdata, in ieee80211_process_tdls_channel_switch_resp()
1566 ieee80211_process_tdls_channel_switch_req(struct ieee80211_sub_if_data *sdata, in ieee80211_process_tdls_channel_switch_req() argument
1569 struct ieee80211_local *local = sdata->local; in ieee80211_process_tdls_channel_switch_req()
1589 tdls_dbg(sdata, "TDLS channel switch req too short: %d\n", in ieee80211_process_tdls_channel_switch_req()
1617 tdls_dbg(sdata, "Invalid channel in TDLS chan switch: %d\n", in ieee80211_process_tdls_channel_switch_req()
1622 chan = ieee80211_get_channel(sdata->local->hw.wiphy, freq); in ieee80211_process_tdls_channel_switch_req()
1624 tdls_dbg(sdata, in ieee80211_process_tdls_channel_switch_req()
1633 tdls_dbg(sdata, "Invalid IEs in TDLS channel switch req\n"); in ieee80211_process_tdls_channel_switch_req()
1638 tdls_dbg(sdata, "TDLS channel switch req - missing IEs\n"); in ieee80211_process_tdls_channel_switch_req()
1643 sta = sta_info_get(sdata, tf->sa); in ieee80211_process_tdls_channel_switch_req()
1645 tdls_dbg(sdata, "TDLS chan switch from non-peer sta %pM\n", in ieee80211_process_tdls_channel_switch_req()
1655 !memcmp(elems.lnk_id->init_sta, sdata->vif.addr, ETH_ALEN); in ieee80211_process_tdls_channel_switch_req()
1657 tdls_dbg(sdata, "TDLS chan switch invalid lnk-id initiator\n"); in ieee80211_process_tdls_channel_switch_req()
1694 drv_tdls_recv_channel_switch(sdata->local, sdata, ¶ms); in ieee80211_process_tdls_channel_switch_req()
1696 tdls_dbg(sdata, in ieee80211_process_tdls_channel_switch_req()
1706 void ieee80211_process_tdls_channel_switch(struct ieee80211_sub_if_data *sdata, in ieee80211_process_tdls_channel_switch() argument
1710 struct wiphy *wiphy = sdata->local->hw.wiphy; in ieee80211_process_tdls_channel_switch()
1725 ieee80211_process_tdls_channel_switch_req(sdata, skb); in ieee80211_process_tdls_channel_switch()
1728 ieee80211_process_tdls_channel_switch_resp(sdata, skb); in ieee80211_process_tdls_channel_switch()