mac80211: move cmntr flag out of rx flags
authorJohannes Berg <johannes@sipsolutions.net>
Wed, 25 Nov 2009 16:46:15 +0000 (17:46 +0100)
committerJohn W. Linville <linville@tuxdriver.com>
Sat, 28 Nov 2009 20:05:01 +0000 (15:05 -0500)
The RX flags should soon be used only for flags
that cannot change within an a-MPDU, so move the
cooked monitor flag into the RX status flags.

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
include/net/mac80211.h
net/mac80211/ieee80211_i.h
net/mac80211/rx.c

index 3754ea405c8850004f243cec4b7670dc988c5f7d..1d75b960da06d1890bd0d2ad09ac310c2b047d33 100644 (file)
@@ -513,6 +513,9 @@ ieee80211_tx_info_clear_status(struct ieee80211_tx_info *info)
  * @RX_FLAG_HT: HT MCS was used and rate_idx is MCS index
  * @RX_FLAG_40MHZ: HT40 (40 MHz) was used
  * @RX_FLAG_SHORT_GI: Short guard interval was used
+ * @RX_FLAG_INTERNAL_CMTR: set internally after frame was reported
+ *     on cooked monitor to avoid double-reporting it for multiple
+ *     virtual interfaces
  */
 enum mac80211_rx_flags {
        RX_FLAG_MMIC_ERROR      = 1<<0,
@@ -526,6 +529,7 @@ enum mac80211_rx_flags {
        RX_FLAG_HT              = 1<<9,
        RX_FLAG_40MHZ           = 1<<10,
        RX_FLAG_SHORT_GI        = 1<<11,
+       RX_FLAG_INTERNAL_CMTR   = 1<<12,
 };
 
 /**
index 04093e84ebd7b31824654ef010b8489352c65fa3..ba5d3637b956dc54fa756a78c65b4e75e02d98b8 100644 (file)
@@ -163,8 +163,7 @@ typedef unsigned __bitwise__ ieee80211_rx_result;
 /* frame is destined to interface currently processed (incl. multicast frames) */
 #define IEEE80211_RX_RA_MATCH          BIT(1)
 #define IEEE80211_RX_AMSDU             BIT(2)
-#define IEEE80211_RX_CMNTR_REPORTED    BIT(3)
-#define IEEE80211_RX_FRAGMENTED                BIT(4)
+#define IEEE80211_RX_FRAGMENTED                BIT(3)
 
 struct ieee80211_rx_data {
        struct sk_buff *skb;
index 96f13ad05d3caf29edb5c1aa9d25b2eaeb16c0fd..097bb0343b91b292f3f3ca6f3a8afba10f805120 100644 (file)
@@ -1868,7 +1868,7 @@ static void ieee80211_rx_cooked_monitor(struct ieee80211_rx_data *rx,
        struct net_device *prev_dev = NULL;
        struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
 
-       if (rx->flags & IEEE80211_RX_CMNTR_REPORTED)
+       if (status->flag & RX_FLAG_INTERNAL_CMTR)
                goto out_free_skb;
 
        if (skb_headroom(skb) < sizeof(*rthdr) &&
@@ -1929,7 +1929,7 @@ static void ieee80211_rx_cooked_monitor(struct ieee80211_rx_data *rx,
        } else
                goto out_free_skb;
 
-       rx->flags |= IEEE80211_RX_CMNTR_REPORTED;
+       status->flag |= RX_FLAG_INTERNAL_CMTR;
        return;
 
  out_free_skb: