aboutsummaryrefslogtreecommitdiffstats
path: root/include/net
diff options
context:
space:
mode:
authorJohannes Berg <johannes@sipsolutions.net>2008-07-10 05:21:26 -0400
committerJohn W. Linville <linville@tuxdriver.com>2008-07-14 14:52:57 -0400
commitf591fa5dbbbeaebd95c9c019b3a536a327fb79de (patch)
treefdede2804a4d962b072a88dbee870ba41eeb8964 /include/net
parent22bb1be4d271961846cd0889b0f8d671db773080 (diff)
mac80211: fix TX sequence numbers
This patch makes mac80211 assign proper sequence numbers to QoS-data frames. It also removes the old sequence number code because we noticed that only the driver or hardware can assign sequence numbers to non-QoS-data and especially management frames in a race-free manner because beacons aren't passed through mac80211's TX path. This patch also adds temporary code to the rt2x00 drivers to not break them completely, that code will have to be reworked for proper sequence numbers on beacons. It also moves sequence number assignment down in the TX path so no sequence numbers are assigned to frames that are dropped. Signed-off-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'include/net')
-rw-r--r--include/net/mac80211.h12
1 files changed, 12 insertions, 0 deletions
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index 47c072eab42c..1dbd49fc557e 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -239,6 +239,17 @@ struct ieee80211_bss_conf {
239 * is for the whole aggregation. 239 * is for the whole aggregation.
240 * @IEEE80211_TX_STAT_AMPDU_NO_BACK: no block ack was returned, 240 * @IEEE80211_TX_STAT_AMPDU_NO_BACK: no block ack was returned,
241 * so consider using block ack request (BAR). 241 * so consider using block ack request (BAR).
242 * @IEEE80211_TX_CTL_ASSIGN_SEQ: The driver has to assign a sequence
243 * number to this frame, taking care of not overwriting the fragment
244 * number and increasing the sequence number only when the
245 * IEEE80211_TX_CTL_FIRST_FRAGMENT flags is set. mac80211 will properly
246 * assign sequence numbers to QoS-data frames but cannot do so correctly
247 * for non-QoS-data and management frames because beacons need them from
248 * that counter as well and mac80211 cannot guarantee proper sequencing.
249 * If this flag is set, the driver should instruct the hardware to
250 * assign a sequence number to the frame or assign one itself. Cf. IEEE
251 * 802.11-2007 7.1.3.4.1 paragraph 3. This flag will always be set for
252 * beacons always be clear for frames without a sequence number field.
242 */ 253 */
243enum mac80211_tx_control_flags { 254enum mac80211_tx_control_flags {
244 IEEE80211_TX_CTL_REQ_TX_STATUS = BIT(0), 255 IEEE80211_TX_CTL_REQ_TX_STATUS = BIT(0),
@@ -265,6 +276,7 @@ enum mac80211_tx_control_flags {
265 IEEE80211_TX_STAT_ACK = BIT(21), 276 IEEE80211_TX_STAT_ACK = BIT(21),
266 IEEE80211_TX_STAT_AMPDU = BIT(22), 277 IEEE80211_TX_STAT_AMPDU = BIT(22),
267 IEEE80211_TX_STAT_AMPDU_NO_BACK = BIT(23), 278 IEEE80211_TX_STAT_AMPDU_NO_BACK = BIT(23),
279 IEEE80211_TX_CTL_ASSIGN_SEQ = BIT(24),
268}; 280};
269 281
270 282