summaryrefslogtreecommitdiffstats
path: root/net/mac80211/rx.c
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2017-04-13 13:28:18 +0200
committerJohannes Berg <johannes.berg@intel.com>2017-04-18 11:00:13 +0200
commitf64331d58045b05e5af581284884d5df9b26c031 (patch)
tree0e125bb01289e9f2b5a474b095a1a95a7b55ac0d /net/mac80211/rx.c
parent96b08fd6080efdfa8f6125cffc6742a2235d92f1 (diff)
downloadop-kernel-dev-f64331d58045b05e5af581284884d5df9b26c031.zip
op-kernel-dev-f64331d58045b05e5af581284884d5df9b26c031.tar.gz
mac80211: keep a separate list of monitor interfaces that are up
In addition to keeping monitor interfaces on the regular list of interfaces, keep those that are up and not in cooked mode on a separate list. This saves having to iterate all interfaces when delivering to monitor interfaces. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/mac80211/rx.c')
-rw-r--r--net/mac80211/rx.c11
1 files changed, 1 insertions, 10 deletions
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
index e35c42e..638dc63 100644
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
@@ -593,16 +593,7 @@ ieee80211_rx_monitor(struct ieee80211_local *local, struct sk_buff *origskb,
skb->pkt_type = PACKET_OTHERHOST;
skb->protocol = htons(ETH_P_802_2);
- list_for_each_entry_rcu(sdata, &local->interfaces, list) {
- if (sdata->vif.type != NL80211_IFTYPE_MONITOR)
- continue;
-
- if (sdata->u.mntr.flags & MONITOR_FLAG_COOK_FRAMES)
- continue;
-
- if (!ieee80211_sdata_running(sdata))
- continue;
-
+ list_for_each_entry_rcu(sdata, &local->mon_list, u.mntr.list) {
if (prev_dev) {
skb2 = skb_clone(skb, GFP_ATOMIC);
if (skb2) {
OpenPOWER on IntegriCloud