Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=a8bdf29c6cd117644d27677962fe832b33036c77
Commit:     a8bdf29c6cd117644d27677962fe832b33036c77
Parent:     69a73829dbb10e7c8554e66a80cb4fde57347fff
Author:     Guy Cohen <[EMAIL PROTECTED]>
AuthorDate: Wed Jan 9 19:12:48 2008 +0200
Committer:  David S. Miller <[EMAIL PROTECTED]>
CommitDate: Mon Jan 28 15:10:41 2008 -0800

    mac80211: Assign correct TID for local bridged packets
    
    This patch assigns correct TID to frames transmitted between
    two stations in the same BSS in AP mode.
    The problem is that skb->protocol is not set to ETH_P_IP and it is wrong
    to use that field at this stage.
    The fix compares the LLC/Protocol headers explicitly to check if the
    encapsulated frame is IP frame
    
    Signed-off-by: Guy Cohen <[EMAIL PROTECTED]>
    Signed-off-by: John W. Linville <[EMAIL PROTECTED]>
---
 net/mac80211/wme.c |    9 +++++----
 1 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/net/mac80211/wme.c b/net/mac80211/wme.c
index 455fadc..0245195 100644
--- a/net/mac80211/wme.c
+++ b/net/mac80211/wme.c
@@ -28,6 +28,7 @@ struct ieee80211_sched_data
        struct sk_buff_head requeued[TC_80211_MAX_QUEUES];
 };
 
+static const char llc_ip_hdr[8] = {0xAA, 0xAA, 0x3, 0, 0, 0, 0x08, 0};
 
 /* given a data frame determine the 802.1p/1d tag to use */
 static inline unsigned classify_1d(struct sk_buff *skb, struct Qdisc *qd)
@@ -54,12 +55,12 @@ static inline unsigned classify_1d(struct sk_buff *skb, 
struct Qdisc *qd)
                return skb->priority - 256;
 
        /* check there is a valid IP header present */
-       offset = ieee80211_get_hdrlen_from_skb(skb) + 8 /* LLC + proto */;
-       if (skb->protocol != htons(ETH_P_IP) ||
-           skb->len < offset + sizeof(*ip))
+       offset = ieee80211_get_hdrlen_from_skb(skb);
+       if (skb->len < offset + sizeof(llc_ip_hdr) + sizeof(*ip) ||
+           memcmp(skb->data + offset, llc_ip_hdr, sizeof(llc_ip_hdr)))
                return 0;
 
-       ip = (struct iphdr *) (skb->data + offset);
+       ip = (struct iphdr *) (skb->data + offset + sizeof(llc_ip_hdr));
 
        dscp = ip->tos & 0xfc;
        if (dscp & 0x1c)
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to