summaryrefslogtreecommitdiffstats
path: root/net/ieee80211/ieee80211_wx.c
diff options
context:
space:
mode:
authorJames Ketrenos <jketreno@linux.intel.com>2005-09-21 11:58:32 -0500
committerJeff Garzik <jgarzik@pobox.com>2005-09-21 23:04:57 -0400
commitccd0fda3a6d9186d067893114f65b8df758d5a1f (patch)
tree2a6301d4762851c7253a21b50e10818cc1bab5b3 /net/ieee80211/ieee80211_wx.c
parent42c94e43be27f8b9be9b5be491bae8af05e54dbd (diff)
downloadlinux-ccd0fda3a6d9186d067893114f65b8df758d5a1f.tar.bz2
[PATCH] ieee80211: Mixed PTK/GTK CCMP/TKIP support
tree 5c7559a1216ae1121487f6aed94a6017490729b3 parent c1ff4c22e5622c8987bf96c09158c4924cde98c2 author Hong Liu <hong.liu@intel.com> 1125482767 +0800 committer James Ketrenos <jketreno@linux.intel.com> 1127314427 -0500 Mixed PTK/GTK CCMP/TKIP support. Signed-off-by: Hong Liu <hong.liu@intel.com> Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
Diffstat (limited to 'net/ieee80211/ieee80211_wx.c')
-rw-r--r--net/ieee80211/ieee80211_wx.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/net/ieee80211/ieee80211_wx.c b/net/ieee80211/ieee80211_wx.c
index db66217699d5..d710f47c4bd5 100644
--- a/net/ieee80211/ieee80211_wx.c
+++ b/net/ieee80211/ieee80211_wx.c
@@ -493,6 +493,7 @@ int ieee80211_wx_set_encodeext(struct ieee80211_device *ieee,
struct iw_point *encoding = &wrqu->encoding;
struct iw_encode_ext *ext = (struct iw_encode_ext *)extra;
int i, idx, ret = 0;
+ int group_key = 0;
const char *alg, *module;
struct ieee80211_crypto_ops *ops;
struct ieee80211_crypt_data **crypt;
@@ -509,9 +510,10 @@ int ieee80211_wx_set_encodeext(struct ieee80211_device *ieee,
} else
idx = ieee->tx_keyidx;
- if (ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY)
+ if (ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY) {
crypt = &ieee->crypt[idx];
- else {
+ group_key = 1;
+ } else {
if (idx != 0)
return -EINVAL;
if (ieee->iw_mode == IW_MODE_INFRA)
@@ -542,7 +544,9 @@ int ieee80211_wx_set_encodeext(struct ieee80211_device *ieee,
sec.enabled = 1;
sec.encrypt = 1;
- if (!(ieee->host_encrypt || ieee->host_decrypt))
+ if (group_key ? !ieee->host_mc_decrypt :
+ !(ieee->host_encrypt || ieee->host_decrypt ||
+ ieee->host_encrypt_msdu))
goto skip_host_crypt;
switch (ext->alg) {
@@ -632,6 +636,9 @@ int ieee80211_wx_set_encodeext(struct ieee80211_device *ieee,
sec.flags |= SEC_LEVEL;
sec.level = SEC_LEVEL_3;
}
+ /* Don't set sec level for group keys. */
+ if (group_key)
+ sec.flags &= ~SEC_LEVEL;
}
done:
if (ieee->set_security)