aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Wunderlich <sw@simonwunderlich.de>2014-03-03 11:23:12 -0500
committerDavid S. Miller <davem@davemloft.net>2014-03-04 13:51:06 -0500
commit960d97f9518ef6fb8ff87450d6b0c88ce5df9532 (patch)
treee91b718ac33eecdf83271c01c93d20974b70ce67
parentf3baa393ffc9a7aefc0bf767729382085e81f606 (diff)
cfg80211: add MPLS and 802.21 classification
MPLS labels may contain traffic control information, which should be evaluated and used by the wireless subsystem if present. Also check for IEEE 802.21 which is always network control traffic. Signed-off-by: Simon Wunderlich <sw@simonwunderlich.de> Signed-off-by: Mathias Kretschmer <mathias.kretschmer@fokus.fraunhofer.de> Acked-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: David S. Miller <davem@davemloft.net>
-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 }