diff options
author | Johannes Berg <johannes.berg@intel.com> | 2017-04-13 13:28:18 +0200 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2017-04-18 11:00:13 +0200 |
commit | f64331d58045b05e5af581284884d5df9b26c031 (patch) | |
tree | 0e125bb01289e9f2b5a474b095a1a95a7b55ac0d /net/mac80211/rx.c | |
parent | nl80211: add request id in scheduled scan event messages (diff) | |
download | linux-f64331d58045b05e5af581284884d5df9b26c031.tar.xz linux-f64331d58045b05e5af581284884d5df9b26c031.zip |
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.c | 11 |
1 files changed, 1 insertions, 10 deletions
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c index e35c42ebb7a5..638dc63a51bf 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) { |