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