Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 194500
b: refs/heads/master
c: 03ceede
h: refs/heads/master
v: v3
  • Loading branch information
Daniel Yingqiang Ma authored and John W. Linville committed Apr 20, 2010
1 parent f7cd769 commit d7a2f2d
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 4 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: e8958330190c57c0d32bee88b64a12de2f58059f
refs/heads/master: 03ceedea972a82d343fa5c2528b3952fa9e615d5
28 changes: 25 additions & 3 deletions trunk/drivers/net/wireless/ath/ath9k/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -751,6 +751,7 @@ static int ath_key_config(struct ath_common *common,
struct ath_hw *ah = common->ah;
struct ath9k_keyval hk;
const u8 *mac = NULL;
u8 gmac[ETH_ALEN];
int ret = 0;
int idx;

Expand All @@ -774,9 +775,30 @@ static int ath_key_config(struct ath_common *common,
memcpy(hk.kv_val, key->key, key->keylen);

if (!(key->flags & IEEE80211_KEY_FLAG_PAIRWISE)) {
/* For now, use the default keys for broadcast keys. This may
* need to change with virtual interfaces. */
idx = key->keyidx;

if (key->ap_addr) {
/*
* Group keys on hardware that supports multicast frame
* key search use a mac that is the sender's address with
* the high bit set instead of the app-specified address.
*/
memcpy(gmac, key->ap_addr, ETH_ALEN);
gmac[0] |= 0x80;
mac = gmac;

if (key->alg == ALG_TKIP)
idx = ath_reserve_key_cache_slot_tkip(common);
else
idx = ath_reserve_key_cache_slot(common);
if (idx < 0)
mac = NULL; /* no free key cache entries */
}

if (!mac) {
/* For now, use the default keys for broadcast keys. This may
* need to change with virtual interfaces. */
idx = key->keyidx;
}
} else if (key->keyidx) {
if (WARN_ON(!sta))
return -EOPNOTSUPP;
Expand Down
1 change: 1 addition & 0 deletions trunk/include/net/mac80211.h
Original file line number Diff line number Diff line change
Expand Up @@ -793,6 +793,7 @@ struct ieee80211_key_conf {
u8 iv_len;
u8 hw_key_idx;
u8 flags;
u8 *ap_addr;
s8 keyidx;
u8 keylen;
u8 key[0];
Expand Down
1 change: 1 addition & 0 deletions trunk/net/mac80211/key.c
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,7 @@ static void ieee80211_key_enable_hw_accel(struct ieee80211_key *key)
struct ieee80211_sub_if_data,
u.ap);

key->conf.ap_addr = sdata->dev->dev_addr;
ret = drv_set_key(key->local, SET_KEY, sdata, sta, &key->conf);

if (!ret) {
Expand Down

0 comments on commit d7a2f2d

Please sign in to comment.