aboutsummaryrefslogtreecommitdiffstats
path: root/include/net/mac80211.h
diff options
context:
space:
mode:
authorEmmanuel Grumbach <emmanuel.grumbach@intel.com>2008-03-20 09:06:42 -0400
committerJohn W. Linville <linville@tuxdriver.com>2008-03-25 16:41:53 -0400
commit9ae4fda332df616ef47d5bb710c39681641d4303 (patch)
tree7cecfed1dfac8e6fdf7e33957d7da7767a35619c /include/net/mac80211.h
parent5d2cdcd4e85c5187db30a6b29f79fbbe59f39f78 (diff)
mac80211: allows driver to request a Phase 1 RX key
This patch makes mac80211 able to send a phase1 key for TKIP decryption. This is needed for drivers that don't do the rekeying by themselves (i.e. iwlwifi). Upon IV16 wrap around, the packet is decrypted in SW, if decryption is ok, mac80211 calls to update_tkip_key with a new phase 1 RX key. Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Signed-off-by: Tomas Winkler <tomas.winkler@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'include/net/mac80211.h')
-rw-r--r--include/net/mac80211.h17
1 files changed, 17 insertions, 0 deletions
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index 2a134582fc16..48428a6b9109 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -827,6 +827,16 @@ static inline void SET_IEEE80211_PERM_ADDR(struct ieee80211_hw *hw, u8 *addr)
827 * parameter is guaranteed to be valid until another call to set_key() 827 * parameter is guaranteed to be valid until another call to set_key()
828 * removes it, but it can only be used as a cookie to differentiate 828 * removes it, but it can only be used as a cookie to differentiate
829 * keys. 829 * keys.
830 *
831 * In TKIP some HW need to be provided a phase 1 key, for RX decryption
832 * acceleration (i.e. iwlwifi). Those drivers should provide update_tkip_key
833 * handler.
834 * The update_tkip_key() call updates the driver with the new phase 1 key.
835 * This happens everytime the iv16 wraps around (every 65536 packets). The
836 * set_key() call will happen only once for each key (unless the AP did
837 * rekeying), it will not include a valid phase 1 key. The valid phase 1 key is
838 * provided by udpate_tkip_key only. The trigger that makes mac80211 call this
839 * handler is software decryption with wrap around of iv16.
830 */ 840 */
831 841
832/** 842/**
@@ -1003,6 +1013,10 @@ enum ieee80211_ampdu_mlme_action {
1003 * and remove_interface calls, i.e. while the interface with the 1013 * and remove_interface calls, i.e. while the interface with the
1004 * given local_address is enabled. 1014 * given local_address is enabled.
1005 * 1015 *
1016 * @update_tkip_key: See the section "Hardware crypto acceleration"
1017 * This callback will be called in the context of Rx. Called for drivers
1018 * which set IEEE80211_KEY_FLAG_TKIP_REQ_RX_P1_KEY.
1019 *
1006 * @hw_scan: Ask the hardware to service the scan request, no need to start 1020 * @hw_scan: Ask the hardware to service the scan request, no need to start
1007 * the scan state machine in stack. The scan must honour the channel 1021 * the scan state machine in stack. The scan must honour the channel
1008 * configuration done by the regulatory agent in the wiphy's registered 1022 * configuration done by the regulatory agent in the wiphy's registered
@@ -1094,6 +1108,9 @@ struct ieee80211_ops {
1094 int (*set_key)(struct ieee80211_hw *hw, enum set_key_cmd cmd, 1108 int (*set_key)(struct ieee80211_hw *hw, enum set_key_cmd cmd,
1095 const u8 *local_address, const u8 *address, 1109 const u8 *local_address, const u8 *address,
1096 struct ieee80211_key_conf *key); 1110 struct ieee80211_key_conf *key);
1111 void (*update_tkip_key)(struct ieee80211_hw *hw,
1112 struct ieee80211_key_conf *conf, const u8 *address,
1113 u32 iv32, u16 *phase1key);
1097 int (*hw_scan)(struct ieee80211_hw *hw, u8 *ssid, size_t len); 1114 int (*hw_scan)(struct ieee80211_hw *hw, u8 *ssid, size_t len);
1098 int (*get_stats)(struct ieee80211_hw *hw, 1115 int (*get_stats)(struct ieee80211_hw *hw,
1099 struct ieee80211_low_level_stats *stats); 1116 struct ieee80211_low_level_stats *stats);