]> err.no Git - linux-2.6/blobdiff - net/mac80211/rx.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
[linux-2.6] / net / mac80211 / rx.c
index 244ee2d50a580936702d025966f97d34e1a7a73b..6d9ae67c27ca6f48f4e63cc3d36354fab9e21dc6 100644 (file)
@@ -334,13 +334,18 @@ static void ieee80211_parse_qos(struct ieee80211_rx_data *rx)
                else
                        rx->flags &= ~IEEE80211_RX_AMSDU;
        } else {
-               if (unlikely(ieee80211_is_mgmt(hdr->frame_control))) {
-                       /* Separate TID for management frames */
-                       tid = NUM_RX_DATA_QUEUES - 1;
-               } else {
-                       /* no qos control present */
-                       tid = 0; /* 802.1d - Best Effort */
-               }
+               /*
+                * IEEE 802.11-2007, 7.1.3.4.1 ("Sequence Number field"):
+                *
+                *      Sequence numbers for management frames, QoS data
+                *      frames with a broadcast/multicast address in the
+                *      Address 1 field, and all non-QoS data frames sent
+                *      by QoS STAs are assigned using an additional single
+                *      modulo-4096 counter, [...]
+                *
+                * We also use that counter for non-QoS STAs.
+                */
+               tid = NUM_RX_DATA_QUEUES - 1;
        }
 
        rx->queue = tid;
@@ -2041,8 +2046,8 @@ static u8 ieee80211_rx_reorder_ampdu(struct ieee80211_local *local,
 
        tid_agg_rx = sta->ampdu_mlme.tid_rx[tid];
 
-       /* null data frames are excluded */
-       if (unlikely(ieee80211_is_nullfunc(hdr->frame_control)))
+       /* qos null data frames are excluded */
+       if (unlikely(hdr->frame_control & cpu_to_le16(IEEE80211_STYPE_NULLFUNC)))
                goto end_reorder;
 
        /* new un-ordered ampdu frame - process it */