From 5c5580bd6b3f970308844fe0d08857f43b7ae28f Mon Sep 17 00:00:00 2001 From: Chun-Yeow Yeoh Date: Fri, 4 Apr 2014 17:01:15 +0800 Subject: [PATCH] ath9k_htc_firmware: fix the offset of CCMP header for mesh data frame Mesh data frame uses at least 3 addresses scheme. So set the offset correctly while fetching the CCMP header. Previously, we are not able to do HW encryption for unicast data frame. Applying this patch will allow HW encryption and avoid loading ath9k_htc.ko using "nohwcrypt=1". Signed-off-by: Chun-Yeow Yeoh --- target_firmware/wlan/ieee80211_output.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/target_firmware/wlan/ieee80211_output.c b/target_firmware/wlan/ieee80211_output.c index ce034ed..3d68704 100755 --- a/target_firmware/wlan/ieee80211_output.c +++ b/target_firmware/wlan/ieee80211_output.c @@ -67,10 +67,16 @@ ieee80211_tgt_crypto_encap(struct ieee80211_frame *wh, a_uint16_t tmp; a_uint16_t offset = IEEE80211_WLAN_HDR_LEN; a_uint8_t b1, b2; + struct ieee80211_qosframe_addr4 *wh_mesh; if (IEEE80211_QOS_HAS_SEQ(wh)) offset += 4; // pad for 4 byte alignment + /* set the offset to 32 if the mesh control field is present */ + wh_mesh = (struct ieee80211_qosframe_addr4 *)wh; + if (wh_mesh->i_qos[1] == 0x01) + offset = 32; + iv = (a_uint8_t *) wh; iv = iv + offset; -- 2.25.1