From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 1DD62A0560; Tue, 18 Oct 2022 05:25:31 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id C270141133; Tue, 18 Oct 2022 05:23:49 +0200 (CEST) Received: from NAM04-BN8-obe.outbound.protection.outlook.com (mail-bn8nam04on2115.outbound.protection.outlook.com [40.107.100.115]) by mails.dpdk.org (Postfix) with ESMTP id 4236B41147 for ; Tue, 18 Oct 2022 05:23:47 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=AIrbSjrG1Pi6eErUlbhOOg5E1mZ2psRaUK5kPht51G0Txj7/59+R15Ba7DbDpTdbbS5Oi4OaIBCcDQVO7r7kaJ3NqG1wJk2XUnlJUOdqMo78QxNo1YIuzy8qwJnfYPpHqxDBC1M9+WYH02DTyvAxpzM/ZwKcMWuI3Uri9gtWOXZv4yieyMJupl4kA12oQd2jEuta8oAZ6fCB3dVXRCH0kfhYaKWOzWUwd0Cr8t8oWMV/KpfQvI9NX6wMQYlcrDf8L5rE5I9NalY302FsqneiDQXjRQM/TdqAYsMHYKmGuqp/AsAKRrrogIyJnpsemFNqP3U0ZBRpqPBNwphlyPvwuw== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=+0awvqvH+bQXgz9lj/kUtqBg4fA1sIcrX3IFU/K9NC0=; b=SxE5YIhLAn1JW5Nd1huBpOxnbsWtiBFJ4mNYT1guKcGKDGWHvCPM3CSZx02wNpqhq1WjtPHX1Wmh3G54lxxOT/wOolYhCri1h40mkMjuj6XEZatEVCjaYbVTDu6eztrzgj02ir/utE13ffivjyvaNVpg2RKPKL+x2Dx7xSP1799fFsxBHishq5CQLwi2ypsWYvVN00+4ksLofL0cMxpOMQSjD/Ddwd7YFQFisMoXG9oawgwLuxrKbY3vm8vdUs6/V5JuEnRyZ7nSk/9qBsnDfeHOy/zpdAzxnOv1z+a0nbF+ScRBNoH9ltIxCp+8yoKavcsCVPhxQReBHtLXak5R4g== 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=+0awvqvH+bQXgz9lj/kUtqBg4fA1sIcrX3IFU/K9NC0=; b=oB+gGYOovEr9xr5HaF3tSRhgTBZ8lGbJbZmrEusCe2Bk43cMPUbzx343U2FwwL9tZOK9wjVTd1KFBqqBAcwo4ops3fCSdNCe86hu6sdofs9JXzu89SwfE+tvptOFCrUnCSCtOfLHhtKhY/Jv3hc47kHwTEHhJhmqJerbtk4TCzo= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by MW3PR13MB4122.namprd13.prod.outlook.com (2603:10b6:303:5a::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5746.8; Tue, 18 Oct 2022 03:23:41 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::7c26:1a0b:2825:6f4b%4]) with mapi id 15.20.5723.014; Tue, 18 Oct 2022 03:23:40 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH 21/25] net/nfp: add the offload support of IPv4 NVGRE item Date: Tue, 18 Oct 2022 11:22:35 +0800 Message-Id: <1666063359-34283-22-git-send-email-chaoyong.he@corigine.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1666063359-34283-1-git-send-email-chaoyong.he@corigine.com> References: <1666063359-34283-1-git-send-email-chaoyong.he@corigine.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-ClientProxiedBy: SG2PR01CA0184.apcprd01.prod.exchangelabs.com (2603:1096:4:189::9) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|MW3PR13MB4122:EE_ X-MS-Office365-Filtering-Correlation-Id: bf8a5b96-ff47-473c-4236-08dab0b82768 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ACY0WJ8tZ7l3gCdD3W0hIZQ76Nzg6H1mtbT+TK3/vSyIbIER2ELheJm7VBy6SJUaqRYYRcPrFzeGkTBeWJgUxrXbPvR4VB2lbhHcr0uP00CtkGT3t8QZR3/xWWNJByn226K1bJpgxk4SIBxjzkte43cXjcttEqKtNHFHUmnCId8wuRWJavvOgoiS6wcSi1Uft48YB56G9CJPf4vZlmkPlYqPUoEeOapJKR1JB8dBhI9S2udS7oKcDQM7lIxj75kkWAMDgPgqA119oSy2XfaVSFC1x32mLyn6j588up1sjWhYS25R3qhCqYc81MQaj/26k5oab+kTtP07YaYcDhrazwqj5wn08Nk+kPMoZRKqs2c6NMHaliWpeR6IUT4v8YcNXoe+EFrLNT5nxnByDXwMF5BcQb1tpbuaO2yJao3p1s+xqby5ad3i46O7+YuQ7fy/aU0oFCEmyDNiqhFYwRDyg0hUQ1hNsK2POMk3jILE5YX5Zb2mco9t5ja4F/kzhQc8b6iaIgnQ8rpV0fdw0arMwxjzEPdyo67vktLDpu0/PtcKN7zsUfmimdHs2nAZKaPkX6EsmhQ5bVsG7LkJZpx3hsoKqmlcnXWYSrlnG6t85xoZly5GHolDAq4poZh8GC93RjT8e0K01ONwvmJ3v5SHZqspd/sr5ASUo8r08bhnkvjnLWMuz1jHBEKzz/0RbB9HhsUhDhTiZVSI+VEyj2kNXcrwEX0Rg1BCguMYIwbfmTDBnSukbZtc89SY/NxFE8OWnz/cZAUKaWzOwef4mv36ELRdOOLGjjjLXx6GwWUfcg80Fnf3tv6iTFCTJmVfT0zk X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(4636009)(136003)(346002)(366004)(376002)(39840400004)(396003)(451199015)(38100700002)(86362001)(38350700002)(4326008)(8676002)(66556008)(66476007)(66946007)(316002)(6916009)(5660300002)(44832011)(41300700001)(8936002)(2616005)(186003)(2906002)(83380400001)(107886003)(6666004)(6486002)(478600001)(6512007)(52116002)(6506007)(26005)(36756003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?eDUxbGxTSDBMS1JiZFQ5U2MycFdPSTdpRHRSb3dib3FuR1BIbVMvQ2lKM1NI?= =?utf-8?B?a0JmdzE5UEk2eDVIRzBSQ1J4SDZXSDRDakEyTm1wWEtWUW9MaUtTckEvVllQ?= =?utf-8?B?QjN1ZFdsb2NEK1JlR3hweXR0RmRoa0dxYjdKWURiYkU4Mk1Gb2F5NG5sRU81?= =?utf-8?B?RkRlbUEwNmlJREdwYVRpTTBHRUtYejZaalVRU2Vhb083MmdVNmxONk1La0th?= =?utf-8?B?TjBBTENwalI2ZExCdE5MNkJWWkU2bFJudVIvR2JxdkRRQ1dla24wRlhsbzRk?= =?utf-8?B?NU9VR2pCV2EzdGVaSWlzODAvVmpIVUVrU0NVRTI0OVZuK21hY2p2KzJkT0lE?= =?utf-8?B?b2VCQkRpaEhOTk91V0ZsL1JTaWFRU1BRdmNicXFNOE16QWU0VytZandzejQ0?= =?utf-8?B?aWdHenV6cTZZdUJhVzlWMUx4TTkrMXZJNU80TGNaRVMyM2JoeVR5em03aU5N?= =?utf-8?B?QUdoUG9uUm0xd0dqM2U1OUVTS21pYWh5MXN0ME40MmlnczNJTFVmRnNKbHNo?= =?utf-8?B?L09WbXNhL21NQm8zTmRRK0tzUEQ2cGVDR0NzQi9rL2lTb1VxYUJLRlNwMnVa?= =?utf-8?B?YWMzQ1FNNHpSek5nQVVPVHREWG51enRkS3A5b29jOG1NTVlFbkJkdFZMTHhR?= =?utf-8?B?bWZqajhwNUIyd3I0d0RWemRISFZQSEUwc0oyWDJ4TVhvNE5Sbk91eEJPWnNk?= =?utf-8?B?VXNQY2dDQkxYTkxNQythNXNjUk1zOE9BclkxbjVCbGhJWEl4aG5nL1VJbEhJ?= =?utf-8?B?cyszVXNkU2FiVzRRRW9HWWk3UHZsQUp1SUVSSHgzb2pjWEdPa3FXRVIyRDNu?= =?utf-8?B?cWQ0NDVmb2RQd29DV1EwaDd5aldCbjhBYlBRWk1QMkFQYSt5eGlXeU1DcFVF?= =?utf-8?B?TU9qM0ZzVGR4NU9KM3ZWdUlFU3BHT2RncC9xWitReXRQWEJuVE4yNW5xSVkz?= =?utf-8?B?WGRERDZFQUU4dVppNDBRRG1IQ1U2YTZUVHFmN2EvT0ZLYTBxMG1QblRDN3Iy?= =?utf-8?B?UDlPUm5KVVVxT0pRYkl0UGcrQ3o5YWhUM1hxL3dFTEdHSzU1eTFFSG1OV0RL?= =?utf-8?B?QUZQc0VaRktRRmNqZkJsZzNJdHlGSGMzU1RFd1ZKd1oyUlpSWlJNZ2tXNEhp?= =?utf-8?B?b1owZ0J1MDZnaU5hMjIzS2NCUXNUQWUzTWQwbjUySWRtRmNuSEJYTHV2QVEx?= =?utf-8?B?VVQrYklINkhaV3l1aDlhWjNMTzRGNGJXdXlRQVU4QTN3WFBOZFVZMnhJbFlS?= =?utf-8?B?dVY2R0JocFlIT0NiaSthTlAxTHVmNjJBazlZSStNdDF4UitjNmFyb2FlV1ZG?= =?utf-8?B?WjJqVUNwbzJhcDFkUm5BOFlBOGVNMnl5TTljOWVFYzgyZ0tEL1RyaGpoMEgx?= =?utf-8?B?R3lOMVNnQnZ5MEFnM3lHNVhlMEc5c1owNXZHRXZMM2NaNjQrcGo4cnRrcjkv?= =?utf-8?B?K01waE5Qck9PY1lDdXREYS9ucVFrRm5XOUkyRWtYeExNUUpKOGM4dVNYVjBY?= =?utf-8?B?UHAvRWh2NDZjajFRN20xcytQTFFRcVVnaXpQbnF2R1FKZWo0aGJoMzAxZnk4?= =?utf-8?B?Tng3Y29lNE4zWDlTU0x1OUhGZkdlMmpHTnR5NEpYcUpHc2dwclBPdDJ5NFlx?= =?utf-8?B?cHM2OTAySFNqSURCblh1SVl6enpkQUxRbS8vaGxmd3pqTzVmV2pmaEllOHI0?= =?utf-8?B?V1loaFVvUmxEYjg0bkttV0ZDd3BPRkdqcFhNTXdVZUNxdGFTQXRSdnNkS2Fr?= =?utf-8?B?VjhoZ3ZVNGxYTzRoR1VNK2hlajY5R2VOVW5HdG8vc0w0VWFKeXRtMnpsaytv?= =?utf-8?B?OE9nTVJCbXc3b2U4YXBHRGJoaVRSbE9IQ1VZYVJhVXdFdmpqam5kSGFOeHJS?= =?utf-8?B?cnRtOEwyZ2JxSnNiV1l5RDBXYWNaOTJzam9tSTJyeGhrVitvOFh1WHEwQkho?= =?utf-8?B?VDI2WHZ6SFlnYkVQK3lkYWhiandEWkNSTEFXb2docEdvTkltblFyQkpBaU9v?= =?utf-8?B?VVlxNk1oT3oySzJ6bW1ocXF0WTFsTEpUQWtnMzBzT3pnUGJFRTVJd1k5MCsy?= =?utf-8?B?S0VUb1ZqdVB4QlVLb1BoeUVMcURiemFXQnJoRWZDWDVDUFEzZWk3SUZWdmNw?= =?utf-8?B?c0dQdjllelc5dUsza2EzNmxRMDJhKzFZckJJRzI4bUNUSkJmeTRMK2VvOEVO?= =?utf-8?B?QWc9PQ==?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: bf8a5b96-ff47-473c-4236-08dab0b82768 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Oct 2022 03:23:40.9367 (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: dlWB7wRuWbJpGyxZF8m3TN/8bHpFWdEvYVN7I+bzWxUpzmMUiTevLQYtWxC6IalRL8LmbrYHeyQsp9Ukm1cPEWhz95jfwY4czhHU3lA65+E= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW3PR13MB4122 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Add the corresponding logics to support the offload of IPv4 NVGRE item. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- doc/guides/nics/features/nfp.ini | 2 + drivers/net/nfp/nfp_flow.c | 99 +++++++++++++++++++++++++++++++++++++++- 2 files changed, 99 insertions(+), 2 deletions(-) diff --git a/doc/guides/nics/features/nfp.ini b/doc/guides/nics/features/nfp.ini index 5a3d0a8..4c6d2d5 100644 --- a/doc/guides/nics/features/nfp.ini +++ b/doc/guides/nics/features/nfp.ini @@ -29,6 +29,8 @@ Usage doc = Y [rte_flow items] eth = Y geneve = Y +gre = Y +gre_key = Y ipv4 = Y ipv6 = Y ipv6_frag_ext = Y diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index 3f06657..94d7a27 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -832,6 +832,26 @@ struct nfp_pre_tun_entry { return -EINVAL; } break; + case RTE_FLOW_ITEM_TYPE_GRE: + PMD_DRV_LOG(DEBUG, "RTE_FLOW_ITEM_TYPE_GRE detected"); + /* Clear IPv4 bits */ + key_ls->key_layer &= ~NFP_FLOWER_LAYER_IPV4; + key_ls->tun_type = NFP_FL_TUN_GRE; + key_ls->key_layer |= NFP_FLOWER_LAYER_EXT_META; + key_ls->key_layer_two |= NFP_FLOWER_LAYER2_GRE; + key_ls->key_size += sizeof(struct nfp_flower_ext_meta); + if (outer_ip4_flag) { + key_ls->key_size += sizeof(struct nfp_flower_ipv4_gre_tun); + /* + * The outer l3 layer information is + * in `struct nfp_flower_ipv4_gre_tun` + */ + key_ls->key_size -= sizeof(struct nfp_flower_ipv4); + } + break; + case RTE_FLOW_ITEM_TYPE_GRE_KEY: + PMD_DRV_LOG(DEBUG, "RTE_FLOW_ITEM_TYPE_GRE_KEY detected"); + break; default: PMD_DRV_LOG(ERR, "Item type %d not supported.", item->type); return -ENOTSUP; @@ -1558,6 +1578,62 @@ struct nfp_pre_tun_entry { return ret; } +static int +nfp_flow_merge_gre(__rte_unused struct nfp_app_fw_flower *app_fw_flower, + __rte_unused struct rte_flow *nfp_flow, + char **mbuf_off, + __rte_unused const struct rte_flow_item *item, + __rte_unused const struct nfp_flow_item_proc *proc, + bool is_mask, + __rte_unused bool is_outer_layer) +{ + struct nfp_flower_ipv4_gre_tun *tun4; + + /* NVGRE is the only supported GRE tunnel type */ + tun4 = (struct nfp_flower_ipv4_gre_tun *)*mbuf_off; + if (is_mask) + tun4->ethertype = rte_cpu_to_be_16(~0); + else + tun4->ethertype = rte_cpu_to_be_16(0x6558); + + return 0; +} + +static int +nfp_flow_merge_gre_key(__rte_unused struct nfp_app_fw_flower *app_fw_flower, + __rte_unused struct rte_flow *nfp_flow, + char **mbuf_off, + const struct rte_flow_item *item, + __rte_unused const struct nfp_flow_item_proc *proc, + bool is_mask, + __rte_unused bool is_outer_layer) +{ + rte_be32_t tun_key; + const rte_be32_t *spec; + const rte_be32_t *mask; + struct nfp_flower_ipv4_gre_tun *tun4; + + spec = item->spec; + if (spec == NULL) { + PMD_DRV_LOG(DEBUG, "nfp flow merge gre key: no item->spec!"); + goto gre_key_end; + } + + mask = item->mask ? item->mask : proc->mask_default; + tun_key = is_mask ? *mask : *spec; + + tun4 = (struct nfp_flower_ipv4_gre_tun *)*mbuf_off; + tun4->tun_key = tun_key; + tun4->tun_flags = rte_cpu_to_be_16(NFP_FL_GRE_FLAG_KEY); + +gre_key_end: + *mbuf_off += sizeof(struct nfp_flower_ipv4_gre_tun); + + return 0; +} + +const rte_be32_t nfp_flow_item_gre_key = 0xffffffff; + /* Graph of supported items and associated process function */ static const struct nfp_flow_item_proc nfp_flow_item_proc_list[] = { [RTE_FLOW_ITEM_TYPE_END] = { @@ -1598,7 +1674,8 @@ struct nfp_pre_tun_entry { [RTE_FLOW_ITEM_TYPE_IPV4] = { .next_item = NEXT_ITEM(RTE_FLOW_ITEM_TYPE_TCP, RTE_FLOW_ITEM_TYPE_UDP, - RTE_FLOW_ITEM_TYPE_SCTP), + RTE_FLOW_ITEM_TYPE_SCTP, + RTE_FLOW_ITEM_TYPE_GRE), .mask_support = &(const struct rte_flow_item_ipv4){ .hdr = { .type_of_service = 0xff, @@ -1689,6 +1766,23 @@ struct nfp_pre_tun_entry { .mask_sz = sizeof(struct rte_flow_item_geneve), .merge = nfp_flow_merge_geneve, }, + [RTE_FLOW_ITEM_TYPE_GRE] = { + .next_item = NEXT_ITEM(RTE_FLOW_ITEM_TYPE_GRE_KEY), + .mask_support = &(const struct rte_flow_item_gre){ + .c_rsvd0_ver = RTE_BE16(0xa000), + .protocol = RTE_BE16(0xffff), + }, + .mask_default = &rte_flow_item_gre_mask, + .mask_sz = sizeof(struct rte_flow_item_gre), + .merge = nfp_flow_merge_gre, + }, + [RTE_FLOW_ITEM_TYPE_GRE_KEY] = { + .next_item = NEXT_ITEM(RTE_FLOW_ITEM_TYPE_ETH), + .mask_support = &nfp_flow_item_gre_key, + .mask_default = &nfp_flow_item_gre_key, + .mask_sz = sizeof(rte_be32_t), + .merge = nfp_flow_merge_gre_key, + }, }; static int @@ -1746,7 +1840,8 @@ struct nfp_pre_tun_entry { nfp_flow_is_tun_item(const struct rte_flow_item *item) { if (item->type == RTE_FLOW_ITEM_TYPE_VXLAN || - item->type == RTE_FLOW_ITEM_TYPE_GENEVE) + item->type == RTE_FLOW_ITEM_TYPE_GENEVE || + item->type == RTE_FLOW_ITEM_TYPE_GRE_KEY) return true; return false; -- 1.8.3.1