mac80211: count MSDUs in A-MSDU properly
authorJohannes Berg <johannes.berg@intel.com>
Thu, 31 Mar 2016 17:02:03 +0000 (20:02 +0300)
committerJohannes Berg <johannes.berg@intel.com>
Wed, 6 Apr 2016 11:18:13 +0000 (13:18 +0200)
For the RX MSDU statistics, we need to count the number of
MSDUs created and accepted from an A-MSDU. Right now, all
frames in any A-MSDUs were completely ignored. Fix this by
moving the RX MSDU statistics accounting into the deliver
function.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/rx.c

index 212b9993c8dceba84afc1ff605a19cc3001e6203..a94d314d00557f9ace166272ef8ffdf9eae07fb8 100644 (file)
@@ -2129,6 +2129,15 @@ ieee80211_deliver_skb(struct ieee80211_rx_data *rx)
 
        ieee80211_rx_stats(dev, skb->len);
 
+       if (rx->sta) {
+               /* The seqno index has the same property as needed
+                * for the rx_msdu field, i.e. it is IEEE80211_NUM_TIDS
+                * for non-QoS-data frames. Here we know it's a data
+                * frame, so count MSDUs.
+                */
+               rx->sta->rx_stats.msdu[rx->seqno_idx]++;
+       }
+
        if ((sdata->vif.type == NL80211_IFTYPE_AP ||
             sdata->vif.type == NL80211_IFTYPE_AP_VLAN) &&
            !(sdata->flags & IEEE80211_SDATA_DONT_BRIDGE_PACKETS) &&
@@ -2415,15 +2424,6 @@ ieee80211_rx_h_data(struct ieee80211_rx_data *rx)
        if (unlikely(!ieee80211_is_data_present(hdr->frame_control)))
                return RX_DROP_MONITOR;
 
-       if (rx->sta) {
-               /* The seqno index has the same property as needed
-                * for the rx_msdu field, i.e. it is IEEE80211_NUM_TIDS
-                * for non-QoS-data frames. Here we know it's a data
-                * frame, so count MSDUs.
-                */
-               rx->sta->rx_stats.msdu[rx->seqno_idx]++;
-       }
-
        /*
         * Send unexpected-4addr-frame event to hostapd. For older versions,
         * also drop the frame to cooked monitor interfaces.