diff options
author | Johannes Berg <johannes@sipsolutions.net> | 2010-01-16 19:47:58 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2010-01-19 16:25:19 -0500 |
commit | 813d76694043d00b59475baa1fbfaf54a2eb7fad (patch) | |
tree | daad130ca0a9e90f7616d88e5433654df89af14a /net/mac80211/wep.c | |
parent | a6bae9e7ab19876a157c91019852395539e4f20e (diff) |
mac80211: move control.hw_key assignment
When mac80211 asks a driver to encrypt a frame, it
must assign the control.hw_key pointer for it to
know which key to use etc. Currently, mac80211 does
this whenever it would software-encrypt a frame.
Change the logic of this code to assign the hw_key
pointer when selecting the key, and later check it
when deciding whether to encrypt the frame or let
it be encrypted by the hardware. This allows us to
later simply skip the encryption function since it
no longer modifies the TX control.
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211/wep.c')
-rw-r--r-- | net/mac80211/wep.c | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/net/mac80211/wep.c b/net/mac80211/wep.c index 247123fe1a7a..0a4c641c9605 100644 --- a/net/mac80211/wep.c +++ b/net/mac80211/wep.c | |||
@@ -305,20 +305,20 @@ static int wep_encrypt_skb(struct ieee80211_tx_data *tx, struct sk_buff *skb) | |||
305 | { | 305 | { |
306 | struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); | 306 | struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); |
307 | 307 | ||
308 | if (!(tx->key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE)) { | 308 | if (!info->control.hw_key) { |
309 | if (ieee80211_wep_encrypt(tx->local, skb, tx->key->conf.key, | 309 | if (ieee80211_wep_encrypt(tx->local, skb, tx->key->conf.key, |
310 | tx->key->conf.keylen, | 310 | tx->key->conf.keylen, |
311 | tx->key->conf.keyidx)) | 311 | tx->key->conf.keyidx)) |
312 | return -1; | 312 | return -1; |
313 | } else { | ||
314 | info->control.hw_key = &tx->key->conf; | ||
315 | if (tx->key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV) { | ||
316 | if (!ieee80211_wep_add_iv(tx->local, skb, | ||
317 | tx->key->conf.keylen, | ||
318 | tx->key->conf.keyidx)) | ||
319 | return -1; | ||
320 | } | ||
321 | } | 313 | } |
314 | |||
315 | if (info->control.hw_key->flags & IEEE80211_KEY_FLAG_GENERATE_IV) { | ||
316 | if (!ieee80211_wep_add_iv(tx->local, skb, | ||
317 | tx->key->conf.keylen, | ||
318 | tx->key->conf.keyidx)) | ||
319 | return -1; | ||
320 | } | ||
321 | |||
322 | return 0; | 322 | return 0; |
323 | } | 323 | } |
324 | 324 | ||