summaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/mediatek/mt76/mt76.h
diff options
context:
space:
mode:
authorFelix Fietkau2018-01-25 11:44:24 +0100
committerKalle Valo2018-01-26 10:20:52 +0100
commit30ce7f4456ae40e970d9e82fe63c5e55147af0c0 (patch)
tree06b61298712b3cc88b4fbcbaff9d72fc04576655 /drivers/net/wireless/mediatek/mt76/mt76.h
parentmt76: pass the per-vif wcid to the core for multicast rx (diff)
downloadkernel-qcow2-linux-30ce7f4456ae40e970d9e82fe63c5e55147af0c0.tar.gz
kernel-qcow2-linux-30ce7f4456ae40e970d9e82fe63c5e55147af0c0.tar.xz
kernel-qcow2-linux-30ce7f4456ae40e970d9e82fe63c5e55147af0c0.zip
mt76: validate rx CCMP PN
Apparently hardware does not perform CCMP PN validation in hardware, so we need to take care of this in the driver. This is important for protecting against replay attacks. Since validation of fragmented frames is more complex, the CCMP header for those is preserved. To keep the counter in sync, the first fragment is verified by both mt76 and mac80211, and all other fragments only by mac80211. Signed-off-by: Felix Fietkau <nbd@nbd.name> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Diffstat (limited to 'drivers/net/wireless/mediatek/mt76/mt76.h')
-rw-r--r--drivers/net/wireless/mediatek/mt76/mt76.h12
1 files changed, 10 insertions, 2 deletions
diff --git a/drivers/net/wireless/mediatek/mt76/mt76.h b/drivers/net/wireless/mediatek/mt76/mt76.h
index af98bc65c2e1..129015c9d116 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76.h
+++ b/drivers/net/wireless/mediatek/mt76/mt76.h
@@ -131,6 +131,9 @@ struct mt76_wcid {
u8 sta:1;
+ u8 rx_check_pn;
+ u8 rx_key_pn[IEEE80211_NUM_TIDS][6];
+
__le16 tx_rate;
bool tx_rate_set;
u8 tx_rate_nss;
@@ -279,12 +282,14 @@ struct mt76_rx_status {
unsigned long reorder_time;
- u8 aggr;
+ u8 iv[6];
+
+ u8 aggr:1;
u8 tid;
u16 seqno;
- u32 flag;
u16 freq;
+ u32 flag;
u8 enc_flags;
u8 encoding:2, bw:3;
u8 rate_idx;
@@ -413,6 +418,9 @@ int mt76_rx_aggr_start(struct mt76_dev *dev, struct mt76_wcid *wcid, u8 tid,
u16 ssn, u8 size);
void mt76_rx_aggr_stop(struct mt76_dev *dev, struct mt76_wcid *wcid, u8 tid);
+void mt76_wcid_key_setup(struct mt76_dev *dev, struct mt76_wcid *wcid,
+ struct ieee80211_key_conf *key);
+
/* internal */
void mt76_tx_free(struct mt76_dev *dev);
void mt76_put_txwi(struct mt76_dev *dev, struct mt76_txwi_cache *t);