aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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 @@
11#include <net/ip.h> 11#include <net/ip.h>
12#include <net/dsfield.h> 12#include <net/dsfield.h>
13#include <linux/if_vlan.h> 13#include <linux/if_vlan.h>
14#include <linux/mpls.h>
14#include "core.h" 15#include "core.h"
15#include "rdev-ops.h" 16#include "rdev-ops.h"
16 17
@@ -717,6 +718,21 @@ unsigned int cfg80211_classify8021d(struct sk_buff *skb,
717 case htons(ETH_P_IPV6): 718 case htons(ETH_P_IPV6):
718 dscp = ipv6_get_dsfield(ipv6_hdr(skb)) & 0xfc; 719 dscp = ipv6_get_dsfield(ipv6_hdr(skb)) & 0xfc;
719 break; 720 break;
721 case htons(ETH_P_MPLS_UC):
722 case htons(ETH_P_MPLS_MC): {
723 struct mpls_label mpls_tmp, *mpls;
724
725 mpls = skb_header_pointer(skb, sizeof(struct ethhdr),
726 sizeof(*mpls), &mpls_tmp);
727 if (!mpls)
728 return 0;
729
730 return (ntohl(mpls->entry) & MPLS_LS_TC_MASK)
731 >> MPLS_LS_TC_SHIFT;
732 }
733 case htons(ETH_P_80221):
734 /* 802.21 is always network control traffic */
735 return 7;
720 default: 736 default:
721 return 0; 737 return 0;
722 } 738 }