summaryrefslogtreecommitdiff
path: root/net/wireless/util.c
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2014-03-04 13:51:13 -0500
committerDavid S. Miller <davem@davemloft.net>2014-03-04 13:51:13 -0500
commit9e82e7f4af0ad90ab41b4ae80ce42b20df20c725 (patch)
treee91b718ac33eecdf83271c01c93d20974b70ce67 /net/wireless/util.c
parentf19c29e3e391a66a273e9afebaf01917245148cd (diff)
parent960d97f9518ef6fb8ff87450d6b0c88ce5df9532 (diff)
Merge branch 'mpls_tc'
Simon Wunderlich says: ==================== this series contains a header file proposal for MPLS labels. These labels do not seem to be properly defined in the kernel so far. We are developing a wired/wireless 802.21/MPLS switch and need to check the MPLS labels to use the traffic control info for transmissions over 802.11 networks. Changes to third version: * rename mpls_label_stack to mpls_label (thanks Neil) * fix over-indendented closing brac (thanks Sergei) * add Johannes' Ack ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/wireless/util.c')
-rw-r--r--net/wireless/util.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/net/wireless/util.c b/net/wireless/util.c
index 780b4546c9c7..ad03af385556 100644
--- a/net/wireless/util.c
+++ b/net/wireless/util.c
@@ -11,6 +11,7 @@
#include <net/ip.h>
#include <net/dsfield.h>
#include <linux/if_vlan.h>
+#include <linux/mpls.h>
#include "core.h"
#include "rdev-ops.h"
@@ -717,6 +718,21 @@ unsigned int cfg80211_classify8021d(struct sk_buff *skb,
case htons(ETH_P_IPV6):
dscp = ipv6_get_dsfield(ipv6_hdr(skb)) & 0xfc;
break;
+ case htons(ETH_P_MPLS_UC):
+ case htons(ETH_P_MPLS_MC): {
+ struct mpls_label mpls_tmp, *mpls;
+
+ mpls = skb_header_pointer(skb, sizeof(struct ethhdr),
+ sizeof(*mpls), &mpls_tmp);
+ if (!mpls)
+ return 0;
+
+ return (ntohl(mpls->entry) & MPLS_LS_TC_MASK)
+ >> MPLS_LS_TC_SHIFT;
+ }
+ case htons(ETH_P_80221):
+ /* 802.21 is always network control traffic */
+ return 7;
default:
return 0;
}