diff options
author | Johannes Berg <johannes@sipsolutions.net> | 2008-07-10 05:21:26 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2008-07-14 14:52:57 -0400 |
commit | f591fa5dbbbeaebd95c9c019b3a536a327fb79de (patch) | |
tree | fdede2804a4d962b072a88dbee870ba41eeb8964 /include/net/mac80211.h | |
parent | 22bb1be4d271961846cd0889b0f8d671db773080 (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/mac80211.h')
-rw-r--r-- | include/net/mac80211.h | 12 |
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 | */ |
243 | enum mac80211_tx_control_flags { | 254 | enum 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 | ||