From patchwork Wed Feb 12 10:53:06 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Wunderlich X-Patchwork-Id: 3636901 Return-Path: X-Original-To: patchwork-linux-wireless@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork2.web.kernel.org (Postfix) with ESMTP id F0050BF13A for ; Wed, 12 Feb 2014 11:02:26 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id D2A2420170 for ; Wed, 12 Feb 2014 11:02:25 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id E6F022015D for ; Wed, 12 Feb 2014 11:02:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751757AbaBLLCW (ORCPT ); Wed, 12 Feb 2014 06:02:22 -0500 Received: from packetmixer.de ([79.140.42.25]:44522 "EHLO mail.mail.packetmixer.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751592AbaBLLCV (ORCPT ); Wed, 12 Feb 2014 06:02:21 -0500 Received: from kero.packetmixer.de (drsd-4dbd9c1c.pool.mediaWays.net [77.189.156.28]) (using TLSv1.2 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (No client certificate requested) by mail.mail.packetmixer.de (Postfix) with ESMTPSA id E04BB7107E; Wed, 12 Feb 2014 12:06:10 +0100 (CET) From: Simon Wunderlich To: netdev@vger.kernel.org Cc: davem@davemloft.net, linux-wireless@vger.kernel.org, mathias.kretschmer@fokus.fraunhofer.de, Simon Wunderlich Subject: [net-next 3/3] cfg80211: add MPLS and 802.21 classification Date: Wed, 12 Feb 2014 11:53:06 +0100 Message-Id: <1392202386-8826-4-git-send-email-sw@simonwunderlich.de> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1392202386-8826-1-git-send-email-sw@simonwunderlich.de> References: <1392202386-8826-1-git-send-email-sw@simonwunderlich.de> Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Spam-Status: No, score=-7.6 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP 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 Signed-off-by: Mathias Kretschmer --- net/wireless/util.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/net/wireless/util.c b/net/wireless/util.c index d39c371..98e3b11 100644 --- a/net/wireless/util.c +++ b/net/wireless/util.c @@ -11,6 +11,7 @@ #include #include #include +#include #include "core.h" #include "rdev-ops.h" @@ -710,6 +711,29 @@ unsigned int cfg80211_classify8021d(struct sk_buff *skb, return vlan_priority; } + if (skb_headlen(skb) >= sizeof(struct ethhdr)) { + struct ethhdr *eh = (struct ethhdr *) skb->data; + struct mpls_label_stack mpls_tmp, *mpls; + + switch (eh->h_proto) { + case __constant_htons(ETH_P_MPLS_UC): + case __constant_htons(ETH_P_MPLS_MC): + /* MPLS */ + mpls = skb_header_pointer(skb, sizeof(*eh), + sizeof(*mpls), &mpls_tmp); + if (!mpls) + break; + + return (ntohl(mpls->entry) & MPLS_LS_TC_MASK) + >> MPLS_LS_TC_SHIFT; + case __constant_htons(ETH_P_80221): + /* 802.21 is always network control traffic */ + return 7; + default: + break; + } + } + switch (skb->protocol) { case htons(ETH_P_IP): dscp = ipv4_get_dsfield(ip_hdr(skb)) & 0xfc;