wireless: Treat IPv6 diffserv the same as IPv4 for 802.11e
authorDave Täht <dave.taht@bufferbloat.net>
Thu, 22 Dec 2011 20:55:08 +0000 (12:55 -0800)
committerJohn W. Linville <linville@tuxdriver.com>
Wed, 4 Jan 2012 19:30:43 +0000 (14:30 -0500)
Wireless will select a different hardware queue based on the
top 3 bits of the diffserv field, for ipv4. Extend that queue
selection mechanism to ipv6, and make the calls orthogonal.

Signed-off-by: Dave Täht <dave.taht@bufferbloat.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
net/wireless/util.c

index e77df75850048c3e5b4eb19f788581f7226c0c34..9aa9db6c81411ddfcd77c34de8128fcd57e2e5d2 100644 (file)
@@ -9,6 +9,7 @@
 #include <linux/slab.h>
 #include <net/cfg80211.h>
 #include <net/ip.h>
+#include <net/dsfield.h>
 #include "core.h"
 
 struct ieee80211_rate *
@@ -650,7 +651,10 @@ unsigned int cfg80211_classify8021d(struct sk_buff *skb)
 
        switch (skb->protocol) {
        case htons(ETH_P_IP):
-               dscp = ip_hdr(skb)->tos & 0xfc;
+               dscp = ipv4_get_dsfield(ip_hdr(skb)) & 0xfc;
+               break;
+       case htons(ETH_P_IPV6):
+               dscp = ipv6_get_dsfield(ipv6_hdr(skb)) & 0xfc;
                break;
        default:
                return 0;