Lines Matching refs:sdata

38 ieee80211_ibss_build_presp(struct ieee80211_sub_if_data *sdata,  in ieee80211_ibss_build_presp()  argument
45 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; in ieee80211_ibss_build_presp()
46 struct ieee80211_local *local = sdata->local; in ieee80211_ibss_build_presp()
79 memcpy(mgmt->sa, sdata->vif.addr, ETH_ALEN); in ieee80211_ibss_build_presp()
176 ieee80211_apply_htcap_overrides(sdata, &ht_cap); in ieee80211_ibss_build_presp()
211 static void __ieee80211_sta_join_ibss(struct ieee80211_sub_if_data *sdata, in __ieee80211_sta_join_ibss() argument
218 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; in __ieee80211_sta_join_ibss()
219 struct ieee80211_local *local = sdata->local; in __ieee80211_sta_join_ibss()
234 drv_reset_tsf(local, sdata); in __ieee80211_sta_join_ibss()
237 sta_info_flush(sdata, -1); in __ieee80211_sta_join_ibss()
240 if (sdata->vif.cfg.ibss_joined) { in __ieee80211_sta_join_ibss()
241 sdata->vif.cfg.ibss_joined = false; in __ieee80211_sta_join_ibss()
242 sdata->vif.cfg.ibss_creator = false; in __ieee80211_sta_join_ibss()
243 sdata->vif.bss_conf.enable_beacon = false; in __ieee80211_sta_join_ibss()
244 netif_carrier_off(sdata->dev); in __ieee80211_sta_join_ibss()
246 ieee80211_bss_info_change_notify(sdata, in __ieee80211_sta_join_ibss()
249 drv_leave_ibss(local, sdata); in __ieee80211_sta_join_ibss()
252 presp = sdata_dereference(ifibss->presp, sdata); in __ieee80211_sta_join_ibss()
266 sdata_info(sdata, in __ieee80211_sta_join_ibss()
275 sdata_info(sdata, in __ieee80211_sta_join_ibss()
281 err = cfg80211_chandef_dfs_required(sdata->local->hw.wiphy, in __ieee80211_sta_join_ibss()
284 sdata_info(sdata, in __ieee80211_sta_join_ibss()
289 sdata_info(sdata, in __ieee80211_sta_join_ibss()
296 if (ieee80211_link_use_channel(&sdata->deflink, &chanreq, in __ieee80211_sta_join_ibss()
300 sdata_info(sdata, "Failed to join IBSS, no channel context\n"); in __ieee80211_sta_join_ibss()
303 sdata->deflink.radar_required = radar_required; in __ieee80211_sta_join_ibss()
307 presp = ieee80211_ibss_build_presp(sdata, beacon_int, basic_rates, in __ieee80211_sta_join_ibss()
316 sdata->vif.bss_conf.enable_beacon = true; in __ieee80211_sta_join_ibss()
317 sdata->vif.bss_conf.beacon_int = beacon_int; in __ieee80211_sta_join_ibss()
318 sdata->vif.bss_conf.basic_rates = basic_rates; in __ieee80211_sta_join_ibss()
319 sdata->vif.cfg.ssid_len = ifibss->ssid_len; in __ieee80211_sta_join_ibss()
320 memcpy(sdata->vif.cfg.ssid, ifibss->ssid, ifibss->ssid_len); in __ieee80211_sta_join_ibss()
322 bss_change |= ieee80211_reset_erp_info(sdata); in __ieee80211_sta_join_ibss()
341 sdata->vif.bss_conf.use_short_slot = chan->band == NL80211_BAND_5GHZ; in __ieee80211_sta_join_ibss()
345 sdata->deflink.operating_11g_mode = in __ieee80211_sta_join_ibss()
348 ieee80211_set_wmm_default(&sdata->deflink, true, false); in __ieee80211_sta_join_ibss()
350 sdata->vif.cfg.ibss_joined = true; in __ieee80211_sta_join_ibss()
351 sdata->vif.cfg.ibss_creator = creator; in __ieee80211_sta_join_ibss()
353 err = drv_join_ibss(local, sdata); in __ieee80211_sta_join_ibss()
355 sdata->vif.cfg.ibss_joined = false; in __ieee80211_sta_join_ibss()
356 sdata->vif.cfg.ibss_creator = false; in __ieee80211_sta_join_ibss()
357 sdata->vif.bss_conf.enable_beacon = false; in __ieee80211_sta_join_ibss()
358 sdata->vif.cfg.ssid_len = 0; in __ieee80211_sta_join_ibss()
361 ieee80211_link_release_channel(&sdata->deflink); in __ieee80211_sta_join_ibss()
362 sdata_info(sdata, "Failed to join IBSS, driver failure: %d\n", in __ieee80211_sta_join_ibss()
367 ieee80211_bss_info_change_notify(sdata, bss_change); in __ieee80211_sta_join_ibss()
378 netif_carrier_on(sdata->dev); in __ieee80211_sta_join_ibss()
379 cfg80211_ibss_joined(sdata->dev, ifibss->bssid, chan, GFP_KERNEL); in __ieee80211_sta_join_ibss()
382 static void ieee80211_sta_join_ibss(struct ieee80211_sub_if_data *sdata, in ieee80211_sta_join_ibss() argument
396 lockdep_assert_wiphy(sdata->local->hw.wiphy); in ieee80211_sta_join_ibss()
401 switch (sdata->u.ibss.chandef.width) { in ieee80211_sta_join_ibss()
405 chan_type = cfg80211_get_chandef_type(&sdata->u.ibss.chandef); in ieee80211_sta_join_ibss()
412 chandef.width = sdata->u.ibss.chandef.width; in ieee80211_sta_join_ibss()
417 chandef = sdata->u.ibss.chandef; in ieee80211_sta_join_ibss()
427 sband = sdata->local->hw.wiphy->bands[cbss->channel->band]; in ieee80211_sta_join_ibss()
452 __ieee80211_sta_join_ibss(sdata, cbss->bssid, in ieee80211_sta_join_ibss()
460 int ieee80211_ibss_csa_beacon(struct ieee80211_sub_if_data *sdata, in ieee80211_ibss_csa_beacon() argument
464 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; in ieee80211_ibss_csa_beacon()
471 lockdep_assert_wiphy(sdata->local->hw.wiphy); in ieee80211_ibss_csa_beacon()
476 cbss = cfg80211_get_bss(sdata->local->hw.wiphy, ifibss->chandef.chan, in ieee80211_ibss_csa_beacon()
488 cfg80211_put_bss(sdata->local->hw.wiphy, cbss); in ieee80211_ibss_csa_beacon()
490 old_presp = sdata_dereference(ifibss->presp, sdata); in ieee80211_ibss_csa_beacon()
492 presp = ieee80211_ibss_build_presp(sdata, in ieee80211_ibss_csa_beacon()
493 sdata->vif.bss_conf.beacon_int, in ieee80211_ibss_csa_beacon()
494 sdata->vif.bss_conf.basic_rates, in ieee80211_ibss_csa_beacon()
508 int ieee80211_ibss_finish_csa(struct ieee80211_sub_if_data *sdata, u64 *changed) in ieee80211_ibss_finish_csa() argument
510 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; in ieee80211_ibss_finish_csa()
513 lockdep_assert_wiphy(sdata->local->hw.wiphy); in ieee80211_ibss_finish_csa()
521 cbss = cfg80211_get_bss(sdata->local->hw.wiphy, in ieee80211_ibss_finish_csa()
529 cbss->channel = sdata->deflink.csa.chanreq.oper.chan; in ieee80211_ibss_finish_csa()
530 cfg80211_put_bss(sdata->local->hw.wiphy, cbss); in ieee80211_ibss_finish_csa()
534 ifibss->chandef = sdata->deflink.csa.chanreq.oper; in ieee80211_ibss_finish_csa()
537 return ieee80211_ibss_csa_beacon(sdata, NULL, changed); in ieee80211_ibss_finish_csa()
540 void ieee80211_ibss_stop(struct ieee80211_sub_if_data *sdata) in ieee80211_ibss_stop() argument
542 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; in ieee80211_ibss_stop()
544 wiphy_work_cancel(sdata->local->hw.wiphy, in ieee80211_ibss_stop()
551 struct ieee80211_sub_if_data *sdata = sta->sdata; in ieee80211_ibss_finish_sta() local
556 ibss_dbg(sdata, "Adding new IBSS station %pM\n", addr); in ieee80211_ibss_finish_sta()
562 if (!sta->sdata->u.ibss.control_port) in ieee80211_ibss_finish_sta()
569 return sta_info_get(sdata, addr); in ieee80211_ibss_finish_sta()
574 ieee80211_ibss_add_sta(struct ieee80211_sub_if_data *sdata, const u8 *bssid, in ieee80211_ibss_add_sta() argument
578 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; in ieee80211_ibss_add_sta()
579 struct ieee80211_local *local = sdata->local; in ieee80211_ibss_add_sta()
591 sdata->name, addr); in ieee80211_ibss_add_sta()
601 if (!ether_addr_equal(bssid, sdata->u.ibss.bssid)) { in ieee80211_ibss_add_sta()
607 chanctx_conf = rcu_dereference(sdata->vif.bss_conf.chanctx_conf); in ieee80211_ibss_add_sta()
613 sta = sta_info_alloc(sdata, addr, GFP_KERNEL); in ieee80211_ibss_add_sta()
627 static int ieee80211_sta_active_ibss(struct ieee80211_sub_if_data *sdata) in ieee80211_sta_active_ibss() argument
629 struct ieee80211_local *local = sdata->local; in ieee80211_sta_active_ibss()
633 lockdep_assert_wiphy(sdata->local->hw.wiphy); in ieee80211_sta_active_ibss()
640 if (sta->sdata == sdata && in ieee80211_sta_active_ibss()
653 static void ieee80211_ibss_disconnect(struct ieee80211_sub_if_data *sdata) in ieee80211_ibss_disconnect() argument
655 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; in ieee80211_ibss_disconnect()
656 struct ieee80211_local *local = sdata->local; in ieee80211_ibss_disconnect()
672 cfg80211_put_bss(sdata->local->hw.wiphy, cbss); in ieee80211_ibss_disconnect()
678 sta_info_flush(sdata, -1); in ieee80211_ibss_disconnect()
692 netif_carrier_off(sdata->dev); in ieee80211_ibss_disconnect()
694 sdata->vif.cfg.ibss_joined = false; in ieee80211_ibss_disconnect()
695 sdata->vif.cfg.ibss_creator = false; in ieee80211_ibss_disconnect()
696 sdata->vif.bss_conf.enable_beacon = false; in ieee80211_ibss_disconnect()
697 sdata->vif.cfg.ssid_len = 0; in ieee80211_ibss_disconnect()
700 presp = sdata_dereference(ifibss->presp, sdata); in ieee80211_ibss_disconnect()
701 RCU_INIT_POINTER(sdata->u.ibss.presp, NULL); in ieee80211_ibss_disconnect()
705 clear_bit(SDATA_STATE_OFFCHANNEL_BEACON_STOPPED, &sdata->state); in ieee80211_ibss_disconnect()
706 ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BEACON_ENABLED | in ieee80211_ibss_disconnect()
708 drv_leave_ibss(local, sdata); in ieee80211_ibss_disconnect()
709 ieee80211_link_release_channel(&sdata->deflink); in ieee80211_ibss_disconnect()
715 struct ieee80211_sub_if_data *sdata = in ieee80211_csa_connection_drop_work() local
719 ieee80211_ibss_disconnect(sdata); in ieee80211_csa_connection_drop_work()
721 skb_queue_purge(&sdata->skb_queue); in ieee80211_csa_connection_drop_work()
724 wiphy_work_queue(sdata->local->hw.wiphy, &sdata->work); in ieee80211_csa_connection_drop_work()
727 static void ieee80211_ibss_csa_mark_radar(struct ieee80211_sub_if_data *sdata) in ieee80211_ibss_csa_mark_radar() argument
729 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; in ieee80211_ibss_csa_mark_radar()
735 err = cfg80211_chandef_dfs_required(sdata->local->hw.wiphy, in ieee80211_ibss_csa_mark_radar()
739 cfg80211_radar_event(sdata->local->hw.wiphy, &ifibss->chandef, in ieee80211_ibss_csa_mark_radar()
744 ieee80211_ibss_process_chanswitch(struct ieee80211_sub_if_data *sdata, in ieee80211_ibss_process_chanswitch() argument
750 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; in ieee80211_ibss_process_chanswitch()
759 lockdep_assert_wiphy(sdata->local->hw.wiphy); in ieee80211_ibss_process_chanswitch()
778 err = ieee80211_parse_ch_switch_ie(sdata, elems, in ieee80211_ibss_process_chanswitch()
792 if (!(sdata->local->hw.wiphy->flags & WIPHY_FLAG_HAS_CHANNEL_SWITCH)) in ieee80211_ibss_process_chanswitch()
814 sdata_info(sdata, in ieee80211_ibss_process_chanswitch()
830 if (!cfg80211_reg_can_beacon(sdata->local->hw.wiphy, &params.chandef, in ieee80211_ibss_process_chanswitch()
832 sdata_info(sdata, in ieee80211_ibss_process_chanswitch()
842 err = cfg80211_chandef_dfs_required(sdata->local->hw.wiphy, in ieee80211_ibss_process_chanswitch()
855 &sdata->vif.bss_conf.chanreq.oper)) { in ieee80211_ibss_process_chanswitch()
856 ibss_dbg(sdata, in ieee80211_ibss_process_chanswitch()
862 ibss_dbg(sdata, in ieee80211_ibss_process_chanswitch()
868 if (ieee80211_channel_switch(sdata->local->hw.wiphy, sdata->dev, in ieee80211_ibss_process_chanswitch()
872 ieee80211_ibss_csa_mark_radar(sdata); in ieee80211_ibss_process_chanswitch()
876 ibss_dbg(sdata, "Can't handle channel switch, disconnect\n"); in ieee80211_ibss_process_chanswitch()
877 wiphy_work_queue(sdata->local->hw.wiphy, in ieee80211_ibss_process_chanswitch()
880 ieee80211_ibss_csa_mark_radar(sdata); in ieee80211_ibss_process_chanswitch()
886 ieee80211_rx_mgmt_spectrum_mgmt(struct ieee80211_sub_if_data *sdata, in ieee80211_rx_mgmt_spectrum_mgmt() argument
906 if (!sdata->vif.bss_conf.csa_active) in ieee80211_rx_mgmt_spectrum_mgmt()
907 ieee80211_ibss_process_chanswitch(sdata, elems, false); in ieee80211_rx_mgmt_spectrum_mgmt()
910 static void ieee80211_rx_mgmt_deauth_ibss(struct ieee80211_sub_if_data *sdata, in ieee80211_rx_mgmt_deauth_ibss() argument
919 ibss_dbg(sdata, "RX DeAuth SA=%pM DA=%pM\n", mgmt->sa, mgmt->da); in ieee80211_rx_mgmt_deauth_ibss()
920 ibss_dbg(sdata, "\tBSSID=%pM (reason: %d)\n", mgmt->bssid, reason); in ieee80211_rx_mgmt_deauth_ibss()
921 sta_info_destroy_addr(sdata, mgmt->sa); in ieee80211_rx_mgmt_deauth_ibss()
924 static void ieee80211_rx_mgmt_auth_ibss(struct ieee80211_sub_if_data *sdata, in ieee80211_rx_mgmt_auth_ibss() argument
930 lockdep_assert_wiphy(sdata->local->hw.wiphy); in ieee80211_rx_mgmt_auth_ibss()
938 ibss_dbg(sdata, "RX Auth SA=%pM DA=%pM\n", mgmt->sa, mgmt->da); in ieee80211_rx_mgmt_auth_ibss()
939 ibss_dbg(sdata, "\tBSSID=%pM (auth_transaction=%d)\n", in ieee80211_rx_mgmt_auth_ibss()
951 ieee80211_send_auth(sdata, 2, WLAN_AUTH_OPEN, 0, NULL, 0, in ieee80211_rx_mgmt_auth_ibss()
952 mgmt->sa, sdata->u.ibss.bssid, NULL, 0, 0, 0); in ieee80211_rx_mgmt_auth_ibss()
955 static void ieee80211_update_sta_info(struct ieee80211_sub_if_data *sdata, in ieee80211_update_sta_info() argument
963 struct ieee80211_local *local = sdata->local; in ieee80211_update_sta_info()
968 if (sdata->vif.type != NL80211_IFTYPE_ADHOC) in ieee80211_update_sta_info()
971 if (!ether_addr_equal(mgmt->bssid, sdata->u.ibss.bssid)) in ieee80211_update_sta_info()
979 sta = sta_info_get(sdata, mgmt->sa); in ieee80211_update_sta_info()
982 supp_rates = ieee80211_sta_get_rates(sdata, elems, in ieee80211_update_sta_info()
992 ibss_dbg(sdata, in ieee80211_update_sta_info()
1000 sta = ieee80211_ibss_add_sta(sdata, mgmt->bssid, in ieee80211_update_sta_info()
1013 sdata->u.ibss.chandef.width != NL80211_CHAN_WIDTH_20_NOHT && in ieee80211_update_sta_info()
1014 sdata->u.ibss.chandef.width != NL80211_CHAN_WIDTH_5 && in ieee80211_update_sta_info()
1015 sdata->u.ibss.chandef.width != NL80211_CHAN_WIDTH_10) { in ieee80211_update_sta_info()
1025 rates_updated |= ieee80211_ht_cap_ie_to_sta_ht_cap(sdata, sband, in ieee80211_update_sta_info()
1030 sdata->u.ibss.chandef.width != NL80211_CHAN_WIDTH_20 && in ieee80211_update_sta_info()
1031 sdata->u.ibss.chandef.width != NL80211_CHAN_WIDTH_40) { in ieee80211_update_sta_info()
1043 ieee80211_vht_cap_ie_to_sta_vht_cap(sdata, sband, in ieee80211_update_sta_info()
1053 if (!cfg80211_chandef_compatible(&sdata->u.ibss.chandef, in ieee80211_update_sta_info()
1068 drv_link_sta_rc_update(local, sdata, &sta->sta.deflink, in ieee80211_update_sta_info()
1075 static void ieee80211_rx_bss_info(struct ieee80211_sub_if_data *sdata, in ieee80211_rx_bss_info() argument
1080 struct ieee80211_local *local = sdata->local; in ieee80211_rx_bss_info()
1092 ieee80211_update_sta_info(sdata, mgmt, len, rx_status, elems, channel); in ieee80211_rx_bss_info()
1110 if (sdata->u.ibss.fixed_channel && in ieee80211_rx_bss_info()
1111 sdata->u.ibss.chandef.chan != cbss->channel) in ieee80211_rx_bss_info()
1115 if (elems->ssid_len != sdata->u.ibss.ssid_len || in ieee80211_rx_bss_info()
1116 memcmp(elems->ssid, sdata->u.ibss.ssid, in ieee80211_rx_bss_info()
1117 sdata->u.ibss.ssid_len)) in ieee80211_rx_bss_info()
1121 if (sdata->vif.bss_conf.csa_active || in ieee80211_rx_bss_info()
1122 ieee80211_ibss_process_chanswitch(sdata, elems, true)) in ieee80211_rx_bss_info()
1126 if (ether_addr_equal(cbss->bssid, sdata->u.ibss.bssid)) in ieee80211_rx_bss_info()
1130 if (sdata->u.ibss.fixed_bssid) in ieee80211_rx_bss_info()
1143 rx_timestamp = drv_get_tsf(local, sdata); in ieee80211_rx_bss_info()
1146 ibss_dbg(sdata, "RX beacon SA=%pM BSSID=%pM TSF=0x%llx\n", in ieee80211_rx_bss_info()
1149 ibss_dbg(sdata, "\tBCN=0x%llx diff=%lld @%lu\n", in ieee80211_rx_bss_info()
1155 ibss_dbg(sdata, in ieee80211_rx_bss_info()
1158 ieee80211_sta_join_ibss(sdata, bss); in ieee80211_rx_bss_info()
1159 supp_rates = ieee80211_sta_get_rates(sdata, elems, band, NULL); in ieee80211_rx_bss_info()
1160 ieee80211_ibss_add_sta(sdata, mgmt->bssid, mgmt->sa, in ieee80211_rx_bss_info()
1169 void ieee80211_ibss_rx_no_sta(struct ieee80211_sub_if_data *sdata, in ieee80211_ibss_rx_no_sta() argument
1173 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; in ieee80211_ibss_rx_no_sta()
1174 struct ieee80211_local *local = sdata->local; in ieee80211_ibss_rx_no_sta()
1186 sdata->name, addr); in ieee80211_ibss_rx_no_sta()
1193 if (!ether_addr_equal(bssid, sdata->u.ibss.bssid)) in ieee80211_ibss_rx_no_sta()
1197 chanctx_conf = rcu_dereference(sdata->vif.bss_conf.chanctx_conf); in ieee80211_ibss_rx_no_sta()
1205 sta = sta_info_alloc(sdata, addr, GFP_ATOMIC); in ieee80211_ibss_rx_no_sta()
1217 wiphy_work_queue(local->hw.wiphy, &sdata->work); in ieee80211_ibss_rx_no_sta()
1220 static void ieee80211_ibss_sta_expire(struct ieee80211_sub_if_data *sdata) in ieee80211_ibss_sta_expire() argument
1222 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; in ieee80211_ibss_sta_expire()
1223 struct ieee80211_local *local = sdata->local; in ieee80211_ibss_sta_expire()
1233 if (sdata != sta->sdata) in ieee80211_ibss_sta_expire()
1241 sta_dbg(sta->sdata, "expiring inactive %sSTA %pM\n", in ieee80211_ibss_sta_expire()
1245 ieee80211_send_deauth_disassoc(sdata, sta->sta.addr, in ieee80211_ibss_sta_expire()
1259 static void ieee80211_sta_merge_ibss(struct ieee80211_sub_if_data *sdata) in ieee80211_sta_merge_ibss() argument
1261 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; in ieee80211_sta_merge_ibss()
1263 lockdep_assert_wiphy(sdata->local->hw.wiphy); in ieee80211_sta_merge_ibss()
1268 ieee80211_ibss_sta_expire(sdata); in ieee80211_sta_merge_ibss()
1274 if (ieee80211_sta_active_ibss(sdata)) in ieee80211_sta_merge_ibss()
1280 sdata_info(sdata, in ieee80211_sta_merge_ibss()
1283 ieee80211_request_ibss_scan(sdata, ifibss->ssid, ifibss->ssid_len, in ieee80211_sta_merge_ibss()
1287 static void ieee80211_sta_create_ibss(struct ieee80211_sub_if_data *sdata) in ieee80211_sta_create_ibss() argument
1289 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; in ieee80211_sta_create_ibss()
1294 lockdep_assert_wiphy(sdata->local->hw.wiphy); in ieee80211_sta_create_ibss()
1304 bssid[i] ^= sdata->vif.addr[i]; in ieee80211_sta_create_ibss()
1309 sdata_info(sdata, "Creating new IBSS network, BSSID %pM\n", bssid); in ieee80211_sta_create_ibss()
1316 __ieee80211_sta_join_ibss(sdata, bssid, sdata->vif.bss_conf.beacon_int, in ieee80211_sta_create_ibss()
1395 static void ieee80211_sta_find_ibss(struct ieee80211_sub_if_data *sdata) in ieee80211_sta_find_ibss() argument
1397 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; in ieee80211_sta_find_ibss()
1398 struct ieee80211_local *local = sdata->local; in ieee80211_sta_find_ibss()
1404 lockdep_assert_wiphy(sdata->local->hw.wiphy); in ieee80211_sta_find_ibss()
1406 active_ibss = ieee80211_sta_active_ibss(sdata); in ieee80211_sta_find_ibss()
1407 ibss_dbg(sdata, "sta_find_ibss (active_ibss=%d)\n", active_ibss); in ieee80211_sta_find_ibss()
1427 ibss_dbg(sdata, in ieee80211_sta_find_ibss()
1430 sdata_info(sdata, in ieee80211_sta_find_ibss()
1434 ieee80211_sta_join_ibss(sdata, bss); in ieee80211_sta_find_ibss()
1443 sdata_info(sdata, "Created IBSS using preconfigured BSSID %pM\n", in ieee80211_sta_find_ibss()
1445 ieee80211_sta_create_ibss(sdata); in ieee80211_sta_find_ibss()
1450 ibss_dbg(sdata, "sta_find_ibss: did not try to join ibss\n"); in ieee80211_sta_find_ibss()
1458 sdata_info(sdata, "Trigger new scan to find an IBSS to join\n"); in ieee80211_sta_find_ibss()
1465 ieee80211_request_ibss_scan(sdata, ifibss->ssid, in ieee80211_sta_find_ibss()
1469 ieee80211_request_ibss_scan(sdata, ifibss->ssid, in ieee80211_sta_find_ibss()
1477 ieee80211_sta_create_ibss(sdata); in ieee80211_sta_find_ibss()
1484 static void ieee80211_rx_mgmt_probe_req(struct ieee80211_sub_if_data *sdata, in ieee80211_rx_mgmt_probe_req() argument
1488 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; in ieee80211_rx_mgmt_probe_req()
1489 struct ieee80211_local *local = sdata->local; in ieee80211_rx_mgmt_probe_req()
1495 lockdep_assert_wiphy(sdata->local->hw.wiphy); in ieee80211_rx_mgmt_probe_req()
1497 presp = sdata_dereference(ifibss->presp, sdata); in ieee80211_rx_mgmt_probe_req()
1505 ibss_dbg(sdata, "RX ProbeReq SA=%pM DA=%pM\n", mgmt->sa, mgmt->da); in ieee80211_rx_mgmt_probe_req()
1506 ibss_dbg(sdata, "\tBSSID=%pM (tx_last_beacon=%d)\n", in ieee80211_rx_mgmt_probe_req()
1520 ibss_dbg(sdata, "Invalid SSID IE in ProbeReq from %pM\n", in ieee80211_rx_mgmt_probe_req()
1540 ibss_dbg(sdata, "Sending ProbeResp to %pM\n", mgmt->sa); in ieee80211_rx_mgmt_probe_req()
1547 ieee80211_tx_skb(sdata, skb); in ieee80211_rx_mgmt_probe_req()
1551 void ieee80211_rx_mgmt_probe_beacon(struct ieee80211_sub_if_data *sdata, in ieee80211_rx_mgmt_probe_beacon() argument
1573 ieee80211_rx_bss_info(sdata, mgmt, len, rx_status, elems); in ieee80211_rx_mgmt_probe_beacon()
1578 void ieee80211_ibss_rx_queued_mgmt(struct ieee80211_sub_if_data *sdata, in ieee80211_ibss_rx_queued_mgmt() argument
1591 if (!sdata->u.ibss.ssid_len) in ieee80211_ibss_rx_queued_mgmt()
1596 ieee80211_rx_mgmt_probe_req(sdata, skb); in ieee80211_ibss_rx_queued_mgmt()
1600 ieee80211_rx_mgmt_probe_beacon(sdata, mgmt, skb->len, in ieee80211_ibss_rx_queued_mgmt()
1604 ieee80211_rx_mgmt_auth_ibss(sdata, mgmt, skb->len); in ieee80211_ibss_rx_queued_mgmt()
1607 ieee80211_rx_mgmt_deauth_ibss(sdata, mgmt, skb->len); in ieee80211_ibss_rx_queued_mgmt()
1624 ieee80211_rx_mgmt_spectrum_mgmt(sdata, mgmt, in ieee80211_ibss_rx_queued_mgmt()
1634 void ieee80211_ibss_work(struct ieee80211_sub_if_data *sdata) in ieee80211_ibss_work() argument
1636 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; in ieee80211_ibss_work()
1662 ieee80211_sta_find_ibss(sdata); in ieee80211_ibss_work()
1665 ieee80211_sta_merge_ibss(sdata); in ieee80211_ibss_work()
1675 struct ieee80211_sub_if_data *sdata = in ieee80211_ibss_timer() local
1676 timer_container_of(sdata, t, u.ibss.timer); in ieee80211_ibss_timer()
1678 wiphy_work_queue(sdata->local->hw.wiphy, &sdata->work); in ieee80211_ibss_timer()
1681 void ieee80211_ibss_setup_sdata(struct ieee80211_sub_if_data *sdata) in ieee80211_ibss_setup_sdata() argument
1683 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; in ieee80211_ibss_setup_sdata()
1695 struct ieee80211_sub_if_data *sdata; in ieee80211_ibss_notify_scan_completed() local
1699 list_for_each_entry(sdata, &local->interfaces, list) { in ieee80211_ibss_notify_scan_completed()
1700 if (!ieee80211_sdata_running(sdata)) in ieee80211_ibss_notify_scan_completed()
1702 if (sdata->vif.type != NL80211_IFTYPE_ADHOC) in ieee80211_ibss_notify_scan_completed()
1704 sdata->u.ibss.last_scan_completed = jiffies; in ieee80211_ibss_notify_scan_completed()
1708 int ieee80211_ibss_join(struct ieee80211_sub_if_data *sdata, in ieee80211_ibss_join() argument
1713 struct ieee80211_local *local = sdata->local; in ieee80211_ibss_join()
1726 sdata->wdev.iftype); in ieee80211_ibss_join()
1739 ret = ieee80211_check_combinations(sdata, &params->chandef, chanmode, in ieee80211_ibss_join()
1745 memcpy(sdata->u.ibss.bssid, params->bssid, ETH_ALEN); in ieee80211_ibss_join()
1746 sdata->u.ibss.fixed_bssid = true; in ieee80211_ibss_join()
1748 sdata->u.ibss.fixed_bssid = false; in ieee80211_ibss_join()
1750 sdata->u.ibss.privacy = params->privacy; in ieee80211_ibss_join()
1751 sdata->u.ibss.control_port = params->control_port; in ieee80211_ibss_join()
1752 sdata->u.ibss.userspace_handles_dfs = params->userspace_handles_dfs; in ieee80211_ibss_join()
1753 sdata->u.ibss.basic_rates = params->basic_rates; in ieee80211_ibss_join()
1754 sdata->u.ibss.last_scan_completed = jiffies; in ieee80211_ibss_join()
1757 memcpy(sdata->vif.bss_conf.mcast_rate, params->mcast_rate, in ieee80211_ibss_join()
1760 sdata->vif.bss_conf.beacon_int = params->beacon_interval; in ieee80211_ibss_join()
1762 sdata->u.ibss.chandef = params->chandef; in ieee80211_ibss_join()
1763 sdata->u.ibss.fixed_channel = params->channel_fixed; in ieee80211_ibss_join()
1766 sdata->u.ibss.ie = kmemdup(params->ie, params->ie_len, in ieee80211_ibss_join()
1768 if (sdata->u.ibss.ie) in ieee80211_ibss_join()
1769 sdata->u.ibss.ie_len = params->ie_len; in ieee80211_ibss_join()
1772 sdata->u.ibss.state = IEEE80211_IBSS_MLME_SEARCH; in ieee80211_ibss_join()
1773 sdata->u.ibss.ibss_join_req = jiffies; in ieee80211_ibss_join()
1775 memcpy(sdata->u.ibss.ssid, params->ssid, params->ssid_len); in ieee80211_ibss_join()
1776 sdata->u.ibss.ssid_len = params->ssid_len; in ieee80211_ibss_join()
1778 memcpy(&sdata->u.ibss.ht_capa, &params->ht_capa, in ieee80211_ibss_join()
1779 sizeof(sdata->u.ibss.ht_capa)); in ieee80211_ibss_join()
1780 memcpy(&sdata->u.ibss.ht_capa_mask, &params->ht_capa_mask, in ieee80211_ibss_join()
1781 sizeof(sdata->u.ibss.ht_capa_mask)); in ieee80211_ibss_join()
1793 sdata->vif.bss_conf.ht_operation_mode |= in ieee80211_ibss_join()
1798 ieee80211_link_info_change_notify(sdata, &sdata->deflink, changed); in ieee80211_ibss_join()
1800 sdata->deflink.smps_mode = IEEE80211_SMPS_OFF; in ieee80211_ibss_join()
1801 sdata->deflink.needed_rx_chains = local->rx_chains; in ieee80211_ibss_join()
1802 sdata->control_port_over_nl80211 = params->control_port_over_nl80211; in ieee80211_ibss_join()
1804 wiphy_work_queue(local->hw.wiphy, &sdata->work); in ieee80211_ibss_join()
1809 int ieee80211_ibss_leave(struct ieee80211_sub_if_data *sdata) in ieee80211_ibss_leave() argument
1811 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; in ieee80211_ibss_leave()
1814 ieee80211_ibss_disconnect(sdata); in ieee80211_ibss_leave()
1818 kfree(sdata->u.ibss.ie); in ieee80211_ibss_leave()
1819 sdata->u.ibss.ie = NULL; in ieee80211_ibss_leave()
1820 sdata->u.ibss.ie_len = 0; in ieee80211_ibss_leave()
1828 skb_queue_purge(&sdata->skb_queue); in ieee80211_ibss_leave()
1830 timer_delete_sync(&sdata->u.ibss.timer); in ieee80211_ibss_leave()