aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2011-09-29 10:04:35 -0400
committerJohn W. Linville <linville@tuxdriver.com>2011-09-30 15:57:18 -0400
commitdeeaee197b0fa694ba6c8f02cdb57b3be7115b4f (patch)
tree9cdd2ce5786ceb60c68327da441913b56de9726c /include
parentce662b44ce22e3e8886104d5feb2a451d7ba560f (diff)
mac80211: reply only once to each PS-poll
If a PS-poll frame is retried (but was received) there is no way to detect that since it has no sequence number. As a consequence, the standard asks us to not react to PS-poll frames until the response to one made it out (was ACKed or lost). Implement this by using the WLAN_STA_SP flags to also indicate a PS-Poll "service period" and the IEEE80211_TX_STATUS_EOSP flag for the response packet to indicate the end of the "SP" as usual. We could use separate flags, but that will most likely completely confuse drivers, and while the standard doesn't exclude simultaneously polling using uAPSD and PS-Poll, doing that seems quite problematic. 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.h9
1 files changed, 8 insertions, 1 deletions
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index dd07964ef154..ee6449eff7dc 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -370,7 +370,8 @@ struct ieee80211_bss_conf {
370 * @IEEE80211_TX_STATUS_EOSP: This packet marks the end of service period, 370 * @IEEE80211_TX_STATUS_EOSP: This packet marks the end of service period,
371 * when its status is reported the service period ends. For frames in 371 * when its status is reported the service period ends. For frames in
372 * an SP that mac80211 transmits, it is already set; for driver frames 372 * an SP that mac80211 transmits, it is already set; for driver frames
373 * the driver may set this flag. 373 * the driver may set this flag. It is also used to do the same for
374 * PS-Poll responses.
374 * 375 *
375 * Note: If you have to add new flags to the enumeration, then don't 376 * Note: If you have to add new flags to the enumeration, then don't
376 * forget to update %IEEE80211_TX_TEMPORARY_FLAGS when necessary. 377 * forget to update %IEEE80211_TX_TEMPORARY_FLAGS when necessary.
@@ -1959,6 +1960,12 @@ enum ieee80211_frame_release_type {
1959 * more-data bit must always be set. 1960 * more-data bit must always be set.
1960 * The @tids parameter tells the driver which TIDs to release frames 1961 * The @tids parameter tells the driver which TIDs to release frames
1961 * from, for PS-poll it will always have only a single bit set. 1962 * from, for PS-poll it will always have only a single bit set.
1963 * In the case this is used for a PS-poll initiated release, the
1964 * @num_frames parameter will always be 1 so code can be shared. In
1965 * this case the driver must also set %IEEE80211_TX_STATUS_EOSP flag
1966 * on the TX status (and must report TX status) so that the PS-poll
1967 * period is properly ended. This is used to avoid sending multiple
1968 * responses for a retried PS-poll frame.
1962 * In the case this is used for uAPSD, the @num_frames parameter may be 1969 * In the case this is used for uAPSD, the @num_frames parameter may be
1963 * bigger than one, but the driver may send fewer frames (it must send 1970 * bigger than one, but the driver may send fewer frames (it must send
1964 * at least one, however). In this case it is also responsible for 1971 * at least one, however). In this case it is also responsible for