diff options
author | Johannes Berg <johannes@sipsolutions.net> | 2010-07-19 10:39:04 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2010-07-20 16:02:58 -0400 |
commit | 4ced3f74dae18715920cb680098ec7ff4345d0a3 (patch) | |
tree | 4a1b35285921fb25e01363af48a8c7db7423098d /include | |
parent | 875ae5f68883c75aad826e715df8ec0619551a07 (diff) |
mac80211: move QoS-enable to BSS info
Ever since
commit e1b3ec1a2a336c328c336cfa5485a5f0484cc90d
Author: Stanislaw Gruszka <sgruszka@redhat.com>
Date: Mon Mar 29 12:18:34 2010 +0200
mac80211: explicitly disable/enable QoS
mac80211 is telling drivers, in particular
iwlwifi, whether QoS is enabled or not.
However, this is only relevant for station mode,
since only then will any device send nullfunc
frames and need to know whether they should be
QoS frames or not. In other modes, there are
(currently) no frames the device is supposed to
send.
When you now consider virtual interfaces, it
becomes apparent that the current mechanism is
inadequate since it enables/disables QoS on a
global scale, where for nullfunc frames it has
to be on a per-interface scale.
Due to the above considerations, we can change
the way mac80211 advertises the QoS state to
drivers to only ever advertise it as "off" in
station mode, and make it a per-BSS setting.
Tested-by: Stanislaw Gruszka <sgruszka@redhat.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'include')
-rw-r--r-- | include/net/mac80211.h | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/include/net/mac80211.h b/include/net/mac80211.h index 7f256e23c57f..20d372edec29 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h | |||
@@ -147,6 +147,8 @@ struct ieee80211_low_level_stats { | |||
147 | * @BSS_CHANGED_CQM: Connection quality monitor config changed | 147 | * @BSS_CHANGED_CQM: Connection quality monitor config changed |
148 | * @BSS_CHANGED_IBSS: IBSS join status changed | 148 | * @BSS_CHANGED_IBSS: IBSS join status changed |
149 | * @BSS_CHANGED_ARP_FILTER: Hardware ARP filter address list or state changed. | 149 | * @BSS_CHANGED_ARP_FILTER: Hardware ARP filter address list or state changed. |
150 | * @BSS_CHANGED_QOS: QoS for this association was enabled/disabled. Note | ||
151 | * that it is only ever disabled for station mode. | ||
150 | */ | 152 | */ |
151 | enum ieee80211_bss_change { | 153 | enum ieee80211_bss_change { |
152 | BSS_CHANGED_ASSOC = 1<<0, | 154 | BSS_CHANGED_ASSOC = 1<<0, |
@@ -162,6 +164,7 @@ enum ieee80211_bss_change { | |||
162 | BSS_CHANGED_CQM = 1<<10, | 164 | BSS_CHANGED_CQM = 1<<10, |
163 | BSS_CHANGED_IBSS = 1<<11, | 165 | BSS_CHANGED_IBSS = 1<<11, |
164 | BSS_CHANGED_ARP_FILTER = 1<<12, | 166 | BSS_CHANGED_ARP_FILTER = 1<<12, |
167 | BSS_CHANGED_QOS = 1<<13, | ||
165 | 168 | ||
166 | /* when adding here, make sure to change ieee80211_reconfig */ | 169 | /* when adding here, make sure to change ieee80211_reconfig */ |
167 | }; | 170 | }; |
@@ -217,6 +220,7 @@ enum ieee80211_bss_change { | |||
217 | * filter ARP queries based on the @arp_addr_list, if disabled, the | 220 | * filter ARP queries based on the @arp_addr_list, if disabled, the |
218 | * hardware must not perform any ARP filtering. Note, that the filter will | 221 | * hardware must not perform any ARP filtering. Note, that the filter will |
219 | * be enabled also in promiscuous mode. | 222 | * be enabled also in promiscuous mode. |
223 | * @qos: This is a QoS-enabled BSS. | ||
220 | */ | 224 | */ |
221 | struct ieee80211_bss_conf { | 225 | struct ieee80211_bss_conf { |
222 | const u8 *bssid; | 226 | const u8 *bssid; |
@@ -240,6 +244,7 @@ struct ieee80211_bss_conf { | |||
240 | __be32 arp_addr_list[IEEE80211_BSS_ARP_ADDR_LIST_LEN]; | 244 | __be32 arp_addr_list[IEEE80211_BSS_ARP_ADDR_LIST_LEN]; |
241 | u8 arp_addr_cnt; | 245 | u8 arp_addr_cnt; |
242 | bool arp_filter_enabled; | 246 | bool arp_filter_enabled; |
247 | bool qos; | ||
243 | }; | 248 | }; |
244 | 249 | ||
245 | /** | 250 | /** |
@@ -620,15 +625,11 @@ struct ieee80211_rx_status { | |||
620 | * may turn the device off as much as possible. Typically, this flag will | 625 | * may turn the device off as much as possible. Typically, this flag will |
621 | * be set when an interface is set UP but not associated or scanning, but | 626 | * be set when an interface is set UP but not associated or scanning, but |
622 | * it can also be unset in that case when monitor interfaces are active. | 627 | * it can also be unset in that case when monitor interfaces are active. |
623 | * @IEEE80211_CONF_QOS: Enable 802.11e QoS also know as WMM (Wireless | ||
624 | * Multimedia). On some drivers (iwlwifi is one of know) we have | ||
625 | * to enable/disable QoS explicitly. | ||
626 | */ | 628 | */ |
627 | enum ieee80211_conf_flags { | 629 | enum ieee80211_conf_flags { |
628 | IEEE80211_CONF_MONITOR = (1<<0), | 630 | IEEE80211_CONF_MONITOR = (1<<0), |
629 | IEEE80211_CONF_PS = (1<<1), | 631 | IEEE80211_CONF_PS = (1<<1), |
630 | IEEE80211_CONF_IDLE = (1<<2), | 632 | IEEE80211_CONF_IDLE = (1<<2), |
631 | IEEE80211_CONF_QOS = (1<<3), | ||
632 | }; | 633 | }; |
633 | 634 | ||
634 | 635 | ||
@@ -643,7 +644,6 @@ enum ieee80211_conf_flags { | |||
643 | * @IEEE80211_CONF_CHANGE_RETRY_LIMITS: retry limits changed | 644 | * @IEEE80211_CONF_CHANGE_RETRY_LIMITS: retry limits changed |
644 | * @IEEE80211_CONF_CHANGE_IDLE: Idle flag changed | 645 | * @IEEE80211_CONF_CHANGE_IDLE: Idle flag changed |
645 | * @IEEE80211_CONF_CHANGE_SMPS: Spatial multiplexing powersave mode changed | 646 | * @IEEE80211_CONF_CHANGE_SMPS: Spatial multiplexing powersave mode changed |
646 | * @IEEE80211_CONF_CHANGE_QOS: Quality of service was enabled or disabled | ||
647 | */ | 647 | */ |
648 | enum ieee80211_conf_changed { | 648 | enum ieee80211_conf_changed { |
649 | IEEE80211_CONF_CHANGE_SMPS = BIT(1), | 649 | IEEE80211_CONF_CHANGE_SMPS = BIT(1), |
@@ -654,7 +654,6 @@ enum ieee80211_conf_changed { | |||
654 | IEEE80211_CONF_CHANGE_CHANNEL = BIT(6), | 654 | IEEE80211_CONF_CHANGE_CHANNEL = BIT(6), |
655 | IEEE80211_CONF_CHANGE_RETRY_LIMITS = BIT(7), | 655 | IEEE80211_CONF_CHANGE_RETRY_LIMITS = BIT(7), |
656 | IEEE80211_CONF_CHANGE_IDLE = BIT(8), | 656 | IEEE80211_CONF_CHANGE_IDLE = BIT(8), |
657 | IEEE80211_CONF_CHANGE_QOS = BIT(9), | ||
658 | }; | 657 | }; |
659 | 658 | ||
660 | /** | 659 | /** |