ath9k: Configure RX filter for multi-BSSID broadcast
Jouni Malinen [Tue, 3 Mar 2009 17:23:30 +0000 (19:23 +0200)]
Allow RX filter to pass through all broadcast/multicast frames (i.e.,
no BSSID filtering) if virtual interfaces are used. Software filtering
will be used in this case to drop broadcast/multicast frames for
foreign BSSIDs.

Signed-off-by: Jouni Malinen <jouni.malinen@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>

drivers/net/wireless/ath9k/mac.h
drivers/net/wireless/ath9k/recv.c

index fbd2d6a..37e3948 100644 (file)
@@ -570,6 +570,7 @@ enum ath9k_rx_filter {
        ATH9K_RX_FILTER_MYBEACON = 0x00000200,
        ATH9K_RX_FILTER_PSPOLL = 0x00004000,
        ATH9K_RX_FILTER_PHYRADAR = 0x00002000,
+       ATH9K_RX_FILTER_MCAST_BCAST_ALL = 0x00008000,
 };
 
 #define ATH9K_RATESERIES_RTS_CTS  0x0001
index a9a55df..3df5c78 100644 (file)
@@ -407,6 +407,14 @@ u32 ath_calcrxfilter(struct ath_softc *sc)
        if (sc->sc_ah->opmode == NL80211_IFTYPE_AP)
                rfilt |= ATH9K_RX_FILTER_PSPOLL;
 
+       if (sc->sec_wiphy) {
+               /* TODO: only needed if more than one BSSID is in use in
+                * station/adhoc mode */
+               /* TODO: for older chips, may need to add ATH9K_RX_FILTER_PROM
+                */
+               rfilt |= ATH9K_RX_FILTER_MCAST_BCAST_ALL;
+       }
+
        return rfilt;
 
 #undef RX_FILTER_PRESERVE