From patchwork Fri Feb 26 22:43:25 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jamal Hadi Salim X-Patchwork-Id: 589307 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id A8F2A14031E for ; Sat, 27 Feb 2016 09:43:55 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=mojatatu-com.20150623.gappssmtp.com header.i=@mojatatu-com.20150623.gappssmtp.com header.b=Gn8fG1La; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933849AbcBZWno (ORCPT ); Fri, 26 Feb 2016 17:43:44 -0500 Received: from mail-ig0-f175.google.com ([209.85.213.175]:34084 "EHLO mail-ig0-f175.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755106AbcBZWnm (ORCPT ); Fri, 26 Feb 2016 17:43:42 -0500 Received: by mail-ig0-f175.google.com with SMTP id g6so48752996igt.1 for ; Fri, 26 Feb 2016 14:43:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mojatatu-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=F3IYTE3gkZMYwnO2jao2Rai3mIIKHiY2BZwGnYi0Rfs=; b=Gn8fG1LaPSZk+Tnu/CDNlKkJUxEqnAYOHqTxmLUkjn2hKUqWUEHZIfbPxAu0GERw6k waGNLhCclY6Mcr8LJ8IRt3ZI7Cd1Wxf/NWC2QZ4aUvgouxg4pfp947aeJjdYwE3/k9Eo +1xVhi+CqyasDPkBF8Bb+joQxOA6CNOa8q9DP/lJv8LLgmv6Ug7BsP20enP85Kh89gYc LoiXsXrabhkheFWpvoWpbQQkOAkEdP/aFHVPAymK0iOtrHzEVCA8iR7XutWDlJ0gGStI mBW0/LU0flxdlKGXAoKW/+2hDs3fW63REyPaTO52XuCvE9RhX3kkipPVKFfKdkd71UdH qB/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=F3IYTE3gkZMYwnO2jao2Rai3mIIKHiY2BZwGnYi0Rfs=; b=PJ5AjRJqyrMc4721EN7IQlS+DAYfHZyewEYmOFa6DceUqshCeQ2c3UO4GuKlwmoQYO bywzrhKD0sb3NhdTKv3Fjy3Na63oD+veTZZf/SVlyMmrPivuDIvGOF7DXkAKIPYj6Qzn PFmvDVzZ2d/USdVdpmlXHkwHWKbPJQpqmtnEzvL8CbWLZCt8GudsSwMIqEQ9afPh4dte fZX62zy9dsXm61RXFsYKQZhSh0DXhLAH1p09HUUNVjG3ot/va3WHiOAkXhTIpJQl7IN+ Fjc92uDcdrgVOlCcVXqT/B5WY4/P+Kxlkk6pEdXR00Hr9eyPiCgb3hox/GTF7RfwH+S/ Hn1Q== X-Gm-Message-State: AD7BkJLtBVkpthj9EYNIuvS7hkSrF/jqnyvWvxtYMMbiZrUq2+5grmAjpwNH0sj/p65I2A== X-Received: by 10.50.92.70 with SMTP id ck6mr301095igb.80.1456526621393; Fri, 26 Feb 2016 14:43:41 -0800 (PST) Received: from jhs-UX303LB.lan ([64.26.149.125]) by smtp.gmail.com with ESMTPSA id n3sm2220881igr.17.2016.02.26.14.43.40 (version=TLSv1/SSLv3 cipher=OTHER); Fri, 26 Feb 2016 14:43:40 -0800 (PST) From: Jamal Hadi Salim X-Google-Original-From: Jamal Hadi Salim To: davem@davemloft.net Cc: netdev@vger.kernel.org, daniel@iogearbox.net, xiyou.wangcong@gmail.com, Jamal Hadi Salim Subject: [net-next-2.6 v3 3/3] Support to encoding decoding skb prio on IFE action Date: Fri, 26 Feb 2016 17:43:25 -0500 Message-Id: <1456526605-15774-4-git-send-email-jhs@emojatatu.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1456526605-15774-1-git-send-email-jhs@emojatatu.com> References: <1456526605-15774-1-git-send-email-jhs@emojatatu.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Jamal Hadi Salim Example usage: xxx: Set the skb priority using skbedit then allow it to be encoded sudo tc qdisc add dev $ETH root handle 1: prio sudo tc filter add dev $ETH parent 1: protocol ip prio 10 \ u32 match ip protocol 1 0xff flowid 1:2 \ action skbedit prio 17 \ action ife encode \ allow prio \ dst 02:15:15:15:15:15 Note: You dont need the skbedit action if you are already encoding the skb priority earlier. A zero skb priority will not be sent Alternative hard code static priority of decimal 33 (unlike skbedit) then mark of 0x12 every time the filter matches sudo $TC filter add dev $ETH parent 1: protocol ip prio 10 \ u32 match ip protocol 1 0xff flowid 1:2 \ action ife encode \ type 0xDEAD \ use prio 33 \ use mark 0x12 \ dst 02:15:15:15:15:15 Signed-off-by: Jamal Hadi Salim --- net/sched/Kconfig | 5 +++ net/sched/Makefile | 1 + net/sched/act_meta_skbprio.c | 76 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 82 insertions(+) create mode 100644 net/sched/act_meta_skbprio.c diff --git a/net/sched/Kconfig b/net/sched/Kconfig index 85854c0..b148302 100644 --- a/net/sched/Kconfig +++ b/net/sched/Kconfig @@ -756,6 +756,11 @@ config NET_IFE_SKBMARK depends on NET_ACT_IFE ---help--- +config NET_IFE_SKBPRIO + tristate "Support to encoding decoding skb prio on IFE action" + depends on NET_ACT_IFE + ---help--- + config NET_CLS_IND bool "Incoming device classification" depends on NET_CLS_U32 || NET_CLS_FW diff --git a/net/sched/Makefile b/net/sched/Makefile index 3f7a182..84bddb3 100644 --- a/net/sched/Makefile +++ b/net/sched/Makefile @@ -21,6 +21,7 @@ obj-$(CONFIG_NET_ACT_BPF) += act_bpf.o obj-$(CONFIG_NET_ACT_CONNMARK) += act_connmark.o obj-$(CONFIG_NET_ACT_IFE) += act_ife.o obj-$(CONFIG_NET_IFE_SKBMARK) += act_meta_mark.o +obj-$(CONFIG_NET_IFE_SKBPRIO) += act_meta_skbprio.o obj-$(CONFIG_NET_SCH_FIFO) += sch_fifo.o obj-$(CONFIG_NET_SCH_CBQ) += sch_cbq.o obj-$(CONFIG_NET_SCH_HTB) += sch_htb.o diff --git a/net/sched/act_meta_skbprio.c b/net/sched/act_meta_skbprio.c new file mode 100644 index 0000000..26bf4d8 --- /dev/null +++ b/net/sched/act_meta_skbprio.c @@ -0,0 +1,76 @@ +/* + * net/sched/act_meta_prio.c IFE skb->priority metadata module + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version + * 2 of the License, or (at your option) any later version. + * + * copyright Jamal Hadi Salim (2015) + * +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static int skbprio_check(struct sk_buff *skb, struct tcf_meta_info *e) +{ + return ife_check_meta_u32(skb->priority, e); +} + +static int skbprio_encode(struct sk_buff *skb, void *skbdata, + struct tcf_meta_info *e) +{ + u32 ifeprio = skb->priority; /* avoid having to cast skb->priority*/ + + return ife_encode_meta_u32(ifeprio, skbdata, e); +} + +static int skbprio_decode(struct sk_buff *skb, void *data, u16 len) +{ + u32 ifeprio = *(u32 *)data; + + skb->priority = ntohl(ifeprio); + return 0; +} + +static struct tcf_meta_ops ife_prio_ops = { + .metaid = IFE_META_PRIO, + .metatype = NLA_U32, + .name = "skbprio", + .synopsis = "skb prio metadata", + .check_presence = skbprio_check, + .encode = skbprio_encode, + .decode = skbprio_decode, + .get = ife_get_meta_u32, + .alloc = ife_alloc_meta_u32, + .owner = THIS_MODULE, +}; + +static int __init ifeprio_init_module(void) +{ + return register_ife_op(&ife_prio_ops); +} + +static void __exit ifeprio_cleanup_module(void) +{ + unregister_ife_op(&ife_prio_ops); +} + +module_init(ifeprio_init_module); +module_exit(ifeprio_cleanup_module); + +MODULE_AUTHOR("Jamal Hadi Salim(2015)"); +MODULE_DESCRIPTION("Inter-FE skb prio metadata action"); +MODULE_LICENSE("GPL"); +MODULE_ALIAS_IFE_META(IFE_META_PRIO);