iwmc3200wifi: avoid setting default key for 802.1X and RSNA
UMAC only allows us to set default key for WEP and auth type is not 802.1X or RSNA. This patch fixes iwmc3200wifi for 802.1X with WEP104. Signed-off-by: Zhu Yi <yi.zhu@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
beda278d98
commit
847c1e1300
|
@ -526,19 +526,6 @@ int iwm_read_mac(struct iwm_priv *iwm, u8 *mac)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int iwm_set_tx_key(struct iwm_priv *iwm, u8 key_idx)
|
||||
{
|
||||
struct iwm_umac_tx_key_id tx_key_id;
|
||||
|
||||
tx_key_id.hdr.oid = UMAC_WIFI_IF_CMD_GLOBAL_TX_KEY_ID;
|
||||
tx_key_id.hdr.buf_size = cpu_to_le16(sizeof(struct iwm_umac_tx_key_id) -
|
||||
sizeof(struct iwm_umac_wifi_if));
|
||||
|
||||
tx_key_id.key_idx = key_idx;
|
||||
|
||||
return iwm_send_wifi_if_cmd(iwm, &tx_key_id, sizeof(tx_key_id), 1);
|
||||
}
|
||||
|
||||
static int iwm_check_profile(struct iwm_priv *iwm)
|
||||
{
|
||||
if (!iwm->umac_profile_active)
|
||||
|
@ -572,6 +559,32 @@ static int iwm_check_profile(struct iwm_priv *iwm)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int iwm_set_tx_key(struct iwm_priv *iwm, u8 key_idx)
|
||||
{
|
||||
struct iwm_umac_tx_key_id tx_key_id;
|
||||
int ret;
|
||||
|
||||
ret = iwm_check_profile(iwm);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
/* UMAC only allows to set default key for WEP and auth type is
|
||||
* NOT 802.1X or RSNA. */
|
||||
if ((iwm->umac_profile->sec.ucast_cipher != UMAC_CIPHER_TYPE_WEP_40 &&
|
||||
iwm->umac_profile->sec.ucast_cipher != UMAC_CIPHER_TYPE_WEP_104) ||
|
||||
iwm->umac_profile->sec.auth_type == UMAC_AUTH_TYPE_8021X ||
|
||||
iwm->umac_profile->sec.auth_type == UMAC_AUTH_TYPE_RSNA_PSK)
|
||||
return 0;
|
||||
|
||||
tx_key_id.hdr.oid = UMAC_WIFI_IF_CMD_GLOBAL_TX_KEY_ID;
|
||||
tx_key_id.hdr.buf_size = cpu_to_le16(sizeof(struct iwm_umac_tx_key_id) -
|
||||
sizeof(struct iwm_umac_wifi_if));
|
||||
|
||||
tx_key_id.key_idx = key_idx;
|
||||
|
||||
return iwm_send_wifi_if_cmd(iwm, &tx_key_id, sizeof(tx_key_id), 1);
|
||||
}
|
||||
|
||||
int iwm_set_key(struct iwm_priv *iwm, bool remove, struct iwm_key *key)
|
||||
{
|
||||
int ret = 0;
|
||||
|
|
Loading…
Reference in a new issue