diff options
author | Johannes Berg <johannes@sipsolutions.net> | 2007-09-14 11:10:25 -0400 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2007-10-10 19:49:29 -0400 |
commit | 6a7664d451e7014b1a6828e50ccb3308d0b84816 (patch) | |
tree | 01c319d33d8c5b61d1946e6c76e27ec9dd44329b /net/mac80211/tx.c | |
parent | 7ac1bd6aecc92cfe6ec11891819dd4c26f2f7879 (diff) |
[MAC80211]: remove HW_KEY_IDX_INVALID
This patch makes the mac80211/driver interface rely only on the
IEEE80211_TXCTL_DO_NOT_ENCRYPT flag to signal to the driver whether
a frame should be encrypted or not, since mac80211 internally no
longer relies on HW_KEY_IDX_INVALID either this removes it, changes
the key index to be a u8 in all places and makes the full range of
the value available to drivers.
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Acked-by: Michael Wu <flamingice@sourmilk.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/mac80211/tx.c')
-rw-r--r-- | net/mac80211/tx.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c index e2ae1e1fcc7b..3d57e6d80f6d 100644 --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c | |||
@@ -430,8 +430,6 @@ ieee80211_tx_h_select_key(struct ieee80211_txrx_data *tx) | |||
430 | { | 430 | { |
431 | struct ieee80211_key *key; | 431 | struct ieee80211_key *key; |
432 | 432 | ||
433 | tx->u.tx.control->key_idx = HW_KEY_IDX_INVALID; | ||
434 | |||
435 | if (unlikely(tx->u.tx.control->flags & IEEE80211_TXCTL_DO_NOT_ENCRYPT)) | 433 | if (unlikely(tx->u.tx.control->flags & IEEE80211_TXCTL_DO_NOT_ENCRYPT)) |
436 | tx->key = NULL; | 434 | tx->key = NULL; |
437 | else if (tx->sta && (key = rcu_dereference(tx->sta->key))) | 435 | else if (tx->sta && (key = rcu_dereference(tx->sta->key))) |
@@ -442,8 +440,10 @@ ieee80211_tx_h_select_key(struct ieee80211_txrx_data *tx) | |||
442 | !(tx->sdata->eapol && ieee80211_is_eapol(tx->skb))) { | 440 | !(tx->sdata->eapol && ieee80211_is_eapol(tx->skb))) { |
443 | I802_DEBUG_INC(tx->local->tx_handlers_drop_unencrypted); | 441 | I802_DEBUG_INC(tx->local->tx_handlers_drop_unencrypted); |
444 | return TXRX_DROP; | 442 | return TXRX_DROP; |
445 | } else | 443 | } else { |
446 | tx->key = NULL; | 444 | tx->key = NULL; |
445 | tx->u.tx.control->flags |= IEEE80211_TXCTL_DO_NOT_ENCRYPT; | ||
446 | } | ||
447 | 447 | ||
448 | if (tx->key) { | 448 | if (tx->key) { |
449 | tx->key->tx_rx_count++; | 449 | tx->key->tx_rx_count++; |
@@ -724,6 +724,15 @@ ieee80211_tx_h_misc(struct ieee80211_txrx_data *tx) | |||
724 | } | 724 | } |
725 | } | 725 | } |
726 | 726 | ||
727 | /* | ||
728 | * Tell hardware to not encrypt when we had sw crypto. | ||
729 | * Because we use the same flag to internally indicate that | ||
730 | * no (software) encryption should be done, we have to set it | ||
731 | * after all crypto handlers. | ||
732 | */ | ||
733 | if (tx->key && !(tx->key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE)) | ||
734 | tx->u.tx.control->flags |= IEEE80211_TXCTL_DO_NOT_ENCRYPT; | ||
735 | |||
727 | return TXRX_CONTINUE; | 736 | return TXRX_CONTINUE; |
728 | } | 737 | } |
729 | 738 | ||
@@ -833,7 +842,6 @@ __ieee80211_parse_tx_radiotap( | |||
833 | */ | 842 | */ |
834 | 843 | ||
835 | control->retry_limit = 1; /* no retry */ | 844 | control->retry_limit = 1; /* no retry */ |
836 | control->key_idx = HW_KEY_IDX_INVALID; | ||
837 | control->flags &= ~(IEEE80211_TXCTL_USE_RTS_CTS | | 845 | control->flags &= ~(IEEE80211_TXCTL_USE_RTS_CTS | |
838 | IEEE80211_TXCTL_USE_CTS_PROTECT); | 846 | IEEE80211_TXCTL_USE_CTS_PROTECT); |
839 | control->flags |= IEEE80211_TXCTL_DO_NOT_ENCRYPT | | 847 | control->flags |= IEEE80211_TXCTL_DO_NOT_ENCRYPT | |