iwlwifi: mvm: implement beacon filtering testmode command
authorJohannes Berg <johannes.berg@intel.com>
Thu, 1 Aug 2013 12:17:15 +0000 (14:17 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Wed, 2 Oct 2013 16:00:31 +0000 (18:00 +0200)
Add a testmode command to (manually) disable (and re-enable)
beacon filtering for testing purposes.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
drivers/net/wireless/iwlwifi/mvm/mac80211.c
drivers/net/wireless/iwlwifi/mvm/testmode.h

index 43d0011a430835d3e3f0f6782901a0b371002e68..3261730181fa53c548d9e9061501c36f1cdc9673 100644 (file)
@@ -1570,6 +1570,7 @@ static void iwl_mvm_mac_rssi_callback(struct ieee80211_hw *hw,
 static const struct nla_policy iwl_mvm_tm_policy[IWL_MVM_TM_ATTR_MAX + 1] = {
        [IWL_MVM_TM_ATTR_CMD] = { .type = NLA_U32 },
        [IWL_MVM_TM_ATTR_NOA_DURATION] = { .type = NLA_U32 },
+       [IWL_MVM_TM_ATTR_BEACON_FILTER_STATE] = { .type = NLA_U32 },
 };
 
 static int __iwl_mvm_mac_testmode_cmd(struct iwl_mvm *mvm,
@@ -1602,6 +1603,16 @@ static int __iwl_mvm_mac_testmode_cmd(struct iwl_mvm *mvm,
                mvm->noa_vif = vif;
 
                return iwl_mvm_update_quotas(mvm, NULL);
+       case IWL_MVM_TM_CMD_SET_BEACON_FILTER:
+               /* must be associated client vif - ignore authorized */
+               if (!vif || vif->type != NL80211_IFTYPE_STATION ||
+                   !vif->bss_conf.assoc || !vif->bss_conf.dtim_period ||
+                   !tb[IWL_MVM_TM_ATTR_BEACON_FILTER_STATE])
+                       return -EINVAL;
+
+               if (nla_get_u32(tb[IWL_MVM_TM_ATTR_BEACON_FILTER_STATE]))
+                       return iwl_mvm_enable_beacon_filter(mvm, vif);
+               return iwl_mvm_disable_beacon_filter(mvm, vif);
        }
 
        return -EOPNOTSUPP;
index e3df4992a3715ff8bcb396b41003bbdabea023ec..eb74391d91cac9a7469277c3beab830427bbfa0f 100644 (file)
  * @IWL_MVM_TM_ATTR_UNSPEC: (invalid attribute)
  * @IWL_MVM_TM_ATTR_CMD: sub command, see &enum iwl_mvm_testmode_commands (u32)
  * @IWL_MVM_TM_ATTR_NOA_DURATION: requested NoA duration (u32)
+ * @IWL_MVM_TM_ATTR_BEACON_FILTER_STATE: beacon filter state (0 or 1, u32)
  */
 enum iwl_mvm_testmode_attrs {
        IWL_MVM_TM_ATTR_UNSPEC,
        IWL_MVM_TM_ATTR_CMD,
        IWL_MVM_TM_ATTR_NOA_DURATION,
+       IWL_MVM_TM_ATTR_BEACON_FILTER_STATE,
 
        /* keep last */
        NUM_IWL_MVM_TM_ATTRS,
@@ -83,9 +85,11 @@ enum iwl_mvm_testmode_attrs {
 /**
  * enum iwl_mvm_testmode_commands - MVM testmode commands
  * @IWL_MVM_TM_CMD_SET_NOA: set NoA on GO vif for testing
+ * @IWL_MVM_TM_CMD_SET_BEACON_FILTER: turn beacon filtering off/on
  */
 enum iwl_mvm_testmode_commands {
        IWL_MVM_TM_CMD_SET_NOA,
+       IWL_MVM_TM_CMD_SET_BEACON_FILTER,
 };
 
 #endif /* __IWL_MVM_TESTMODE_H__ */