iwlwifi: support RSN IBSS
In order to support RSN IBSS, we need to (ok actually maybe it's just easiest to) disable group key programming so that any group-addressed frames will be decrypted in software which handles the per-station keys for this easily. We could keep the encryption in the device, but that takes more work and seems unnecessary. Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
This commit is contained in:
parent
9dc2153315
commit
274102a8a2
|
@ -3207,7 +3207,8 @@ static int iwl_mac_setup_register(struct iwl_priv *priv,
|
||||||
hw->wiphy->max_remain_on_channel_duration = 1000;
|
hw->wiphy->max_remain_on_channel_duration = 1000;
|
||||||
|
|
||||||
hw->wiphy->flags |= WIPHY_FLAG_CUSTOM_REGULATORY |
|
hw->wiphy->flags |= WIPHY_FLAG_CUSTOM_REGULATORY |
|
||||||
WIPHY_FLAG_DISABLE_BEACON_HINTS;
|
WIPHY_FLAG_DISABLE_BEACON_HINTS |
|
||||||
|
WIPHY_FLAG_IBSS_RSN;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* For now, disable PS by default because it affects
|
* For now, disable PS by default because it affects
|
||||||
|
@ -3359,6 +3360,14 @@ int iwlagn_mac_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* To support IBSS RSN, don't program group keys in IBSS, the
|
||||||
|
* hardware will then not attempt to decrypt the frames.
|
||||||
|
*/
|
||||||
|
if (vif->type == NL80211_IFTYPE_ADHOC &&
|
||||||
|
!(key->flags & IEEE80211_KEY_FLAG_PAIRWISE))
|
||||||
|
return -EOPNOTSUPP;
|
||||||
|
|
||||||
sta_id = iwl_sta_id_or_broadcast(priv, vif_priv->ctx, sta);
|
sta_id = iwl_sta_id_or_broadcast(priv, vif_priv->ctx, sta);
|
||||||
if (sta_id == IWL_INVALID_STATION)
|
if (sta_id == IWL_INVALID_STATION)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
|
@ -3286,6 +3286,14 @@ static int iwl3945_mac_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* To support IBSS RSN, don't program group keys in IBSS, the
|
||||||
|
* hardware will then not attempt to decrypt the frames.
|
||||||
|
*/
|
||||||
|
if (vif->type == NL80211_IFTYPE_ADHOC &&
|
||||||
|
!(key->flags & IEEE80211_KEY_FLAG_PAIRWISE))
|
||||||
|
return -EOPNOTSUPP;
|
||||||
|
|
||||||
static_key = !iwl_is_associated(priv, IWL_RXON_CTX_BSS);
|
static_key = !iwl_is_associated(priv, IWL_RXON_CTX_BSS);
|
||||||
|
|
||||||
if (!static_key) {
|
if (!static_key) {
|
||||||
|
@ -3915,7 +3923,8 @@ static int iwl3945_setup_mac(struct iwl_priv *priv)
|
||||||
priv->contexts[IWL_RXON_CTX_BSS].interface_modes;
|
priv->contexts[IWL_RXON_CTX_BSS].interface_modes;
|
||||||
|
|
||||||
hw->wiphy->flags |= WIPHY_FLAG_CUSTOM_REGULATORY |
|
hw->wiphy->flags |= WIPHY_FLAG_CUSTOM_REGULATORY |
|
||||||
WIPHY_FLAG_DISABLE_BEACON_HINTS;
|
WIPHY_FLAG_DISABLE_BEACON_HINTS |
|
||||||
|
WIPHY_FLAG_IBSS_RSN;
|
||||||
|
|
||||||
hw->wiphy->max_scan_ssids = PROBE_OPTION_MAX_3945;
|
hw->wiphy->max_scan_ssids = PROBE_OPTION_MAX_3945;
|
||||||
/* we create the 802.11 header and a zero-length SSID element */
|
/* we create the 802.11 header and a zero-length SSID element */
|
||||||
|
|
Loading…
Reference in New Issue