From patchwork Fri May 3 15:03:11 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Edward Cree X-Patchwork-Id: 1094935 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=solarflare.com Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44wb434w9Nz9s4Y for ; Sat, 4 May 2019 01:03:31 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727972AbfECPDa (ORCPT ); Fri, 3 May 2019 11:03:30 -0400 Received: from dispatch1-us1.ppe-hosted.com ([67.231.154.164]:41992 "EHLO dispatch1-us1.ppe-hosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725283AbfECPD3 (ORCPT ); Fri, 3 May 2019 11:03:29 -0400 X-Virus-Scanned: Proofpoint Essentials engine Received: from webmail.solarflare.com (uk.solarflare.com [193.34.186.16]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us4.ppe-hosted.com (Proofpoint Essentials ESMTP Server) with ESMTPS id A2E82280081; Fri, 3 May 2019 15:03:27 +0000 (UTC) Received: from ehc-opti7040.uk.solarflarecom.com (10.17.20.203) by ukex01.SolarFlarecom.com (10.17.10.4) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Fri, 3 May 2019 16:03:20 +0100 Date: Fri, 3 May 2019 16:03:11 +0100 From: Edward Cree X-X-Sender: ehc@ehc-opti7040.uk.solarflarecom.com To: Jamal Hadi Salim , Jiri Pirko , "Pablo Neira Ayuso" , David Miller CC: netdev , Cong Wang , Andy Gospodarek , Anjali Singhai Jain , Jakub Kicinski , Or Gerlitz Subject: [RFC PATCH net-next 1/3] flow_offload: copy tcfa_index into flow_action_entry Message-ID: User-Agent: Alpine 2.21 (LFD 202 2017-01-01) MIME-Version: 1.0 X-Originating-IP: [10.17.20.203] X-ClientProxiedBy: ocex03.SolarFlarecom.com (10.20.40.36) To ukex01.SolarFlarecom.com (10.17.10.4) X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.5.1010-24588.003 X-TM-AS-Result: No-6.464900-8.000000-10 X-TMASE-MatchedRID: Ii+EGXSJ7Vi0PK/eA06et0xxHBq7BCSEj/xLIaDSshEAhmnHHeGnvXB4 4IkzjfYyrUhQzMxACbp1LpODxWBULCCCuZ8QtFxJngIgpj8eDcDYr6U3ZlQkdsRB0bsfrpPIHm9 ggFVoCcBMsgKEDln+gAK1cStn4Pdq4YDzEDJNH3MlyK7Oxyyn9x9+/0Kz56dvftwZ3X11IV0= X-TM-AS-User-Approved-Sender: Yes X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10--6.464900-8.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.5.1010-24588.003 X-MDID: 1556895808-rKx-d03YbwPU Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Required for support of shared counters (and possibly other shared per- action entities in future). Signed-off-by: Edward Cree --- include/net/flow_offload.h | 1 + net/sched/cls_api.c | 1 + 2 files changed, 2 insertions(+) diff --git a/include/net/flow_offload.h b/include/net/flow_offload.h index d035183c8d03..6f59cdaf6eb6 100644 --- a/include/net/flow_offload.h +++ b/include/net/flow_offload.h @@ -135,6 +135,7 @@ enum flow_action_mangle_base { struct flow_action_entry { enum flow_action_id id; + u32 action_index; union { u32 chain_index; /* FLOW_ACTION_GOTO */ struct net_device *dev; /* FLOW_ACTION_REDIRECT */ diff --git a/net/sched/cls_api.c b/net/sched/cls_api.c index 263c2ec082c9..835f3129c24f 100644 --- a/net/sched/cls_api.c +++ b/net/sched/cls_api.c @@ -3193,6 +3193,7 @@ int tc_setup_flow_action(struct flow_action *flow_action, struct flow_action_entry *entry; entry = &flow_action->entries[j]; + entry->action_index = act->tcfa_index; if (is_tcf_gact_ok(act)) { entry->id = FLOW_ACTION_ACCEPT; } else if (is_tcf_gact_shot(act)) { From patchwork Fri May 3 15:06:55 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Edward Cree X-Patchwork-Id: 1094936 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=solarflare.com Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44wb8L0Nlnz9s4Y for ; Sat, 4 May 2019 01:07:13 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728165AbfECPHM (ORCPT ); Fri, 3 May 2019 11:07:12 -0400 Received: from dispatch1-us1.ppe-hosted.com ([67.231.154.164]:47372 "EHLO dispatch1-us1.ppe-hosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727970AbfECPHM (ORCPT ); Fri, 3 May 2019 11:07:12 -0400 X-Virus-Scanned: Proofpoint Essentials engine Received: from webmail.solarflare.com (uk.solarflare.com [193.34.186.16]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us1.ppe-hosted.com (Proofpoint Essentials ESMTP Server) with ESMTPS id C34A1B00076; Fri, 3 May 2019 15:07:10 +0000 (UTC) Received: from ehc-opti7040.uk.solarflarecom.com (10.17.20.203) by ukex01.SolarFlarecom.com (10.17.10.4) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Fri, 3 May 2019 16:07:04 +0100 Date: Fri, 3 May 2019 16:06:55 +0100 From: Edward Cree X-X-Sender: ehc@ehc-opti7040.uk.solarflarecom.com To: Jamal Hadi Salim , Jiri Pirko , "Pablo Neira Ayuso" , David Miller CC: netdev , Cong Wang , Andy Gospodarek , Anjali Singhai Jain , Jakub Kicinski , "Or Gerlitz" Subject: [RFC PATCH net-next 2/3] flow_offload: restore ability to collect separate stats per action Message-ID: User-Agent: Alpine 2.21 (LFD 202 2017-01-01) MIME-Version: 1.0 X-Originating-IP: [10.17.20.203] X-ClientProxiedBy: ocex03.SolarFlarecom.com (10.20.40.36) To ukex01.SolarFlarecom.com (10.17.10.4) X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.5.1010-24588.003 X-TM-AS-Result: No-7.142200-8.000000-10 X-TMASE-MatchedRID: y64C6oV0e4ded9AE62fSOfVFR4sC8dPy6J4k0JZAHPIs/uUAk6xP7PlY oV6p/cSxrKWVhE5vxYb+q2b8e8ILI2MAzi+7d0chyeVujmXuYYVA8JZETQujwr/A+0D1to6PxUD TxL3vuSDGmF+VTWRGnedWYGJrDycl7gp3lniZRi9/OBWacv+iVTacujaE3jwhmyiLZetSf8l9j2 GwzTE3vSq2rl3dzGQ1ropAi/FV10zxGD8G3ENQB3RL5UyNJUkG7bw3Q6y1XyFjDdectxANJHaZp 1RYI3/x X-TM-AS-User-Approved-Sender: Yes X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10--7.142200-8.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.5.1010-24588.003 X-MDID: 1556896031-iRETPWV9w366 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Introduce a new offload command TC_CLSFLOWER_STATS_BYINDEX, similar to the existing TC_CLSFLOWER_STATS but specifying an action_index (the tcfa_index of the action), which is called for each stats-having action on the rule. Drivers should implement either, but not both, of these commands. Signed-off-by: Edward Cree --- include/net/pkt_cls.h | 2 ++ net/sched/cls_flower.c | 30 ++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/include/net/pkt_cls.h b/include/net/pkt_cls.h index d5e7a1af346f..0e33c52c23a8 100644 --- a/include/net/pkt_cls.h +++ b/include/net/pkt_cls.h @@ -762,6 +762,7 @@ enum tc_fl_command { TC_CLSFLOWER_REPLACE, TC_CLSFLOWER_DESTROY, TC_CLSFLOWER_STATS, + TC_CLSFLOWER_STATS_BYINDEX, TC_CLSFLOWER_TMPLT_CREATE, TC_CLSFLOWER_TMPLT_DESTROY, }; @@ -773,6 +774,7 @@ struct tc_cls_flower_offload { struct flow_rule *rule; struct flow_stats stats; u32 classid; + u32 action_index; /* for TC_CLSFLOWER_STATS_BYINDEX */ }; static inline struct flow_rule * diff --git a/net/sched/cls_flower.c b/net/sched/cls_flower.c index f6685fc53119..be339cd6a86e 100644 --- a/net/sched/cls_flower.c +++ b/net/sched/cls_flower.c @@ -474,6 +474,10 @@ static void fl_hw_update_stats(struct tcf_proto *tp, struct cls_fl_filter *f, { struct tc_cls_flower_offload cls_flower = {}; struct tcf_block *block = tp->chain->block; +#ifdef CONFIG_NET_CLS_ACT + struct tc_action *a; + int i; +#endif if (!rtnl_held) rtnl_lock(); @@ -489,6 +493,32 @@ static void fl_hw_update_stats(struct tcf_proto *tp, struct cls_fl_filter *f, cls_flower.stats.pkts, cls_flower.stats.lastused); +#ifdef CONFIG_NET_CLS_ACT + for (i = 0; i < f->exts.nr_actions; i++) { + a = f->exts.actions[i]; + + if (!a->ops->stats_update) + continue; + memset(&cls_flower, 0, sizeof(cls_flower)); + tc_cls_common_offload_init(&cls_flower.common, tp, f->flags, NULL); + cls_flower.command = TC_CLSFLOWER_STATS_BYINDEX; + cls_flower.cookie = (unsigned long) f; + cls_flower.classid = f->res.classid; + cls_flower.action_index = a->tcfa_index; + + tc_setup_cb_call(block, TC_SETUP_CLSFLOWER, &cls_flower, false); + + /* Some ->stats_update() use percpu variables and must thus be + * called with preemption disabled. + */ + preempt_disable(); + a->ops->stats_update(a, cls_flower.stats.bytes, + cls_flower.stats.pkts, + cls_flower.stats.lastused, true); + preempt_enable(); + } +#endif + if (!rtnl_held) rtnl_unlock(); } From patchwork Fri May 3 15:08:13 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Edward Cree X-Patchwork-Id: 1094937 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=solarflare.com Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44wb9r5CKsz9sB8 for ; Sat, 4 May 2019 01:08:32 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728161AbfECPIb (ORCPT ); Fri, 3 May 2019 11:08:31 -0400 Received: from dispatch1-us1.ppe-hosted.com ([67.231.154.164]:56770 "EHLO dispatch1-us1.ppe-hosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726495AbfECPIb (ORCPT ); Fri, 3 May 2019 11:08:31 -0400 X-Virus-Scanned: Proofpoint Essentials engine Received: from webmail.solarflare.com (uk.solarflare.com [193.34.186.16]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us2.ppe-hosted.com (Proofpoint Essentials ESMTP Server) with ESMTPS id AC55C30007B; Fri, 3 May 2019 15:08:29 +0000 (UTC) Received: from ehc-opti7040.uk.solarflarecom.com (10.17.20.203) by ukex01.SolarFlarecom.com (10.17.10.4) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Fri, 3 May 2019 16:08:22 +0100 Date: Fri, 3 May 2019 16:08:13 +0100 From: Edward Cree X-X-Sender: ehc@ehc-opti7040.uk.solarflarecom.com To: Jamal Hadi Salim , Jiri Pirko , "Pablo Neira Ayuso" , David Miller CC: netdev , Cong Wang , Andy Gospodarek , Anjali Singhai Jain , Jakub Kicinski , Or Gerlitz Subject: [RFC PATCH net-next 3/3] flow_offload: support CVLAN match Message-ID: User-Agent: Alpine 2.21 (LFD 202 2017-01-01) MIME-Version: 1.0 X-Originating-IP: [10.17.20.203] X-ClientProxiedBy: ocex03.SolarFlarecom.com (10.20.40.36) To ukex01.SolarFlarecom.com (10.17.10.4) X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.5.1010-24588.003 X-TM-AS-Result: No-2.055700-8.000000-10 X-TMASE-MatchedRID: sCDf79FZeQnOt+/gOYaZxQPZZctd3P4Bl2F9+KxZd8dLiJUKJm5lyKPF jJEFr+olxpQ77C1A1tr3FLeZXNZS4CiM3WUt6LtFaOz8F/pTe4s6KXoNUjPX83e0nBluT2htduc eJolmdr+YVct0aJ7Wm++yCLGQELewg2VxtXdrUuvUlyHrHv2rMgKTsGFb+J78FwqhNBEHf/RyoI PhxHMm1bhCj6a0MTv8SvGzpcUo0RA= X-TM-AS-User-Approved-Sender: Yes X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10--2.055700-8.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.5.1010-24588.003 X-MDID: 1556896110-QFXLn_q7yj2D Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Plumb it through from the flow_dissector. Signed-off-by: Edward Cree --- include/net/flow_offload.h | 2 ++ net/core/flow_offload.c | 7 +++++++ 2 files changed, 9 insertions(+) diff --git a/include/net/flow_offload.h b/include/net/flow_offload.h index 6f59cdaf6eb6..48847ee7aa3a 100644 --- a/include/net/flow_offload.h +++ b/include/net/flow_offload.h @@ -71,6 +71,8 @@ void flow_rule_match_eth_addrs(const struct flow_rule *rule, struct flow_match_eth_addrs *out); void flow_rule_match_vlan(const struct flow_rule *rule, struct flow_match_vlan *out); +void flow_rule_match_cvlan(const struct flow_rule *rule, + struct flow_match_vlan *out); void flow_rule_match_ipv4_addrs(const struct flow_rule *rule, struct flow_match_ipv4_addrs *out); void flow_rule_match_ipv6_addrs(const struct flow_rule *rule, diff --git a/net/core/flow_offload.c b/net/core/flow_offload.c index c3a00eac4804..5ce7d47a960e 100644 --- a/net/core/flow_offload.c +++ b/net/core/flow_offload.c @@ -54,6 +54,13 @@ void flow_rule_match_vlan(const struct flow_rule *rule, } EXPORT_SYMBOL(flow_rule_match_vlan); +void flow_rule_match_cvlan(const struct flow_rule *rule, + struct flow_match_vlan *out) +{ + FLOW_DISSECTOR_MATCH(rule, FLOW_DISSECTOR_KEY_CVLAN, out); +} +EXPORT_SYMBOL(flow_rule_match_cvlan); + void flow_rule_match_ipv4_addrs(const struct flow_rule *rule, struct flow_match_ipv4_addrs *out) {