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()
80 memcpy(mgmt->sa, sdata->vif.addr, ETH_ALEN); in ieee80211_ibss_build_presp()
183 ieee80211_apply_htcap_overrides(sdata, &ht_cap); in ieee80211_ibss_build_presp()
218 static void __ieee80211_sta_join_ibss(struct ieee80211_sub_if_data *sdata, in __ieee80211_sta_join_ibss() argument
225 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; in __ieee80211_sta_join_ibss()
226 struct ieee80211_local *local = sdata->local; in __ieee80211_sta_join_ibss()
238 sdata_assert_lock(sdata); in __ieee80211_sta_join_ibss()
241 drv_reset_tsf(local, sdata); in __ieee80211_sta_join_ibss()
244 sta_info_flush(sdata); in __ieee80211_sta_join_ibss()
247 if (sdata->vif.cfg.ibss_joined) { in __ieee80211_sta_join_ibss()
248 sdata->vif.cfg.ibss_joined = false; in __ieee80211_sta_join_ibss()
249 sdata->vif.cfg.ibss_creator = false; in __ieee80211_sta_join_ibss()
250 sdata->vif.bss_conf.enable_beacon = false; in __ieee80211_sta_join_ibss()
251 netif_carrier_off(sdata->dev); in __ieee80211_sta_join_ibss()
252 ieee80211_bss_info_change_notify(sdata, in __ieee80211_sta_join_ibss()
255 drv_leave_ibss(local, sdata); in __ieee80211_sta_join_ibss()
258 presp = sdata_dereference(ifibss->presp, sdata); in __ieee80211_sta_join_ibss()
272 sdata_info(sdata, in __ieee80211_sta_join_ibss()
281 sdata_info(sdata, in __ieee80211_sta_join_ibss()
287 err = cfg80211_chandef_dfs_required(sdata->local->hw.wiphy, in __ieee80211_sta_join_ibss()
290 sdata_info(sdata, in __ieee80211_sta_join_ibss()
295 sdata_info(sdata, in __ieee80211_sta_join_ibss()
303 if (ieee80211_link_use_channel(&sdata->deflink, &chandef, in __ieee80211_sta_join_ibss()
307 sdata_info(sdata, "Failed to join IBSS, no channel context\n"); in __ieee80211_sta_join_ibss()
311 sdata->deflink.radar_required = radar_required; in __ieee80211_sta_join_ibss()
316 presp = ieee80211_ibss_build_presp(sdata, beacon_int, basic_rates, in __ieee80211_sta_join_ibss()
325 sdata->vif.bss_conf.enable_beacon = true; in __ieee80211_sta_join_ibss()
326 sdata->vif.bss_conf.beacon_int = beacon_int; in __ieee80211_sta_join_ibss()
327 sdata->vif.bss_conf.basic_rates = basic_rates; in __ieee80211_sta_join_ibss()
328 sdata->vif.cfg.ssid_len = ifibss->ssid_len; in __ieee80211_sta_join_ibss()
329 memcpy(sdata->vif.cfg.ssid, ifibss->ssid, ifibss->ssid_len); in __ieee80211_sta_join_ibss()
331 bss_change |= ieee80211_reset_erp_info(sdata); in __ieee80211_sta_join_ibss()
350 sdata->vif.bss_conf.use_short_slot = chan->band == NL80211_BAND_5GHZ; in __ieee80211_sta_join_ibss()
354 sdata->deflink.operating_11g_mode = in __ieee80211_sta_join_ibss()
357 ieee80211_set_wmm_default(&sdata->deflink, true, false); in __ieee80211_sta_join_ibss()
359 sdata->vif.cfg.ibss_joined = true; in __ieee80211_sta_join_ibss()
360 sdata->vif.cfg.ibss_creator = creator; in __ieee80211_sta_join_ibss()
362 err = drv_join_ibss(local, sdata); in __ieee80211_sta_join_ibss()
364 sdata->vif.cfg.ibss_joined = false; in __ieee80211_sta_join_ibss()
365 sdata->vif.cfg.ibss_creator = false; in __ieee80211_sta_join_ibss()
366 sdata->vif.bss_conf.enable_beacon = false; in __ieee80211_sta_join_ibss()
367 sdata->vif.cfg.ssid_len = 0; in __ieee80211_sta_join_ibss()
371 ieee80211_link_release_channel(&sdata->deflink); in __ieee80211_sta_join_ibss()
373 sdata_info(sdata, "Failed to join IBSS, driver failure: %d\n", in __ieee80211_sta_join_ibss()
378 ieee80211_bss_info_change_notify(sdata, bss_change); in __ieee80211_sta_join_ibss()
390 netif_carrier_on(sdata->dev); in __ieee80211_sta_join_ibss()
391 cfg80211_ibss_joined(sdata->dev, ifibss->bssid, chan, GFP_KERNEL); in __ieee80211_sta_join_ibss()
394 static void ieee80211_sta_join_ibss(struct ieee80211_sub_if_data *sdata, in ieee80211_sta_join_ibss() argument
410 sdata_assert_lock(sdata); in ieee80211_sta_join_ibss()
415 switch (sdata->u.ibss.chandef.width) { in ieee80211_sta_join_ibss()
419 chan_type = cfg80211_get_chandef_type(&sdata->u.ibss.chandef); in ieee80211_sta_join_ibss()
426 chandef.width = sdata->u.ibss.chandef.width; in ieee80211_sta_join_ibss()
431 chandef = sdata->u.ibss.chandef; in ieee80211_sta_join_ibss()
441 sband = sdata->local->hw.wiphy->bands[cbss->channel->band]; in ieee80211_sta_join_ibss()
442 rate_flags = ieee80211_chandef_rate_flags(&sdata->u.ibss.chandef); in ieee80211_sta_join_ibss()
443 shift = ieee80211_vif_get_shift(&sdata->vif); in ieee80211_sta_join_ibss()
472 __ieee80211_sta_join_ibss(sdata, cbss->bssid, in ieee80211_sta_join_ibss()
480 int ieee80211_ibss_csa_beacon(struct ieee80211_sub_if_data *sdata, in ieee80211_ibss_csa_beacon() argument
484 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; in ieee80211_ibss_csa_beacon()
491 sdata_assert_lock(sdata); in ieee80211_ibss_csa_beacon()
496 cbss = cfg80211_get_bss(sdata->local->hw.wiphy, ifibss->chandef.chan, in ieee80211_ibss_csa_beacon()
508 cfg80211_put_bss(sdata->local->hw.wiphy, cbss); in ieee80211_ibss_csa_beacon()
510 old_presp = sdata_dereference(ifibss->presp, sdata); in ieee80211_ibss_csa_beacon()
512 presp = ieee80211_ibss_build_presp(sdata, in ieee80211_ibss_csa_beacon()
513 sdata->vif.bss_conf.beacon_int, in ieee80211_ibss_csa_beacon()
514 sdata->vif.bss_conf.basic_rates, in ieee80211_ibss_csa_beacon()
528 int ieee80211_ibss_finish_csa(struct ieee80211_sub_if_data *sdata, u64 *changed) in ieee80211_ibss_finish_csa() argument
530 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; in ieee80211_ibss_finish_csa()
533 sdata_assert_lock(sdata); in ieee80211_ibss_finish_csa()
541 cbss = cfg80211_get_bss(sdata->local->hw.wiphy, in ieee80211_ibss_finish_csa()
549 cbss->channel = sdata->deflink.csa_chandef.chan; in ieee80211_ibss_finish_csa()
550 cfg80211_put_bss(sdata->local->hw.wiphy, cbss); in ieee80211_ibss_finish_csa()
554 ifibss->chandef = sdata->deflink.csa_chandef; in ieee80211_ibss_finish_csa()
557 return ieee80211_ibss_csa_beacon(sdata, NULL, changed); in ieee80211_ibss_finish_csa()
560 void ieee80211_ibss_stop(struct ieee80211_sub_if_data *sdata) in ieee80211_ibss_stop() argument
562 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; in ieee80211_ibss_stop()
564 wiphy_work_cancel(sdata->local->hw.wiphy, in ieee80211_ibss_stop()
571 struct ieee80211_sub_if_data *sdata = sta->sdata; in ieee80211_ibss_finish_sta() local
576 ibss_dbg(sdata, "Adding new IBSS station %pM\n", addr); in ieee80211_ibss_finish_sta()
582 if (!sta->sdata->u.ibss.control_port) in ieee80211_ibss_finish_sta()
589 return sta_info_get(sdata, addr); in ieee80211_ibss_finish_sta()
594 ieee80211_ibss_add_sta(struct ieee80211_sub_if_data *sdata, const u8 *bssid, in ieee80211_ibss_add_sta() argument
598 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; in ieee80211_ibss_add_sta()
599 struct ieee80211_local *local = sdata->local; in ieee80211_ibss_add_sta()
612 sdata->name, addr); in ieee80211_ibss_add_sta()
622 if (!ether_addr_equal(bssid, sdata->u.ibss.bssid)) { in ieee80211_ibss_add_sta()
628 chanctx_conf = rcu_dereference(sdata->vif.bss_conf.chanctx_conf); in ieee80211_ibss_add_sta()
635 sta = sta_info_alloc(sdata, addr, GFP_KERNEL); in ieee80211_ibss_add_sta()
649 static int ieee80211_sta_active_ibss(struct ieee80211_sub_if_data *sdata) in ieee80211_sta_active_ibss() argument
651 struct ieee80211_local *local = sdata->local; in ieee80211_sta_active_ibss()
655 sdata_assert_lock(sdata); in ieee80211_sta_active_ibss()
662 if (sta->sdata == sdata && in ieee80211_sta_active_ibss()
675 static void ieee80211_ibss_disconnect(struct ieee80211_sub_if_data *sdata) in ieee80211_ibss_disconnect() argument
677 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; in ieee80211_ibss_disconnect()
678 struct ieee80211_local *local = sdata->local; in ieee80211_ibss_disconnect()
692 cfg80211_put_bss(sdata->local->hw.wiphy, cbss); in ieee80211_ibss_disconnect()
698 sta_info_flush(sdata); in ieee80211_ibss_disconnect()
712 netif_carrier_off(sdata->dev); in ieee80211_ibss_disconnect()
714 sdata->vif.cfg.ibss_joined = false; in ieee80211_ibss_disconnect()
715 sdata->vif.cfg.ibss_creator = false; in ieee80211_ibss_disconnect()
716 sdata->vif.bss_conf.enable_beacon = false; in ieee80211_ibss_disconnect()
717 sdata->vif.cfg.ssid_len = 0; in ieee80211_ibss_disconnect()
720 presp = sdata_dereference(ifibss->presp, sdata); in ieee80211_ibss_disconnect()
721 RCU_INIT_POINTER(sdata->u.ibss.presp, NULL); in ieee80211_ibss_disconnect()
725 clear_bit(SDATA_STATE_OFFCHANNEL_BEACON_STOPPED, &sdata->state); in ieee80211_ibss_disconnect()
726 ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BEACON_ENABLED | in ieee80211_ibss_disconnect()
728 drv_leave_ibss(local, sdata); in ieee80211_ibss_disconnect()
730 ieee80211_link_release_channel(&sdata->deflink); in ieee80211_ibss_disconnect()
737 struct ieee80211_sub_if_data *sdata = in ieee80211_csa_connection_drop_work() local
741 sdata_lock(sdata); in ieee80211_csa_connection_drop_work()
743 ieee80211_ibss_disconnect(sdata); in ieee80211_csa_connection_drop_work()
745 skb_queue_purge(&sdata->skb_queue); in ieee80211_csa_connection_drop_work()
748 wiphy_work_queue(sdata->local->hw.wiphy, &sdata->work); in ieee80211_csa_connection_drop_work()
750 sdata_unlock(sdata); in ieee80211_csa_connection_drop_work()
753 static void ieee80211_ibss_csa_mark_radar(struct ieee80211_sub_if_data *sdata) in ieee80211_ibss_csa_mark_radar() argument
755 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; in ieee80211_ibss_csa_mark_radar()
761 err = cfg80211_chandef_dfs_required(sdata->local->hw.wiphy, in ieee80211_ibss_csa_mark_radar()
765 cfg80211_radar_event(sdata->local->hw.wiphy, &ifibss->chandef, in ieee80211_ibss_csa_mark_radar()
770 ieee80211_ibss_process_chanswitch(struct ieee80211_sub_if_data *sdata, in ieee80211_ibss_process_chanswitch() argument
776 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; in ieee80211_ibss_process_chanswitch()
782 sdata_assert_lock(sdata); in ieee80211_ibss_process_chanswitch()
803 err = ieee80211_parse_ch_switch_ie(sdata, elems, in ieee80211_ibss_process_chanswitch()
816 if (!(sdata->local->hw.wiphy->flags & WIPHY_FLAG_HAS_CHANNEL_SWITCH)) in ieee80211_ibss_process_chanswitch()
838 sdata_info(sdata, in ieee80211_ibss_process_chanswitch()
854 if (!cfg80211_reg_can_beacon(sdata->local->hw.wiphy, &params.chandef, in ieee80211_ibss_process_chanswitch()
856 sdata_info(sdata, in ieee80211_ibss_process_chanswitch()
866 err = cfg80211_chandef_dfs_required(sdata->local->hw.wiphy, in ieee80211_ibss_process_chanswitch()
879 &sdata->vif.bss_conf.chandef)) { in ieee80211_ibss_process_chanswitch()
880 ibss_dbg(sdata, in ieee80211_ibss_process_chanswitch()
886 ibss_dbg(sdata, in ieee80211_ibss_process_chanswitch()
892 if (ieee80211_channel_switch(sdata->local->hw.wiphy, sdata->dev, in ieee80211_ibss_process_chanswitch()
896 ieee80211_ibss_csa_mark_radar(sdata); in ieee80211_ibss_process_chanswitch()
900 ibss_dbg(sdata, "Can't handle channel switch, disconnect\n"); in ieee80211_ibss_process_chanswitch()
901 wiphy_work_queue(sdata->local->hw.wiphy, in ieee80211_ibss_process_chanswitch()
904 ieee80211_ibss_csa_mark_radar(sdata); in ieee80211_ibss_process_chanswitch()
910 ieee80211_rx_mgmt_spectrum_mgmt(struct ieee80211_sub_if_data *sdata, in ieee80211_rx_mgmt_spectrum_mgmt() argument
930 if (!sdata->vif.bss_conf.csa_active) in ieee80211_rx_mgmt_spectrum_mgmt()
931 ieee80211_ibss_process_chanswitch(sdata, elems, false); in ieee80211_rx_mgmt_spectrum_mgmt()
934 static void ieee80211_rx_mgmt_deauth_ibss(struct ieee80211_sub_if_data *sdata, in ieee80211_rx_mgmt_deauth_ibss() argument
943 ibss_dbg(sdata, "RX DeAuth SA=%pM DA=%pM\n", mgmt->sa, mgmt->da); in ieee80211_rx_mgmt_deauth_ibss()
944 ibss_dbg(sdata, "\tBSSID=%pM (reason: %d)\n", mgmt->bssid, reason); in ieee80211_rx_mgmt_deauth_ibss()
945 sta_info_destroy_addr(sdata, mgmt->sa); in ieee80211_rx_mgmt_deauth_ibss()
948 static void ieee80211_rx_mgmt_auth_ibss(struct ieee80211_sub_if_data *sdata, in ieee80211_rx_mgmt_auth_ibss() argument
954 sdata_assert_lock(sdata); in ieee80211_rx_mgmt_auth_ibss()
962 ibss_dbg(sdata, "RX Auth SA=%pM DA=%pM\n", mgmt->sa, mgmt->da); in ieee80211_rx_mgmt_auth_ibss()
963 ibss_dbg(sdata, "\tBSSID=%pM (auth_transaction=%d)\n", in ieee80211_rx_mgmt_auth_ibss()
975 ieee80211_send_auth(sdata, 2, WLAN_AUTH_OPEN, 0, NULL, 0, in ieee80211_rx_mgmt_auth_ibss()
976 mgmt->sa, sdata->u.ibss.bssid, NULL, 0, 0, 0); in ieee80211_rx_mgmt_auth_ibss()
979 static void ieee80211_update_sta_info(struct ieee80211_sub_if_data *sdata, in ieee80211_update_sta_info() argument
988 struct ieee80211_local *local = sdata->local; in ieee80211_update_sta_info()
993 if (sdata->vif.type != NL80211_IFTYPE_ADHOC) in ieee80211_update_sta_info()
996 if (!ether_addr_equal(mgmt->bssid, sdata->u.ibss.bssid)) in ieee80211_update_sta_info()
1004 sta = sta_info_get(sdata, mgmt->sa); in ieee80211_update_sta_info()
1007 supp_rates = ieee80211_sta_get_rates(sdata, elems, in ieee80211_update_sta_info()
1023 ibss_dbg(sdata, in ieee80211_update_sta_info()
1031 sta = ieee80211_ibss_add_sta(sdata, mgmt->bssid, in ieee80211_update_sta_info()
1044 sdata->u.ibss.chandef.width != NL80211_CHAN_WIDTH_20_NOHT && in ieee80211_update_sta_info()
1045 sdata->u.ibss.chandef.width != NL80211_CHAN_WIDTH_5 && in ieee80211_update_sta_info()
1046 sdata->u.ibss.chandef.width != NL80211_CHAN_WIDTH_10) { in ieee80211_update_sta_info()
1056 rates_updated |= ieee80211_ht_cap_ie_to_sta_ht_cap(sdata, sband, in ieee80211_update_sta_info()
1061 sdata->u.ibss.chandef.width != NL80211_CHAN_WIDTH_20 && in ieee80211_update_sta_info()
1062 sdata->u.ibss.chandef.width != NL80211_CHAN_WIDTH_40) { in ieee80211_update_sta_info()
1074 ieee80211_vht_cap_ie_to_sta_vht_cap(sdata, sband, in ieee80211_update_sta_info()
1084 if (!cfg80211_chandef_compatible(&sdata->u.ibss.chandef, in ieee80211_update_sta_info()
1099 drv_sta_rc_update(local, sdata, &sta->sta, changed); in ieee80211_update_sta_info()
1105 static void ieee80211_rx_bss_info(struct ieee80211_sub_if_data *sdata, in ieee80211_rx_bss_info() argument
1110 struct ieee80211_local *local = sdata->local; in ieee80211_rx_bss_info()
1122 ieee80211_update_sta_info(sdata, mgmt, len, rx_status, elems, channel); in ieee80211_rx_bss_info()
1140 if (sdata->u.ibss.fixed_channel && in ieee80211_rx_bss_info()
1141 sdata->u.ibss.chandef.chan != cbss->channel) in ieee80211_rx_bss_info()
1145 if (elems->ssid_len != sdata->u.ibss.ssid_len || in ieee80211_rx_bss_info()
1146 memcmp(elems->ssid, sdata->u.ibss.ssid, in ieee80211_rx_bss_info()
1147 sdata->u.ibss.ssid_len)) in ieee80211_rx_bss_info()
1151 if (sdata->vif.bss_conf.csa_active || in ieee80211_rx_bss_info()
1152 ieee80211_ibss_process_chanswitch(sdata, elems, true)) in ieee80211_rx_bss_info()
1156 if (ether_addr_equal(cbss->bssid, sdata->u.ibss.bssid)) in ieee80211_rx_bss_info()
1160 if (sdata->u.ibss.fixed_bssid) in ieee80211_rx_bss_info()
1173 rx_timestamp = drv_get_tsf(local, sdata); in ieee80211_rx_bss_info()
1176 ibss_dbg(sdata, "RX beacon SA=%pM BSSID=%pM TSF=0x%llx\n", in ieee80211_rx_bss_info()
1179 ibss_dbg(sdata, "\tBCN=0x%llx diff=%lld @%lu\n", in ieee80211_rx_bss_info()
1185 ibss_dbg(sdata, in ieee80211_rx_bss_info()
1188 ieee80211_sta_join_ibss(sdata, bss); in ieee80211_rx_bss_info()
1189 supp_rates = ieee80211_sta_get_rates(sdata, elems, band, NULL); in ieee80211_rx_bss_info()
1190 ieee80211_ibss_add_sta(sdata, mgmt->bssid, mgmt->sa, in ieee80211_rx_bss_info()
1199 void ieee80211_ibss_rx_no_sta(struct ieee80211_sub_if_data *sdata, in ieee80211_ibss_rx_no_sta() argument
1203 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; in ieee80211_ibss_rx_no_sta()
1204 struct ieee80211_local *local = sdata->local; in ieee80211_ibss_rx_no_sta()
1217 sdata->name, addr); in ieee80211_ibss_rx_no_sta()
1224 if (!ether_addr_equal(bssid, sdata->u.ibss.bssid)) in ieee80211_ibss_rx_no_sta()
1228 chanctx_conf = rcu_dereference(sdata->vif.bss_conf.chanctx_conf); in ieee80211_ibss_rx_no_sta()
1237 sta = sta_info_alloc(sdata, addr, GFP_ATOMIC); in ieee80211_ibss_rx_no_sta()
1249 wiphy_work_queue(local->hw.wiphy, &sdata->work); in ieee80211_ibss_rx_no_sta()
1252 static void ieee80211_ibss_sta_expire(struct ieee80211_sub_if_data *sdata) in ieee80211_ibss_sta_expire() argument
1254 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; in ieee80211_ibss_sta_expire()
1255 struct ieee80211_local *local = sdata->local; in ieee80211_ibss_sta_expire()
1265 if (sdata != sta->sdata) in ieee80211_ibss_sta_expire()
1273 sta_dbg(sta->sdata, "expiring inactive %sSTA %pM\n", in ieee80211_ibss_sta_expire()
1277 ieee80211_send_deauth_disassoc(sdata, sta->sta.addr, in ieee80211_ibss_sta_expire()
1293 static void ieee80211_sta_merge_ibss(struct ieee80211_sub_if_data *sdata) in ieee80211_sta_merge_ibss() argument
1295 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; in ieee80211_sta_merge_ibss()
1298 sdata_assert_lock(sdata); in ieee80211_sta_merge_ibss()
1303 ieee80211_ibss_sta_expire(sdata); in ieee80211_sta_merge_ibss()
1309 if (ieee80211_sta_active_ibss(sdata)) in ieee80211_sta_merge_ibss()
1315 sdata_info(sdata, in ieee80211_sta_merge_ibss()
1319 ieee80211_request_ibss_scan(sdata, ifibss->ssid, ifibss->ssid_len, in ieee80211_sta_merge_ibss()
1323 static void ieee80211_sta_create_ibss(struct ieee80211_sub_if_data *sdata) in ieee80211_sta_create_ibss() argument
1325 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; in ieee80211_sta_create_ibss()
1330 sdata_assert_lock(sdata); in ieee80211_sta_create_ibss()
1340 bssid[i] ^= sdata->vif.addr[i]; in ieee80211_sta_create_ibss()
1345 sdata_info(sdata, "Creating new IBSS network, BSSID %pM\n", bssid); in ieee80211_sta_create_ibss()
1352 __ieee80211_sta_join_ibss(sdata, bssid, sdata->vif.bss_conf.beacon_int, in ieee80211_sta_create_ibss()
1431 static void ieee80211_sta_find_ibss(struct ieee80211_sub_if_data *sdata) in ieee80211_sta_find_ibss() argument
1433 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; in ieee80211_sta_find_ibss()
1434 struct ieee80211_local *local = sdata->local; in ieee80211_sta_find_ibss()
1441 sdata_assert_lock(sdata); in ieee80211_sta_find_ibss()
1443 active_ibss = ieee80211_sta_active_ibss(sdata); in ieee80211_sta_find_ibss()
1444 ibss_dbg(sdata, "sta_find_ibss (active_ibss=%d)\n", active_ibss); in ieee80211_sta_find_ibss()
1464 ibss_dbg(sdata, in ieee80211_sta_find_ibss()
1467 sdata_info(sdata, in ieee80211_sta_find_ibss()
1471 ieee80211_sta_join_ibss(sdata, bss); in ieee80211_sta_find_ibss()
1480 sdata_info(sdata, "Created IBSS using preconfigured BSSID %pM\n", in ieee80211_sta_find_ibss()
1482 ieee80211_sta_create_ibss(sdata); in ieee80211_sta_find_ibss()
1487 ibss_dbg(sdata, "sta_find_ibss: did not try to join ibss\n"); in ieee80211_sta_find_ibss()
1495 sdata_info(sdata, "Trigger new scan to find an IBSS to join\n"); in ieee80211_sta_find_ibss()
1504 ieee80211_request_ibss_scan(sdata, ifibss->ssid, in ieee80211_sta_find_ibss()
1508 ieee80211_request_ibss_scan(sdata, ifibss->ssid, in ieee80211_sta_find_ibss()
1517 ieee80211_sta_create_ibss(sdata); in ieee80211_sta_find_ibss()
1524 static void ieee80211_rx_mgmt_probe_req(struct ieee80211_sub_if_data *sdata, in ieee80211_rx_mgmt_probe_req() argument
1528 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; in ieee80211_rx_mgmt_probe_req()
1529 struct ieee80211_local *local = sdata->local; in ieee80211_rx_mgmt_probe_req()
1535 sdata_assert_lock(sdata); in ieee80211_rx_mgmt_probe_req()
1537 presp = sdata_dereference(ifibss->presp, sdata); in ieee80211_rx_mgmt_probe_req()
1545 ibss_dbg(sdata, "RX ProbeReq SA=%pM DA=%pM\n", mgmt->sa, mgmt->da); in ieee80211_rx_mgmt_probe_req()
1546 ibss_dbg(sdata, "\tBSSID=%pM (tx_last_beacon=%d)\n", in ieee80211_rx_mgmt_probe_req()
1560 ibss_dbg(sdata, "Invalid SSID IE in ProbeReq from %pM\n", in ieee80211_rx_mgmt_probe_req()
1580 ibss_dbg(sdata, "Sending ProbeResp to %pM\n", mgmt->sa); in ieee80211_rx_mgmt_probe_req()
1587 ieee80211_tx_skb(sdata, skb); in ieee80211_rx_mgmt_probe_req()
1591 void ieee80211_rx_mgmt_probe_beacon(struct ieee80211_sub_if_data *sdata, in ieee80211_rx_mgmt_probe_beacon() argument
1613 ieee80211_rx_bss_info(sdata, mgmt, len, rx_status, elems); in ieee80211_rx_mgmt_probe_beacon()
1618 void ieee80211_ibss_rx_queued_mgmt(struct ieee80211_sub_if_data *sdata, in ieee80211_ibss_rx_queued_mgmt() argument
1631 sdata_lock(sdata); in ieee80211_ibss_rx_queued_mgmt()
1633 if (!sdata->u.ibss.ssid_len) in ieee80211_ibss_rx_queued_mgmt()
1638 ieee80211_rx_mgmt_probe_req(sdata, skb); in ieee80211_ibss_rx_queued_mgmt()
1642 ieee80211_rx_mgmt_probe_beacon(sdata, mgmt, skb->len, in ieee80211_ibss_rx_queued_mgmt()
1646 ieee80211_rx_mgmt_auth_ibss(sdata, mgmt, skb->len); in ieee80211_ibss_rx_queued_mgmt()
1649 ieee80211_rx_mgmt_deauth_ibss(sdata, mgmt, skb->len); in ieee80211_ibss_rx_queued_mgmt()
1666 ieee80211_rx_mgmt_spectrum_mgmt(sdata, mgmt, in ieee80211_ibss_rx_queued_mgmt()
1676 sdata_unlock(sdata); in ieee80211_ibss_rx_queued_mgmt()
1679 void ieee80211_ibss_work(struct ieee80211_sub_if_data *sdata) in ieee80211_ibss_work() argument
1681 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; in ieee80211_ibss_work()
1684 sdata_lock(sdata); in ieee80211_ibss_work()
1709 ieee80211_sta_find_ibss(sdata); in ieee80211_ibss_work()
1712 ieee80211_sta_merge_ibss(sdata); in ieee80211_ibss_work()
1720 sdata_unlock(sdata); in ieee80211_ibss_work()
1725 struct ieee80211_sub_if_data *sdata = in ieee80211_ibss_timer() local
1726 from_timer(sdata, t, u.ibss.timer); in ieee80211_ibss_timer()
1728 wiphy_work_queue(sdata->local->hw.wiphy, &sdata->work); in ieee80211_ibss_timer()
1731 void ieee80211_ibss_setup_sdata(struct ieee80211_sub_if_data *sdata) in ieee80211_ibss_setup_sdata() argument
1733 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; in ieee80211_ibss_setup_sdata()
1745 struct ieee80211_sub_if_data *sdata; in ieee80211_ibss_notify_scan_completed() local
1748 list_for_each_entry(sdata, &local->interfaces, list) { in ieee80211_ibss_notify_scan_completed()
1749 if (!ieee80211_sdata_running(sdata)) in ieee80211_ibss_notify_scan_completed()
1751 if (sdata->vif.type != NL80211_IFTYPE_ADHOC) in ieee80211_ibss_notify_scan_completed()
1753 sdata->u.ibss.last_scan_completed = jiffies; in ieee80211_ibss_notify_scan_completed()
1758 int ieee80211_ibss_join(struct ieee80211_sub_if_data *sdata, in ieee80211_ibss_join() argument
1765 struct ieee80211_local *local = sdata->local; in ieee80211_ibss_join()
1777 sdata->wdev.iftype); in ieee80211_ibss_join()
1791 ret = ieee80211_check_combinations(sdata, &params->chandef, chanmode, in ieee80211_ibss_join()
1798 memcpy(sdata->u.ibss.bssid, params->bssid, ETH_ALEN); in ieee80211_ibss_join()
1799 sdata->u.ibss.fixed_bssid = true; in ieee80211_ibss_join()
1801 sdata->u.ibss.fixed_bssid = false; in ieee80211_ibss_join()
1803 sdata->u.ibss.privacy = params->privacy; in ieee80211_ibss_join()
1804 sdata->u.ibss.control_port = params->control_port; in ieee80211_ibss_join()
1805 sdata->u.ibss.userspace_handles_dfs = params->userspace_handles_dfs; in ieee80211_ibss_join()
1806 sdata->u.ibss.basic_rates = params->basic_rates; in ieee80211_ibss_join()
1807 sdata->u.ibss.last_scan_completed = jiffies; in ieee80211_ibss_join()
1814 sdata->u.ibss.basic_rates &= ~BIT(i); in ieee80211_ibss_join()
1816 memcpy(sdata->vif.bss_conf.mcast_rate, params->mcast_rate, in ieee80211_ibss_join()
1819 sdata->vif.bss_conf.beacon_int = params->beacon_interval; in ieee80211_ibss_join()
1821 sdata->u.ibss.chandef = params->chandef; in ieee80211_ibss_join()
1822 sdata->u.ibss.fixed_channel = params->channel_fixed; in ieee80211_ibss_join()
1825 sdata->u.ibss.ie = kmemdup(params->ie, params->ie_len, in ieee80211_ibss_join()
1827 if (sdata->u.ibss.ie) in ieee80211_ibss_join()
1828 sdata->u.ibss.ie_len = params->ie_len; in ieee80211_ibss_join()
1831 sdata->u.ibss.state = IEEE80211_IBSS_MLME_SEARCH; in ieee80211_ibss_join()
1832 sdata->u.ibss.ibss_join_req = jiffies; in ieee80211_ibss_join()
1834 memcpy(sdata->u.ibss.ssid, params->ssid, params->ssid_len); in ieee80211_ibss_join()
1835 sdata->u.ibss.ssid_len = params->ssid_len; in ieee80211_ibss_join()
1837 memcpy(&sdata->u.ibss.ht_capa, &params->ht_capa, in ieee80211_ibss_join()
1838 sizeof(sdata->u.ibss.ht_capa)); in ieee80211_ibss_join()
1839 memcpy(&sdata->u.ibss.ht_capa_mask, &params->ht_capa_mask, in ieee80211_ibss_join()
1840 sizeof(sdata->u.ibss.ht_capa_mask)); in ieee80211_ibss_join()
1852 sdata->vif.bss_conf.ht_operation_mode |= in ieee80211_ibss_join()
1857 ieee80211_link_info_change_notify(sdata, &sdata->deflink, changed); in ieee80211_ibss_join()
1859 sdata->deflink.smps_mode = IEEE80211_SMPS_OFF; in ieee80211_ibss_join()
1860 sdata->deflink.needed_rx_chains = local->rx_chains; in ieee80211_ibss_join()
1861 sdata->control_port_over_nl80211 = params->control_port_over_nl80211; in ieee80211_ibss_join()
1863 wiphy_work_queue(local->hw.wiphy, &sdata->work); in ieee80211_ibss_join()
1868 int ieee80211_ibss_leave(struct ieee80211_sub_if_data *sdata) in ieee80211_ibss_leave() argument
1870 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; in ieee80211_ibss_leave()
1872 ieee80211_ibss_disconnect(sdata); in ieee80211_ibss_leave()
1877 kfree(sdata->u.ibss.ie); in ieee80211_ibss_leave()
1878 sdata->u.ibss.ie = NULL; in ieee80211_ibss_leave()
1879 sdata->u.ibss.ie_len = 0; in ieee80211_ibss_leave()
1887 skb_queue_purge(&sdata->skb_queue); in ieee80211_ibss_leave()
1889 del_timer_sync(&sdata->u.ibss.timer); in ieee80211_ibss_leave()