Hi,
I'm running in AP mode with 4956 and I see that frames transmitted
from one client through the AP to a second client will not have the
correct TID set in the QoS header after being forwarded from the AP.
At the end of ieee80211_deliver_skb there is this code that redirects
rx frames sent to local stations back to the wireless driver:
if (xmit_skb) {
/* send to wireless media */
xmit_skb->protocol = __constant_htons(ETH_P_802_3);
skb_reset_network_header(xmit_skb);
skb_reset_mac_header(xmit_skb);
dev_queue_xmit(xmit_skb);
}
Then in classify_1d:
if (skb->protocol != __constant_htons(ETH_P_IP) ||
skb->len < offset + sizeof(*ip))
return 0;
The thing is that the protocol is set to ETH_P_802_3 and not IP...
What do you think is the right way to fix this? Parse the frame in
deliver_skb and set the protocol to be IP (when IP frame), or leave
that as is and in classify_1d parse the frame instead of testing the
protocol field?
I'm running with a slightly older version of mac, but I think it is
the same behavior in wireless-dev 2.6 latest sources.
Thanks,
Guy.
Hi,
> What do you think is the right way to fix this? Parse the frame in
> deliver_skb and set the protocol to be IP (when IP frame), or leave
> that as is and in classify_1d parse the frame instead of testing the
> protocol field?
Can you explain the spec requirements? I'm mostly ignorant of the
11e/11n specs. It seems like if the TID should be preserved we should do
that regardless of whether the packet is IP/non-IP so neither of these
solutions would work. But maybe that's not what is required?
johannes