aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/iface.c
diff options
context:
space:
mode:
authorAlexander Bondar <alexander.bondar@intel.com>2013-02-11 14:56:29 +0200
committerJohannes Berg <johannes.berg@intel.com>2013-03-11 16:22:14 +0200
commit488b366a452934141959384c7a1b52b22d6154ef (patch)
tree85851d49961be9db15cbeea8038e873e4fc9028a /net/mac80211/iface.c
parentmac80211: remove a few set but unused variables (diff)
downloadlinux-dev-488b366a452934141959384c7a1b52b22d6154ef.tar.xz
linux-dev-488b366a452934141959384c7a1b52b22d6154ef.zip
mac80211: add driver callback for per-interface multicast filter
Some devices have multicast filter capability for each individual virtual interface rather than just a global one. Add an interface specific driver callback allowing such drivers to configure this. Signed-off-by: Alexander Bondar <alexander.bondar@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/mac80211/iface.c')
-rw-r--r--net/mac80211/iface.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c
index d85282f64405..9875e321c9e8 100644
--- a/net/mac80211/iface.c
+++ b/net/mac80211/iface.c
@@ -919,6 +919,17 @@ static void ieee80211_set_multicast_list(struct net_device *dev)
atomic_dec(&local->iff_promiscs);
sdata->flags ^= IEEE80211_SDATA_PROMISC;
}
+
+ /*
+ * TODO: If somebody needs this on AP interfaces,
+ * it can be enabled easily but multicast
+ * addresses from VLANs need to be synced.
+ */
+ if (sdata->vif.type != NL80211_IFTYPE_MONITOR &&
+ sdata->vif.type != NL80211_IFTYPE_AP_VLAN &&
+ sdata->vif.type != NL80211_IFTYPE_AP)
+ drv_set_multicast_list(local, sdata, &dev->mc);
+
spin_lock_bh(&local->filter_lock);
__hw_addr_sync(&local->mc_list, &dev->mc, dev->addr_len);
spin_unlock_bh(&local->filter_lock);