aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorJohannes Berg <johannes@sipsolutions.net>2010-07-19 10:39:04 -0400
committerJohn W. Linville <linville@tuxdriver.com>2010-07-20 16:02:58 -0400
commit4ced3f74dae18715920cb680098ec7ff4345d0a3 (patch)
tree4a1b35285921fb25e01363af48a8c7db7423098d /include
parent875ae5f68883c75aad826e715df8ec0619551a07 (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.h11
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 */
151enum ieee80211_bss_change { 153enum 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 */
221struct ieee80211_bss_conf { 225struct 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 */
627enum ieee80211_conf_flags { 629enum 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 */
648enum ieee80211_conf_changed { 648enum 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/**