diff options
author | Johannes Berg <johannes@sipsolutions.net> | 2009-03-23 12:28:35 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2009-03-27 20:13:21 -0400 |
commit | 2de8e0d999b8790861cd3749bec2236ccc1c8110 (patch) | |
tree | 18b7f0127b7e1d938b41d1120803cb0af528058f /net/mac80211/wep.c | |
parent | 08df05aa9b25f3079585855506022bb33a011183 (diff) |
mac80211: rewrite fragmentation
Fragmentation currently uses an allocated array to store the
fragment skbs, and then keeps track of which have been sent
and which are still pending etc. This is rather complicated;
make it simpler by just chaining the fragments into skb->next
and removing from that list when sent. Also simplifies all
code that needs to touch fragments, since it now only needs
to walk the skb->next list.
This is a prerequisite for fixing the stored packet code,
which I need to do for proper aggregation packet storing.
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Reviewed-by: Luis R. Rodriguez <lrodriguez@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211/wep.c')
-rw-r--r-- | net/mac80211/wep.c | 21 |
1 files changed, 7 insertions, 14 deletions
diff --git a/net/mac80211/wep.c b/net/mac80211/wep.c index 7043ddc75498..ef73105b3061 100644 --- a/net/mac80211/wep.c +++ b/net/mac80211/wep.c | |||
@@ -329,24 +329,17 @@ static int wep_encrypt_skb(struct ieee80211_tx_data *tx, struct sk_buff *skb) | |||
329 | ieee80211_tx_result | 329 | ieee80211_tx_result |
330 | ieee80211_crypto_wep_encrypt(struct ieee80211_tx_data *tx) | 330 | ieee80211_crypto_wep_encrypt(struct ieee80211_tx_data *tx) |
331 | { | 331 | { |
332 | int i; | 332 | struct sk_buff *skb; |
333 | 333 | ||
334 | ieee80211_tx_set_protected(tx); | 334 | ieee80211_tx_set_protected(tx); |
335 | 335 | ||
336 | if (wep_encrypt_skb(tx, tx->skb) < 0) { | 336 | skb = tx->skb; |
337 | I802_DEBUG_INC(tx->local->tx_handlers_drop_wep); | 337 | do { |
338 | return TX_DROP; | 338 | if (wep_encrypt_skb(tx, skb) < 0) { |
339 | } | 339 | I802_DEBUG_INC(tx->local->tx_handlers_drop_wep); |
340 | 340 | return TX_DROP; | |
341 | if (tx->extra_frag) { | ||
342 | for (i = 0; i < tx->num_extra_frag; i++) { | ||
343 | if (wep_encrypt_skb(tx, tx->extra_frag[i])) { | ||
344 | I802_DEBUG_INC(tx->local-> | ||
345 | tx_handlers_drop_wep); | ||
346 | return TX_DROP; | ||
347 | } | ||
348 | } | 341 | } |
349 | } | 342 | } while ((skb = skb->next)); |
350 | 343 | ||
351 | return TX_CONTINUE; | 344 | return TX_CONTINUE; |
352 | } | 345 | } |