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 > values. actually ... > struct ieee80211_hdr *hdr; 802.11 header > - 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 header? Need Felix to take a look, I guess. johannes