mac80211: use cipher suite selectors
Currently, mac80211 translates the cfg80211 cipher suite selectors into ALG_* values. That isn't all too useful, and some drivers benefit from the distinction between WEP40 and WEP104 as well. Therefore, convert it all to use the cipher suite selectors. Signed-off-by: Johannes Berg <johannes.berg@intel.com> Acked-by: Gertjan van Wingerde <gwingerde@gmail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:

committed by
John W. Linville

parent
915a824e30
commit
97359d1235
@@ -429,8 +429,8 @@ static int p54_set_key(struct ieee80211_hw *dev, enum set_key_cmd cmd,
|
||||
|
||||
mutex_lock(&priv->conf_mutex);
|
||||
if (cmd == SET_KEY) {
|
||||
switch (key->alg) {
|
||||
case ALG_TKIP:
|
||||
switch (key->cipher) {
|
||||
case WLAN_CIPHER_SUITE_TKIP:
|
||||
if (!(priv->privacy_caps & (BR_DESC_PRIV_CAP_MICHAEL |
|
||||
BR_DESC_PRIV_CAP_TKIP))) {
|
||||
ret = -EOPNOTSUPP;
|
||||
@@ -439,7 +439,8 @@ static int p54_set_key(struct ieee80211_hw *dev, enum set_key_cmd cmd,
|
||||
key->flags |= IEEE80211_KEY_FLAG_GENERATE_IV;
|
||||
algo = P54_CRYPTO_TKIPMICHAEL;
|
||||
break;
|
||||
case ALG_WEP:
|
||||
case WLAN_CIPHER_SUITE_WEP40:
|
||||
case WLAN_CIPHER_SUITE_WEP104:
|
||||
if (!(priv->privacy_caps & BR_DESC_PRIV_CAP_WEP)) {
|
||||
ret = -EOPNOTSUPP;
|
||||
goto out_unlock;
|
||||
@@ -447,7 +448,7 @@ static int p54_set_key(struct ieee80211_hw *dev, enum set_key_cmd cmd,
|
||||
key->flags |= IEEE80211_KEY_FLAG_GENERATE_IV;
|
||||
algo = P54_CRYPTO_WEP;
|
||||
break;
|
||||
case ALG_CCMP:
|
||||
case WLAN_CIPHER_SUITE_CCMP:
|
||||
if (!(priv->privacy_caps & BR_DESC_PRIV_CAP_AESCCMP)) {
|
||||
ret = -EOPNOTSUPP;
|
||||
goto out_unlock;
|
||||
|
@@ -683,14 +683,15 @@ static void p54_tx_80211_header(struct p54_common *priv, struct sk_buff *skb,
|
||||
}
|
||||
}
|
||||
|
||||
static u8 p54_convert_algo(enum ieee80211_key_alg alg)
|
||||
static u8 p54_convert_algo(u32 cipher)
|
||||
{
|
||||
switch (alg) {
|
||||
case ALG_WEP:
|
||||
switch (cipher) {
|
||||
case WLAN_CIPHER_SUITE_WEP40:
|
||||
case WLAN_CIPHER_SUITE_WEP104:
|
||||
return P54_CRYPTO_WEP;
|
||||
case ALG_TKIP:
|
||||
case WLAN_CIPHER_SUITE_TKIP:
|
||||
return P54_CRYPTO_TKIPMICHAEL;
|
||||
case ALG_CCMP:
|
||||
case WLAN_CIPHER_SUITE_CCMP:
|
||||
return P54_CRYPTO_AESCCMP;
|
||||
default:
|
||||
return 0;
|
||||
@@ -731,7 +732,7 @@ int p54_tx_80211(struct ieee80211_hw *dev, struct sk_buff *skb)
|
||||
|
||||
if (info->control.hw_key) {
|
||||
crypt_offset = ieee80211_get_hdrlen_from_skb(skb);
|
||||
if (info->control.hw_key->alg == ALG_TKIP) {
|
||||
if (info->control.hw_key->cipher == WLAN_CIPHER_SUITE_TKIP) {
|
||||
u8 *iv = (u8 *)(skb->data + crypt_offset);
|
||||
/*
|
||||
* The firmware excepts that the IV has to have
|
||||
@@ -827,10 +828,10 @@ int p54_tx_80211(struct ieee80211_hw *dev, struct sk_buff *skb)
|
||||
hdr->tries = ridx;
|
||||
txhdr->rts_rate_idx = 0;
|
||||
if (info->control.hw_key) {
|
||||
txhdr->key_type = p54_convert_algo(info->control.hw_key->alg);
|
||||
txhdr->key_type = p54_convert_algo(info->control.hw_key->cipher);
|
||||
txhdr->key_len = min((u8)16, info->control.hw_key->keylen);
|
||||
memcpy(txhdr->key, info->control.hw_key->key, txhdr->key_len);
|
||||
if (info->control.hw_key->alg == ALG_TKIP) {
|
||||
if (info->control.hw_key->cipher == WLAN_CIPHER_SUITE_TKIP) {
|
||||
/* reserve space for the MIC key */
|
||||
len += 8;
|
||||
memcpy(skb_put(skb, 8), &(info->control.hw_key->key
|
||||
|
Reference in New Issue
Block a user