• Home
  • Raw
  • Download

Lines Matching refs:sdata

37 static void __ieee80211_sta_join_ibss(struct ieee80211_sub_if_data *sdata,  in __ieee80211_sta_join_ibss()  argument
44 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; in __ieee80211_sta_join_ibss()
45 struct ieee80211_local *local = sdata->local; in __ieee80211_sta_join_ibss()
60 drv_reset_tsf(local, sdata); in __ieee80211_sta_join_ibss()
63 sta_info_flush(sdata); in __ieee80211_sta_join_ibss()
66 if (sdata->vif.bss_conf.ibss_joined) { in __ieee80211_sta_join_ibss()
67 sdata->vif.bss_conf.ibss_joined = false; in __ieee80211_sta_join_ibss()
68 sdata->vif.bss_conf.ibss_creator = false; in __ieee80211_sta_join_ibss()
69 sdata->vif.bss_conf.enable_beacon = false; in __ieee80211_sta_join_ibss()
70 netif_carrier_off(sdata->dev); in __ieee80211_sta_join_ibss()
71 ieee80211_bss_info_change_notify(sdata, in __ieee80211_sta_join_ibss()
82 sdata->drop_unencrypted = capability & WLAN_CAPABILITY_PRIVACY ? 1 : 0; in __ieee80211_sta_join_ibss()
90 ieee80211_vif_release_channel(sdata); in __ieee80211_sta_join_ibss()
91 if (ieee80211_vif_use_channel(sdata, &chandef, in __ieee80211_sta_join_ibss()
95 sdata_info(sdata, "Failed to join IBSS, no channel context\n"); in __ieee80211_sta_join_ibss()
124 memcpy(mgmt->sa, sdata->vif.addr, ETH_ALEN); in __ieee80211_sta_join_ibss()
209 sdata->vif.bss_conf.enable_beacon = true; in __ieee80211_sta_join_ibss()
210 sdata->vif.bss_conf.beacon_int = beacon_int; in __ieee80211_sta_join_ibss()
211 sdata->vif.bss_conf.basic_rates = basic_rates; in __ieee80211_sta_join_ibss()
212 sdata->vif.bss_conf.ssid_len = ifibss->ssid_len; in __ieee80211_sta_join_ibss()
213 memcpy(sdata->vif.bss_conf.ssid, ifibss->ssid, ifibss->ssid_len); in __ieee80211_sta_join_ibss()
215 bss_change |= ieee80211_reset_erp_info(sdata); in __ieee80211_sta_join_ibss()
234 sdata->vif.bss_conf.use_short_slot = chan->band == IEEE80211_BAND_5GHZ; in __ieee80211_sta_join_ibss()
237 sdata->vif.bss_conf.ibss_joined = true; in __ieee80211_sta_join_ibss()
238 sdata->vif.bss_conf.ibss_creator = creator; in __ieee80211_sta_join_ibss()
239 ieee80211_bss_info_change_notify(sdata, bss_change); in __ieee80211_sta_join_ibss()
241 ieee80211_sta_def_wmm_params(sdata, sband->n_bitrates, supp_rates); in __ieee80211_sta_join_ibss()
250 netif_carrier_on(sdata->dev); in __ieee80211_sta_join_ibss()
251 cfg80211_ibss_joined(sdata->dev, ifibss->bssid, GFP_KERNEL); in __ieee80211_sta_join_ibss()
254 static void ieee80211_sta_join_ibss(struct ieee80211_sub_if_data *sdata, in ieee80211_sta_join_ibss() argument
266 lockdep_assert_held(&sdata->u.ibss.mtx); in ieee80211_sta_join_ibss()
271 sband = sdata->local->hw.wiphy->bands[cbss->channel->band]; in ieee80211_sta_join_ibss()
293 __ieee80211_sta_join_ibss(sdata, cbss->bssid, in ieee80211_sta_join_ibss()
305 struct ieee80211_sub_if_data *sdata = sta->sdata; in ieee80211_ibss_finish_sta() local
310 ibss_dbg(sdata, "Adding new IBSS station %pM\n", addr); in ieee80211_ibss_finish_sta()
316 if (!sta->sdata->u.ibss.control_port) in ieee80211_ibss_finish_sta()
323 return sta_info_get(sdata, addr); in ieee80211_ibss_finish_sta()
324 if (auth && !sdata->u.ibss.auth_frame_registrations) { in ieee80211_ibss_finish_sta()
325 ibss_dbg(sdata, in ieee80211_ibss_finish_sta()
327 sdata->vif.addr, addr, sdata->u.ibss.bssid); in ieee80211_ibss_finish_sta()
328 ieee80211_send_auth(sdata, 1, WLAN_AUTH_OPEN, 0, NULL, 0, in ieee80211_ibss_finish_sta()
329 addr, sdata->u.ibss.bssid, NULL, 0, 0, 0); in ieee80211_ibss_finish_sta()
335 ieee80211_ibss_add_sta(struct ieee80211_sub_if_data *sdata, in ieee80211_ibss_add_sta() argument
340 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; in ieee80211_ibss_add_sta()
341 struct ieee80211_local *local = sdata->local; in ieee80211_ibss_add_sta()
352 sdata->name, addr); in ieee80211_ibss_add_sta()
362 if (!ether_addr_equal(bssid, sdata->u.ibss.bssid)) { in ieee80211_ibss_add_sta()
368 chanctx_conf = rcu_dereference(sdata->vif.chanctx_conf); in ieee80211_ibss_add_sta()
374 sta = sta_info_alloc(sdata, addr, GFP_KERNEL); in ieee80211_ibss_add_sta()
389 static void ieee80211_rx_mgmt_deauth_ibss(struct ieee80211_sub_if_data *sdata, in ieee80211_rx_mgmt_deauth_ibss() argument
398 ibss_dbg(sdata, "RX DeAuth SA=%pM DA=%pM BSSID=%pM (reason: %d)\n", in ieee80211_rx_mgmt_deauth_ibss()
400 sta_info_destroy_addr(sdata, mgmt->sa); in ieee80211_rx_mgmt_deauth_ibss()
403 static void ieee80211_rx_mgmt_auth_ibss(struct ieee80211_sub_if_data *sdata, in ieee80211_rx_mgmt_auth_ibss() argument
411 lockdep_assert_held(&sdata->u.ibss.mtx); in ieee80211_rx_mgmt_auth_ibss()
419 ibss_dbg(sdata, in ieee80211_rx_mgmt_auth_ibss()
426 sta_info_destroy_addr(sdata, mgmt->sa); in ieee80211_rx_mgmt_auth_ibss()
427 sta = ieee80211_ibss_add_sta(sdata, mgmt->bssid, mgmt->sa, 0, false); in ieee80211_rx_mgmt_auth_ibss()
435 ieee80211_send_deauth_disassoc(sdata, sdata->u.ibss.bssid, in ieee80211_rx_mgmt_auth_ibss()
448 ieee80211_send_auth(sdata, 2, WLAN_AUTH_OPEN, 0, NULL, 0, in ieee80211_rx_mgmt_auth_ibss()
449 mgmt->sa, sdata->u.ibss.bssid, NULL, 0, 0, 0); in ieee80211_rx_mgmt_auth_ibss()
452 static void ieee80211_rx_bss_info(struct ieee80211_sub_if_data *sdata, in ieee80211_rx_bss_info() argument
457 struct ieee80211_local *local = sdata->local; in ieee80211_rx_bss_info()
480 if (sdata->vif.type == NL80211_IFTYPE_ADHOC && in ieee80211_rx_bss_info()
481 ether_addr_equal(mgmt->bssid, sdata->u.ibss.bssid)) { in ieee80211_rx_bss_info()
484 sta = sta_info_get(sdata, mgmt->sa); in ieee80211_rx_bss_info()
498 ibss_dbg(sdata, in ieee80211_rx_bss_info()
506 sta = ieee80211_ibss_add_sta(sdata, mgmt->bssid, in ieee80211_rx_bss_info()
515 sdata->u.ibss.channel_type != NL80211_CHAN_NO_HT) { in ieee80211_rx_bss_info()
531 sdata->u.ibss.channel_type) in ieee80211_rx_bss_info()
536 sdata, sband, &htcap_ie, sta); in ieee80211_rx_bss_info()
540 drv_sta_rc_update(local, sdata, &sta->sta, in ieee80211_rx_bss_info()
561 if (sdata->u.ibss.fixed_bssid) in ieee80211_rx_bss_info()
569 if (sdata->u.ibss.fixed_channel && in ieee80211_rx_bss_info()
570 sdata->u.ibss.channel != cbss->channel) in ieee80211_rx_bss_info()
574 if (elems->ssid_len != sdata->u.ibss.ssid_len || in ieee80211_rx_bss_info()
575 memcmp(elems->ssid, sdata->u.ibss.ssid, in ieee80211_rx_bss_info()
576 sdata->u.ibss.ssid_len)) in ieee80211_rx_bss_info()
580 if (ether_addr_equal(cbss->bssid, sdata->u.ibss.bssid)) in ieee80211_rx_bss_info()
593 rx_timestamp = drv_get_tsf(local, sdata); in ieee80211_rx_bss_info()
596 ibss_dbg(sdata, in ieee80211_rx_bss_info()
605 ibss_dbg(sdata, in ieee80211_rx_bss_info()
608 ieee80211_sta_join_ibss(sdata, bss); in ieee80211_rx_bss_info()
610 ieee80211_ibss_add_sta(sdata, mgmt->bssid, mgmt->sa, in ieee80211_rx_bss_info()
619 void ieee80211_ibss_rx_no_sta(struct ieee80211_sub_if_data *sdata, in ieee80211_ibss_rx_no_sta() argument
623 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; in ieee80211_ibss_rx_no_sta()
624 struct ieee80211_local *local = sdata->local; in ieee80211_ibss_rx_no_sta()
635 sdata->name, addr); in ieee80211_ibss_rx_no_sta()
642 if (!ether_addr_equal(bssid, sdata->u.ibss.bssid)) in ieee80211_ibss_rx_no_sta()
646 chanctx_conf = rcu_dereference(sdata->vif.chanctx_conf); in ieee80211_ibss_rx_no_sta()
654 sta = sta_info_alloc(sdata, addr, GFP_ATOMIC); in ieee80211_ibss_rx_no_sta()
667 ieee80211_queue_work(&local->hw, &sdata->work); in ieee80211_ibss_rx_no_sta()
670 static int ieee80211_sta_active_ibss(struct ieee80211_sub_if_data *sdata) in ieee80211_sta_active_ibss() argument
672 struct ieee80211_local *local = sdata->local; in ieee80211_sta_active_ibss()
676 lockdep_assert_held(&sdata->u.ibss.mtx); in ieee80211_sta_active_ibss()
681 if (sta->sdata == sdata && in ieee80211_sta_active_ibss()
698 static void ieee80211_sta_merge_ibss(struct ieee80211_sub_if_data *sdata) in ieee80211_sta_merge_ibss() argument
700 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; in ieee80211_sta_merge_ibss()
707 ieee80211_sta_expire(sdata, IEEE80211_IBSS_INACTIVITY_LIMIT); in ieee80211_sta_merge_ibss()
713 if (ieee80211_sta_active_ibss(sdata)) in ieee80211_sta_merge_ibss()
719 sdata_info(sdata, in ieee80211_sta_merge_ibss()
722 ieee80211_request_ibss_scan(sdata, ifibss->ssid, ifibss->ssid_len, in ieee80211_sta_merge_ibss()
726 static void ieee80211_sta_create_ibss(struct ieee80211_sub_if_data *sdata) in ieee80211_sta_create_ibss() argument
728 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; in ieee80211_sta_create_ibss()
743 bssid[i] ^= sdata->vif.addr[i]; in ieee80211_sta_create_ibss()
748 sdata_info(sdata, "Creating new IBSS network, BSSID %pM\n", bssid); in ieee80211_sta_create_ibss()
755 sdata->drop_unencrypted = 0; in ieee80211_sta_create_ibss()
757 __ieee80211_sta_join_ibss(sdata, bssid, sdata->vif.bss_conf.beacon_int, in ieee80211_sta_create_ibss()
766 static void ieee80211_sta_find_ibss(struct ieee80211_sub_if_data *sdata) in ieee80211_sta_find_ibss() argument
768 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; in ieee80211_sta_find_ibss()
769 struct ieee80211_local *local = sdata->local; in ieee80211_sta_find_ibss()
778 active_ibss = ieee80211_sta_active_ibss(sdata); in ieee80211_sta_find_ibss()
779 ibss_dbg(sdata, "sta_find_ibss (active_ibss=%d)\n", active_ibss); in ieee80211_sta_find_ibss()
802 ibss_dbg(sdata, in ieee80211_sta_find_ibss()
805 sdata_info(sdata, in ieee80211_sta_find_ibss()
809 ieee80211_sta_join_ibss(sdata, bss); in ieee80211_sta_find_ibss()
814 ibss_dbg(sdata, "sta_find_ibss: did not try to join ibss\n"); in ieee80211_sta_find_ibss()
819 sdata_info(sdata, "Trigger new scan to find an IBSS to join\n"); in ieee80211_sta_find_ibss()
821 ieee80211_request_ibss_scan(sdata, ifibss->ssid, in ieee80211_sta_find_ibss()
828 ieee80211_sta_create_ibss(sdata); in ieee80211_sta_find_ibss()
835 static void ieee80211_rx_mgmt_probe_req(struct ieee80211_sub_if_data *sdata, in ieee80211_rx_mgmt_probe_req() argument
839 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; in ieee80211_rx_mgmt_probe_req()
840 struct ieee80211_local *local = sdata->local; in ieee80211_rx_mgmt_probe_req()
857 ibss_dbg(sdata, in ieee80211_rx_mgmt_probe_req()
872 ibss_dbg(sdata, "Invalid SSID IE in ProbeReq from %pM\n", in ieee80211_rx_mgmt_probe_req()
892 ibss_dbg(sdata, "Sending ProbeResp to %pM\n", mgmt->sa); in ieee80211_rx_mgmt_probe_req()
894 ieee80211_tx_skb(sdata, skb); in ieee80211_rx_mgmt_probe_req()
898 void ieee80211_rx_mgmt_probe_beacon(struct ieee80211_sub_if_data *sdata, in ieee80211_rx_mgmt_probe_beacon() argument
919 ieee80211_rx_bss_info(sdata, mgmt, len, rx_status, &elems); in ieee80211_rx_mgmt_probe_beacon()
922 void ieee80211_ibss_rx_queued_mgmt(struct ieee80211_sub_if_data *sdata, in ieee80211_ibss_rx_queued_mgmt() argument
933 mutex_lock(&sdata->u.ibss.mtx); in ieee80211_ibss_rx_queued_mgmt()
935 if (!sdata->u.ibss.ssid_len) in ieee80211_ibss_rx_queued_mgmt()
940 ieee80211_rx_mgmt_probe_req(sdata, skb); in ieee80211_ibss_rx_queued_mgmt()
944 ieee80211_rx_mgmt_probe_beacon(sdata, mgmt, skb->len, in ieee80211_ibss_rx_queued_mgmt()
948 ieee80211_rx_mgmt_auth_ibss(sdata, mgmt, skb->len); in ieee80211_ibss_rx_queued_mgmt()
951 ieee80211_rx_mgmt_deauth_ibss(sdata, mgmt, skb->len); in ieee80211_ibss_rx_queued_mgmt()
956 mutex_unlock(&sdata->u.ibss.mtx); in ieee80211_ibss_rx_queued_mgmt()
959 void ieee80211_ibss_work(struct ieee80211_sub_if_data *sdata) in ieee80211_ibss_work() argument
961 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; in ieee80211_ibss_work()
989 ieee80211_sta_find_ibss(sdata); in ieee80211_ibss_work()
992 ieee80211_sta_merge_ibss(sdata); in ieee80211_ibss_work()
1005 struct ieee80211_sub_if_data *sdata = in ieee80211_ibss_timer() local
1008 ieee80211_queue_work(&sdata->local->hw, &sdata->work); in ieee80211_ibss_timer()
1011 void ieee80211_ibss_setup_sdata(struct ieee80211_sub_if_data *sdata) in ieee80211_ibss_setup_sdata() argument
1013 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; in ieee80211_ibss_setup_sdata()
1016 (unsigned long) sdata); in ieee80211_ibss_setup_sdata()
1025 struct ieee80211_sub_if_data *sdata; in ieee80211_ibss_notify_scan_completed() local
1028 list_for_each_entry(sdata, &local->interfaces, list) { in ieee80211_ibss_notify_scan_completed()
1029 if (!ieee80211_sdata_running(sdata)) in ieee80211_ibss_notify_scan_completed()
1031 if (sdata->vif.type != NL80211_IFTYPE_ADHOC) in ieee80211_ibss_notify_scan_completed()
1033 sdata->u.ibss.last_scan_completed = jiffies; in ieee80211_ibss_notify_scan_completed()
1034 ieee80211_queue_work(&local->hw, &sdata->work); in ieee80211_ibss_notify_scan_completed()
1039 int ieee80211_ibss_join(struct ieee80211_sub_if_data *sdata, in ieee80211_ibss_join() argument
1044 mutex_lock(&sdata->u.ibss.mtx); in ieee80211_ibss_join()
1047 memcpy(sdata->u.ibss.bssid, params->bssid, ETH_ALEN); in ieee80211_ibss_join()
1048 sdata->u.ibss.fixed_bssid = true; in ieee80211_ibss_join()
1050 sdata->u.ibss.fixed_bssid = false; in ieee80211_ibss_join()
1052 sdata->u.ibss.privacy = params->privacy; in ieee80211_ibss_join()
1053 sdata->u.ibss.control_port = params->control_port; in ieee80211_ibss_join()
1054 sdata->u.ibss.basic_rates = params->basic_rates; in ieee80211_ibss_join()
1055 memcpy(sdata->vif.bss_conf.mcast_rate, params->mcast_rate, in ieee80211_ibss_join()
1058 sdata->vif.bss_conf.beacon_int = params->beacon_interval; in ieee80211_ibss_join()
1060 sdata->u.ibss.channel = params->chandef.chan; in ieee80211_ibss_join()
1061 sdata->u.ibss.channel_type = in ieee80211_ibss_join()
1063 sdata->u.ibss.fixed_channel = params->channel_fixed; in ieee80211_ibss_join()
1066 sdata->u.ibss.ie = kmemdup(params->ie, params->ie_len, in ieee80211_ibss_join()
1068 if (sdata->u.ibss.ie) in ieee80211_ibss_join()
1069 sdata->u.ibss.ie_len = params->ie_len; in ieee80211_ibss_join()
1072 sdata->u.ibss.state = IEEE80211_IBSS_MLME_SEARCH; in ieee80211_ibss_join()
1073 sdata->u.ibss.ibss_join_req = jiffies; in ieee80211_ibss_join()
1075 memcpy(sdata->u.ibss.ssid, params->ssid, params->ssid_len); in ieee80211_ibss_join()
1076 sdata->u.ibss.ssid_len = params->ssid_len; in ieee80211_ibss_join()
1078 mutex_unlock(&sdata->u.ibss.mtx); in ieee80211_ibss_join()
1090 sdata->vif.bss_conf.ht_operation_mode |= in ieee80211_ibss_join()
1095 ieee80211_bss_info_change_notify(sdata, changed); in ieee80211_ibss_join()
1097 sdata->smps_mode = IEEE80211_SMPS_OFF; in ieee80211_ibss_join()
1098 sdata->needed_rx_chains = sdata->local->rx_chains; in ieee80211_ibss_join()
1100 ieee80211_queue_work(&sdata->local->hw, &sdata->work); in ieee80211_ibss_join()
1105 int ieee80211_ibss_leave(struct ieee80211_sub_if_data *sdata) in ieee80211_ibss_leave() argument
1107 struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; in ieee80211_ibss_leave()
1108 struct ieee80211_local *local = sdata->local; in ieee80211_ibss_leave()
1115 mutex_lock(&sdata->u.ibss.mtx); in ieee80211_ibss_leave()
1117 active_ibss = ieee80211_sta_active_ibss(sdata); in ieee80211_ibss_leave()
1141 sta_info_flush(sdata); in ieee80211_ibss_leave()
1155 netif_carrier_off(sdata->dev); in ieee80211_ibss_leave()
1158 kfree(sdata->u.ibss.ie); in ieee80211_ibss_leave()
1160 lockdep_is_held(&sdata->u.ibss.mtx)); in ieee80211_ibss_leave()
1161 RCU_INIT_POINTER(sdata->u.ibss.presp, NULL); in ieee80211_ibss_leave()
1162 sdata->vif.bss_conf.ibss_joined = false; in ieee80211_ibss_leave()
1163 sdata->vif.bss_conf.ibss_creator = false; in ieee80211_ibss_leave()
1164 sdata->vif.bss_conf.enable_beacon = false; in ieee80211_ibss_leave()
1165 sdata->vif.bss_conf.ssid_len = 0; in ieee80211_ibss_leave()
1166 clear_bit(SDATA_STATE_OFFCHANNEL_BEACON_STOPPED, &sdata->state); in ieee80211_ibss_leave()
1167 ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BEACON_ENABLED | in ieee80211_ibss_leave()
1172 skb_queue_purge(&sdata->skb_queue); in ieee80211_ibss_leave()
1174 del_timer_sync(&sdata->u.ibss.timer); in ieee80211_ibss_leave()
1176 mutex_unlock(&sdata->u.ibss.mtx); in ieee80211_ibss_leave()