Message ID | 1393244920-15903-4-git-send-email-sw@simonwunderlich.de (mailing list archive) |
---|---|
State | Not Applicable, archived |
Headers | show |
On Mon, 2014-02-24 at 13:28 +0100, Simon Wunderlich wrote: > 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. Fine with me. I guess this should go through net-next due to the dependencies on patches 1 and 2. > 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> johannes -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Hello. On 02/24/2014 03:28 PM, Simon Wunderlich wrote: > 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> > --- > Changes to second version: > * rely on skb->protocol instead of checking ethertype > Changes to first version: > > * include linux/mpls.h, not the UAPI one > * change __constant_htons to htons > --- > net/wireless/util.c | 16 ++++++++++++++++ > 1 file changed, 16 insertions(+) > diff --git a/net/wireless/util.c b/net/wireless/util.c > index d39c371..6799d5a 100644 > --- a/net/wireless/util.c > +++ b/net/wireless/util.c [...] > @@ -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_stack 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; > + } Brace is over-indented here, it can't be at the same level as the statements it embraces. WBR, Sergei -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/net/wireless/util.c b/net/wireless/util.c index d39c371..6799d5a 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_stack 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; }