From patchwork Fri May 28 14:42:40 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Horman X-Patchwork-Id: 449886 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER, INCLUDES_PATCH, MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE,SPF_PASS, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 88AA1C2B9F7 for ; Fri, 28 May 2021 14:43:18 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 62E5C611CD for ; Fri, 28 May 2021 14:43:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235602AbhE1Oou (ORCPT ); Fri, 28 May 2021 10:44:50 -0400 Received: from mail-dm6nam10on2097.outbound.protection.outlook.com ([40.107.93.97]:62452 "EHLO NAM10-DM6-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S235271AbhE1Ook (ORCPT ); Fri, 28 May 2021 10:44:40 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=LBAZtYOX9ekrVFPoZ1+ggwjk/bWUo/yBXK6OhI1pm+fLekFHvN64KrAV6wS2jGFlPElvLqQ6/uXLxLj5y4EI4fmGgbOXRMAESARbKOub2Yirop0rZRq/WGFXwwwxytlse+XjNd80eJXAVRnSddelKXBUqDq2zyBThfZXTTCjY6qJUSebecix4cnaHmix67ZTD9EJ6JR4JVyuEpnn7AExbFVOB7sJKCwU52tj/Z+abqX8TOjyjN1ympKE6boinD/QhwhKQ1YDZviwUHpPkEquCSxWyesVUwWCPhc3jgpJBws0O0Zg24Jds1nZZKP+0tdTfNOwO+cVt0DYJ+0fTm6dmg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=2Cd/T3tgvy/Mkz4LJjfaKbDo3ToX4TqVnxVAQ3oq2AE=; b=G7U+tj6IA4BqY5/y6+EKXKY8jhrTTgFTVa96llzdnj+8n1vBFwe137Wrw6OD/kTuWGJCstoWsXwJ1JX2e6wEEGH95hQgmYkmGi/3L99QMBgASKAfrMdoIMaV0iC12aS6E3nP7A9GXf6K1tpy5EKVi5F3ovOUVDTKpNUovMPnqPYkZ6NAqNToaXmtI49xE5RbpBFz+TUqTQs2qrXR9+scc6M/EJywSXaWNj20VySbb8NoCEg5ylKoHesVVxZCl8ooBm80OBbcS839TFCPxrnizd60PYksTIhlPO4qs6B0DB2q5dQVl4/195un573rd7jPfZRiu8gfGUZu/7mupe6THw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=2Cd/T3tgvy/Mkz4LJjfaKbDo3ToX4TqVnxVAQ3oq2AE=; b=JZYMQGogHBklmsYuBzGAY1ASPNFoE2YR4TJKzm7++ZiC+SYExFUI76S8EVEYlBV0Uj/hJ+r+grfAMehFtkirhcXGhY8IT5PFpnIv3MUvMxvlN7aVJiZIZXwxoNqyeFdt8bppTanOcHYeCtHzcpSDLCaRqJVN0d5AgOuurvo6goU= Authentication-Results: davemloft.net; dkim=none (message not signed) header.d=none; davemloft.net; dmarc=none action=none header.from=corigine.com; Received: from PH0PR13MB4842.namprd13.prod.outlook.com (2603:10b6:510:78::6) by PH0PR13MB5033.namprd13.prod.outlook.com (2603:10b6:510:90::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4195.11; Fri, 28 May 2021 14:43:04 +0000 Received: from PH0PR13MB4842.namprd13.prod.outlook.com ([fe80::4596:4181:eeee:7a8a]) by PH0PR13MB4842.namprd13.prod.outlook.com ([fe80::4596:4181:eeee:7a8a%9]) with mapi id 15.20.4173.020; Fri, 28 May 2021 14:43:04 +0000 From: Simon Horman To: David Miller , Jakub Kicinski Cc: netdev@vger.kernel.org, oss-drivers@corigine.com, Louis Peens , Yinjun Zhang , Simon Horman Subject: [PATCH net-next 2/8] nfp: flower-ct: add pre and post ct checks Date: Fri, 28 May 2021 16:42:40 +0200 Message-Id: <20210528144246.11669-3-simon.horman@corigine.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210528144246.11669-1-simon.horman@corigine.com> References: <20210528144246.11669-1-simon.horman@corigine.com> X-Originating-IP: [2001:982:7ed1:403:9eeb:e8ff:fe0d:5b6a] X-ClientProxiedBy: AM0PR01CA0164.eurprd01.prod.exchangelabs.com (2603:10a6:208:aa::33) To PH0PR13MB4842.namprd13.prod.outlook.com (2603:10b6:510:78::6) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from madeliefje.horms.nl (2001:982:7ed1:403:9eeb:e8ff:fe0d:5b6a) by AM0PR01CA0164.eurprd01.prod.exchangelabs.com (2603:10a6:208:aa::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4173.20 via Frontend Transport; Fri, 28 May 2021 14:43:02 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 54eb6f0a-f0af-464a-de87-08d921e6e634 X-MS-TrafficTypeDiagnostic: PH0PR13MB5033: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:6430; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: byq5SHiIuoWRKVDk3IEo1PDn0+frFBL0xH78B8jp2JkG4dYBHwmCfOI01pKp4fk51/B8kMfVdbf/bNs6JvI4Zrm1HUVdppnyxAkaFSmWgVOxeOwwbbDEBMcszQWrEEtRr1DT7gEmNqD9fk2EU6z2L5Pp6DE0d7MJP+jEjCvv5BlxEAlfYiuSHzytBRIV+tqlXF34YMrehIOCzVdaZBDHbWwG+Apl3KvLSchqt+3GgEDa3uaADlMGWB8RpfwrB71OnaVLdqzo1CLQrprSNfcFN8g0gpxRJYWrRBoBSC3BxF+MGqDfYwOq2whrm4Knrmpej3B5H7+Io8PVLwY7TPgZ0lhJTXQCJuLjOWHKoN2DlBd9gdnpUPjLU/1ZmphM3agQdSf56nJrsF0oJKj4ccKMtI53DpVnhqAjDImbeREJBOBZYIU7A7+h+0GqsGEtjUSo/4MYPWCfNn4+MKGQ7An0ptIQyZ0zcKP1ZtXwr1xLqXbQOfCSaSeF2zKraZb+s62yK5IuvG3Sc9cEIgFy2aQYRiSBm2noJ9WqBifjHIfVz2rEvRk2LWNMKDHQCJGNpyPvMh+4nDwdU/+1uTdFrJQI6jfvyAgDf8x41MzuvrTdo9A= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PH0PR13MB4842.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(346002)(396003)(366004)(376002)(136003)(39830400003)(16526019)(44832011)(186003)(5660300002)(6666004)(8936002)(6506007)(86362001)(36756003)(4326008)(107886003)(6512007)(8676002)(66476007)(83380400001)(66556008)(2616005)(316002)(54906003)(110136005)(52116002)(478600001)(6486002)(2906002)(66946007)(38100700002)(1076003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: AK0hFTODbX30gxtszMkaNC7HYsVoJsxr+3kcrB7+XvyAT/ZzLqPa7DbsmToOd7iJXisdWdO4XEc5ZikHyJjOiWtWSoU69CYhPshKZsx4hpf2bup94AWxuBK6OWdlTVQBvLx6hk/xNZEexqxfwDcieAcCgU0b0JPU8ssa3Q+NkovBSbXjsGFXOfjzJvRmTIYGnlwZoy6Neo9lVesOG+Ay4l6kgI1l56zewHxIGaZ6jXm9XBClRv6eXiZA7RYokOP9mAgpHNMFjwJGMr/0m2dG+uZ7Slypft5+bK4/4iRBV3KXs1d4y2dlu1bP1W3P027wpOaufQXI9YMRfteIAIXaMYMazuTLuYJY0sR+a1g0J0TxUXmtQRoJXyDtIBAJvByq++z2NSYNJV1QHnNGMV65GZLr5R5m7UlknAUt3n9SycRBU7+2Z4IdAgT8EOZcpffqjVDePhzE8QsAHkyAVnxApSec9226qpzXxPiXookDXvyZAtr3JpNMnhH5E5DvNYWll+h4sygT9jkYjgOmsTdTxne1q2uD3NvDRdvBFjTSUCuBVDBec+0Ena8FcsKdoxskNUji1OG3CyJd/ZgTFDKQsaof6p4LUUjBCo0zEd4b3LclEb/y6VY2pB72vneVfCGiSc0at+4upAEI3SCqu1vHg+Er0KzgesSSYv7cMqB6gg2ks3t1MDuTGL2Knc0leGkqbXyHIlzlv4ZrUfr78Cy0d2Hm4Yw3tHSap4TLS21TD2+Q1VWsQ4/xv4QdnJJOIrnxvNi0VGvgpbFPBypSGILVlSWzgyF7g8GVMhZcPopmQFhESphGvm4z4kCaJA4GFXV+pu1NyE2UMzjiuS9es1jMQRYDnTyaIZd8sOjwGvY5AjDGlRJWRcj8aEBCvBXdQQqEl5EbBKxpmY2MCWPjDBQgARTnidPi+E3CewDyc6X3OpNB2jnar7l+xrlFui1VyDBQNk5aT/v7kq54hsuBy5Un5IX2gruIY9BnMs+GlBmAThGjRN2Jo/AoN+9UN+2rM/Y9b4SYxn6mqDZnD7YHPxeTnRtmf+Ye2yjIsYVpgHztiiuDRUdHbgYEpDLbqLol8BWI7RrtwaZOIFLciDnM16HiVAp4aVvz5J8cyu3yiMH1S6h8aIiSnyYed/RcHCMmPkEjB7kQV+FSo1ze5nbYZnJcXQNOSFyd8Y4MTCt7EWb/SkZIQiyHnaN/w3FjgnbfujgKAMwlDusKr0MUNz5DN/NnGQa64ElstrpjwI6WEAA6Sd3nIKGdHMQnYRtsYXIKse8uGLnPEGdgmIY5gexj6+sSIi+9f/E+nThVFen8JV2sStdUjSuU6hcKPLl+jHTQR3vBWzd6S2cA1TQ94ALtNoHRqz7Pff0Fdtq2UweG+H3m7Zf10T/s96X4abfhiRDavwGL X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 54eb6f0a-f0af-464a-de87-08d921e6e634 X-MS-Exchange-CrossTenant-AuthSource: PH0PR13MB4842.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2021 14:43:03.9249 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: BnUcwLMtSSVfy6/a9bLmjPrXo60N/MPOMqBcMMFy87T/8pB1GJ1s+lEFrpyvfoqq7k2i0KZLrCQsN4BOHfhZ6kVwdKXBdUY6LnHG61stVcU= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR13MB5033 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Louis Peens Add checks to see if a flow is a conntrack flow we can potentially handle. Just stub out the handling the different conntrack flows. Signed-off-by: Louis Peens Signed-off-by: Yinjun Zhang Signed-off-by: Simon Horman --- drivers/net/ethernet/netronome/nfp/Makefile | 3 +- .../ethernet/netronome/nfp/flower/conntrack.c | 48 +++++++++++++++++++ .../ethernet/netronome/nfp/flower/conntrack.h | 45 +++++++++++++++++ .../ethernet/netronome/nfp/flower/offload.c | 7 +++ 4 files changed, 102 insertions(+), 1 deletion(-) create mode 100644 drivers/net/ethernet/netronome/nfp/flower/conntrack.c create mode 100644 drivers/net/ethernet/netronome/nfp/flower/conntrack.h diff --git a/drivers/net/ethernet/netronome/nfp/Makefile b/drivers/net/ethernet/netronome/nfp/Makefile index d31772ae511d..9cff3d48acbc 100644 --- a/drivers/net/ethernet/netronome/nfp/Makefile +++ b/drivers/net/ethernet/netronome/nfp/Makefile @@ -51,7 +51,8 @@ nfp-objs += \ flower/metadata.o \ flower/offload.o \ flower/tunnel_conf.o \ - flower/qos_conf.o + flower/qos_conf.o \ + flower/conntrack.o endif ifeq ($(CONFIG_BPF_SYSCALL),y) diff --git a/drivers/net/ethernet/netronome/nfp/flower/conntrack.c b/drivers/net/ethernet/netronome/nfp/flower/conntrack.c new file mode 100644 index 000000000000..aeea37a0135e --- /dev/null +++ b/drivers/net/ethernet/netronome/nfp/flower/conntrack.c @@ -0,0 +1,48 @@ +// SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +/* Copyright (C) 2021 Corigine, Inc. */ + +#include "conntrack.h" + +bool is_pre_ct_flow(struct flow_cls_offload *flow) +{ + struct flow_action_entry *act; + int i; + + flow_action_for_each(i, act, &flow->rule->action) { + if (act->id == FLOW_ACTION_CT && !act->ct.action) + return true; + } + return false; +} + +bool is_post_ct_flow(struct flow_cls_offload *flow) +{ + struct flow_rule *rule = flow_cls_offload_flow_rule(flow); + struct flow_dissector *dissector = rule->match.dissector; + struct flow_match_ct ct; + + if (dissector->used_keys & BIT(FLOW_DISSECTOR_KEY_CT)) { + flow_rule_match_ct(rule, &ct); + if (ct.key->ct_state & TCA_FLOWER_KEY_CT_FLAGS_ESTABLISHED) + return true; + } + return false; +} + +int nfp_fl_ct_handle_pre_ct(struct nfp_flower_priv *priv, + struct net_device *netdev, + struct flow_cls_offload *flow, + struct netlink_ext_ack *extack) +{ + NL_SET_ERR_MSG_MOD(extack, "unsupported offload: Conntrack action not supported"); + return -EOPNOTSUPP; +} + +int nfp_fl_ct_handle_post_ct(struct nfp_flower_priv *priv, + struct net_device *netdev, + struct flow_cls_offload *flow, + struct netlink_ext_ack *extack) +{ + NL_SET_ERR_MSG_MOD(extack, "unsupported offload: Conntrack match not supported"); + return -EOPNOTSUPP; +} diff --git a/drivers/net/ethernet/netronome/nfp/flower/conntrack.h b/drivers/net/ethernet/netronome/nfp/flower/conntrack.h new file mode 100644 index 000000000000..e8d034bb9807 --- /dev/null +++ b/drivers/net/ethernet/netronome/nfp/flower/conntrack.h @@ -0,0 +1,45 @@ +/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */ +/* Copyright (C) 2021 Corigine, Inc. */ + +#ifndef __NFP_FLOWER_CONNTRACK_H__ +#define __NFP_FLOWER_CONNTRACK_H__ 1 + +#include "main.h" + +bool is_pre_ct_flow(struct flow_cls_offload *flow); +bool is_post_ct_flow(struct flow_cls_offload *flow); + +/** + * nfp_fl_ct_handle_pre_ct() - Handles -trk conntrack rules + * @priv: Pointer to app priv + * @netdev: netdev structure. + * @flow: TC flower classifier offload structure. + * @extack: Extack pointer for errors + * + * Adds a new entry to the relevant zone table and tries to + * merge with other +trk+est entries and offload if possible. + * + * Return: negative value on error, 0 if configured successfully. + */ +int nfp_fl_ct_handle_pre_ct(struct nfp_flower_priv *priv, + struct net_device *netdev, + struct flow_cls_offload *flow, + struct netlink_ext_ack *extack); +/** + * nfp_fl_ct_handle_post_ct() - Handles +trk+est conntrack rules + * @priv: Pointer to app priv + * @netdev: netdev structure. + * @flow: TC flower classifier offload structure. + * @extack: Extack pointer for errors + * + * Adds a new entry to the relevant zone table and tries to + * merge with other -trk entries and offload if possible. + * + * Return: negative value on error, 0 if configured successfully. + */ +int nfp_fl_ct_handle_post_ct(struct nfp_flower_priv *priv, + struct net_device *netdev, + struct flow_cls_offload *flow, + struct netlink_ext_ack *extack); + +#endif diff --git a/drivers/net/ethernet/netronome/nfp/flower/offload.c b/drivers/net/ethernet/netronome/nfp/flower/offload.c index 16ef960a150d..7e4ad5d58859 100644 --- a/drivers/net/ethernet/netronome/nfp/flower/offload.c +++ b/drivers/net/ethernet/netronome/nfp/flower/offload.c @@ -7,6 +7,7 @@ #include "cmsg.h" #include "main.h" +#include "conntrack.h" #include "../nfpcore/nfp_cpp.h" #include "../nfpcore/nfp_nsp.h" #include "../nfp_app.h" @@ -1316,6 +1317,12 @@ nfp_flower_add_offload(struct nfp_app *app, struct net_device *netdev, if (nfp_netdev_is_nfp_repr(netdev)) port = nfp_port_from_netdev(netdev); + if (is_pre_ct_flow(flow)) + return nfp_fl_ct_handle_pre_ct(priv, netdev, flow, extack); + + if (is_post_ct_flow(flow)) + return nfp_fl_ct_handle_post_ct(priv, netdev, flow, extack); + if (!offload_pre_check(flow)) return -EOPNOTSUPP; From patchwork Fri May 28 14:42:42 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Horman X-Patchwork-Id: 449885 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER, INCLUDES_PATCH, MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE,SPF_PASS, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id A7725C4708C for ; Fri, 28 May 2021 14:43:25 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 80E65613C9 for ; Fri, 28 May 2021 14:43:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236474AbhE1Oo6 (ORCPT ); Fri, 28 May 2021 10:44:58 -0400 Received: from mail-dm6nam10on2097.outbound.protection.outlook.com ([40.107.93.97]:62452 "EHLO NAM10-DM6-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S235925AbhE1Ooq (ORCPT ); Fri, 28 May 2021 10:44:46 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=g07y3fMUYxxxrTJTlMUYOs/5rMlkSiX9Aa0wEBlwD+EHqX3T4uNEddSG3tK4G1thW9DdTdnOSpMZ1TZi2dv60GPFnP0ksvDYdcK2EcOTAR6PULyym4wARn6rO8CrEVsDPc0SJ4AiF3IZJEuRazqRjGk66M9t5sGKxsG9XM8oguj0F+2MqbDYUDI/wIYcvwohIPAnrYDBcmmg/hsMqbk53rlkq8+epfcVFIBR7VsopY0PK1ljYp0O0sQSTzbAwFHZud83FgGBqvl3gtzTWQoinqn99yf2zSHnL7IlUyCMwNbIMpRgZl1yBAMZVEarHVIwRbvyhCKrkQWtWnyIXDllyg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=r8Rt2q+Urw05+JDe8Ym76MFlczzYMVQ/EMXSWXt+gIw=; b=OFY2ojRXR2pjcsyM7vsWaUXTWOVyZDTLWtQqZ2oCukV/1m1y4a6IQhhwI3H0gecRJj+FfysWu9SGRtPw+WkDCN1AM7lxfHWvFvNxM1s/3xwbsJSg+I5TXryXJ3fs11Pe1kKc85ae+tU5rLu9onApgykbTL4pus2COGIQTrsSHXvQy05GjwyIUN/8zmVZllYJkGrrDUz8T0P6GzvFCfKEj/zbUpgWh+PYVcM9rpVVaUA29+Fek0oEDhlLDn408A6Xgd9CbgbrEhmNMTgA64GdvZtYQdxu7DwnCjXcsIOr+QV+FVN+tEfADa2I7tyFZkqRUSLNwIJFS0wlNgknLCFLwg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=r8Rt2q+Urw05+JDe8Ym76MFlczzYMVQ/EMXSWXt+gIw=; b=jvBTGnra9TNz9OjS5vhdfHmKd7xdg+9gxYp6o65RCT9SkJjTUG0ueFZaD0bWRwPvtmJtFrDCB2lUJRcjhnjEOMz1yycg22L2vm0PMHqJvgEQH/ZTVnLH1+i+kuOp+7cbPsVyBzCcRb9i5bv0klH7goIqkdGBhZmW4VLREpXMlpo= Authentication-Results: davemloft.net; dkim=none (message not signed) header.d=none; davemloft.net; dmarc=none action=none header.from=corigine.com; Received: from PH0PR13MB4842.namprd13.prod.outlook.com (2603:10b6:510:78::6) by PH0PR13MB5033.namprd13.prod.outlook.com (2603:10b6:510:90::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4195.11; Fri, 28 May 2021 14:43:07 +0000 Received: from PH0PR13MB4842.namprd13.prod.outlook.com ([fe80::4596:4181:eeee:7a8a]) by PH0PR13MB4842.namprd13.prod.outlook.com ([fe80::4596:4181:eeee:7a8a%9]) with mapi id 15.20.4173.020; Fri, 28 May 2021 14:43:07 +0000 From: Simon Horman To: David Miller , Jakub Kicinski Cc: netdev@vger.kernel.org, oss-drivers@corigine.com, Louis Peens , Yinjun Zhang , Simon Horman Subject: [PATCH net-next 4/8] nfp: flower-ct: add zone table entry when handling pre/post_ct flows Date: Fri, 28 May 2021 16:42:42 +0200 Message-Id: <20210528144246.11669-5-simon.horman@corigine.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210528144246.11669-1-simon.horman@corigine.com> References: <20210528144246.11669-1-simon.horman@corigine.com> X-Originating-IP: [2001:982:7ed1:403:9eeb:e8ff:fe0d:5b6a] X-ClientProxiedBy: AM0PR01CA0164.eurprd01.prod.exchangelabs.com (2603:10a6:208:aa::33) To PH0PR13MB4842.namprd13.prod.outlook.com (2603:10b6:510:78::6) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from madeliefje.horms.nl (2001:982:7ed1:403:9eeb:e8ff:fe0d:5b6a) by AM0PR01CA0164.eurprd01.prod.exchangelabs.com (2603:10a6:208:aa::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4173.20 via Frontend Transport; Fri, 28 May 2021 14:43:05 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 73503760-bae5-4aae-3f54-08d921e6e839 X-MS-TrafficTypeDiagnostic: PH0PR13MB5033: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:7219; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: bLVnDb961bjamhrtymL/RvJIlYQS543PmZompZVfpUZp1xd+JXe+2eGwk6ZLVbcxmw2zOUVyhKcr9ojCXUmten4NHQyqXCRP2nsEn2mimi1RBP6lg0rKUnRvpsQ/J4NSlViJE/3mlq+8ZOK73kPVl9MgPWLSZ65sM7PZxka3BLrYWrC0Fu3p4FZs2O1ThXLs9TyuOBzCVdsE/DwIRlosfOQkT6JX9zLuKFwpENpo9sVW17wP76fJRcfbWT5JqMVGWJSoCtzt0Yj3jfvjI2UU+hZnaJ5d2fFaQHt8pkL/iBOWybQypzvDoLOK5Dn68LoRHid9BdDKthzKqbf0oHnsNN0VZfGwrpYcSNVWNFdYo15f/UiRiVJxH5GZxQfFuuW1ldqtO9E0/o7KHSdPL/IFNKV191HwHFEsXQTNhVA05kJ1OpYuQNFD1Tli1YF+7+KyLFyF02paHOWs6zE37IKcXoZhnsAGLdQPVwAhDmzq1fUxCzHSUP00nQH9ahNr2VLMYoNa7ydEXlDSmbbHDN0nf14ZBbSXVOwoCMnkEVH16Vvbm8oZQMKOjng+vKDfh6mP8mt/c+ZEwjr1oxVUhVmr7JYb8WUUBBGgmAYd2jbeyuI= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PH0PR13MB4842.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(346002)(396003)(366004)(376002)(136003)(39830400003)(16526019)(44832011)(186003)(5660300002)(6666004)(8936002)(6506007)(86362001)(36756003)(4326008)(107886003)(6512007)(8676002)(66476007)(83380400001)(66556008)(2616005)(316002)(54906003)(110136005)(52116002)(478600001)(6486002)(2906002)(66946007)(38100700002)(1076003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: M2sTUQZCwX9UNmJy36EyH7LcLQiAXiiM+1yE61GtqdkiCUtH5FSShEMl+HpApEm+g7iieZf4QjUnYH0gLyV+S96bLQ05+S1qz+TAnlY8QwmPB34LgjzwCp3nDlQbQjXiuhfk5sbvrO0PZ7bm+DV7aoDueojg+/KSY4ni4qOgw9KCynPHkXnhKN/Ro6aH6//TrYjTOuNtdr9yEgN9O2Smcz5dKy3RoXtUyDHahhukd649fPCSAjD3GmpeQF6NWwRPe/BGOzqMQTCOleBlMX8sF5s9huBR9RzTkwM13d+sgNw4DM28w+6Od0STTCNuCeJUC1I8EjT9nRfS9+7FDvKzKZ0jw1CPRr9BDBkwAVeE/uu76Dp4zxgGXR4JzbEu+B0MJSXXsAGEFZ+fn47bOMIXYVZOtHPHxty62pp7QVOV/XJ0J5NWfF0a8qchZYThX26HX8IOYPXtJgKQMMle3MhNCscHB2+7vb2nE/pEJXICveXY9QxtBaOQXsJ8BS6bkftSg3ndNUu4ni4M2KvZqsSYt15pqImejQa+gg/rQrqt0JmsJzTVVhdfSzmvfXiO6jvplJouy3+PTiA4vZ1WVuh/OFCx7fRxdiMcYWwv5PW7GGz4reEZMFtCS11tfXZGcZowvFBOC0ORudkbGBBDwohHG6VZo0pVgwvGq+NDS5x5TBlSrVRw/nX+7DUNQFbPbw2JwmG8RqNJ2eqdTs7G+54n/7EwLZ7hcKqR/HQhrGIku26M5hmQwevdZmrzknfF75NrvgMlx2eRlTXgc/cW1pdetAvswAdSvAI+s7wjkB3X4qw5kmtOo+HoQ5p7Ewm/lypLMRq66tz2Br/E5M6m1+xtbk2y9wlobLOHdsA80sKLTb0XXon9wGf1/OAQ7KVDEjSD0W/MRyvIT+10TJ76P5utk3S2qei0lCitkXnyCbiq0R8U8IlhMQqlj/F1lYo7Ky1rFBKQ3mH5omgTVMebUU3a462h5NXm6StaP7A2CXFS1qggmMTrft3Kg0pLJX62326wUnQZF5n8JPyKL+Nr13nqSPGMU/Ydh2rGZhJwP9LGkNSplMzjowpFZGax/F5rHNazF1Sr5HXTCYa2ip7450iidwI6jaBee4L5iQEDTFIL9YaB7hNdrTyueUtIdZ2ipWGkAjZAVl0lk2PPlr7j/kXfKDistY+VXvETxEJGk+tC0FuNxK3kPjS5BkkHBovu9B1TvmNARr9TvseT8jm4AcmkBfB96gc7ALKE/FbTpoU1lHhzAYJ8H9zB+yeQTkDzSXCRB5k+90iEQLSjxbYjkNwJ5uJNiIQQsZ3PtXZ2ROiVCZu9jR2WB0rF6y+Gba7z8VlgQwbB7+gsXUtrd6n5EQYPPDoYXhkIo1snXaVzgXVE8Kql/4stvNHytSvZK891SjSc X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 73503760-bae5-4aae-3f54-08d921e6e839 X-MS-Exchange-CrossTenant-AuthSource: PH0PR13MB4842.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2021 14:43:07.2782 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Vtc9G9OsjyXbL8FzDMtQ+4NacjtYPnV0RASOjtJSpEJQrvfQULZ5Zr2/FvtSHttb2gKfS7VhGsx+mlcY3Bhy4uFFtoGnFs/8SP3olvaE8Rs= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR13MB5033 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Louis Peens Start populating the pre/post_ct handler functions. Add a zone entry to the zone table, based on the zone information from the flow. In the case of a post_ct flow which has a wildcarded match on the zone create a special entry. Signed-off-by: Louis Peens Signed-off-by: Yinjun Zhang Signed-off-by: Simon Horman --- .../ethernet/netronome/nfp/flower/conntrack.c | 124 ++++++++++++++++++ .../net/ethernet/netronome/nfp/flower/main.h | 4 +- .../ethernet/netronome/nfp/flower/metadata.c | 3 + 3 files changed, 130 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/netronome/nfp/flower/conntrack.c b/drivers/net/ethernet/netronome/nfp/flower/conntrack.c index aeea37a0135e..3a07196a8fe2 100644 --- a/drivers/net/ethernet/netronome/nfp/flower/conntrack.c +++ b/drivers/net/ethernet/netronome/nfp/flower/conntrack.c @@ -3,6 +3,32 @@ #include "conntrack.h" +/** + * get_hashentry() - Wrapper around hashtable lookup. + * @ht: hashtable where entry could be found + * @params: hashtable params + * @size: size of entry to allocate if not in table + * + * Returns an entry from a hashtable. If entry does not exist + * yet allocate the memory for it and return the new entry. + */ +static void *get_hashentry(struct rhashtable *ht, void *key, + const struct rhashtable_params params, size_t size) +{ + void *result; + + result = rhashtable_lookup_fast(ht, key, params); + + if (result) + return result; + + result = kzalloc(size, GFP_KERNEL); + if (!result) + return ERR_PTR(-ENOMEM); + + return result; +} + bool is_pre_ct_flow(struct flow_cls_offload *flow) { struct flow_action_entry *act; @@ -29,11 +55,88 @@ bool is_post_ct_flow(struct flow_cls_offload *flow) return false; } +static struct +nfp_fl_ct_zone_entry *get_nfp_zone_entry(struct nfp_flower_priv *priv, + u16 zone, bool wildcarded) +{ + struct nfp_fl_ct_zone_entry *zt; + int err; + + if (wildcarded && priv->ct_zone_wc) + return priv->ct_zone_wc; + + if (!wildcarded) { + zt = get_hashentry(&priv->ct_zone_table, &zone, + nfp_zone_table_params, sizeof(*zt)); + + /* If priv is set this is an existing entry, just return it */ + if (IS_ERR(zt) || zt->priv) + return zt; + } else { + zt = kzalloc(sizeof(*zt), GFP_KERNEL); + if (!zt) + return ERR_PTR(-ENOMEM); + } + + zt->zone = zone; + zt->priv = priv; + zt->nft = NULL; + + if (wildcarded) { + priv->ct_zone_wc = zt; + } else { + err = rhashtable_insert_fast(&priv->ct_zone_table, + &zt->hash_node, + nfp_zone_table_params); + if (err) + goto err_zone_insert; + } + + return zt; + +err_zone_insert: + kfree(zt); + return ERR_PTR(err); +} + +static struct flow_action_entry *get_flow_act(struct flow_cls_offload *flow, + enum flow_action_id act_id) +{ + struct flow_action_entry *act = NULL; + int i; + + flow_action_for_each(i, act, &flow->rule->action) { + if (act->id == act_id) + return act; + } + return NULL; +} + int nfp_fl_ct_handle_pre_ct(struct nfp_flower_priv *priv, struct net_device *netdev, struct flow_cls_offload *flow, struct netlink_ext_ack *extack) { + struct flow_action_entry *ct_act; + struct nfp_fl_ct_zone_entry *zt; + + ct_act = get_flow_act(flow, FLOW_ACTION_CT); + if (!ct_act) { + NL_SET_ERR_MSG_MOD(extack, + "unsupported offload: Conntrack action empty in conntrack offload"); + return -EOPNOTSUPP; + } + + zt = get_nfp_zone_entry(priv, ct_act->ct.zone, false); + if (IS_ERR(zt)) { + NL_SET_ERR_MSG_MOD(extack, + "offload error: Could not create zone table entry"); + return PTR_ERR(zt); + } + + if (!zt->nft) + zt->nft = ct_act->ct.flow_table; + NL_SET_ERR_MSG_MOD(extack, "unsupported offload: Conntrack action not supported"); return -EOPNOTSUPP; } @@ -43,6 +146,27 @@ int nfp_fl_ct_handle_post_ct(struct nfp_flower_priv *priv, struct flow_cls_offload *flow, struct netlink_ext_ack *extack) { + struct flow_rule *rule = flow_cls_offload_flow_rule(flow); + struct nfp_fl_ct_zone_entry *zt; + bool wildcarded = false; + struct flow_match_ct ct; + + flow_rule_match_ct(rule, &ct); + if (!ct.mask->ct_zone) { + wildcarded = true; + } else if (ct.mask->ct_zone != U16_MAX) { + NL_SET_ERR_MSG_MOD(extack, + "unsupported offload: partially wildcarded ct_zone is not supported"); + return -EOPNOTSUPP; + } + + zt = get_nfp_zone_entry(priv, ct.key->ct_zone, wildcarded); + if (IS_ERR(zt)) { + NL_SET_ERR_MSG_MOD(extack, + "offload error: Could not create zone table entry"); + return PTR_ERR(zt); + } + NL_SET_ERR_MSG_MOD(extack, "unsupported offload: Conntrack match not supported"); return -EOPNOTSUPP; } diff --git a/drivers/net/ethernet/netronome/nfp/flower/main.h b/drivers/net/ethernet/netronome/nfp/flower/main.h index b9de3d70f958..060c6de36c02 100644 --- a/drivers/net/ethernet/netronome/nfp/flower/main.h +++ b/drivers/net/ethernet/netronome/nfp/flower/main.h @@ -193,7 +193,8 @@ struct nfp_fl_internal_ports { * @qos_stats_lock: Lock on qos stats updates * @pre_tun_rule_cnt: Number of pre-tunnel rules offloaded * @merge_table: Hash table to store merged flows - * @ct_zone_table Hash table used to store the different zones + * @ct_zone_table: Hash table used to store the different zones + * @ct_zone_wc: Special zone entry for wildcarded zone matches */ struct nfp_flower_priv { struct nfp_app *app; @@ -229,6 +230,7 @@ struct nfp_flower_priv { int pre_tun_rule_cnt; struct rhashtable merge_table; struct rhashtable ct_zone_table; + struct nfp_fl_ct_zone_entry *ct_zone_wc; }; /** diff --git a/drivers/net/ethernet/netronome/nfp/flower/metadata.c b/drivers/net/ethernet/netronome/nfp/flower/metadata.c index 74c0dd508f55..10d84ebf77bf 100644 --- a/drivers/net/ethernet/netronome/nfp/flower/metadata.c +++ b/drivers/net/ethernet/netronome/nfp/flower/metadata.c @@ -586,6 +586,8 @@ int nfp_flower_metadata_init(struct nfp_app *app, u64 host_ctx_count, static void nfp_free_zone_table_entry(void *ptr, void *arg) { struct nfp_fl_ct_zone_entry *zt = ptr; + + kfree(zt); } void nfp_flower_metadata_cleanup(struct nfp_app *app) @@ -603,6 +605,7 @@ void nfp_flower_metadata_cleanup(struct nfp_app *app) nfp_check_rhashtable_empty, NULL); rhashtable_free_and_destroy(&priv->ct_zone_table, nfp_free_zone_table_entry, NULL); + kfree(priv->ct_zone_wc); kvfree(priv->stats); kfree(priv->mask_ids.mask_id_free_list.buf); kfree(priv->mask_ids.last_used); From patchwork Fri May 28 14:42:44 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Horman X-Patchwork-Id: 449884 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER, INCLUDES_PATCH, MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE,SPF_PASS, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 547CEC2B9F7 for ; Fri, 28 May 2021 14:43:50 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 357A5613D1 for ; Fri, 28 May 2021 14:43:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236445AbhE1OpY (ORCPT ); Fri, 28 May 2021 10:45:24 -0400 Received: from mail-dm6nam10on2097.outbound.protection.outlook.com ([40.107.93.97]:62452 "EHLO NAM10-DM6-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S235788AbhE1OpF (ORCPT ); Fri, 28 May 2021 10:45:05 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ZhCk8HTDkuG7zZ44L4DMO5XHsm7AFgRoirDb/GlI+9QI6ByYhc56IpJduPDs8AW02Ju4dtjPR/kNeFbhzPlYsmrggVnWoxAjrgAvaTzGYvoiYhxLMm/Cxro9kvvAkqqJJZcth3Fq5pASNNE8x0Fm1fs4zR3ZeOnemq2Jl7Sd2KIRAXxUmcGa9q5XcfdnfRg1g4biAqvDLwIg/NvpiDr98XX+AH+j3noMH6/f1isNcOfstmnwM+FqaSsOCbrMXBFUDc3NqANDQSwFufoOGXB2Mb2tXGYDBfZI3zY7k4G+KgVnjdinyJJq2elXjhcp3mCZ/A/JasnnJApg9kqpG2UGvg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=kaA+Iww87PhTdlRJY6iK4kwLX55b9baqg0g6cVvsxcs=; b=kc6BfRF7iNvVyym+Pusp1cCtl987KsV4rKgp3xQ0lrxkjZfkOVwu6IdLrajW8vrvfh2imyWv+zcTlmrgkpjWbiuQy7+uEkUXkv7iHPQ58YJuIeAODz6U66g7kAXz9uguv96s4XBRSb4SB8sVeZ6kOB2uDpfVT3SzlU6nhsFtMN+QbsN+KQWZAMOsztt8d0XWAtjLk/3S5iUo8Sznl75RjBJlYWMVMsEnA3YdDIW0Wez2UnUsh3AC3FkJ/4SxCDZZYEaXZNi67OntAre91tnQQwRZyDH/T0nO+uiEJeaxJbUyN9/2HDlF3pCaUC50iDXNq1PRv+hAvxI+DExIFrB8eQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=kaA+Iww87PhTdlRJY6iK4kwLX55b9baqg0g6cVvsxcs=; b=d0AMFVun49MUwfqLQwB3YwF78pcnttRi4Breob9CQH1qzG4GBckCrTMAWb8aHTYbJokExEEj4jMDJ4cNVX1PAtup0/RsWNPjzQsozJyJbghS5nuviZNTDpW4vjllXDsCHJsRpneARsQAcFKMVRE8oW/C18JiRjzh7YVmYElJTHc= Authentication-Results: davemloft.net; dkim=none (message not signed) header.d=none; davemloft.net; dmarc=none action=none header.from=corigine.com; Received: from PH0PR13MB4842.namprd13.prod.outlook.com (2603:10b6:510:78::6) by PH0PR13MB5033.namprd13.prod.outlook.com (2603:10b6:510:90::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4195.11; Fri, 28 May 2021 14:43:10 +0000 Received: from PH0PR13MB4842.namprd13.prod.outlook.com ([fe80::4596:4181:eeee:7a8a]) by PH0PR13MB4842.namprd13.prod.outlook.com ([fe80::4596:4181:eeee:7a8a%9]) with mapi id 15.20.4173.020; Fri, 28 May 2021 14:43:10 +0000 From: Simon Horman To: David Miller , Jakub Kicinski Cc: netdev@vger.kernel.org, oss-drivers@corigine.com, Louis Peens , Yinjun Zhang , Simon Horman Subject: [PATCH net-next 6/8] nfp: flower-ct: add a table to map flow cookies to ct flows Date: Fri, 28 May 2021 16:42:44 +0200 Message-Id: <20210528144246.11669-7-simon.horman@corigine.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210528144246.11669-1-simon.horman@corigine.com> References: <20210528144246.11669-1-simon.horman@corigine.com> X-Originating-IP: [2001:982:7ed1:403:9eeb:e8ff:fe0d:5b6a] X-ClientProxiedBy: AM0PR01CA0164.eurprd01.prod.exchangelabs.com (2603:10a6:208:aa::33) To PH0PR13MB4842.namprd13.prod.outlook.com (2603:10b6:510:78::6) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from madeliefje.horms.nl (2001:982:7ed1:403:9eeb:e8ff:fe0d:5b6a) by AM0PR01CA0164.eurprd01.prod.exchangelabs.com (2603:10a6:208:aa::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4173.20 via Frontend Transport; Fri, 28 May 2021 14:43:09 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a8164a26-b493-4191-735b-08d921e6ea4b X-MS-TrafficTypeDiagnostic: PH0PR13MB5033: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:923; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: fV+ZogiQ55kkNJWBRsvgt86mNHVwbzG7YWr6FwqfYTL3oGWX2dn2P1whmpA/rr2sINfONZd2v4IEIxHbUAVaKzj6r+PrxvurZg0i+QcIXkSntinfo/3CQJbCPtO+eo1miC3xOwkqOYHyLjSEthGCqS5V6LJmdOPlSF48WZzbCygLOIhzca8jdxkrKzyztweHUgEbsUZEBUdYTkXckgwxIaXTcbt5m7MxEceg7tpKLkzZl6d+xIlY3W+0FHywhMm02ADrPkLp6zQuTF7DSas48PsP/ZV3SVo47KVmPPhP5SCaBviP2tlON7bxLwMzUR81LJP8kbTEq5U+HLA1M4+QVrMZzSAnZSTSh8OzWaDTC6D5VE1XeRVfIIFD4adrirHs3cJjfIojdovJbX9Cc3hN32I7cJu9we3FihJYFt6CTesNZEJ//L455yfYSk8w7UjaN5YEfwEBI2CrkeB7z8iwHWvZ/fYVvOPPNUgbpMwuPeogWQoxP2ghU2D6tK2pj97xAsXwE1Gk0buBZuedJCY4gKwtojuOGPYZESQjOeKitNvjVO7z++BT2spQ6h8febQz1eBapbCkupUMSlMjQD/wiXnB+cxFX6YyG2igMCwzj88= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PH0PR13MB4842.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(346002)(396003)(366004)(376002)(136003)(39830400003)(16526019)(44832011)(186003)(5660300002)(6666004)(8936002)(6506007)(86362001)(36756003)(4326008)(107886003)(6512007)(8676002)(66476007)(83380400001)(66556008)(2616005)(316002)(54906003)(110136005)(52116002)(478600001)(6486002)(2906002)(66946007)(38100700002)(1076003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: 1BbmT6Qf921JmMRuebYaaz6PGRZ86w7DiK1favoANFW9RFc3SrCsVz0Ox8DWcQnDGPos9KpxqaYI+hybAlFh5YHH6x5cU+CWBUTpvoGiQwfiAGoAQsolIQyMhR6zRa5hZLvZK1/xF35ZOzrCbW2pSebuptjnN23DCD5mpzxbAotSu9meYkpVTjNCFwa3+tih3LXvzkpIvl+26ZlpRpGTQC6zaQUKJCMgD43nCF4H/L2M0S2XTEHQjl/KMH8rPZE0ettYm0NBCZ4KtQJadDtdJ3IdQpzYtqcIRxAEkg2ZpDNBswJlSyaVdjAcA611ruMqIQgugbQqF2+VD/EFGir7TD1Z++X0uhBy5FBG1tqTKY3nZPbJqBAa2q06ujgQmYr5LwF66md/PdLKl4Tqj61JuC00YItBtjBjkjLhcpgMv6r8zIOqT0zAOkq/loSOfzu5bN3wd+TG2acV1b3NTWr4Kzn9H8GwCqifEbgl2tWB8shmNQL7M0ZRhI5J6BxIRteYUoYZxRmxAZG6IhMJ5SHGJ+7GRHjWA8TaEqTOS0AqEOp6zJ5X/6pGK8g6Dwe0zYMgmAkcIKOgCcWA8VQ3NAcujlRgVAUPmBHi3F8FqFmvks3Q41+zHfiu9zpORK7oJtdWV5gRtjJVyErP9nDGB9utqXiZT1K4ZXHMjKVx/kgjtvTthIBSJEDFo1n65icB0dGjeqo8uAjLAqzI0/Pi7gMjAi23ea3j9nUqoRb8Cv7dOrBPdud2rHJh6kfE/iIFXWr72CIDBmKLguHeUqqO0P01OHcfIW1vwQV7AMLjKJd/sltfTbfw8oYpqA6PHfVbwWYI/8Nj3lbjngl4ujBQR1Sj4uql0XkxmRv9Etv5lIcW31jihZ5tYzkzuBT4qek7AJljf/32/1U3WZS6ERsu4xY2eoCLwHHEqunoir10FqQdfoSaUdTGIEThGCuuV/5mcWddf4OxtbG1ZkLbPBu4ol1lLioe2YfmlF9aM8EoSKfUtPA043FbkN42u3cA77XkxDEoL9SbL+XxmcyV9sfymzKqueN1du5EuxeNHZXGuuTGUIgnG08kgeyzkwCfcGyYFjSu+fF2kIO9Ju8q73qUNa9Bg2nrfPoxIwkwEMu4RFYRV6TNLFowaKJ3oJipRAf6N3RwwHAeeeSiiGFdFG8neNU0SbVbag7eC1DD5qGUiZHDDGnSYBrFgTPabxfuXXh9dyriP9t93d+g25tAD3Tsd/GXv9+HuZDTQKEbZmYtz0qflZd4/z05pFF/nv2Mi4sfh6ULEgAYuY3yVheoILaLRFLxi/otBTmKCIzq+z2+UiMjTHcP5Vm1OkbI8Ffga5o+mCgpS5HTnO58UB7nLh8GjJ4lUQ4s3OcqmdvASwtU9SDp2m0Mu5jUnavDKYmRTJC/J7u3 X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: a8164a26-b493-4191-735b-08d921e6ea4b X-MS-Exchange-CrossTenant-AuthSource: PH0PR13MB4842.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 May 2021 14:43:10.7788 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: iHwgBxVv/oBJ+lYYlhq+jaDgPeh373PGiHziYz0eOLeoWBfut3O3pJLOR+LwRWIV1iXCbk9T9O2livroU6LIHoXyvwTOmjPmttnqN+9YuPE= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR13MB5033 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Louis Peens Add a hashtable which contains entries to map flow cookies to ct flow entries. Currently the entries are added and not used, but follow-up patches will use this for stats updates and flow deletes. Signed-off-by: Louis Peens Signed-off-by: Yinjun Zhang Signed-off-by: Simon Horman --- .../ethernet/netronome/nfp/flower/conntrack.c | 35 +++++++++++--- .../ethernet/netronome/nfp/flower/conntrack.h | 13 ++++++ .../net/ethernet/netronome/nfp/flower/main.h | 2 + .../ethernet/netronome/nfp/flower/metadata.c | 46 ++++++++++++++++++- 4 files changed, 89 insertions(+), 7 deletions(-) diff --git a/drivers/net/ethernet/netronome/nfp/flower/conntrack.c b/drivers/net/ethernet/netronome/nfp/flower/conntrack.c index 186f821c8e49..0ac6e92853fa 100644 --- a/drivers/net/ethernet/netronome/nfp/flower/conntrack.c +++ b/drivers/net/ethernet/netronome/nfp/flower/conntrack.c @@ -106,9 +106,11 @@ nfp_fl_ct_zone_entry *get_nfp_zone_entry(struct nfp_flower_priv *priv, static struct nfp_fl_ct_flow_entry *nfp_fl_ct_add_flow(struct nfp_fl_ct_zone_entry *zt, struct net_device *netdev, - struct flow_cls_offload *flow) + struct flow_cls_offload *flow, + struct netlink_ext_ack *extack) { struct nfp_fl_ct_flow_entry *entry; + struct nfp_fl_ct_map_entry *map; struct flow_action_entry *act; int err, i; @@ -159,12 +161,33 @@ nfp_fl_ct_flow_entry *nfp_fl_ct_add_flow(struct nfp_fl_ct_zone_entry *zt, INIT_LIST_HEAD(&entry->children); - /* Creation of a ct_map_entry and adding it to a hashtable - * will happen here in follow up patches. - */ + /* Now add a ct map entry to flower-priv */ + map = get_hashentry(&zt->priv->ct_map_table, &flow->cookie, + nfp_ct_map_params, sizeof(*map)); + if (IS_ERR(map)) { + NL_SET_ERR_MSG_MOD(extack, + "offload error: ct map entry creation failed"); + err = -ENOMEM; + goto err_ct_flow_insert; + } + map->cookie = flow->cookie; + map->ct_entry = entry; + err = rhashtable_insert_fast(&zt->priv->ct_map_table, + &map->hash_node, + nfp_ct_map_params); + if (err) { + NL_SET_ERR_MSG_MOD(extack, + "offload error: ct map entry table add failed"); + goto err_map_insert; + } return entry; +err_map_insert: + kfree(map); +err_ct_flow_insert: + if (entry->tun_offset != NFP_FL_CT_NO_TUN) + kfree(entry->rule->action.entries[entry->tun_offset].tunnel); err_pre_ct_tun_cp: kfree(entry->rule); err_pre_ct_act: @@ -244,7 +267,7 @@ int nfp_fl_ct_handle_pre_ct(struct nfp_flower_priv *priv, zt->nft = ct_act->ct.flow_table; /* Add entry to pre_ct_list */ - ct_entry = nfp_fl_ct_add_flow(zt, netdev, flow); + ct_entry = nfp_fl_ct_add_flow(zt, netdev, flow, extack); if (IS_ERR(ct_entry)) return PTR_ERR(ct_entry); ct_entry->type = CT_TYPE_PRE_CT; @@ -285,7 +308,7 @@ int nfp_fl_ct_handle_post_ct(struct nfp_flower_priv *priv, } /* Add entry to post_ct_list */ - ct_entry = nfp_fl_ct_add_flow(zt, netdev, flow); + ct_entry = nfp_fl_ct_add_flow(zt, netdev, flow, extack); if (IS_ERR(ct_entry)) return PTR_ERR(ct_entry); diff --git a/drivers/net/ethernet/netronome/nfp/flower/conntrack.h b/drivers/net/ethernet/netronome/nfp/flower/conntrack.h index 6a876ae89d9a..faf42a967ab9 100644 --- a/drivers/net/ethernet/netronome/nfp/flower/conntrack.h +++ b/drivers/net/ethernet/netronome/nfp/flower/conntrack.h @@ -9,6 +9,7 @@ #define NFP_FL_CT_NO_TUN 0xff extern const struct rhashtable_params nfp_zone_table_params; +extern const struct rhashtable_params nfp_ct_map_params; /** * struct nfp_fl_ct_zone_entry - Zone entry containing conntrack flow information @@ -68,6 +69,18 @@ struct nfp_fl_ct_flow_entry { u8 tun_offset; // Set to NFP_FL_CT_NO_TUN if no tun }; +/** + * struct nfp_fl_ct_map_entry - Map between flow cookie and specific ct_flow + * @cookie: Flow cookie, same as original TC flow, used as key + * @hash_node: Used by the hashtable + * @ct_entry: Pointer to corresponding ct_entry + */ +struct nfp_fl_ct_map_entry { + unsigned long cookie; + struct rhash_head hash_node; + struct nfp_fl_ct_flow_entry *ct_entry; +}; + bool is_pre_ct_flow(struct flow_cls_offload *flow); bool is_post_ct_flow(struct flow_cls_offload *flow); diff --git a/drivers/net/ethernet/netronome/nfp/flower/main.h b/drivers/net/ethernet/netronome/nfp/flower/main.h index 060c6de36c02..0fbd682ccf72 100644 --- a/drivers/net/ethernet/netronome/nfp/flower/main.h +++ b/drivers/net/ethernet/netronome/nfp/flower/main.h @@ -195,6 +195,7 @@ struct nfp_fl_internal_ports { * @merge_table: Hash table to store merged flows * @ct_zone_table: Hash table used to store the different zones * @ct_zone_wc: Special zone entry for wildcarded zone matches + * @ct_map_table: Hash table used to referennce ct flows */ struct nfp_flower_priv { struct nfp_app *app; @@ -231,6 +232,7 @@ struct nfp_flower_priv { struct rhashtable merge_table; struct rhashtable ct_zone_table; struct nfp_fl_ct_zone_entry *ct_zone_wc; + struct rhashtable ct_map_table; }; /** diff --git a/drivers/net/ethernet/netronome/nfp/flower/metadata.c b/drivers/net/ethernet/netronome/nfp/flower/metadata.c index 062e963a8838..7654cf6a3222 100644 --- a/drivers/net/ethernet/netronome/nfp/flower/metadata.c +++ b/drivers/net/ethernet/netronome/nfp/flower/metadata.c @@ -504,6 +504,13 @@ const struct rhashtable_params nfp_zone_table_params = { .automatic_shrinking = false, }; +const struct rhashtable_params nfp_ct_map_params = { + .head_offset = offsetof(struct nfp_fl_ct_map_entry, hash_node), + .key_len = sizeof(unsigned long), + .key_offset = offsetof(struct nfp_fl_ct_map_entry, cookie), + .automatic_shrinking = true, +}; + int nfp_flower_metadata_init(struct nfp_app *app, u64 host_ctx_count, unsigned int host_num_mems) { @@ -528,6 +535,10 @@ int nfp_flower_metadata_init(struct nfp_app *app, u64 host_ctx_count, if (err) goto err_free_merge_table; + err = rhashtable_init(&priv->ct_map_table, &nfp_ct_map_params); + if (err) + goto err_free_ct_zone_table; + get_random_bytes(&priv->mask_id_seed, sizeof(priv->mask_id_seed)); /* Init ring buffer and unallocated mask_ids. */ @@ -535,7 +546,7 @@ int nfp_flower_metadata_init(struct nfp_app *app, u64 host_ctx_count, kmalloc_array(NFP_FLOWER_MASK_ENTRY_RS, NFP_FLOWER_MASK_ELEMENT_RS, GFP_KERNEL); if (!priv->mask_ids.mask_id_free_list.buf) - goto err_free_ct_zone_table; + goto err_free_ct_map_table; priv->mask_ids.init_unallocated = NFP_FLOWER_MASK_ENTRY_RS - 1; @@ -572,6 +583,8 @@ int nfp_flower_metadata_init(struct nfp_app *app, u64 host_ctx_count, kfree(priv->mask_ids.last_used); err_free_mask_id: kfree(priv->mask_ids.mask_id_free_list.buf); +err_free_ct_map_table: + rhashtable_destroy(&priv->ct_map_table); err_free_ct_zone_table: rhashtable_destroy(&priv->ct_zone_table); err_free_merge_table: @@ -589,22 +602,40 @@ static void nfp_zone_table_entry_destroy(struct nfp_fl_ct_zone_entry *zt) return; if (!list_empty(&zt->pre_ct_list)) { + struct rhashtable *m_table = &zt->priv->ct_map_table; struct nfp_fl_ct_flow_entry *entry, *tmp; + struct nfp_fl_ct_map_entry *map; WARN_ONCE(1, "pre_ct_list not empty as expected, cleaning up\n"); list_for_each_entry_safe(entry, tmp, &zt->pre_ct_list, list_node) { + map = rhashtable_lookup_fast(m_table, + &entry->cookie, + nfp_ct_map_params); + WARN_ON_ONCE(rhashtable_remove_fast(m_table, + &map->hash_node, + nfp_ct_map_params)); nfp_fl_ct_clean_flow_entry(entry); + kfree(map); } } if (!list_empty(&zt->post_ct_list)) { + struct rhashtable *m_table = &zt->priv->ct_map_table; struct nfp_fl_ct_flow_entry *entry, *tmp; + struct nfp_fl_ct_map_entry *map; WARN_ONCE(1, "post_ct_list not empty as expected, cleaning up\n"); list_for_each_entry_safe(entry, tmp, &zt->post_ct_list, list_node) { + map = rhashtable_lookup_fast(m_table, + &entry->cookie, + nfp_ct_map_params); + WARN_ON_ONCE(rhashtable_remove_fast(m_table, + &map->hash_node, + nfp_ct_map_params)); nfp_fl_ct_clean_flow_entry(entry); + kfree(map); } } kfree(zt); @@ -617,6 +648,16 @@ static void nfp_free_zone_table_entry(void *ptr, void *arg) nfp_zone_table_entry_destroy(zt); } +static void nfp_free_map_table_entry(void *ptr, void *arg) +{ + struct nfp_fl_ct_map_entry *map = ptr; + + if (!map) + return; + + kfree(map); +} + void nfp_flower_metadata_cleanup(struct nfp_app *app) { struct nfp_flower_priv *priv = app->priv; @@ -633,6 +674,9 @@ void nfp_flower_metadata_cleanup(struct nfp_app *app) rhashtable_free_and_destroy(&priv->ct_zone_table, nfp_free_zone_table_entry, NULL); nfp_zone_table_entry_destroy(priv->ct_zone_wc); + + rhashtable_free_and_destroy(&priv->ct_map_table, + nfp_free_map_table_entry, NULL); kvfree(priv->stats); kfree(priv->mask_ids.mask_id_free_list.buf); kfree(priv->mask_ids.last_used);