aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/net/mac80211.h3
-rw-r--r--net/mac80211/cfg.c6
-rw-r--r--net/mac80211/debugfs_netdev.c2
-rw-r--r--net/mac80211/ieee80211_i.h3
-rw-r--r--net/mac80211/iface.c2
-rw-r--r--net/mac80211/main.c8
-rw-r--r--net/mac80211/mlme.c30
-rw-r--r--net/mac80211/tx.c16
-rw-r--r--net/mac80211/util.c6
9 files changed, 38 insertions, 38 deletions
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index fd52300b96d0..94ff3eface49 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -529,11 +529,14 @@ struct ieee80211_conf {
529 * use during the life of a virtual interface. 529 * use during the life of a virtual interface.
530 * 530 *
531 * @type: type of this virtual interface 531 * @type: type of this virtual interface
532 * @bss_conf: BSS configuration for this interface, either our own
533 * or the BSS we're associated to
532 * @drv_priv: data area for driver use, will always be aligned to 534 * @drv_priv: data area for driver use, will always be aligned to
533 * sizeof(void *). 535 * sizeof(void *).
534 */ 536 */
535struct ieee80211_vif { 537struct ieee80211_vif {
536 enum nl80211_iftype type; 538 enum nl80211_iftype type;
539 struct ieee80211_bss_conf bss_conf;
537 /* must be last */ 540 /* must be last */
538 u8 drv_priv[0] __attribute__((__aligned__(sizeof(void *)))); 541 u8 drv_priv[0] __attribute__((__aligned__(sizeof(void *))));
539}; 542};
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
index 8ea30902d5db..28382b5c7c25 100644
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
@@ -964,16 +964,16 @@ static int ieee80211_change_bss(struct wiphy *wiphy,
964 return -EINVAL; 964 return -EINVAL;
965 965
966 if (params->use_cts_prot >= 0) { 966 if (params->use_cts_prot >= 0) {
967 sdata->bss_conf.use_cts_prot = params->use_cts_prot; 967 sdata->vif.bss_conf.use_cts_prot = params->use_cts_prot;
968 changed |= BSS_CHANGED_ERP_CTS_PROT; 968 changed |= BSS_CHANGED_ERP_CTS_PROT;
969 } 969 }
970 if (params->use_short_preamble >= 0) { 970 if (params->use_short_preamble >= 0) {
971 sdata->bss_conf.use_short_preamble = 971 sdata->vif.bss_conf.use_short_preamble =
972 params->use_short_preamble; 972 params->use_short_preamble;
973 changed |= BSS_CHANGED_ERP_PREAMBLE; 973 changed |= BSS_CHANGED_ERP_PREAMBLE;
974 } 974 }
975 if (params->use_short_slot_time >= 0) { 975 if (params->use_short_slot_time >= 0) {
976 sdata->bss_conf.use_short_slot = 976 sdata->vif.bss_conf.use_short_slot =
977 params->use_short_slot_time; 977 params->use_short_slot_time;
978 changed |= BSS_CHANGED_ERP_SLOT; 978 changed |= BSS_CHANGED_ERP_SLOT;
979 } 979 }
diff --git a/net/mac80211/debugfs_netdev.c b/net/mac80211/debugfs_netdev.c
index 56f3f29385cb..c54219301724 100644
--- a/net/mac80211/debugfs_netdev.c
+++ b/net/mac80211/debugfs_netdev.c
@@ -119,7 +119,7 @@ static ssize_t ieee80211_if_fmt_flags(
119 sdata->u.sta.flags & IEEE80211_STA_AUTHENTICATED ? "AUTH\n" : "", 119 sdata->u.sta.flags & IEEE80211_STA_AUTHENTICATED ? "AUTH\n" : "",
120 sdata->u.sta.flags & IEEE80211_STA_ASSOCIATED ? "ASSOC\n" : "", 120 sdata->u.sta.flags & IEEE80211_STA_ASSOCIATED ? "ASSOC\n" : "",
121 sdata->u.sta.flags & IEEE80211_STA_PROBEREQ_POLL ? "PROBEREQ POLL\n" : "", 121 sdata->u.sta.flags & IEEE80211_STA_PROBEREQ_POLL ? "PROBEREQ POLL\n" : "",
122 sdata->bss_conf.use_cts_prot ? "CTS prot\n" : ""); 122 sdata->vif.bss_conf.use_cts_prot ? "CTS prot\n" : "");
123} 123}
124__IEEE80211_IF_FILE(flags); 124__IEEE80211_IF_FILE(flags);
125 125
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
index f1ef522bfe07..859b5b001f22 100644
--- a/net/mac80211/ieee80211_i.h
+++ b/net/mac80211/ieee80211_i.h
@@ -440,9 +440,6 @@ struct ieee80211_sub_if_data {
440 440
441 u16 sequence_number; 441 u16 sequence_number;
442 442
443 /* BSS configuration for this interface. */
444 struct ieee80211_bss_conf bss_conf;
445
446 /* 443 /*
447 * AP this belongs to: self in AP mode and 444 * AP this belongs to: self in AP mode and
448 * corresponding AP in VLAN mode, NULL for 445 * corresponding AP in VLAN mode, NULL for
diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c
index df28c5f7c9c0..cde145221b61 100644
--- a/net/mac80211/iface.c
+++ b/net/mac80211/iface.c
@@ -695,7 +695,7 @@ int ieee80211_if_change_type(struct ieee80211_sub_if_data *sdata,
695 ieee80211_setup_sdata(sdata, type); 695 ieee80211_setup_sdata(sdata, type);
696 696
697 /* reset some values that shouldn't be kept across type changes */ 697 /* reset some values that shouldn't be kept across type changes */
698 sdata->bss_conf.basic_rates = 698 sdata->vif.bss_conf.basic_rates =
699 ieee80211_mandatory_rates(sdata->local, 699 ieee80211_mandatory_rates(sdata->local,
700 sdata->local->hw.conf.channel->band); 700 sdata->local->hw.conf.channel->band);
701 sdata->drop_unencrypted = 0; 701 sdata->drop_unencrypted = 0;
diff --git a/net/mac80211/main.c b/net/mac80211/main.c
index 59be9e782699..ab8a860444af 100644
--- a/net/mac80211/main.c
+++ b/net/mac80211/main.c
@@ -249,15 +249,15 @@ void ieee80211_bss_info_change_notify(struct ieee80211_sub_if_data *sdata,
249 if (local->ops->bss_info_changed) 249 if (local->ops->bss_info_changed)
250 local->ops->bss_info_changed(local_to_hw(local), 250 local->ops->bss_info_changed(local_to_hw(local),
251 &sdata->vif, 251 &sdata->vif,
252 &sdata->bss_conf, 252 &sdata->vif.bss_conf,
253 changed); 253 changed);
254} 254}
255 255
256u32 ieee80211_reset_erp_info(struct ieee80211_sub_if_data *sdata) 256u32 ieee80211_reset_erp_info(struct ieee80211_sub_if_data *sdata)
257{ 257{
258 sdata->bss_conf.use_cts_prot = false; 258 sdata->vif.bss_conf.use_cts_prot = false;
259 sdata->bss_conf.use_short_preamble = false; 259 sdata->vif.bss_conf.use_short_preamble = false;
260 sdata->bss_conf.use_short_slot = false; 260 sdata->vif.bss_conf.use_short_slot = false;
261 return BSS_CHANGED_ERP_CTS_PROT | 261 return BSS_CHANGED_ERP_CTS_PROT |
262 BSS_CHANGED_ERP_PREAMBLE | 262 BSS_CHANGED_ERP_PREAMBLE |
263 BSS_CHANGED_ERP_SLOT; 263 BSS_CHANGED_ERP_SLOT;
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index 196dd39f6286..9c5f5c37a49e 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -572,7 +572,7 @@ static void ieee80211_sta_wmm_params(struct ieee80211_local *local,
572static u32 ieee80211_handle_bss_capability(struct ieee80211_sub_if_data *sdata, 572static u32 ieee80211_handle_bss_capability(struct ieee80211_sub_if_data *sdata,
573 u16 capab, bool erp_valid, u8 erp) 573 u16 capab, bool erp_valid, u8 erp)
574{ 574{
575 struct ieee80211_bss_conf *bss_conf = &sdata->bss_conf; 575 struct ieee80211_bss_conf *bss_conf = &sdata->vif.bss_conf;
576#ifdef CONFIG_MAC80211_VERBOSE_DEBUG 576#ifdef CONFIG_MAC80211_VERBOSE_DEBUG
577 struct ieee80211_if_sta *ifsta = &sdata->u.sta; 577 struct ieee80211_if_sta *ifsta = &sdata->u.sta;
578#endif 578#endif
@@ -718,9 +718,9 @@ static void ieee80211_set_associated(struct ieee80211_sub_if_data *sdata,
718 ifsta->ssid, ifsta->ssid_len); 718 ifsta->ssid, ifsta->ssid_len);
719 if (bss) { 719 if (bss) {
720 /* set timing information */ 720 /* set timing information */
721 sdata->bss_conf.beacon_int = bss->beacon_int; 721 sdata->vif.bss_conf.beacon_int = bss->beacon_int;
722 sdata->bss_conf.timestamp = bss->timestamp; 722 sdata->vif.bss_conf.timestamp = bss->timestamp;
723 sdata->bss_conf.dtim_period = bss->dtim_period; 723 sdata->vif.bss_conf.dtim_period = bss->dtim_period;
724 724
725 changed |= ieee80211_handle_bss_capability(sdata, 725 changed |= ieee80211_handle_bss_capability(sdata,
726 bss->capability, bss->has_erp_value, bss->erp_value); 726 bss->capability, bss->has_erp_value, bss->erp_value);
@@ -730,9 +730,9 @@ static void ieee80211_set_associated(struct ieee80211_sub_if_data *sdata,
730 730
731 if (conf->flags & IEEE80211_CONF_SUPPORT_HT_MODE) { 731 if (conf->flags & IEEE80211_CONF_SUPPORT_HT_MODE) {
732 changed |= BSS_CHANGED_HT; 732 changed |= BSS_CHANGED_HT;
733 sdata->bss_conf.assoc_ht = 1; 733 sdata->vif.bss_conf.assoc_ht = 1;
734 sdata->bss_conf.ht_cap = &conf->ht_cap; 734 sdata->vif.bss_conf.ht_cap = &conf->ht_cap;
735 sdata->bss_conf.ht_bss_conf = &conf->ht_bss_conf; 735 sdata->vif.bss_conf.ht_bss_conf = &conf->ht_bss_conf;
736 } 736 }
737 737
738 ifsta->flags |= IEEE80211_STA_PREV_BSSID_SET; 738 ifsta->flags |= IEEE80211_STA_PREV_BSSID_SET;
@@ -742,7 +742,7 @@ static void ieee80211_set_associated(struct ieee80211_sub_if_data *sdata,
742 ifsta->last_probe = jiffies; 742 ifsta->last_probe = jiffies;
743 ieee80211_led_assoc(local, 1); 743 ieee80211_led_assoc(local, 1);
744 744
745 sdata->bss_conf.assoc = 1; 745 sdata->vif.bss_conf.assoc = 1;
746 /* 746 /*
747 * For now just always ask the driver to update the basic rateset 747 * For now just always ask the driver to update the basic rateset
748 * when we have associated, we aren't checking whether it actually 748 * when we have associated, we aren't checking whether it actually
@@ -847,15 +847,15 @@ static void ieee80211_set_disassoc(struct ieee80211_sub_if_data *sdata,
847 ifsta->flags &= ~IEEE80211_STA_ASSOCIATED; 847 ifsta->flags &= ~IEEE80211_STA_ASSOCIATED;
848 changed |= ieee80211_reset_erp_info(sdata); 848 changed |= ieee80211_reset_erp_info(sdata);
849 849
850 if (sdata->bss_conf.assoc_ht) 850 if (sdata->vif.bss_conf.assoc_ht)
851 changed |= BSS_CHANGED_HT; 851 changed |= BSS_CHANGED_HT;
852 852
853 sdata->bss_conf.assoc_ht = 0; 853 sdata->vif.bss_conf.assoc_ht = 0;
854 sdata->bss_conf.ht_cap = NULL; 854 sdata->vif.bss_conf.ht_cap = NULL;
855 sdata->bss_conf.ht_bss_conf = NULL; 855 sdata->vif.bss_conf.ht_bss_conf = NULL;
856 856
857 ieee80211_led_assoc(local, 0); 857 ieee80211_led_assoc(local, 0);
858 sdata->bss_conf.assoc = 0; 858 sdata->vif.bss_conf.assoc = 0;
859 859
860 ieee80211_sta_send_apinfo(sdata, ifsta); 860 ieee80211_sta_send_apinfo(sdata, ifsta);
861 861
@@ -1182,7 +1182,7 @@ static void ieee80211_rx_mgmt_assoc_resp(struct ieee80211_sub_if_data *sdata,
1182 u64 rates, basic_rates; 1182 u64 rates, basic_rates;
1183 u16 capab_info, status_code, aid; 1183 u16 capab_info, status_code, aid;
1184 struct ieee802_11_elems elems; 1184 struct ieee802_11_elems elems;
1185 struct ieee80211_bss_conf *bss_conf = &sdata->bss_conf; 1185 struct ieee80211_bss_conf *bss_conf = &sdata->vif.bss_conf;
1186 u8 *pos; 1186 u8 *pos;
1187 int i, j; 1187 int i, j;
1188 bool have_higher_than_11mbit = false; 1188 bool have_higher_than_11mbit = false;
@@ -1324,7 +1324,7 @@ static void ieee80211_rx_mgmt_assoc_resp(struct ieee80211_sub_if_data *sdata,
1324 } 1324 }
1325 1325
1326 sta->sta.supp_rates[local->hw.conf.channel->band] = rates; 1326 sta->sta.supp_rates[local->hw.conf.channel->band] = rates;
1327 sdata->bss_conf.basic_rates = basic_rates; 1327 sdata->vif.bss_conf.basic_rates = basic_rates;
1328 1328
1329 /* cf. IEEE 802.11 9.2.12 */ 1329 /* cf. IEEE 802.11 9.2.12 */
1330 if (local->hw.conf.channel->band == IEEE80211_BAND_2GHZ && 1330 if (local->hw.conf.channel->band == IEEE80211_BAND_2GHZ &&
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
index dd440a07634e..6f3e4be97631 100644
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
@@ -116,7 +116,7 @@ static __le16 ieee80211_duration(struct ieee80211_tx_data *tx, int group_addr,
116 if (r->bitrate > txrate->bitrate) 116 if (r->bitrate > txrate->bitrate)
117 break; 117 break;
118 118
119 if (tx->sdata->bss_conf.basic_rates & BIT(i)) 119 if (tx->sdata->vif.bss_conf.basic_rates & BIT(i))
120 rate = r->bitrate; 120 rate = r->bitrate;
121 121
122 switch (sband->band) { 122 switch (sband->band) {
@@ -150,7 +150,7 @@ static __le16 ieee80211_duration(struct ieee80211_tx_data *tx, int group_addr,
150 * to closest integer */ 150 * to closest integer */
151 151
152 dur = ieee80211_frame_duration(local, 10, rate, erp, 152 dur = ieee80211_frame_duration(local, 10, rate, erp,
153 tx->sdata->bss_conf.use_short_preamble); 153 tx->sdata->vif.bss_conf.use_short_preamble);
154 154
155 if (next_frag_len) { 155 if (next_frag_len) {
156 /* Frame is fragmented: duration increases with time needed to 156 /* Frame is fragmented: duration increases with time needed to
@@ -159,7 +159,7 @@ static __le16 ieee80211_duration(struct ieee80211_tx_data *tx, int group_addr,
159 /* next fragment */ 159 /* next fragment */
160 dur += ieee80211_frame_duration(local, next_frag_len, 160 dur += ieee80211_frame_duration(local, next_frag_len,
161 txrate->bitrate, erp, 161 txrate->bitrate, erp,
162 tx->sdata->bss_conf.use_short_preamble); 162 tx->sdata->vif.bss_conf.use_short_preamble);
163 } 163 }
164 164
165 return cpu_to_le16(dur); 165 return cpu_to_le16(dur);
@@ -463,7 +463,7 @@ ieee80211_tx_h_rate_ctrl(struct ieee80211_tx_data *tx)
463 } else 463 } else
464 info->control.retries[0].rate_idx = -1; 464 info->control.retries[0].rate_idx = -1;
465 465
466 if (tx->sdata->bss_conf.use_cts_prot && 466 if (tx->sdata->vif.bss_conf.use_cts_prot &&
467 (tx->flags & IEEE80211_TX_FRAGMENTED) && (rsel.nonerp_idx >= 0)) { 467 (tx->flags & IEEE80211_TX_FRAGMENTED) && (rsel.nonerp_idx >= 0)) {
468 tx->last_frag_rate_idx = tx->rate_idx; 468 tx->last_frag_rate_idx = tx->rate_idx;
469 if (rsel.probe_idx >= 0) 469 if (rsel.probe_idx >= 0)
@@ -529,7 +529,7 @@ ieee80211_tx_h_misc(struct ieee80211_tx_data *tx)
529 if ((tx->sdata->flags & IEEE80211_SDATA_OPERATING_GMODE) && 529 if ((tx->sdata->flags & IEEE80211_SDATA_OPERATING_GMODE) &&
530 (sband->bitrates[tx->rate_idx].flags & IEEE80211_RATE_ERP_G) && 530 (sband->bitrates[tx->rate_idx].flags & IEEE80211_RATE_ERP_G) &&
531 (tx->flags & IEEE80211_TX_UNICAST) && 531 (tx->flags & IEEE80211_TX_UNICAST) &&
532 tx->sdata->bss_conf.use_cts_prot && 532 tx->sdata->vif.bss_conf.use_cts_prot &&
533 !(info->flags & IEEE80211_TX_CTL_USE_RTS_CTS)) 533 !(info->flags & IEEE80211_TX_CTL_USE_RTS_CTS))
534 info->flags |= IEEE80211_TX_CTL_USE_CTS_PROTECT; 534 info->flags |= IEEE80211_TX_CTL_USE_CTS_PROTECT;
535 535
@@ -538,7 +538,7 @@ ieee80211_tx_h_misc(struct ieee80211_tx_data *tx)
538 * available on the network at the current point in time. */ 538 * available on the network at the current point in time. */
539 if (ieee80211_is_data(hdr->frame_control) && 539 if (ieee80211_is_data(hdr->frame_control) &&
540 (sband->bitrates[tx->rate_idx].flags & IEEE80211_RATE_SHORT_PREAMBLE) && 540 (sband->bitrates[tx->rate_idx].flags & IEEE80211_RATE_SHORT_PREAMBLE) &&
541 tx->sdata->bss_conf.use_short_preamble && 541 tx->sdata->vif.bss_conf.use_short_preamble &&
542 (!tx->sta || test_sta_flags(tx->sta, WLAN_STA_SHORT_PREAMBLE))) { 542 (!tx->sta || test_sta_flags(tx->sta, WLAN_STA_SHORT_PREAMBLE))) {
543 info->flags |= IEEE80211_TX_CTL_SHORT_PREAMBLE; 543 info->flags |= IEEE80211_TX_CTL_SHORT_PREAMBLE;
544 } 544 }
@@ -558,7 +558,7 @@ ieee80211_tx_h_misc(struct ieee80211_tx_data *tx)
558 for (idx = 0; idx < sband->n_bitrates; idx++) { 558 for (idx = 0; idx < sband->n_bitrates; idx++) {
559 if (sband->bitrates[idx].bitrate > rate->bitrate) 559 if (sband->bitrates[idx].bitrate > rate->bitrate)
560 continue; 560 continue;
561 if (tx->sdata->bss_conf.basic_rates & BIT(idx) && 561 if (tx->sdata->vif.bss_conf.basic_rates & BIT(idx) &&
562 (baserate < 0 || 562 (baserate < 0 ||
563 (sband->bitrates[baserate].bitrate 563 (sband->bitrates[baserate].bitrate
564 < sband->bitrates[idx].bitrate))) 564 < sband->bitrates[idx].bitrate)))
@@ -1977,7 +1977,7 @@ struct sk_buff *ieee80211_beacon_get(struct ieee80211_hw *hw,
1977 info->flags |= IEEE80211_TX_CTL_NO_ACK; 1977 info->flags |= IEEE80211_TX_CTL_NO_ACK;
1978 info->flags |= IEEE80211_TX_CTL_CLEAR_PS_FILT; 1978 info->flags |= IEEE80211_TX_CTL_CLEAR_PS_FILT;
1979 info->flags |= IEEE80211_TX_CTL_ASSIGN_SEQ; 1979 info->flags |= IEEE80211_TX_CTL_ASSIGN_SEQ;
1980 if (sdata->bss_conf.use_short_preamble && 1980 if (sdata->vif.bss_conf.use_short_preamble &&
1981 sband->bitrates[rsel.rate_idx].flags & IEEE80211_RATE_SHORT_PREAMBLE) 1981 sband->bitrates[rsel.rate_idx].flags & IEEE80211_RATE_SHORT_PREAMBLE)
1982 info->flags |= IEEE80211_TX_CTL_SHORT_PREAMBLE; 1982 info->flags |= IEEE80211_TX_CTL_SHORT_PREAMBLE;
1983 1983
diff --git a/net/mac80211/util.c b/net/mac80211/util.c
index 3288c3de67ca..ec8b6335f0c1 100644
--- a/net/mac80211/util.c
+++ b/net/mac80211/util.c
@@ -239,7 +239,7 @@ __le16 ieee80211_generic_frame_duration(struct ieee80211_hw *hw,
239 erp = 0; 239 erp = 0;
240 if (vif) { 240 if (vif) {
241 sdata = vif_to_sdata(vif); 241 sdata = vif_to_sdata(vif);
242 short_preamble = sdata->bss_conf.use_short_preamble; 242 short_preamble = sdata->vif.bss_conf.use_short_preamble;
243 if (sdata->flags & IEEE80211_SDATA_OPERATING_GMODE) 243 if (sdata->flags & IEEE80211_SDATA_OPERATING_GMODE)
244 erp = rate->flags & IEEE80211_RATE_ERP_G; 244 erp = rate->flags & IEEE80211_RATE_ERP_G;
245 } 245 }
@@ -272,7 +272,7 @@ __le16 ieee80211_rts_duration(struct ieee80211_hw *hw,
272 erp = 0; 272 erp = 0;
273 if (vif) { 273 if (vif) {
274 sdata = vif_to_sdata(vif); 274 sdata = vif_to_sdata(vif);
275 short_preamble = sdata->bss_conf.use_short_preamble; 275 short_preamble = sdata->vif.bss_conf.use_short_preamble;
276 if (sdata->flags & IEEE80211_SDATA_OPERATING_GMODE) 276 if (sdata->flags & IEEE80211_SDATA_OPERATING_GMODE)
277 erp = rate->flags & IEEE80211_RATE_ERP_G; 277 erp = rate->flags & IEEE80211_RATE_ERP_G;
278 } 278 }
@@ -312,7 +312,7 @@ __le16 ieee80211_ctstoself_duration(struct ieee80211_hw *hw,
312 erp = 0; 312 erp = 0;
313 if (vif) { 313 if (vif) {
314 sdata = vif_to_sdata(vif); 314 sdata = vif_to_sdata(vif);
315 short_preamble = sdata->bss_conf.use_short_preamble; 315 short_preamble = sdata->vif.bss_conf.use_short_preamble;
316 if (sdata->flags & IEEE80211_SDATA_OPERATING_GMODE) 316 if (sdata->flags & IEEE80211_SDATA_OPERATING_GMODE)
317 erp = rate->flags & IEEE80211_RATE_ERP_G; 317 erp = rate->flags & IEEE80211_RATE_ERP_G;
318 } 318 }