From mboxrd@z Thu Jan 1 00:00:00 1970 From: Pablo Neira Ayuso Subject: [PATCH net-next,v3 00/12] add flow_rule infrastructure Date: Wed, 21 Nov 2018 03:51:20 +0100 Message-ID: <20181121025132.14305-1-pablo@netfilter.org> Cc: davem@davemloft.net, thomas.lendacky@amd.com, f.fainelli@gmail.com, ariel.elior@cavium.com, michael.chan@broadcom.com, santosh@chelsio.com, madalin.bucur@nxp.com, yisen.zhuang@huawei.com, salil.mehta@huawei.com, jeffrey.t.kirsher@intel.com, tariqt@mellanox.com, saeedm@mellanox.com, jiri@mellanox.com, idosch@mellanox.com, jakub.kicinski@netronome.com, peppe.cavallaro@st.com, grygorii.strashko@ti.com, andrew@lunn.ch, vivien.didelot@savoirfairelinux.com, alexandre.torgue@st.com, joabreu@synopsys.com, linux-net-drivers@solarflare.com, ganeshgr@chelsio.com, ogerlitz@mellanox.com, Manish.Chopra@cavium.com To: netdev@vger.kernel.org Return-path: Received: from mail.us.es ([193.147.175.20]:47490 "EHLO mail.us.es" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725949AbeKUNY3 (ORCPT ); Wed, 21 Nov 2018 08:24:29 -0500 Received: from antivirus1-rhel7.int (unknown [192.168.2.11]) by mail.us.es (Postfix) with ESMTP id 43196DA7BA for ; Wed, 21 Nov 2018 03:52:03 +0100 (CET) Received: from antivirus1-rhel7.int (localhost [127.0.0.1]) by antivirus1-rhel7.int (Postfix) with ESMTP id 2FEFFDA79E for ; Wed, 21 Nov 2018 03:52:03 +0100 (CET) Sender: netdev-owner@vger.kernel.org List-ID: Hi, This patchset is the third iteration [1] [2] [3] to introduce a kernel intermediate (IR) to express ACL hardware offloads. This round addresses feedback from Jiri Pirko: * Add net/core/flow_offload.c and include/net/flow_offload.h. * Add flow_rule_alloc() helper function. * Remove _key postfix and _KEY_ infix in flow_action definitions. * Use enum flow_action_mangle_base for consistency. * Rename key field to entries and num_keys to num_entries. * Rename struct flow_action_key to flow_action_entry. * Use placeholder in struct flow_action to store array of actions from flow_rule_alloc(). * Add tcf_exts_num_actions() and pass it to flow_rule_alloc() to calculate the size of the array of actions. * Rename to struct flow_stats and to function flow_stats_update(). * Add struct ethtool_rx_flow_rule, keep placeholder to private dissector information. * Pass struct flow_rule *rule to all parser functions in qlogic/qede driver. This also fixes a bug reported by Manish Chopra, in the ethtool_rx_spec to flow_rule translator. Making all these changes have been an exercise to review the existing infrastructure, to understand what has been done and to propose improvements to the _great work_ that core drivers developers have done so far to introduce HW offloads through the existing frontend APIs. I still have more feedback and technical ideas that I'm very much looking forward to discuss with them in the future. Main goal of this patchset is to avoid code duplication for driver developers. There are no netfilter changes coming in this batch. I would like to explore Netfilter hardware offloads in the future. Thanks a lot for reviewing! [1] https://lwn.net/Articles/766695/ [2] https://marc.info/?l=linux-netdev&m=154233253114506&w=2 [3] https://marc.info/?l=linux-netdev&m=154258780717036&w=2 Pablo Neira Ayuso (12): flow_dissector: add flow_rule and flow_match structures and use them net/mlx5e: support for two independent packet edit actions flow_dissector: add flow action infrastructure cls_api: add translator to flow_action representation cls_flower: add statistics retrieval infrastructure and use it drivers: net: use flow action infrastructure cls_flower: don't expose TC actions to drivers anymore flow_dissector: add wake-up-on-lan and queue to flow_action flow_dissector: add basic ethtool_rx_flow_spec to flow_rule structure translator dsa: bcm_sf2: use flow_rule infrastructure qede: place ethtool_rx_flow_spec after code after TC flower codebase qede: use ethtool_rx_flow_rule() to remove duplicated parser code drivers/net/dsa/bcm_sf2_cfp.c | 109 +-- drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c | 252 +++---- .../net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.c | 450 ++++++------- drivers/net/ethernet/intel/i40e/i40e_main.c | 178 ++--- drivers/net/ethernet/intel/iavf/iavf_main.c | 195 +++--- drivers/net/ethernet/intel/igb/igb_main.c | 64 +- drivers/net/ethernet/mellanox/mlx5/core/en_tc.c | 743 ++++++++++----------- drivers/net/ethernet/mellanox/mlxsw/spectrum_acl.c | 2 +- .../net/ethernet/mellanox/mlxsw/spectrum_flower.c | 258 ++++--- drivers/net/ethernet/netronome/nfp/flower/action.c | 196 +++--- drivers/net/ethernet/netronome/nfp/flower/match.c | 417 ++++++------ .../net/ethernet/netronome/nfp/flower/offload.c | 150 ++--- drivers/net/ethernet/qlogic/qede/qede_filter.c | 560 ++++++---------- include/linux/ethtool.h | 10 + include/net/flow_offload.h | 199 ++++++ include/net/pkt_cls.h | 18 +- net/core/Makefile | 2 +- net/core/ethtool.c | 189 ++++++ net/core/flow_offload.c | 153 +++++ net/sched/cls_api.c | 116 ++++ net/sched/cls_flower.c | 69 +- 21 files changed, 2339 insertions(+), 1991 deletions(-) create mode 100644 include/net/flow_offload.h create mode 100644 net/core/flow_offload.c -- 2.11.0