On Wed, 2016-10-12 at 12:57 +0200, Michael Braun wrote:
> According to IEEE 802.11-2012 section 8.3.2 table 8-19, the outer
> SA/DA of A-MSDU frames need to be changed depending on FromDS/ToDS
> struct ieee80211_hdr *hdr;
> - struct ethhdr amsdu_hdr;
> + struct ethhdr *amsdu_hdr;
> int hdr_len = fast_tx->hdr_len - sizeof(rfc1042_header);
802.11 header length
> + data = skb_push(skb, sizeof(*amsdu_hdr));
push ethernet header in
> + memmove(data, data + sizeof(*amsdu_hdr), hdr_len);
move 802.11 header from back to front
> + hdr = data;
hdr is at the beginning of the frame
> + amsdu_hdr = data + hdr_len;
amsdu_hdr is actually the *inner* header after all.
So, I actually think my first instinct that you were erroneously
changing the inner header *was* right.
Seems like this code should be inserted towards the end of
ieee80211_amsdu_aggregate() instead, where it's adding the RFC 1042
Need Felix to take a look, I guess.