ath9k: Set RX filter based to allow broadcast Action frame RX
authorJouni Malinen <jouni@codeaurora.org>
Sun, 26 Apr 2020 08:47:32 +0000 (11:47 +0300)
committerKalle Valo <kvalo@codeaurora.org>
Sat, 30 May 2020 14:17:20 +0000 (17:17 +0300)
Advertise support for multicast frame registration and update the RX
filter based on the recently added FIF_MCAST_ACTION to allow broadcast
Action frames to be received. This is needed for Device Provisioning
Protocol (DPP) use cases that use broadcast Public Action frames.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Link: https://lore.kernel.org/r/20200426084733.7889-1-jouni@codeaurora.org
drivers/net/wireless/ath/ath9k/init.c
drivers/net/wireless/ath/ath9k/main.c
drivers/net/wireless/ath/ath9k/recv.c

index 17c318902cb866e4b8fc36b43c56e02b4fa0d13d..289a2444d534e731da5da6a593ad2ea05975fad5 100644 (file)
@@ -1012,6 +1012,8 @@ static void ath9k_set_hw_capab(struct ath_softc *sc, struct ieee80211_hw *hw)
 
        wiphy_ext_feature_set(hw->wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST);
        wiphy_ext_feature_set(hw->wiphy, NL80211_EXT_FEATURE_AIRTIME_FAIRNESS);
+       wiphy_ext_feature_set(hw->wiphy,
+                             NL80211_EXT_FEATURE_MULTICAST_REGISTRATIONS);
 }
 
 int ath9k_init_device(u16 devid, struct ath_softc *sc,
index 457e9b0d21ca5c6c87cd781d6df2ae1d2677175a..a47f6e978095ad77cb1bcf5de5006e967756d547 100644 (file)
@@ -1476,6 +1476,7 @@ static int ath9k_config(struct ieee80211_hw *hw, u32 changed)
        FIF_OTHER_BSS |                         \
        FIF_BCN_PRBRESP_PROMISC |               \
        FIF_PROBE_REQ |                         \
+       FIF_MCAST_ACTION |                      \
        FIF_FCSFAIL)
 
 /* FIXME: sc->sc_full_reset ? */
index 06e6608587660dceb670b6709000ae7442835206..0c0624a3b40d21b6ec501c6a88cb51e452fe796c 100644 (file)
@@ -413,7 +413,8 @@ u32 ath_calcrxfilter(struct ath_softc *sc)
        if (sc->cur_chandef.width != NL80211_CHAN_WIDTH_20_NOHT)
                rfilt |= ATH9K_RX_FILTER_COMP_BAR;
 
-       if (sc->cur_chan->nvifs > 1 || (sc->cur_chan->rxfilter & FIF_OTHER_BSS)) {
+       if (sc->cur_chan->nvifs > 1 ||
+           (sc->cur_chan->rxfilter & (FIF_OTHER_BSS | FIF_MCAST_ACTION))) {
                /* This is needed for older chips */
                if (sc->sc_ah->hw_version.macVersion <= AR_SREV_VERSION_9160)
                        rfilt |= ATH9K_RX_FILTER_PROM;