aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/net/mac80211.h4
-rw-r--r--net/mac80211/ieee80211_i.h3
-rw-r--r--net/mac80211/rx.c4
3 files changed, 7 insertions, 4 deletions
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index 3754ea405c88..1d75b960da06 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -513,6 +513,9 @@ ieee80211_tx_info_clear_status(struct ieee80211_tx_info *info)
513 * @RX_FLAG_HT: HT MCS was used and rate_idx is MCS index 513 * @RX_FLAG_HT: HT MCS was used and rate_idx is MCS index
514 * @RX_FLAG_40MHZ: HT40 (40 MHz) was used 514 * @RX_FLAG_40MHZ: HT40 (40 MHz) was used
515 * @RX_FLAG_SHORT_GI: Short guard interval was used 515 * @RX_FLAG_SHORT_GI: Short guard interval was used
516 * @RX_FLAG_INTERNAL_CMTR: set internally after frame was reported
517 * on cooked monitor to avoid double-reporting it for multiple
518 * virtual interfaces
516 */ 519 */
517enum mac80211_rx_flags { 520enum mac80211_rx_flags {
518 RX_FLAG_MMIC_ERROR = 1<<0, 521 RX_FLAG_MMIC_ERROR = 1<<0,
@@ -526,6 +529,7 @@ enum mac80211_rx_flags {
526 RX_FLAG_HT = 1<<9, 529 RX_FLAG_HT = 1<<9,
527 RX_FLAG_40MHZ = 1<<10, 530 RX_FLAG_40MHZ = 1<<10,
528 RX_FLAG_SHORT_GI = 1<<11, 531 RX_FLAG_SHORT_GI = 1<<11,
532 RX_FLAG_INTERNAL_CMTR = 1<<12,
529}; 533};
530 534
531/** 535/**
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
index 04093e84ebd7..ba5d3637b956 100644
--- a/net/mac80211/ieee80211_i.h
+++ b/net/mac80211/ieee80211_i.h
@@ -163,8 +163,7 @@ typedef unsigned __bitwise__ ieee80211_rx_result;
163/* frame is destined to interface currently processed (incl. multicast frames) */ 163/* frame is destined to interface currently processed (incl. multicast frames) */
164#define IEEE80211_RX_RA_MATCH BIT(1) 164#define IEEE80211_RX_RA_MATCH BIT(1)
165#define IEEE80211_RX_AMSDU BIT(2) 165#define IEEE80211_RX_AMSDU BIT(2)
166#define IEEE80211_RX_CMNTR_REPORTED BIT(3) 166#define IEEE80211_RX_FRAGMENTED BIT(3)
167#define IEEE80211_RX_FRAGMENTED BIT(4)
168 167
169struct ieee80211_rx_data { 168struct ieee80211_rx_data {
170 struct sk_buff *skb; 169 struct sk_buff *skb;
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
index 96f13ad05d3c..097bb0343b91 100644
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
@@ -1868,7 +1868,7 @@ static void ieee80211_rx_cooked_monitor(struct ieee80211_rx_data *rx,
1868 struct net_device *prev_dev = NULL; 1868 struct net_device *prev_dev = NULL;
1869 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb); 1869 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
1870 1870
1871 if (rx->flags & IEEE80211_RX_CMNTR_REPORTED) 1871 if (status->flag & RX_FLAG_INTERNAL_CMTR)
1872 goto out_free_skb; 1872 goto out_free_skb;
1873 1873
1874 if (skb_headroom(skb) < sizeof(*rthdr) && 1874 if (skb_headroom(skb) < sizeof(*rthdr) &&
@@ -1929,7 +1929,7 @@ static void ieee80211_rx_cooked_monitor(struct ieee80211_rx_data *rx,
1929 } else 1929 } else
1930 goto out_free_skb; 1930 goto out_free_skb;
1931 1931
1932 rx->flags |= IEEE80211_RX_CMNTR_REPORTED; 1932 status->flag |= RX_FLAG_INTERNAL_CMTR;
1933 return; 1933 return;
1934 1934
1935 out_free_skb: 1935 out_free_skb: