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

Reply via email to