mac80211: add option to generate CCMP IVs only for mgmt frames
Some chips can encrypt managment frames in HW, but require generated IV in the frame. Add a key flag that allows us to achieve this. Signed-off-by: Marek Kwaczynski <marek.kwaczynski@tieto.com> [use BIT(0) to fill that spot, fix indentation] Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
c0166da9fe
commit
17d38fa8c2
|
@ -1202,14 +1202,18 @@ struct ieee80211_vif *wdev_to_ieee80211_vif(struct wireless_dev *wdev);
|
||||||
* fall back to software crypto. Note that this flag deals only with
|
* fall back to software crypto. Note that this flag deals only with
|
||||||
* RX, if your crypto engine can't deal with TX you can also set the
|
* RX, if your crypto engine can't deal with TX you can also set the
|
||||||
* %IEEE80211_KEY_FLAG_SW_MGMT_TX flag to encrypt such frames in SW.
|
* %IEEE80211_KEY_FLAG_SW_MGMT_TX flag to encrypt such frames in SW.
|
||||||
|
* @IEEE80211_KEY_FLAG_GENERATE_IV_MGMT: This flag should be set by the
|
||||||
|
* driver for a CCMP key to indicate that is requires IV generation
|
||||||
|
* only for managment frames (MFP).
|
||||||
*/
|
*/
|
||||||
enum ieee80211_key_flags {
|
enum ieee80211_key_flags {
|
||||||
IEEE80211_KEY_FLAG_GENERATE_IV = 1<<1,
|
IEEE80211_KEY_FLAG_GENERATE_IV_MGMT = BIT(0),
|
||||||
IEEE80211_KEY_FLAG_GENERATE_MMIC= 1<<2,
|
IEEE80211_KEY_FLAG_GENERATE_IV = BIT(1),
|
||||||
IEEE80211_KEY_FLAG_PAIRWISE = 1<<3,
|
IEEE80211_KEY_FLAG_GENERATE_MMIC = BIT(2),
|
||||||
IEEE80211_KEY_FLAG_SW_MGMT_TX = 1<<4,
|
IEEE80211_KEY_FLAG_PAIRWISE = BIT(3),
|
||||||
IEEE80211_KEY_FLAG_PUT_IV_SPACE = 1<<5,
|
IEEE80211_KEY_FLAG_SW_MGMT_TX = BIT(4),
|
||||||
IEEE80211_KEY_FLAG_RX_MGMT = 1<<6,
|
IEEE80211_KEY_FLAG_PUT_IV_SPACE = BIT(5),
|
||||||
|
IEEE80211_KEY_FLAG_RX_MGMT = BIT(6),
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -406,7 +406,10 @@ static int ccmp_encrypt_skb(struct ieee80211_tx_data *tx, struct sk_buff *skb)
|
||||||
|
|
||||||
if (info->control.hw_key &&
|
if (info->control.hw_key &&
|
||||||
!(info->control.hw_key->flags & IEEE80211_KEY_FLAG_GENERATE_IV) &&
|
!(info->control.hw_key->flags & IEEE80211_KEY_FLAG_GENERATE_IV) &&
|
||||||
!(info->control.hw_key->flags & IEEE80211_KEY_FLAG_PUT_IV_SPACE)) {
|
!(info->control.hw_key->flags & IEEE80211_KEY_FLAG_PUT_IV_SPACE) &&
|
||||||
|
!((info->control.hw_key->flags &
|
||||||
|
IEEE80211_KEY_FLAG_GENERATE_IV_MGMT) &&
|
||||||
|
ieee80211_is_mgmt(hdr->frame_control))) {
|
||||||
/*
|
/*
|
||||||
* hwaccel has no need for preallocated room for CCMP
|
* hwaccel has no need for preallocated room for CCMP
|
||||||
* header or MIC fields
|
* header or MIC fields
|
||||||
|
|
Loading…
Reference in New Issue