From 69659a4841b8fe7fd0d8bfe84b9ef9363f93bf7b Mon Sep 17 00:00:00 2001 From: Johannes Berg Date: Fri, 4 Nov 2011 11:18:18 +0100 Subject: [PATCH] --- yaml --- r: 277787 b: refs/heads/master c: ee971924543fe82f279d3e97f6f6d02320b381b7 h: refs/heads/master i: 277785: 8ae4bde84b38adfe1c091d1e996da6a4041b48c1 277783: 62fd9cf06c18ae8b910110988ef4b38a31c1aa78 v: v3 --- [refs] | 2 +- trunk/net/mac80211/ieee80211_i.h | 3 +++ trunk/net/mac80211/main.c | 3 ++- trunk/net/mac80211/rx.c | 12 ++++++++++++ 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index da2ab87930bd..de5882be076f 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 5e760230e42cf759bd923457ca2753aacf2e656e +refs/heads/master: ee971924543fe82f279d3e97f6f6d02320b381b7 diff --git a/trunk/net/mac80211/ieee80211_i.h b/trunk/net/mac80211/ieee80211_i.h index 386330c89baf..4bef6eca1722 100644 --- a/trunk/net/mac80211/ieee80211_i.h +++ b/trunk/net/mac80211/ieee80211_i.h @@ -184,12 +184,15 @@ enum ieee80211_packet_rx_flags { * enum ieee80211_rx_flags - RX data flags * * @IEEE80211_RX_CMNTR: received on cooked monitor already + * @IEEE80211_RX_BEACON_REPORTED: This frame was already reported + * to cfg80211_report_obss_beacon(). * * These flags are used across handling multiple interfaces * for a single frame. */ enum ieee80211_rx_flags { IEEE80211_RX_CMNTR = BIT(0), + IEEE80211_RX_BEACON_REPORTED = BIT(1), }; struct ieee80211_rx_data { diff --git a/trunk/net/mac80211/main.c b/trunk/net/mac80211/main.c index 7217019d1ed9..8e9327bca910 100644 --- a/trunk/net/mac80211/main.c +++ b/trunk/net/mac80211/main.c @@ -593,7 +593,8 @@ struct ieee80211_hw *ieee80211_alloc_hw(size_t priv_data_len, wiphy->flags |= WIPHY_FLAG_NETNS_OK | WIPHY_FLAG_4ADDR_AP | - WIPHY_FLAG_4ADDR_STATION; + WIPHY_FLAG_4ADDR_STATION | + WIPHY_FLAG_REPORTS_OBSS; if (!ops->set_key) wiphy->flags |= WIPHY_FLAG_IBSS_RSN; diff --git a/trunk/net/mac80211/rx.c b/trunk/net/mac80211/rx.c index e832e0dcab3c..2ed882f8a9f8 100644 --- a/trunk/net/mac80211/rx.c +++ b/trunk/net/mac80211/rx.c @@ -2188,6 +2188,18 @@ ieee80211_rx_h_mgmt_check(struct ieee80211_rx_data *rx) if (!ieee80211_is_mgmt(mgmt->frame_control)) return RX_DROP_MONITOR; + if (rx->sdata->vif.type == NL80211_IFTYPE_AP && + ieee80211_is_beacon(mgmt->frame_control) && + !(rx->flags & IEEE80211_RX_BEACON_REPORTED)) { + struct ieee80211_rx_status *status; + + status = IEEE80211_SKB_RXCB(rx->skb); + cfg80211_report_obss_beacon(rx->local->hw.wiphy, + rx->skb->data, rx->skb->len, + status->freq, GFP_ATOMIC); + rx->flags |= IEEE80211_RX_BEACON_REPORTED; + } + if (!(status->rx_flags & IEEE80211_RX_RA_MATCH)) return RX_DROP_MONITOR;