diff options
author | John W. Linville <linville@tuxdriver.com> | 2007-08-28 17:01:55 -0400 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2007-10-10 19:48:56 -0400 |
commit | b331615722779b078822988843ddffd4eaec9f83 (patch) | |
tree | 81f9dd70c82e7fab1502aa7d79e971c004b0532d | |
parent | 3c3b00caf98e5fdaa0184026a68f0008a5bf393e (diff) |
[MAC80211]: filter locally-originated multicast frames
In STA mode, the AP will echo our traffic. This includes multicast
traffic.
Receiving these frames confuses some protocols and applications,
notably IPv6 Duplicate Address Detection.
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Acked-by: Michael Wu <flamingice@sourmilk.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | net/mac80211/rx.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c index e2c6f5cd1cf7..969be3adda7a 100644 --- a/net/mac80211/rx.c +++ b/net/mac80211/rx.c | |||
@@ -988,9 +988,10 @@ ieee80211_rx_h_data(struct ieee80211_txrx_data *rx) | |||
988 | memcpy(dst, hdr->addr1, ETH_ALEN); | 988 | memcpy(dst, hdr->addr1, ETH_ALEN); |
989 | memcpy(src, hdr->addr3, ETH_ALEN); | 989 | memcpy(src, hdr->addr3, ETH_ALEN); |
990 | 990 | ||
991 | if (sdata->type != IEEE80211_IF_TYPE_STA) { | 991 | if (sdata->type != IEEE80211_IF_TYPE_STA || |
992 | (is_multicast_ether_addr(dst) && | ||
993 | !compare_ether_addr(src, dev->dev_addr))) | ||
992 | return TXRX_DROP; | 994 | return TXRX_DROP; |
993 | } | ||
994 | break; | 995 | break; |
995 | case 0: | 996 | case 0: |
996 | /* DA SA BSSID */ | 997 | /* DA SA BSSID */ |