mac80211: allow drivers to access key sequence counter
In order to implement GTK rekeying, the device needs to be able to encrypt frames with the right PN/IV and check the PN/IV in RX frames. To be able to tell it about all those counters, we need to be able to get them from mac80211, this adds the required API. Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
committed by
John W. Linville
parent
9e26297a56
commit
3ea542d3c2
@@ -2591,6 +2591,66 @@ void ieee80211_get_tkip_p1k(struct ieee80211_key_conf *keyconf,
|
||||
void ieee80211_get_tkip_p2k(struct ieee80211_key_conf *keyconf,
|
||||
struct sk_buff *skb, u8 *p2k);
|
||||
|
||||
/**
|
||||
* struct ieee80211_key_seq - key sequence counter
|
||||
*
|
||||
* @tkip: TKIP data, containing IV32 and IV16 in host byte order
|
||||
* @ccmp: PN data, most significant byte first (big endian,
|
||||
* reverse order than in packet)
|
||||
* @aes_cmac: PN data, most significant byte first (big endian,
|
||||
* reverse order than in packet)
|
||||
*/
|
||||
struct ieee80211_key_seq {
|
||||
union {
|
||||
struct {
|
||||
u32 iv32;
|
||||
u16 iv16;
|
||||
} tkip;
|
||||
struct {
|
||||
u8 pn[6];
|
||||
} ccmp;
|
||||
struct {
|
||||
u8 pn[6];
|
||||
} aes_cmac;
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* ieee80211_get_key_tx_seq - get key TX sequence counter
|
||||
*
|
||||
* @keyconf: the parameter passed with the set key
|
||||
* @seq: buffer to receive the sequence data
|
||||
*
|
||||
* This function allows a driver to retrieve the current TX IV/PN
|
||||
* for the given key. It must not be called if IV generation is
|
||||
* offloaded to the device.
|
||||
*
|
||||
* Note that this function may only be called when no TX processing
|
||||
* can be done concurrently, for example when queues are stopped
|
||||
* and the stop has been synchronized.
|
||||
*/
|
||||
void ieee80211_get_key_tx_seq(struct ieee80211_key_conf *keyconf,
|
||||
struct ieee80211_key_seq *seq);
|
||||
|
||||
/**
|
||||
* ieee80211_get_key_rx_seq - get key RX sequence counter
|
||||
*
|
||||
* @keyconf: the parameter passed with the set key
|
||||
* @tid: The TID, or -1 for the management frame value (CCMP only);
|
||||
* the value on TID 0 is also used for non-QoS frames. For
|
||||
* CMAC, only TID 0 is valid.
|
||||
* @seq: buffer to receive the sequence data
|
||||
*
|
||||
* This function allows a driver to retrieve the current RX IV/PNs
|
||||
* for the given key. It must not be called if IV checking is done
|
||||
* by the device and not by mac80211.
|
||||
*
|
||||
* Note that this function may only be called when no RX processing
|
||||
* can be done concurrently.
|
||||
*/
|
||||
void ieee80211_get_key_rx_seq(struct ieee80211_key_conf *keyconf,
|
||||
int tid, struct ieee80211_key_seq *seq);
|
||||
|
||||
/**
|
||||
* ieee80211_gtk_rekey_notify - notify userspace supplicant of rekeying
|
||||
* @vif: virtual interface the rekeying was done on
|
||||
|
||||
Reference in New Issue
Block a user