From patchwork Tue Oct 18 03:22:15 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 118311 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id BB30BA0560; Tue, 18 Oct 2022 05:23:04 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A8DBB410E8; Tue, 18 Oct 2022 05:23:04 +0200 (CEST) Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2096.outbound.protection.outlook.com [40.107.223.96]) by mails.dpdk.org (Postfix) with ESMTP id 4C22F4021E for ; Tue, 18 Oct 2022 05:23:03 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=RArBzau5kF9z/8ZQTImoM8xrby4FT9+J76IjrhbV1UwLUuritabwu8dTKXNqdYIUrKbc0E2MwpnFYBwrDbuYODPm/8Pqvbq5N5j+kKHopL3LTcxWdzTwI5XqcU4/Bik4n0dRWmEw+C+uLEXhKd3WLWZNxkLNav1JTj2L0/30d7URYgnEX6YRifNJQNMndoqPvk6tEqifia+XdnqCaj+mtOE9ohRZQ2zuV12szuRvCn8pXDgj2V+kaCzfjqaTsR3kuPGOllASM0JzeZZPGnTPfLiMc/7IKDmuXmVYHbEssfBYw+XqnCYVNxt/eLmv3Ixj+uOSUaXySWSNvokJ3QDGrw== 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=J8r2eu8a0dxjQvAUfZ1XGdVcLRjBXgnB8L+CNoSGfVg=; b=WuYikm5cR6o4HXhd6Rftu7ABjuXDtSahdFlbCaEORXHsPQzsVTUy5Mtc6IkZNiV+XmBDBPmbrYghxwcLsSbbjWNvxucjE0V2NQdt4RK3rjRjlJeH8N3TnoKHXMeumY0l9lFEZyJz+CniwFJmwfmkHXCisxvX1foUCcv6ljvVIvbr1Mvb5ukzUYVJQEy2jQyhYDiNplZk8GyeFE1tj31x4K6+LxuT5esvs+r94t68nXLbxyT1+BOl7sNEFslfo2JVee5zPDVigRXYipWnnEAmmDDU1IsOIyl6XEIEpGJRsQyD88Om0mzapVUqtAhCycfZA9Xl9S4oxlRXLRGDMNptgw== 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=J8r2eu8a0dxjQvAUfZ1XGdVcLRjBXgnB8L+CNoSGfVg=; b=hyARB4FVDYeXC7IadhgtNKgLkZ4bvyeBf3/vNmxuUiWL661QHE02J7MEBZ8vr/ZDpSkykdLAtZlr6tN/9t+SsimdMDrbM5R6G8AjrsOteHIexlHGqGJT3J21Eckpi4sC01Ak8aWVKvmPSeZZUFA4t1mcn2zVie5XtlojIANKM5c= 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 MN2PR13MB4149.namprd13.prod.outlook.com (2603:10b6:208:24f::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.20; Tue, 18 Oct 2022 03:23:01 +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:01 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH 01/25] net/nfp: add the offload support of IPv4 VXLAN item Date: Tue, 18 Oct 2022 11:22:15 +0800 Message-Id: <1666063359-34283-2-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> 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_|MN2PR13MB4149:EE_ X-MS-Office365-Filtering-Correlation-Id: bf69314a-3c7d-4fba-28c9-08dab0b80f8f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: n3eD/e1lUKLmJjjm4TGpzU6eF9wJHRWMBpUIW66kYp0FT7Mv5g2shizKRXpMkWLcYsFieYamLfzt46Qpsv36vldpP1NaJL5r/ArYqEoAZLzfOAQfl2+eEMI4sqGIewefqvbU0rPQiogc9rPINjr3RLQWL1EDqCgNqYUZ7muNxWFyCuHnaVr8m3yoYHkzrUNgkS0F6J8Gy52X5OaSR5ZQFq5IcFByPQMOVJGrn3Y1H9Somwm+EO29ewzCM/lXb4/VC6LdB3SiRmjH5ICSM9at/SVrArG+JsmNqOGb9+RMggNe3rgP3pPPnWmnGXnutvGBjJkAa1QV3+caotzDFMEMdlv71/WvNuxV405Ci9XSL2Y47uiS1iKq7gWw9SWxoZ2z3yXBtJ0T2E8e0yyrA+tfTmwrxt7KCqOuJnkMQ0PedSy9zvZISAF+9MsYi3UGHt1UccjHO6aQlfe5HWaVuLQk56EmWSHEW2r8bjb4EVRvmz+go4grUJ1d7Pe+uQ46P3MLbvUh9fIzpV52V2OZiDVr3iqtkfXj76S8jNlhSBlyUbnjvlKFz2th45VhoDkT9uz8X0Zxe2FG4ZXVcAUwzrot5bRimLjUUapd3DOCdzriOI+sPByxawEOilb5+QRNiq2DMi5jKn6c1YOUTCjL8D819Vybd1sBFzvc/usnK/xdf4iNVjDox9RFnsbuon6TqJTrumgNMQdFaAZFBJhv2LBS7hE+V4BICviGY6xJoOeaZcGPOLbNLRurXi6DTdZycEgzBAfxi1Wq0dskH1pSGOCO3eiHZyQOTxJeTqbefaLdCR3A4WlEKYhk2YSgZoPhhYNO 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)(366004)(346002)(376002)(396003)(39840400004)(451199015)(38350700002)(86362001)(38100700002)(36756003)(83380400001)(66574015)(5660300002)(52116002)(30864003)(6506007)(2616005)(26005)(6512007)(186003)(6666004)(2906002)(6916009)(316002)(6486002)(107886003)(4326008)(66946007)(66556008)(478600001)(8936002)(44832011)(41300700001)(8676002)(66476007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?HPDCAhoUrv0sm2PJTsuGcTtd/zT0?= =?utf-8?q?ill3EhsZxDyC97dZTw5yzG3QlR8x3XX2Elv0HO2rAbe8pxIfNKkRtUvA0oDXh/v0D?= =?utf-8?q?lFay+vmH4qxtrbta1TxtJz0BQRRTlMw0X8kdR9bPOYwJuNYPLfGYTvRiLQtvsEwVp?= =?utf-8?q?l51jAPmWpGOM5mPXkLFdQac76XYuSY7T+FBiAuXF/fAOPtsx6xGwpH9i9vlGZuw2+?= =?utf-8?q?FJoVtzezAYQyJaMT48DzJUATbmGs49KyAKI932XdPjR/Qs+kznFIFdOBeVdm0Tpbr?= =?utf-8?q?2yUtHWxrqEi47l6hWAKSms6cic2Z1vQZ2qBJsYAlUSPIJpRyQvJ69pGGj4BtQXGm4?= =?utf-8?q?H4L0NPNBgyeEHUkIf7DQpUkJdGNGBecTMsW7aN/mND4TlN2YuWNP/VQGIZPaclHfi?= =?utf-8?q?1gFpQNUgxcCKKHJ7CkcLys6/n0fF25c1YvUBwMNF5m4kPyYS7Lhl+sMhcgczIQ+R1?= =?utf-8?q?Uj5k5qC5n/iyALHyATAJa0T7gvTM54rGelsNPkPes6YcJdzBlt3Nfh64vQQRnsVh5?= =?utf-8?q?5XGnuv+X0hVxbJ0E5t4IIrW3ErBPY4KKfoZ/9jzf+MzX4mzhubSlxhsABtC5JLwsO?= =?utf-8?q?8p8P0T7exHnTsEqNnz1JnBE7CPya2cycAE6vtigM5QC/ABgm7L1WNKvBEglZnZJAR?= =?utf-8?q?zYY2wzNev2T3jGXzqmvm7DCZUTpneqv6N4rZkxV2M4eF2SEBqSzH6CMR3tTw0nKKD?= =?utf-8?q?DlDYaW2FtAzqKy2UdM3/0ZbT6yXmbHH5eVjyadnH6POSalzDqaf4ve5ES+ejQh9VY?= =?utf-8?q?WfqPc9pa0NxLHzNQxUSBzXDWt5iUy8fPryhJcPiYdoDlX6qTzKigMmutB1NMfgRB+?= =?utf-8?q?wajqknAMn3dDPmYuAydigOtUQPuBkUcPNiHOelowU6i8HN+T3uEE7Xqh3lrYMiP4O?= =?utf-8?q?9OPd1Vb+JFm1y4ArZKgTAS2N824/3EM+kUjEmK28VrmiowDKYygHLrolMjz1jCAHa?= =?utf-8?q?SNeCFl4PPPfsy599/yf9eXNRysafG5An3DOyaH8ZTsKPNcu8vOKE2v813ZjulF/Wf?= =?utf-8?q?UQuVSZ12m3HgTLGfr0oMbKdQx8GO1culx92WrJzCioJK5cxlSMDC8VvmSoDegXtMg?= =?utf-8?q?R5XMBKnz0Mk9gPIJIG0kBib2gGchr/Ga27vykU9Vnv1WLFMJt4MAom/gVf8QQ0m8h?= =?utf-8?q?nXXj0fQFf+0+cHtwz/J2tVL0Rt/WcwiyFrxb/rjMKyqcmqAjAZnmgKuq31G0SAPUR?= =?utf-8?q?brFX2xj0lugHAjM69InMK/jqUzLqINl8fwaO+zESg+5ikGsb/kfuberOJgLgPrfIT?= =?utf-8?q?jQf5zeUUe5Y8NrrlSrpJK7cGbmHqCgePLr7HhpIIxv5bMiaZAE/bUS0U7DW5/4Ui1?= =?utf-8?q?hkWAyVlYyeEy6Mm0IwK9kJxFxBF5FGbeq5K2p2O5ODn+1aqlzgY/5SPb4HJeWiCWr?= =?utf-8?q?Dek1dlSIuXdagmqafVTiTURKZ41L56wpJxCYaQFenOiM1vhwyoSoVSsxj2mUeWlel?= =?utf-8?q?677FjTbksEBaoY5wrIplXJ8zCgoYAKq+BgxLU/92pgNS+nKFaAAMGEImlGvp30/yl?= =?utf-8?q?vi4z/5JvLDvFKZqQASYV6TRJhvU1F2osJA=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: bf69314a-3c7d-4fba-28c9-08dab0b80f8f 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:01.0982 (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: qJHDu/TqXeuj+k7nlzJtKwuWrC/g1OqwuptnXKT+K/YlcXEbyvDVkTYqXhrl3LBS6TxxPSM82avphOEeUr0IgHjdY46tZcuCGmQkBQ0JhQs= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR13MB4149 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 data structure and logics, to support the offload of IPv4 VXLAN item. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- doc/guides/nics/features/nfp.ini | 1 + drivers/net/nfp/flower/nfp_flower_cmsg.h | 35 +++++ drivers/net/nfp/nfp_flow.c | 243 ++++++++++++++++++++++++++----- 3 files changed, 246 insertions(+), 33 deletions(-) diff --git a/doc/guides/nics/features/nfp.ini b/doc/guides/nics/features/nfp.ini index 1ad6c2c..40b9a4d 100644 --- a/doc/guides/nics/features/nfp.ini +++ b/doc/guides/nics/features/nfp.ini @@ -36,6 +36,7 @@ sctp = Y tcp = Y udp = Y vlan = Y +vxlan = Y [rte_flow actions] count = Y diff --git a/drivers/net/nfp/flower/nfp_flower_cmsg.h b/drivers/net/nfp/flower/nfp_flower_cmsg.h index 6bf8ff7..08e2873 100644 --- a/drivers/net/nfp/flower/nfp_flower_cmsg.h +++ b/drivers/net/nfp/flower/nfp_flower_cmsg.h @@ -324,6 +324,41 @@ struct nfp_flower_ipv6 { uint8_t ipv6_dst[16]; }; +struct nfp_flower_tun_ipv4 { + rte_be32_t src; + rte_be32_t dst; +}; + +struct nfp_flower_tun_ip_ext { + uint8_t tos; + uint8_t ttl; +}; + +/* + * Flow Frame IPv4 UDP TUNNEL --> Tunnel details (5W/20B) + * ----------------------------------------------------------------- + * 3 2 1 + * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | ipv4_addr_src | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | ipv4_addr_dst | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | Reserved | tos | ttl | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | Reserved | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | VNI | Reserved | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + */ +struct nfp_flower_ipv4_udp_tun { + struct nfp_flower_tun_ipv4 ipv4; + rte_be16_t reserved1; + struct nfp_flower_tun_ip_ext ip_ext; + rte_be32_t reserved2; + rte_be32_t tun_id; +}; + struct nfp_fl_act_head { uint8_t jump_id; uint8_t len_lw; diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index 823b020..5f6f800 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -38,7 +38,8 @@ struct nfp_flow_item_proc { char **mbuf_off, const struct rte_flow_item *item, const struct nfp_flow_item_proc *proc, - bool is_mask); + bool is_mask, + bool is_outer_layer); /* List of possible subsequent items. */ const enum rte_flow_item_type *const next_item; }; @@ -503,6 +504,7 @@ struct nfp_mask_id_entry { struct nfp_fl_key_ls *key_ls) { struct rte_eth_dev *ethdev; + bool outer_ip4_flag = false; const struct rte_flow_item *item; struct nfp_flower_representor *representor; const struct rte_flow_item_port_id *port_id; @@ -538,6 +540,8 @@ struct nfp_mask_id_entry { PMD_DRV_LOG(DEBUG, "RTE_FLOW_ITEM_TYPE_IPV4 detected"); key_ls->key_layer |= NFP_FLOWER_LAYER_IPV4; key_ls->key_size += sizeof(struct nfp_flower_ipv4); + if (!outer_ip4_flag) + outer_ip4_flag = true; break; case RTE_FLOW_ITEM_TYPE_IPV6: PMD_DRV_LOG(DEBUG, "RTE_FLOW_ITEM_TYPE_IPV6 detected"); @@ -559,6 +563,21 @@ struct nfp_mask_id_entry { key_ls->key_layer |= NFP_FLOWER_LAYER_TP; key_ls->key_size += sizeof(struct nfp_flower_tp_ports); break; + case RTE_FLOW_ITEM_TYPE_VXLAN: + PMD_DRV_LOG(DEBUG, "RTE_FLOW_ITEM_TYPE_VXLAN detected"); + /* Clear IPv4 bits */ + key_ls->key_layer &= ~NFP_FLOWER_LAYER_IPV4; + key_ls->tun_type = NFP_FL_TUN_VXLAN; + key_ls->key_layer |= NFP_FLOWER_LAYER_VXLAN; + if (outer_ip4_flag) { + key_ls->key_size += sizeof(struct nfp_flower_ipv4_udp_tun); + /* + * The outer l3 layer information is + * in `struct nfp_flower_ipv4_udp_tun` + */ + key_ls->key_size -= sizeof(struct nfp_flower_ipv4); + } + break; default: PMD_DRV_LOG(ERR, "Item type %d not supported.", item->type); return -ENOTSUP; @@ -737,12 +756,25 @@ struct nfp_mask_id_entry { return ret; } +static bool +nfp_flow_is_tunnel(struct rte_flow *nfp_flow) +{ + struct nfp_flower_meta_tci *meta_tci; + + meta_tci = (struct nfp_flower_meta_tci *)nfp_flow->payload.unmasked_data; + if (meta_tci->nfp_flow_key_layer & NFP_FLOWER_LAYER_VXLAN) + return true; + + return false; +} + static int nfp_flow_merge_eth(__rte_unused struct rte_flow *nfp_flow, char **mbuf_off, const struct rte_flow_item *item, const struct nfp_flow_item_proc *proc, - bool is_mask) + bool is_mask, + __rte_unused bool is_outer_layer) { struct nfp_flower_mac_mpls *eth; const struct rte_flow_item_eth *spec; @@ -778,7 +810,8 @@ struct nfp_mask_id_entry { __rte_unused char **mbuf_off, const struct rte_flow_item *item, const struct nfp_flow_item_proc *proc, - bool is_mask) + bool is_mask, + __rte_unused bool is_outer_layer) { struct nfp_flower_meta_tci *meta_tci; const struct rte_flow_item_vlan *spec; @@ -807,41 +840,58 @@ struct nfp_mask_id_entry { char **mbuf_off, const struct rte_flow_item *item, const struct nfp_flow_item_proc *proc, - bool is_mask) + bool is_mask, + bool is_outer_layer) { struct nfp_flower_ipv4 *ipv4; const struct rte_ipv4_hdr *hdr; struct nfp_flower_meta_tci *meta_tci; const struct rte_flow_item_ipv4 *spec; const struct rte_flow_item_ipv4 *mask; + struct nfp_flower_ipv4_udp_tun *ipv4_udp_tun; spec = item->spec; mask = item->mask ? item->mask : proc->mask_default; meta_tci = (struct nfp_flower_meta_tci *)nfp_flow->payload.unmasked_data; - if (spec == NULL) { - PMD_DRV_LOG(DEBUG, "nfp flow merge ipv4: no item->spec!"); - goto ipv4_end; - } + if (is_outer_layer && nfp_flow_is_tunnel(nfp_flow)) { + if (spec == NULL) { + PMD_DRV_LOG(DEBUG, "nfp flow merge ipv4: no item->spec!"); + return 0; + } - /* - * reserve space for L4 info. - * rte_flow has ipv4 before L4 but NFP flower fw requires L4 before ipv4 - */ - if (meta_tci->nfp_flow_key_layer & NFP_FLOWER_LAYER_TP) - *mbuf_off += sizeof(struct nfp_flower_tp_ports); + hdr = is_mask ? &mask->hdr : &spec->hdr; + ipv4_udp_tun = (struct nfp_flower_ipv4_udp_tun *)*mbuf_off; - hdr = is_mask ? &mask->hdr : &spec->hdr; - ipv4 = (struct nfp_flower_ipv4 *)*mbuf_off; + ipv4_udp_tun->ip_ext.tos = hdr->type_of_service; + ipv4_udp_tun->ip_ext.ttl = hdr->time_to_live; + ipv4_udp_tun->ipv4.src = hdr->src_addr; + ipv4_udp_tun->ipv4.dst = hdr->dst_addr; + } else { + if (spec == NULL) { + PMD_DRV_LOG(DEBUG, "nfp flow merge ipv4: no item->spec!"); + goto ipv4_end; + } + + /* + * reserve space for L4 info. + * rte_flow has ipv4 before L4 but NFP flower fw requires L4 before ipv4 + */ + if (meta_tci->nfp_flow_key_layer & NFP_FLOWER_LAYER_TP) + *mbuf_off += sizeof(struct nfp_flower_tp_ports); + + hdr = is_mask ? &mask->hdr : &spec->hdr; + ipv4 = (struct nfp_flower_ipv4 *)*mbuf_off; - ipv4->ip_ext.tos = hdr->type_of_service; - ipv4->ip_ext.proto = hdr->next_proto_id; - ipv4->ip_ext.ttl = hdr->time_to_live; - ipv4->ipv4_src = hdr->src_addr; - ipv4->ipv4_dst = hdr->dst_addr; + ipv4->ip_ext.tos = hdr->type_of_service; + ipv4->ip_ext.proto = hdr->next_proto_id; + ipv4->ip_ext.ttl = hdr->time_to_live; + ipv4->ipv4_src = hdr->src_addr; + ipv4->ipv4_dst = hdr->dst_addr; ipv4_end: - *mbuf_off += sizeof(struct nfp_flower_ipv4); + *mbuf_off += sizeof(struct nfp_flower_ipv4); + } return 0; } @@ -851,7 +901,8 @@ struct nfp_mask_id_entry { char **mbuf_off, const struct rte_flow_item *item, const struct nfp_flow_item_proc *proc, - bool is_mask) + bool is_mask, + __rte_unused bool is_outer_layer) { struct nfp_flower_ipv6 *ipv6; const struct rte_ipv6_hdr *hdr; @@ -896,7 +947,8 @@ struct nfp_mask_id_entry { char **mbuf_off, const struct rte_flow_item *item, const struct nfp_flow_item_proc *proc, - bool is_mask) + bool is_mask, + __rte_unused bool is_outer_layer) { uint8_t tcp_flags; struct nfp_flower_tp_ports *ports; @@ -968,7 +1020,8 @@ struct nfp_mask_id_entry { char **mbuf_off, const struct rte_flow_item *item, const struct nfp_flow_item_proc *proc, - bool is_mask) + bool is_mask, + bool is_outer_layer) { char *ports_off; struct nfp_flower_tp_ports *ports; @@ -982,6 +1035,12 @@ struct nfp_mask_id_entry { return 0; } + /* Don't add L4 info if working on a inner layer pattern */ + if (!is_outer_layer) { + PMD_DRV_LOG(INFO, "Detected inner layer UDP, skipping."); + return 0; + } + meta_tci = (struct nfp_flower_meta_tci *)nfp_flow->payload.unmasked_data; if (meta_tci->nfp_flow_key_layer & NFP_FLOWER_LAYER_IPV4) { ports_off = *mbuf_off - sizeof(struct nfp_flower_ipv4) - @@ -1009,7 +1068,8 @@ struct nfp_mask_id_entry { char **mbuf_off, const struct rte_flow_item *item, const struct nfp_flow_item_proc *proc, - bool is_mask) + bool is_mask, + __rte_unused bool is_outer_layer) { char *ports_off; struct nfp_flower_tp_ports *ports; @@ -1045,10 +1105,42 @@ struct nfp_mask_id_entry { return 0; } +static int +nfp_flow_merge_vxlan(__rte_unused struct rte_flow *nfp_flow, + char **mbuf_off, + const struct rte_flow_item *item, + const struct nfp_flow_item_proc *proc, + bool is_mask, + __rte_unused bool is_outer_layer) +{ + const struct rte_vxlan_hdr *hdr; + struct nfp_flower_ipv4_udp_tun *tun4; + const struct rte_flow_item_vxlan *spec; + const struct rte_flow_item_vxlan *mask; + + spec = item->spec; + if (spec == NULL) { + PMD_DRV_LOG(DEBUG, "nfp flow merge vxlan: no item->spec!"); + goto vxlan_end; + } + + mask = item->mask ? item->mask : proc->mask_default; + hdr = is_mask ? &mask->hdr : &spec->hdr; + + tun4 = (struct nfp_flower_ipv4_udp_tun *)*mbuf_off; + tun4->tun_id = hdr->vx_vni; + +vxlan_end: + *mbuf_off += sizeof(struct nfp_flower_ipv4_udp_tun); + + return 0; +} + /* 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] = { - .next_item = NEXT_ITEM(RTE_FLOW_ITEM_TYPE_ETH), + .next_item = NEXT_ITEM(RTE_FLOW_ITEM_TYPE_ETH, + RTE_FLOW_ITEM_TYPE_IPV4), }, [RTE_FLOW_ITEM_TYPE_ETH] = { .next_item = NEXT_ITEM(RTE_FLOW_ITEM_TYPE_VLAN, @@ -1131,6 +1223,7 @@ struct nfp_mask_id_entry { .merge = nfp_flow_merge_tcp, }, [RTE_FLOW_ITEM_TYPE_UDP] = { + .next_item = NEXT_ITEM(RTE_FLOW_ITEM_TYPE_VXLAN), .mask_support = &(const struct rte_flow_item_udp){ .hdr = { .src_port = RTE_BE16(0xffff), @@ -1152,6 +1245,17 @@ struct nfp_mask_id_entry { .mask_sz = sizeof(struct rte_flow_item_sctp), .merge = nfp_flow_merge_sctp, }, + [RTE_FLOW_ITEM_TYPE_VXLAN] = { + .next_item = NEXT_ITEM(RTE_FLOW_ITEM_TYPE_ETH), + .mask_support = &(const struct rte_flow_item_vxlan){ + .hdr = { + .vx_vni = RTE_BE32(0xffffff00), + }, + }, + .mask_default = &rte_flow_item_vxlan_mask, + .mask_sz = sizeof(struct rte_flow_item_vxlan), + .merge = nfp_flow_merge_vxlan, + }, }; static int @@ -1205,21 +1309,53 @@ struct nfp_mask_id_entry { return ret; } +static bool +nfp_flow_is_tun_item(const struct rte_flow_item *item) +{ + if (item->type == RTE_FLOW_ITEM_TYPE_VXLAN) + return true; + + return false; +} + +static bool +nfp_flow_inner_item_get(const struct rte_flow_item items[], + const struct rte_flow_item **inner_item) +{ + const struct rte_flow_item *item; + + *inner_item = items; + + for (item = items; item->type != RTE_FLOW_ITEM_TYPE_END; ++item) { + if (nfp_flow_is_tun_item(item)) { + *inner_item = ++item; + return true; + } + } + + return false; +} + static int nfp_flow_compile_item_proc(const struct rte_flow_item items[], struct rte_flow *nfp_flow, char **mbuf_off_exact, - char **mbuf_off_mask) + char **mbuf_off_mask, + bool is_outer_layer) { int i; int ret = 0; + bool continue_flag = true; const struct rte_flow_item *item; const struct nfp_flow_item_proc *proc_list; proc_list = nfp_flow_item_proc_list; - for (item = items; item->type != RTE_FLOW_ITEM_TYPE_END; ++item) { + for (item = items; item->type != RTE_FLOW_ITEM_TYPE_END && continue_flag; ++item) { const struct nfp_flow_item_proc *proc = NULL; + if (nfp_flow_is_tun_item(item)) + continue_flag = false; + for (i = 0; proc_list->next_item && proc_list->next_item[i]; ++i) { if (proc_list->next_item[i] == item->type) { proc = &nfp_flow_item_proc_list[item->type]; @@ -1248,14 +1384,14 @@ struct nfp_mask_id_entry { } ret = proc->merge(nfp_flow, mbuf_off_exact, item, - proc, false); + proc, false, is_outer_layer); if (ret != 0) { PMD_DRV_LOG(ERR, "nfp flow item %d exact merge failed", item->type); break; } ret = proc->merge(nfp_flow, mbuf_off_mask, item, - proc, true); + proc, true, is_outer_layer); if (ret != 0) { PMD_DRV_LOG(ERR, "nfp flow item %d mask merge failed", item->type); break; @@ -1275,6 +1411,9 @@ struct nfp_mask_id_entry { int ret; char *mbuf_off_mask; char *mbuf_off_exact; + bool is_tun_flow = false; + bool is_outer_layer = true; + const struct rte_flow_item *loop_item; mbuf_off_exact = nfp_flow->payload.unmasked_data + sizeof(struct nfp_flower_meta_tci) + @@ -1283,14 +1422,29 @@ struct nfp_mask_id_entry { sizeof(struct nfp_flower_meta_tci) + sizeof(struct nfp_flower_in_port); + /* Check if this is a tunnel flow and get the inner item*/ + is_tun_flow = nfp_flow_inner_item_get(items, &loop_item); + if (is_tun_flow) + is_outer_layer = false; + /* Go over items */ - ret = nfp_flow_compile_item_proc(items, nfp_flow, - &mbuf_off_exact, &mbuf_off_mask); + ret = nfp_flow_compile_item_proc(loop_item, nfp_flow, + &mbuf_off_exact, &mbuf_off_mask, is_outer_layer); if (ret != 0) { PMD_DRV_LOG(ERR, "nfp flow item compile failed."); return -EINVAL; } + /* Go over inner items */ + if (is_tun_flow) { + ret = nfp_flow_compile_item_proc(items, nfp_flow, + &mbuf_off_exact, &mbuf_off_mask, true); + if (ret != 0) { + PMD_DRV_LOG(ERR, "nfp flow outer item compile failed."); + return -EINVAL; + } + } + return 0; } @@ -2123,12 +2277,35 @@ struct nfp_mask_id_entry { return 0; } +static int +nfp_flow_tunnel_match(__rte_unused struct rte_eth_dev *dev, + __rte_unused struct rte_flow_tunnel *tunnel, + __rte_unused struct rte_flow_item **pmd_items, + uint32_t *num_of_items, + __rte_unused struct rte_flow_error *err) +{ + *num_of_items = 0; + + return 0; +} + +static int +nfp_flow_tunnel_item_release(__rte_unused struct rte_eth_dev *dev, + __rte_unused struct rte_flow_item *pmd_items, + __rte_unused uint32_t num_of_items, + __rte_unused struct rte_flow_error *err) +{ + return 0; +} + static const struct rte_flow_ops nfp_flow_ops = { .validate = nfp_flow_validate, .create = nfp_flow_create, .destroy = nfp_flow_destroy, .flush = nfp_flow_flush, .query = nfp_flow_query, + .tunnel_match = nfp_flow_tunnel_match, + .tunnel_item_release = nfp_flow_tunnel_item_release, }; int From patchwork Tue Oct 18 03:22:16 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 118312 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id B6D82A0560; Tue, 18 Oct 2022 05:23:08 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 76A1241133; Tue, 18 Oct 2022 05:23:06 +0200 (CEST) Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2131.outbound.protection.outlook.com [40.107.223.131]) by mails.dpdk.org (Postfix) with ESMTP id 89C004021E for ; Tue, 18 Oct 2022 05:23:04 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=lkGDSHlDPRJcbYroT241z0YqCxgcXPPlgLb8Wk20VmkWANGsjrcizuT5vjAF1cyE18Lr8lvQhsy7u3KmIDlZB67cdRCLHFWb3ooJG+aWTy93bhbrrMuu0kcHWHbjkoLG0DGyxAYqECeC6sWWJEHiUNo7XN4vLk9wfAfELjSQgwZtETX/viW+dbK4a0FlfaXXAYjJRlu3m+CLozr5FtiNfFrqP8eSCWBzD5PMd9W9XhGA2dvZuntK356dNkbXVwPq5PIaoN24y7wYJE0rv25XWet41RdWJ20cLyfv7uA4zDwWt6EVVYrglITvSZMROtLC1YfxujqufKH/94+8GfndBg== 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=I1WC60XuYa5k+UGDbpEwLcW6dcyKdsZS7XnnDKfgbPs=; b=U1O9HX0Rl01kyaxZLTGrJc0qDsexex324F6cS757CsQ6lik1L+XRHj0sno5YDHJiGpKHfz1Fju++OqHIZItK1suaC39vbeSU1EpA2lRbzr7IdXfwpArQIS11c+lpaXEHkXT4503z4IpLaPM1DJlq87YwXx6ojpKhJRwKGUJiwzWTMcW43DXBZUsauODfliat345J+PtH8CcrG2XxUavndxvpL20mCLhbXMgFWVBQW8ertuZHjMhshfvej5SbcIz+AeIjUgvy2tXWQnil45ETzZzmyGzBfsTaFClqyKSkVBAOQut6QwHtlVFLTqXQblDSeZMSFNCwMSwvDCS3WUE2wA== 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=I1WC60XuYa5k+UGDbpEwLcW6dcyKdsZS7XnnDKfgbPs=; b=NsSZ3YG31C7scdpNvr5xx4yKql35cpWB8Hy0o18RL9Kawxc2IxPgLyxiDdqnrWc75Y0pn9O+P6XHRcFK0HJnH9pyOJRUvN5Q4n3bd79vfd+gYTXVKOfKyFGob151L1q4T562Jk0ipyRlhJIZ70P0qyujwTX2q3/J/cQxzhd99v8= 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 MN2PR13MB4149.namprd13.prod.outlook.com (2603:10b6:208:24f::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.20; Tue, 18 Oct 2022 03:23:03 +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:03 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH 02/25] net/nfp: add the offload support of IPv6 VXLAN item Date: Tue, 18 Oct 2022 11:22:16 +0800 Message-Id: <1666063359-34283-3-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> 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_|MN2PR13MB4149:EE_ X-MS-Office365-Filtering-Correlation-Id: e72dab46-af75-447d-5066-08dab0b810c5 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 6HajEuE9GoFY99hK8TeeJouHWqr3z+yPSKkQGQ31n4JTuyayVR66IKzDPHDxxM4VvbIpBYj+LETIlCfL54e7jeHHzGvbrxLZh1z8IkE0QuX6X12C7simq7Rpb5J8olLK+WzEM+Hqivl0M0KPUWO4pricH7S7U/53HWic/nEGnmtuoWE6wZ9qz2B5T9QrrzXti5wTcoiXRHEIDaoy0iUPrVkO8fpyJ65VPl482uoPwGFpRzGNoRIZTzglh8Vm3x9V6RgoY8DyvffPSSQM867n/oVuatRZmp+MyrGp6DAFW66Py4MVHJXP8gOgT/u+D7Em0AqBAoFiOVl10n9WEfkYsCHJexCvBatMMNiuEUncgev2TW72fBh/gil5ToSFwgTHyC4iQaIxlDZ5hp7eBfzW0hUo6eR4GIObc4zp2V7VV3msYpVF6pU/TnHWmi8P2BLIj8UClmDEyuHSiJAmb6VBtTkLzE9ae3D63nzsiPTDYoZNrpq1I6dhNWBQIVW/iRljj+IKrJHDqfvWxrM3BbV4V8R6kfzaV11Dtcv+C4NYyIU4pJJy7JD0tIUu0uGazbwln21gX3ZoGTwNxZEHyBF+Bb2egZ7AjoobSBaQNooQTeQasJmhggL92ijJH7RccUNX9WnJgw5oDm/o9uAIBP5ZyqfKUn6EQ8sNSstEspMqgC/AfVoFP9WcQdZjkqHO9dOk4LGoG9YaD333zuNtdykoqQfp1WDh9//Lp3sz8XfkAmUv8teB2VsB1Ayounm7rnmp+yLZCuE2owxLz43tgFhqD/y5WuZOJSnvJsjsyQsKwScEb/gUi6JYRAoW9kE110rX 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)(366004)(346002)(376002)(396003)(39840400004)(451199015)(38350700002)(86362001)(38100700002)(36756003)(83380400001)(66574015)(5660300002)(52116002)(6506007)(2616005)(26005)(6512007)(186003)(6666004)(2906002)(6916009)(316002)(6486002)(107886003)(4326008)(66946007)(66556008)(478600001)(8936002)(44832011)(41300700001)(8676002)(66476007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?ZUCcTCkNMywdL/nxfBneLdwiNtDp?= =?utf-8?q?NpB1nALyF0vT7L+0QhkFTqTSNs2fqAj/JRS4IoV4Uo0GxMw+XbrQaMZdtjJ4hvWPg?= =?utf-8?q?2MTuBz0TtVGZMTI2N5S7ypduFD3aXZV010rkwDdIXrPfReID6/mjvSy5aecUAADfC?= =?utf-8?q?q5/awzhijpwVsR0PAawCv9H+ySY0wgPwFLI/eQYvpC+2NX6WNNUDWtIB//9JnshIZ?= =?utf-8?q?GolYvY/bZDYv7Vv6AnqHlTnwwgdf1ZjTdkIMDvUYc8ojQawYc66mPQZlAzx3GThBU?= =?utf-8?q?d9nhiNJu2D7AxdW5dJQTgDCeH98QWj0z++uPyPFxlruUCWoYi2wJwfngwjG2yfy4t?= =?utf-8?q?Y+xJ5ntfiCl57puisCsmZ4HwfT+NDQi5tUcWqgU/EUYDjaF2mkBF86kyWPoiqakL+?= =?utf-8?q?fgCS/f+yX3rEQyYemj7lAwhaOjIZzCfJ+yoQcHpcG2QYVPNo5Hto8IRL5vgN2glsn?= =?utf-8?q?N7jAVAU7ShXTRjE8Brpa29w1M5dk8yQyUncLkjtQkYU4MiC7sgPVPYCFouMciXum3?= =?utf-8?q?N+93MzXlm4czT2aQsPp+1cndBSzdhYC5poZlTPdpw6AB5VsJO+MhIlrJ4vugj6AmA?= =?utf-8?q?L+3yM9Sx7BdlLST3n3kjXMypPhEr2oEKQ3IrXXYKSaBIbUGBfP5HTTTn4R5Q/RUEO?= =?utf-8?q?64Gy/4Y61kZCYbQdARAnFNIyUGjpjF/78lFzEBv5EQsb2EifKHJAba7NrouL6rmWs?= =?utf-8?q?rVswfBIdAKo1PYGwUV/VRfyl6MyHpDpkSmayTYC3ugHm0oy0tt6jYLrQn77S+c73C?= =?utf-8?q?XAUY1gMDYiooRFwP3d9wIKUyHFkUb9spMgUjVAmnyRyw9UjohJc8fK51rwaeCwpT+?= =?utf-8?q?PtLAYUYbe2zTT1Y4J4UxH3IUUgfVNMz00WfavAu2uHMh5sQnY89Ook036pWB2asgS?= =?utf-8?q?0NEagSMBuCrce5HSaw48315ox71MUDhCODyZH+EbM2N7rRDP++J0inV5Ro8FUunKs?= =?utf-8?q?huK1xMOGbP7PYCf+asuUNmxivOE3ZhLFbNri9o+uB1XcugnoW8cdH3HVt9yHtncj5?= =?utf-8?q?SRw55wncFTsAj4AAurDedaqScyiAZXljjtpj4DRmdBORGlJoluAmoykzs4IGSq9tJ?= =?utf-8?q?sRI/3bQqQpF6uwlZfV4tc8SEz+4F1LS1uXv3at8+/d09IjZtEZy0wMmgKg5O1WUXn?= =?utf-8?q?LSQ3k31f+XRWmjpEOpeXMA4Yl12pwVAmM2FUJV55EVDqnB3YJea53EF0U/HSem06S?= =?utf-8?q?NfpyrjWagn6u3Sci/8IpS6A7eIqQ6W1q5e7Dvc8qUC+gwgEo18FceaV/pOp+7WOgz?= =?utf-8?q?nuwtP/WVJ6grrV42rfvhv7HLI1TUdIauP7tGvzjQ9Lle1ePkex/yCPpFcuub8UypB?= =?utf-8?q?cr34+dECg7qrA1KgCSFB2hwu4zMdwqHF00omYU+ujNh6lIzL/5Nqe4Y3JzNYA/rIf?= =?utf-8?q?0gQYDDcyLyXMZ5deZ3p1hr28GaLp6o7GrqSc3flKJOIIB1ko81PYfkxIhlz87oLsW?= =?utf-8?q?l6dUePuXutZ/LkRvcpGpVywoif7Eap1cQIkq+O0fySXA/LV3qK8nCmSkWRHb7ZcUN?= =?utf-8?q?WlD8ZIkDjdhC+ADtjuWZW8CQwlIJ0qG/uA=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: e72dab46-af75-447d-5066-08dab0b810c5 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:02.9746 (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: 5522Tnt+mueRBDKBND2zEMzEP7UN4BPY3j3Qfy/gQcroLnylj7Il9WyxggtBmIlgbau1XVdhIiIjlM3K8fW85gSdYvK/XMA8W3MLoS0NGbw= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR13MB4149 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 data structure and logics, to support the offload of IPv6 VXLAN item. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- drivers/net/nfp/flower/nfp_flower_cmsg.h | 42 ++++++++++++ drivers/net/nfp/nfp_flow.c | 113 ++++++++++++++++++++++++------- 2 files changed, 129 insertions(+), 26 deletions(-) diff --git a/drivers/net/nfp/flower/nfp_flower_cmsg.h b/drivers/net/nfp/flower/nfp_flower_cmsg.h index 08e2873..996ba3b 100644 --- a/drivers/net/nfp/flower/nfp_flower_cmsg.h +++ b/drivers/net/nfp/flower/nfp_flower_cmsg.h @@ -329,6 +329,11 @@ struct nfp_flower_tun_ipv4 { rte_be32_t dst; }; +struct nfp_flower_tun_ipv6 { + uint8_t ipv6_src[16]; + uint8_t ipv6_dst[16]; +}; + struct nfp_flower_tun_ip_ext { uint8_t tos; uint8_t ttl; @@ -359,6 +364,43 @@ struct nfp_flower_ipv4_udp_tun { rte_be32_t tun_id; }; +/* + * Flow Frame IPv6 UDP TUNNEL --> Tunnel details (11W/44B) + * ----------------------------------------------------------------- + * 3 2 1 + * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | ipv6_addr_src, 31 - 0 | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | ipv6_addr_src, 63 - 32 | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | ipv6_addr_src, 95 - 64 | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | ipv6_addr_src, 127 - 96 | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | ipv6_addr_dst, 31 - 0 | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | ipv6_addr_dst, 63 - 32 | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | ipv6_addr_dst, 95 - 64 | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | ipv6_addr_dst, 127 - 96 | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | Reserved | tos | ttl | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | Reserved | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | VNI | Reserved | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + */ +struct nfp_flower_ipv6_udp_tun { + struct nfp_flower_tun_ipv6 ipv6; + rte_be16_t reserved1; + struct nfp_flower_tun_ip_ext ip_ext; + rte_be32_t reserved2; + rte_be32_t tun_id; +}; + struct nfp_fl_act_head { uint8_t jump_id; uint8_t len_lw; diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index 5f6f800..1673518 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -505,6 +505,7 @@ struct nfp_mask_id_entry { { struct rte_eth_dev *ethdev; bool outer_ip4_flag = false; + bool outer_ip6_flag = false; const struct rte_flow_item *item; struct nfp_flower_representor *representor; const struct rte_flow_item_port_id *port_id; @@ -547,6 +548,8 @@ struct nfp_mask_id_entry { PMD_DRV_LOG(DEBUG, "RTE_FLOW_ITEM_TYPE_IPV6 detected"); key_ls->key_layer |= NFP_FLOWER_LAYER_IPV6; key_ls->key_size += sizeof(struct nfp_flower_ipv6); + if (!outer_ip6_flag) + outer_ip6_flag = true; break; case RTE_FLOW_ITEM_TYPE_TCP: PMD_DRV_LOG(DEBUG, "RTE_FLOW_ITEM_TYPE_TCP detected"); @@ -565,8 +568,9 @@ struct nfp_mask_id_entry { break; case RTE_FLOW_ITEM_TYPE_VXLAN: PMD_DRV_LOG(DEBUG, "RTE_FLOW_ITEM_TYPE_VXLAN detected"); - /* Clear IPv4 bits */ + /* Clear IPv4 and IPv6 bits */ key_ls->key_layer &= ~NFP_FLOWER_LAYER_IPV4; + key_ls->key_layer &= ~NFP_FLOWER_LAYER_IPV6; key_ls->tun_type = NFP_FL_TUN_VXLAN; key_ls->key_layer |= NFP_FLOWER_LAYER_VXLAN; if (outer_ip4_flag) { @@ -576,6 +580,19 @@ struct nfp_mask_id_entry { * in `struct nfp_flower_ipv4_udp_tun` */ key_ls->key_size -= sizeof(struct nfp_flower_ipv4); + } else if (outer_ip6_flag) { + key_ls->key_layer |= NFP_FLOWER_LAYER_EXT_META; + key_ls->key_layer_two |= NFP_FLOWER_LAYER2_TUN_IPV6; + key_ls->key_size += sizeof(struct nfp_flower_ext_meta); + key_ls->key_size += sizeof(struct nfp_flower_ipv6_udp_tun); + /* + * The outer l3 layer information is + * in `struct nfp_flower_ipv6_udp_tun` + */ + key_ls->key_size -= sizeof(struct nfp_flower_ipv6); + } else { + PMD_DRV_LOG(ERR, "No outer IP layer for VXLAN tunnel."); + return -EINVAL; } break; default: @@ -902,42 +919,61 @@ struct nfp_mask_id_entry { const struct rte_flow_item *item, const struct nfp_flow_item_proc *proc, bool is_mask, - __rte_unused bool is_outer_layer) + bool is_outer_layer) { struct nfp_flower_ipv6 *ipv6; const struct rte_ipv6_hdr *hdr; struct nfp_flower_meta_tci *meta_tci; const struct rte_flow_item_ipv6 *spec; const struct rte_flow_item_ipv6 *mask; + struct nfp_flower_ipv6_udp_tun *ipv6_udp_tun; spec = item->spec; mask = item->mask ? item->mask : proc->mask_default; meta_tci = (struct nfp_flower_meta_tci *)nfp_flow->payload.unmasked_data; - if (spec == NULL) { - PMD_DRV_LOG(DEBUG, "nfp flow merge ipv6: no item->spec!"); - goto ipv6_end; - } + if (is_outer_layer && nfp_flow_is_tunnel(nfp_flow)) { + if (spec == NULL) { + PMD_DRV_LOG(DEBUG, "nfp flow merge ipv6: no item->spec!"); + return 0; + } - /* - * reserve space for L4 info. - * rte_flow has ipv4 before L4 but NFP flower fw requires L4 before ipv4 - */ - if (meta_tci->nfp_flow_key_layer & NFP_FLOWER_LAYER_TP) - *mbuf_off += sizeof(struct nfp_flower_tp_ports); + hdr = is_mask ? &mask->hdr : &spec->hdr; + ipv6_udp_tun = (struct nfp_flower_ipv6_udp_tun *)*mbuf_off; + + ipv6_udp_tun->ip_ext.tos = (hdr->vtc_flow & + RTE_IPV6_HDR_TC_MASK) >> RTE_IPV6_HDR_TC_SHIFT; + ipv6_udp_tun->ip_ext.ttl = hdr->hop_limits; + memcpy(ipv6_udp_tun->ipv6.ipv6_src, hdr->src_addr, + sizeof(ipv6_udp_tun->ipv6.ipv6_src)); + memcpy(ipv6_udp_tun->ipv6.ipv6_dst, hdr->dst_addr, + sizeof(ipv6_udp_tun->ipv6.ipv6_dst)); + } else { + if (spec == NULL) { + PMD_DRV_LOG(DEBUG, "nfp flow merge ipv6: no item->spec!"); + goto ipv6_end; + } - hdr = is_mask ? &mask->hdr : &spec->hdr; - ipv6 = (struct nfp_flower_ipv6 *)*mbuf_off; + /* + * reserve space for L4 info. + * rte_flow has ipv4 before L4 but NFP flower fw requires L4 before ipv6 + */ + if (meta_tci->nfp_flow_key_layer & NFP_FLOWER_LAYER_TP) + *mbuf_off += sizeof(struct nfp_flower_tp_ports); + + hdr = is_mask ? &mask->hdr : &spec->hdr; + ipv6 = (struct nfp_flower_ipv6 *)*mbuf_off; - ipv6->ip_ext.tos = (hdr->vtc_flow & RTE_IPV6_HDR_TC_MASK) >> - RTE_IPV6_HDR_TC_SHIFT; - ipv6->ip_ext.proto = hdr->proto; - ipv6->ip_ext.ttl = hdr->hop_limits; - memcpy(ipv6->ipv6_src, hdr->src_addr, sizeof(ipv6->ipv6_src)); - memcpy(ipv6->ipv6_dst, hdr->dst_addr, sizeof(ipv6->ipv6_dst)); + ipv6->ip_ext.tos = (hdr->vtc_flow & RTE_IPV6_HDR_TC_MASK) >> + RTE_IPV6_HDR_TC_SHIFT; + ipv6->ip_ext.proto = hdr->proto; + ipv6->ip_ext.ttl = hdr->hop_limits; + memcpy(ipv6->ipv6_src, hdr->src_addr, sizeof(ipv6->ipv6_src)); + memcpy(ipv6->ipv6_dst, hdr->dst_addr, sizeof(ipv6->ipv6_dst)); ipv6_end: - *mbuf_off += sizeof(struct nfp_flower_ipv6); + *mbuf_off += sizeof(struct nfp_flower_ipv6); + } return 0; } @@ -1106,7 +1142,7 @@ struct nfp_mask_id_entry { } static int -nfp_flow_merge_vxlan(__rte_unused struct rte_flow *nfp_flow, +nfp_flow_merge_vxlan(struct rte_flow *nfp_flow, char **mbuf_off, const struct rte_flow_item *item, const struct nfp_flow_item_proc *proc, @@ -1115,8 +1151,15 @@ struct nfp_mask_id_entry { { const struct rte_vxlan_hdr *hdr; struct nfp_flower_ipv4_udp_tun *tun4; + struct nfp_flower_ipv6_udp_tun *tun6; + struct nfp_flower_meta_tci *meta_tci; const struct rte_flow_item_vxlan *spec; const struct rte_flow_item_vxlan *mask; + struct nfp_flower_ext_meta *ext_meta = NULL; + + meta_tci = (struct nfp_flower_meta_tci *)nfp_flow->payload.unmasked_data; + if (meta_tci->nfp_flow_key_layer & NFP_FLOWER_LAYER_EXT_META) + ext_meta = (struct nfp_flower_ext_meta *)(meta_tci + 1); spec = item->spec; if (spec == NULL) { @@ -1127,11 +1170,21 @@ struct nfp_mask_id_entry { mask = item->mask ? item->mask : proc->mask_default; hdr = is_mask ? &mask->hdr : &spec->hdr; - tun4 = (struct nfp_flower_ipv4_udp_tun *)*mbuf_off; - tun4->tun_id = hdr->vx_vni; + if (ext_meta && (rte_be_to_cpu_32(ext_meta->nfp_flow_key_layer2) & + NFP_FLOWER_LAYER2_TUN_IPV6)) { + tun6 = (struct nfp_flower_ipv6_udp_tun *)*mbuf_off; + tun6->tun_id = hdr->vx_vni; + } else { + tun4 = (struct nfp_flower_ipv4_udp_tun *)*mbuf_off; + tun4->tun_id = hdr->vx_vni; + } vxlan_end: - *mbuf_off += sizeof(struct nfp_flower_ipv4_udp_tun); + if (ext_meta && (rte_be_to_cpu_32(ext_meta->nfp_flow_key_layer2) & + NFP_FLOWER_LAYER2_TUN_IPV6)) + *mbuf_off += sizeof(struct nfp_flower_ipv6_udp_tun); + else + *mbuf_off += sizeof(struct nfp_flower_ipv4_udp_tun); return 0; } @@ -1140,7 +1193,8 @@ struct nfp_mask_id_entry { static const struct nfp_flow_item_proc nfp_flow_item_proc_list[] = { [RTE_FLOW_ITEM_TYPE_END] = { .next_item = NEXT_ITEM(RTE_FLOW_ITEM_TYPE_ETH, - RTE_FLOW_ITEM_TYPE_IPV4), + RTE_FLOW_ITEM_TYPE_IPV4, + RTE_FLOW_ITEM_TYPE_IPV6), }, [RTE_FLOW_ITEM_TYPE_ETH] = { .next_item = NEXT_ITEM(RTE_FLOW_ITEM_TYPE_VLAN, @@ -1413,6 +1467,7 @@ struct nfp_mask_id_entry { char *mbuf_off_exact; bool is_tun_flow = false; bool is_outer_layer = true; + struct nfp_flower_meta_tci *meta_tci; const struct rte_flow_item *loop_item; mbuf_off_exact = nfp_flow->payload.unmasked_data + @@ -1422,6 +1477,12 @@ struct nfp_mask_id_entry { sizeof(struct nfp_flower_meta_tci) + sizeof(struct nfp_flower_in_port); + meta_tci = (struct nfp_flower_meta_tci *)nfp_flow->payload.unmasked_data; + if (meta_tci->nfp_flow_key_layer & NFP_FLOWER_LAYER_EXT_META) { + mbuf_off_exact += sizeof(struct nfp_flower_ext_meta); + mbuf_off_mask += sizeof(struct nfp_flower_ext_meta); + } + /* Check if this is a tunnel flow and get the inner item*/ is_tun_flow = nfp_flow_inner_item_get(items, &loop_item); if (is_tun_flow) From patchwork Tue Oct 18 03:22:17 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 118314 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id F3AE5A0560; Tue, 18 Oct 2022 05:23:19 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 483D941611; Tue, 18 Oct 2022 05:23:09 +0200 (CEST) Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2116.outbound.protection.outlook.com [40.107.92.116]) by mails.dpdk.org (Postfix) with ESMTP id 84B0441145 for ; Tue, 18 Oct 2022 05:23:06 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Lkkak+Mb7w6JF/B7jPhlrFg1HhgWL2ANx6ASl0AgiCKDJfQ/th0TXUAFkCE5xbMVaWfaPRoj41Cs6vx4YUaH7f6oYVmFhPF1HzKB1tIYDC4G0ODPjOb3wWT9MeLh7BfCzviuKPsNMrH10y+aumtpABA6Di1Pq/p3j0NM3gpyy5q1vmSrlJUVZz+j2hvp2gogL2iFe6hoeFgFo3d8H8fcJnDsenJBp9PdgzqGHyQCbmdk0UxwmwB4OCU0jok5XznpObsiD0tqbR1vizPcbMru3kD8wRODE+47l3U6eI5Rvi7rCNdzJTOdzcY0aZvRnOeCQFrQpEe5GkM9PVNBGB98JA== 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=4CUk+G9h76MfIOsBBGYwPHwwuniuOrxw2oN7NyllumA=; b=jLtt5zq16pd3EdvOvWSyn0xp+wMrFbXBsJk6W4B2CO1iI4Zk6ZjknpbJRa2eHdYW2+abb5JaFuML3XHX5R87JbQajAE5dNmKDOkhKkgFU/VoX8vJ+w2DdONXdHpNVvQ2ZYpZmqAqLu3Xv3spHaeQZYJ8Iu/bjTUfzBvHWOWtwc6lq3/6YTlMROHn8h98iGDtNpW1XAMC/z5Q4An97JY+vsPatLUQJw35G4OTEZeYFESkDs/lmKM2RpH77E/Nr3FSn8CwuisTJKJ5jla4YXOul4lQ0GB5/8LX4YIjZ/zCeo17TMVdkXBFUecSiJEs2+e06i5wtEPWDfE7T4+NS3athg== 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=4CUk+G9h76MfIOsBBGYwPHwwuniuOrxw2oN7NyllumA=; b=COaG1kfQwnhVCFXwDnt7jHHdvboGcgJwiZHlYZg9mAoBKF3PrhbWEXUIldYSGgo1CCrPBV4FW8hyA2oooeSikangWZPcy6V7Oo3y3SxyqweNSNvs4t7jvIWrIhWEA/yCulrG3GGHdnN4yIXZf7jmNSncPRMchRwN3BrKWPgWZuI= 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 MN2PR13MB4149.namprd13.prod.outlook.com (2603:10b6:208:24f::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.20; Tue, 18 Oct 2022 03:23:05 +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:04 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH 03/25] net/nfp: prepare for the encap action of IPv4 tunnel Date: Tue, 18 Oct 2022 11:22:17 +0800 Message-Id: <1666063359-34283-4-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> 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_|MN2PR13MB4149:EE_ X-MS-Office365-Filtering-Correlation-Id: 7d6010b4-2d9e-4c18-ee1f-08dab0b811e5 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: EyqwGn+S7DhNy1R4fUmKz45cztY8CaNbtOHXgqC4vh4/e3XtZPmmP+o76ittYwOU3hiQ1KntySf+7ga8UQ4NoeyZ9rnLpj7LRP5cskmoVi4JOnNI9GLWndNdhid8p0+JN7cDMkM1dBbSopJCa7zmEjWBDMTkgbb9W+2ZDVUnyc9q6vYewLiZgmIvKle6rPJ/VbjfsNX0/QTVVGanOwhQdYxNqH0KyaC7zppj6A3F/irE6PtdAXYr+0tvM07aw+A9BcWfJ8d4VGo3GrzCu7xr+XXaoxrp7jPm7c8lCTm4ssi/o8/1X2b/GPaWfJpmmrIQziFv7n64EvQ6AUyaf0ug8gAjo7ovQnlZPopuV29ZlfFNi+LSEmVkVsiHnbV9JT9d0SvKEANreyRzB/EVjx/WmcrDi4+/TU3w0kD+qy+/TVTkHvbruxSeiaHaK3hCJY6mhy/3T7s3DE+gFGwL2kRWCKVLFaDgFFf5LwoSwTnP8jB/Pd4UO84XA3bZLFTSMUeD5T0TftBd+DGheH6a+0D96JXUtE+/LM1pOxaeOLGDpg3G2B/a2Y9mN5IkemYZE9WShzr0o8WCxU/UKM9G4AypP326S1qe/51RIwlMLPB4ThECB2ZWW3iH4x2tX1bJvpsmbv+r14UhxLVO8uXV2lz7GH89RrB2BjUGW8tdwdTiq0psLT64JvlYf4v7/1VCi/Nnij+AubMUB6U9SNThGqu6g1lzWQenG6q7zfYPJINHLSrQi64fjSwRQn+0y09CgItyEa7Z6myNTlvMqb1PViCpBlqr59rSSxCWZ1tvJjcUWRmWqS5mLLkdNjsRDg+ZsnC3 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)(366004)(346002)(376002)(396003)(39840400004)(451199015)(38350700002)(86362001)(38100700002)(36756003)(83380400001)(66574015)(5660300002)(52116002)(30864003)(6506007)(2616005)(26005)(6512007)(186003)(6666004)(2906002)(6916009)(316002)(6486002)(107886003)(4326008)(66946007)(66556008)(478600001)(8936002)(44832011)(41300700001)(8676002)(66476007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?kgrKYbhruVNsb9u0wRhQW075iuNe?= =?utf-8?q?jVBU9xhfSvd79OUOj7wORkGWUUQNpstPswDG1En2XuEGtaKVt13VMQGMS3gxDgBMk?= =?utf-8?q?eXbOxQAtysFdlJKTcpyir1V/SaUxcMmHTfppPJ9LcdgG4aXidTJ50MNdGPpx6O7NV?= =?utf-8?q?iNxddTiOoX18EMWZYcfGGKKO+MW2N30EdTwijVlf9pwxXjY2L25xPfPayjebpL+bn?= =?utf-8?q?iixlPxynETrY5T+JpR2RdqFR+dnFiFQjqwStYCEUrGKcLzCTLTxoKQ63KRdu/Vypm?= =?utf-8?q?Ts+CqOnrlV9ox9z/ad71E6Nzxm/frU4fJZjO1lim2hNUQIEbJNuf7vRDUGm+o6hM3?= =?utf-8?q?V+0WAUrXz3RLLjFjjVunH1hfxQoMxRI+tntp5dA98Ab9NpCvMwhvz7oI2t6ImWdSj?= =?utf-8?q?j5V/3HlJxcjxzbqGZCIf3BXAOq5ZIx6v7n34nCVVOKC4d3Lcwr1fcvQpYOu55m5b3?= =?utf-8?q?Ftfkka8+Y39QEXwLUTJ5+doz3bENb9ZigdW6LGWgVvE+HJOkwgog+PZa9PF6RWnac?= =?utf-8?q?50JYLNpyKI5mVqZnqICipqH5P8PTIZgey5x4Hj4tu6XxNFtl001SFdhG4305E4+QQ?= =?utf-8?q?c4Sw9rfuPFGyGO3w17BKebL6knEaWDVew9Pl/pIaqhKWHn2/BNs0sloJiOGbYtw3R?= =?utf-8?q?4Pbg6EiWAhpM3ueJw54F6pQVSlQcuL2XNhcj1rCXu4RoLvlGnlc3R5WYwiKWvAWus?= =?utf-8?q?SbN1SHUKgs+PvTWR4cLTvjFJzen9KPHngoqNdtGHZqYd/jzOU2hx58qNUtHRl2ypO?= =?utf-8?q?4ts9H/mItLDDBYFlmQ8KLtYNA7y5+VGMdvqPoyv1wKFgr8dgso+t/x1VcPvN97AFJ?= =?utf-8?q?5lVovSM0ksqc0hga/gt3lbhWaXwR/MwakyC8UokpxT6FwCN/oYPhD5Sv5pkDb/bBO?= =?utf-8?q?l2rS779RQyzM39cDeUdjNOReQQCnI//Ir7IcxEFNFSfmQ0qjhuaB/9P6aMNFPRVjz?= =?utf-8?q?Qry732mmfV5mAWrJkCbc3WcBz+LDbOyA7Gr74GuozNZzpkn2aDlbYe8fFhro4HX2Z?= =?utf-8?q?s6OIl9tn6UWHD8DURnOwwy9wK/XK/L/awpV5AK4n1QMVW45+Mq8oWUng9weGntxDa?= =?utf-8?q?mQXpq/6Nq4MPkjO/GldVwnAokszJGQLiWHJRDsS6NLxbJIuXDmfju3roAEOJUJ/Mb?= =?utf-8?q?+4XZoRINHqweFNVKp63jhD4o8d8gx0CllsWWFoKxNYANwPZ51MYEL/8lYr3SsHXi3?= =?utf-8?q?xP8cR3UboAuwkJM6snOLOrYuFFD9NfKizu63TjhDiy06gNMbAu2gflz8W+dHzKeAN?= =?utf-8?q?Rau5l9NiF8UE+hiG24BC/o5eNOTDzukPxa6sP67PIIGqAxw9Sw/EV9RDlgwcy1Fz9?= =?utf-8?q?qrM8TSOPIzm+QY4BOAzKItYo1t9vNdtwULz7z/5kyVVwV0Ke7/tF1XWZ/8weXjJ3c?= =?utf-8?q?jFL2+fF6ziqlrcANThHZN61HXSti5ZRIf5ElOKOWbWfZUTD+FQbeCLPh0pSqN6vzv?= =?utf-8?q?PL8mhdby/6E6EyUgeSHhf0/2yz4IIcrXsiR0F/rjCsEfmQOO2cklm0lGsGsQ98bUu?= =?utf-8?q?ZGTJLTR0MkFfms8t/SL23ayb51mLPDIIfg=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7d6010b4-2d9e-4c18-ee1f-08dab0b811e5 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:04.8504 (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: OvWGD/vmc52sveaFgKf6VoCdtWtrSIdx5cjzOcaVlbVMuX9BJ8T/HdhGdOHJ+MgpoEfTLD+rLzTCQU5zo8EeZ8vlBHrNDHuqRVnmwKhGJlE= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR13MB4149 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 related data structure and functions, prepare for the encap action of IPv4 tunnel. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- drivers/net/nfp/flower/nfp_flower_cmsg.c | 29 ++++++++++ drivers/net/nfp/flower/nfp_flower_cmsg.h | 93 ++++++++++++++++++++++++++++++++ drivers/net/nfp/nfp_flow.c | 88 ++++++++++++++++++++++++++++++ drivers/net/nfp/nfp_flow.h | 27 ++++++++++ 4 files changed, 237 insertions(+) diff --git a/drivers/net/nfp/flower/nfp_flower_cmsg.c b/drivers/net/nfp/flower/nfp_flower_cmsg.c index 15d8381..7021d1f 100644 --- a/drivers/net/nfp/flower/nfp_flower_cmsg.c +++ b/drivers/net/nfp/flower/nfp_flower_cmsg.c @@ -246,3 +246,32 @@ return 0; } + +int +nfp_flower_cmsg_tun_neigh_v4_rule(struct nfp_app_fw_flower *app_fw_flower, + struct nfp_flower_cmsg_tun_neigh_v4 *payload) +{ + uint16_t cnt; + size_t msg_len; + struct rte_mbuf *mbuf; + struct nfp_flower_cmsg_tun_neigh_v4 *msg; + + mbuf = rte_pktmbuf_alloc(app_fw_flower->ctrl_pktmbuf_pool); + if (mbuf == NULL) { + PMD_DRV_LOG(DEBUG, "Failed to alloc mbuf for v4 tun neigh"); + return -ENOMEM; + } + + msg_len = sizeof(struct nfp_flower_cmsg_tun_neigh_v4); + msg = nfp_flower_cmsg_init(mbuf, NFP_FLOWER_CMSG_TYPE_TUN_NEIGH, msg_len); + memcpy(msg, payload, msg_len); + + cnt = nfp_flower_ctrl_vnic_xmit(app_fw_flower, mbuf); + if (cnt == 0) { + PMD_DRV_LOG(ERR, "Send cmsg through ctrl vnic failed."); + rte_pktmbuf_free(mbuf); + return -EIO; + } + + return 0; +} diff --git a/drivers/net/nfp/flower/nfp_flower_cmsg.h b/drivers/net/nfp/flower/nfp_flower_cmsg.h index 996ba3b..e44e311 100644 --- a/drivers/net/nfp/flower/nfp_flower_cmsg.h +++ b/drivers/net/nfp/flower/nfp_flower_cmsg.h @@ -129,6 +129,36 @@ struct nfp_flower_cmsg_port_mod { rte_be16_t mtu; }; +struct nfp_flower_tun_neigh { + uint8_t dst_mac[RTE_ETHER_ADDR_LEN]; + uint8_t src_mac[RTE_ETHER_ADDR_LEN]; + rte_be32_t port_id; +}; + +/* + * NFP_FLOWER_CMSG_TYPE_TUN_NEIGH_V4 + * Bit 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 + * -----\ 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + * +---------------------------------------------------------------+ + * 0 | DST_IPV4 | + * +---------------------------------------------------------------+ + * 1 | SRC_IPV4 | + * +---------------------------------------------------------------+ + * 2 | DST_MAC_B5_B4_B3_B2 | + * +-------------------------------+-------------------------------+ + * 3 | DST_MAC_B1_B0 | SRC_MAC_B5_B4 | + * +-------------------------------+-------------------------------+ + * 4 | SRC_MAC_B3_B2_B1_B0 | + * +---------------------------------------------------------------+ + * 5 | Egress Port (NFP internal) | + * +---------------------------------------------------------------+ + */ +struct nfp_flower_cmsg_tun_neigh_v4 { + rte_be32_t dst_ipv4; + rte_be32_t src_ipv4; + struct nfp_flower_tun_neigh common; +}; + /* * NFP_FLOWER_CMSG_TYPE_FLOW_STATS * Bit 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 @@ -574,6 +604,67 @@ struct nfp_fl_act_set_tport { rte_be16_t dst_port; }; +/* + * Pre-tunnel + * 3 2 1 + * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | - | opcode | |jump_id| - |M| - |V| + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | ipv6_daddr_127_96 / ipv4_daddr | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | ipv6_daddr_95_64 | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | ipv6_daddr_63_32 | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | ipv6_daddr_31_0 | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + */ +struct nfp_fl_act_pre_tun { + struct nfp_fl_act_head head; + rte_be16_t flags; + union { + rte_be32_t ipv4_dst; + uint8_t ipv6_dst[16]; + }; +}; + +/* + * Set tunnel + * 3 2 1 + * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | res | opcode | res | len_lw| reserved | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | tun_id0 | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | tun_id1 | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | reserved | type |r| idx | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | ipv4_flags | ttl | tos | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | reserved_cvs1 | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | reserved_cvs2 | reserved_cvs3 | + * | var_flags | var_np | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + */ +struct nfp_fl_act_set_tun { + struct nfp_fl_act_head head; + rte_be16_t reserved; + rte_be64_t tun_id; + rte_be32_t tun_type_index; + rte_be16_t tun_flags; + uint8_t ttl; + uint8_t tos; + rte_be16_t outer_vlan_tpid; + rte_be16_t outer_vlan_tci; + uint8_t tun_len; /* Only valid for NFP_FL_TUNNEL_GENEVE */ + uint8_t reserved2; + rte_be16_t tun_proto; /* Only valid for NFP_FL_TUNNEL_GENEVE */ +} __rte_packed; + int nfp_flower_cmsg_mac_repr(struct nfp_app_fw_flower *app_fw_flower); int nfp_flower_cmsg_repr_reify(struct nfp_app_fw_flower *app_fw_flower, struct nfp_flower_representor *repr); @@ -583,5 +674,7 @@ int nfp_flower_cmsg_flow_delete(struct nfp_app_fw_flower *app_fw_flower, struct rte_flow *flow); int nfp_flower_cmsg_flow_add(struct nfp_app_fw_flower *app_fw_flower, struct rte_flow *flow); +int nfp_flower_cmsg_tun_neigh_v4_rule(struct nfp_app_fw_flower *app_fw_flower, + struct nfp_flower_cmsg_tun_neigh_v4 *payload); #endif /* _NFP_CMSG_H_ */ diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index 1673518..6efb95a 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -1790,6 +1790,91 @@ struct nfp_mask_id_entry { tc_hl->reserved = 0; } +__rte_unused static void +nfp_flow_pre_tun_v4_process(struct nfp_fl_act_pre_tun *pre_tun, + rte_be32_t ipv4_dst) +{ + pre_tun->head.jump_id = NFP_FL_ACTION_OPCODE_PRE_TUNNEL; + pre_tun->head.len_lw = sizeof(struct nfp_fl_act_pre_tun) >> NFP_FL_LW_SIZ; + pre_tun->ipv4_dst = ipv4_dst; +} + +__rte_unused static void +nfp_flow_set_tun_process(struct nfp_fl_act_set_tun *set_tun, + enum nfp_flower_tun_type tun_type, + uint64_t tun_id, + uint8_t ttl, + uint8_t tos) +{ + /* Currently only support one pre-tunnel, so index is always 0. */ + uint8_t pretun_idx = 0; + uint32_t tun_type_index; + + tun_type_index = ((tun_type << 4) & 0xf0) | (pretun_idx & 0x07); + + set_tun->head.jump_id = NFP_FL_ACTION_OPCODE_SET_TUNNEL; + set_tun->head.len_lw = sizeof(struct nfp_fl_act_set_tun) >> NFP_FL_LW_SIZ; + set_tun->tun_type_index = rte_cpu_to_be_32(tun_type_index); + set_tun->tun_id = rte_cpu_to_be_64(tun_id); + set_tun->ttl = ttl; + set_tun->tos = tos; +} + +__rte_unused static int +nfp_flower_add_tun_neigh_v4_encap(struct nfp_app_fw_flower *app_fw_flower, + struct nfp_fl_rule_metadata *nfp_flow_meta, + struct nfp_fl_tun *tun, + const struct rte_ether_hdr *eth, + const struct rte_flow_item_ipv4 *ipv4) +{ + struct nfp_fl_tun *tmp; + struct nfp_flow_priv *priv; + struct nfp_flower_in_port *port; + struct nfp_flower_cmsg_tun_neigh_v4 payload; + + tun->payload.v6_flag = 0; + tun->payload.dst.dst_ipv4 = ipv4->hdr.dst_addr; + tun->payload.src.src_ipv4 = ipv4->hdr.src_addr; + memcpy(tun->payload.dst_addr, eth->dst_addr.addr_bytes, RTE_ETHER_ADDR_LEN); + memcpy(tun->payload.src_addr, eth->src_addr.addr_bytes, RTE_ETHER_ADDR_LEN); + + tun->ref_cnt = 1; + priv = app_fw_flower->flow_priv; + LIST_FOREACH(tmp, &priv->nn_list, next) { + if (memcmp(&tmp->payload, &tun->payload, sizeof(struct nfp_fl_tun_entry)) == 0) { + tmp->ref_cnt++; + return 0; + } + } + + LIST_INSERT_HEAD(&priv->nn_list, tun, next); + + port = (struct nfp_flower_in_port *)((char *)nfp_flow_meta + + sizeof(struct nfp_fl_rule_metadata) + + sizeof(struct nfp_flower_meta_tci)); + + memset(&payload, 0, sizeof(struct nfp_flower_cmsg_tun_neigh_v4)); + payload.dst_ipv4 = ipv4->hdr.dst_addr; + payload.src_ipv4 = ipv4->hdr.src_addr; + memcpy(payload.common.dst_mac, eth->dst_addr.addr_bytes, RTE_ETHER_ADDR_LEN); + memcpy(payload.common.src_mac, eth->src_addr.addr_bytes, RTE_ETHER_ADDR_LEN); + payload.common.port_id = port->in_port; + + return nfp_flower_cmsg_tun_neigh_v4_rule(app_fw_flower, &payload); +} + +__rte_unused static int +nfp_flower_del_tun_neigh_v4(struct nfp_app_fw_flower *app_fw_flower, + rte_be32_t ipv4) +{ + struct nfp_flower_cmsg_tun_neigh_v4 payload; + + memset(&payload, 0, sizeof(struct nfp_flower_cmsg_tun_neigh_v4)); + payload.dst_ipv4 = ipv4; + + return nfp_flower_cmsg_tun_neigh_v4_rule(app_fw_flower, &payload); +} + static int nfp_flow_compile_action(__rte_unused struct nfp_flower_representor *representor, const struct rte_flow_action actions[], @@ -2491,6 +2576,9 @@ struct nfp_mask_id_entry { goto free_mask_table; } + /* neighbor next list */ + LIST_INIT(&priv->nn_list); + return 0; free_mask_table: diff --git a/drivers/net/nfp/nfp_flow.h b/drivers/net/nfp/nfp_flow.h index b3bd949..14da800 100644 --- a/drivers/net/nfp/nfp_flow.h +++ b/drivers/net/nfp/nfp_flow.h @@ -89,6 +89,11 @@ enum nfp_flower_tun_type { NFP_FL_TUN_GENEVE = 4, }; +enum nfp_flow_type { + NFP_FLOW_COMMON, + NFP_FLOW_ENCAP, +}; + struct nfp_fl_key_ls { uint32_t key_layer_two; uint8_t key_layer; @@ -117,6 +122,24 @@ struct nfp_fl_payload { char *action_data; }; +struct nfp_fl_tun { + LIST_ENTRY(nfp_fl_tun) next; + uint8_t ref_cnt; + struct nfp_fl_tun_entry { + uint8_t v6_flag; + uint8_t dst_addr[RTE_ETHER_ADDR_LEN]; + uint8_t src_addr[RTE_ETHER_ADDR_LEN]; + union { + rte_be32_t dst_ipv4; + uint8_t dst_ipv6[16]; + } dst; + union { + rte_be32_t src_ipv4; + uint8_t src_ipv6[16]; + } src; + } payload; +}; + #define CIRC_CNT(head, tail, size) (((head) - (tail)) & ((size) - 1)) #define CIRC_SPACE(head, tail, size) CIRC_CNT((tail), ((head) + 1), (size)) struct circ_buf { @@ -160,12 +183,16 @@ struct nfp_flow_priv { struct nfp_fl_stats_id stats_ids; /**< The stats id ring. */ struct nfp_fl_stats *stats; /**< Store stats of flow. */ rte_spinlock_t stats_lock; /** < Lock the update of 'stats' field. */ + /* neighbor next */ + LIST_HEAD(, nfp_fl_tun)nn_list; /**< Store nn entry */ }; struct rte_flow { struct nfp_fl_payload payload; + struct nfp_fl_tun tun; size_t length; bool install_flag; + enum nfp_flow_type type; }; int nfp_flow_priv_init(struct nfp_pf_dev *pf_dev); From patchwork Tue Oct 18 03:22:18 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 118315 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 4BED9A0560; Tue, 18 Oct 2022 05:23:26 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 5DD95427EA; Tue, 18 Oct 2022 05:23:10 +0200 (CEST) Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2092.outbound.protection.outlook.com [40.107.223.92]) by mails.dpdk.org (Postfix) with ESMTP id 6938541181 for ; Tue, 18 Oct 2022 05:23:08 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=LKxICAUVFSsEOy2AVVDEcvqUcYLJnm7bq0yNhQvHtjEbO+1Owqs/y3NW3QKABoplmsCLDaDxXtxT2MMIULpMdqqxW061hCssQopdQyqy43sfcVPu3mNj7ZF/VibI9XxeboEGA8K/XDVz60qIoA6PrqckotEhb/puuKqmtmn9nhwaoPv6QvGtg81leafGh1apxQmHvZvpJf+HRVd/57Sy9l7ZVZZ9ABZLQBjPTRTLSOJw5xCIww8eaFFCJpgJNnz+fKZDhamAy/kmhgcX6EVHOmVRQEQlN0JrOYKZGyjDu3L0JK9vmMIf/DOPGnlVI4uC/g0KLG6EUPgLHKTs9zQing== 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=TDUUDEJKkP/AIJPjzpvN7DarPK9rbabifcratuPi1FQ=; b=EA/mWYtNYSsGK60NQnRSHHu4sM7LguohKJmmluxMonsiNBgZpCGnAr/hGzTAVBbcQfyLig7SsqyDxXzs0BxyHamA9ahI6EqXpyh7s2uGAkFYQ0XIXvck9c+EPXpU3ws5iNq2PH6BsRkslL/go0WuNGsUh6hSqzfJDbagF9Wxjt11i7ulw08KqB8wD73tc9UKZUOpkAGNzpLIJwK7870zpx/GRyF9a0V9Y9JYp9ouU1gMnIM7wKvowyWQDlT9IQXvwrzIzCAS1DoqGx3wXcfneFTRsorkdsuAkcu7W7glEklpqkKBIME0Yn+0hpTKKNMDwxSHKcx33QUfqXqiFlmF9g== 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=TDUUDEJKkP/AIJPjzpvN7DarPK9rbabifcratuPi1FQ=; b=kY+TO24O0H9pgfAeHGNH2PrEe7ppzEj3M/owcAmVGtEqCcfAWx7LO6dF0+RyxSP9ZfCoS4vnYGVKDE5spilcRpYVj130v+ValeJCuJXkonRJUyJeKmYzhejzimEYRXM3pjPVXmzoT8R6YuVdKbsqCg/Y4Wmw87s0BWX4drz4qgA= 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 MN2PR13MB4149.namprd13.prod.outlook.com (2603:10b6:208:24f::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.20; Tue, 18 Oct 2022 03:23:06 +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:06 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH 04/25] net/nfp: prepare for the encap action of IPv6 tunnel Date: Tue, 18 Oct 2022 11:22:18 +0800 Message-Id: <1666063359-34283-5-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> 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_|MN2PR13MB4149:EE_ X-MS-Office365-Filtering-Correlation-Id: 727c190e-c76d-41d5-0231-08dab0b81304 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: PfA4I+CEQaGWiKCTwAEHN3K61q0/08cjaslkmrchYBZRv0LkeJ13xGA3XGyDoqIirAGS9sqATWNCr5r4cx0vCV/wa9nAHyyyESBMRwDjGwvicmd/TDUNQ6soeysDQHkGl6IURMJ1hkVgPMxOaAVO7sZfvGqTTWY31AGHmqc4InVIvfob9+V8wQ08IZsTFcwXs3zzl3i/jnJbmg/THq/EBNYE/3Rl+7ZkV3QGIGvhsxnjSIezitEoyuSWLhF8MnlwHI9KdwpaTa1/0cF2HoqktH7gDSDRjFxO3v/V7WuHWY++0N06ZzU9CH0BPGIz2Ayu17EYxiRimlTT7jn/9VlJ5FgbtLu32CnsSoTditCyK8XNTA/MTfK7UaDaI37e4WQwElRjjS3vet3kmlyws0hcgfEoD5wN6ow/F6gEd/wjobalhr/vk7bbbnfAy5anoNLrqtsxj54K7ZfhuutZ3d4EBVgCuwAWWh2adFQ0D4+uqLuD6/Y5Ep/kD1rdjXHHpOVouyaTU2XJRf+UXS79xioplcAkw/F+FEvENPQlhcDZ4x4l3qukvE9pL72IX97qSKSBbSKkSneAtPwoP/ABjQeTYISDDWv5nYbV+hmW6+mObUmUZUuC5bRRaK1GuIbwANO8KrIawtUAuoTAN7xijLyauX/x8RM8CvEhSVua384NYQBUzO7nITkO8IQzU5fEiPEXihSHM5ftreuSsZ5oRCoMlD/cTr7OFMwh6Z8CKj7wbRSs8X1rEosMaAmqGzYUQuTLnZZh8r12VKwyKX9enXFZRm/sghb7hxNOabR3uaGHyrqlboatVV6m/IO6k41hWSra 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)(366004)(346002)(376002)(396003)(39840400004)(451199015)(38350700002)(86362001)(38100700002)(36756003)(83380400001)(66574015)(5660300002)(52116002)(6506007)(2616005)(26005)(6512007)(186003)(6666004)(2906002)(6916009)(316002)(6486002)(107886003)(4326008)(66946007)(66556008)(478600001)(8936002)(44832011)(41300700001)(8676002)(66476007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?fea84j/VQbLC6PCXB+70tiulCoaV?= =?utf-8?q?2IopnLricHFhZgkPyB+LC5gFOkJgTFRdLnnbfzcIgmKQBZFW1o8Jlr87EXfkKdREP?= =?utf-8?q?F8jaevaX7NBEIzkDBSiLqQLkIwWvn5d/Gnn0qs+ZwjraF9RLzMyEnkimexe03SJh5?= =?utf-8?q?JwQR/9HHgyfHCjEtxC4Q6CDqyP2j7gT3aVRdDN5/Y2CgqqPuGclf1hvj66XxmFGSB?= =?utf-8?q?aGZqyVIcd8YP5iBiBPccBZTsk4cbLJFx7FH2prh6uMEt67J8Fv/8tEMecCvcG6SYm?= =?utf-8?q?Y2NLEvmX0+TTWv3JdbJNiWEsnNZaO7WHA6qIIFGXXhbQ0XT3q/QhZ49M2w3UhoDwA?= =?utf-8?q?gTYqaImQ0MPorEfCIDirgFwWfMP5TDOD84QCylfLhBghMDVCQAyMgfdry/6LKL4kF?= =?utf-8?q?mWkX4Y8U8dt1CGldMSn0bYiNxl1b5GGzmxamWiD4ywh7FDTPWoJucPiWoGtRLm3Ca?= =?utf-8?q?rTjjmMaJVJU0+iZXQnxqxdcYE64CNutoB70enHaxCWAyWXEA/kxcRskOc9263m/9X?= =?utf-8?q?UrmdXzDqBFriqacGTWW1WmVnlmg9+iQuuvlLVqytdlL5dT//kwQ8dBmjto93e791u?= =?utf-8?q?WRbTtKoR3bxg8mytfbQGwZu9ypolt7BRmHLZfArXlhgHG74/G+l6RvhT3ekn8RdFw?= =?utf-8?q?MXXmUIEwNr3n8stixjqqmNNxuIheGqN1qdZ20oRmmEtVny053zd53gCypo2E8/9JM?= =?utf-8?q?wwLvkEUKCDDvFr1fXXvPDxFPlcJuInPjj6Z2hiAiPBv3FD1+48KlE29wjiXZKW6Nu?= =?utf-8?q?ei1uJFaK+QxEZnUmmkXJhSe2MOYIr34oktFncR/WNhc2i9m8ZIOOlss39lmmQin3h?= =?utf-8?q?CZ0O9FKkOyVEpPMJ1RsBhFHKkt9g5pDjHT6yJParZ1kAdNlC9fXrDgIgoLnZUNaMN?= =?utf-8?q?dryRpD5eHDnesQJYudr3pHix1KeygyxhVhRqXNHbIyzolBQAEe4i5EzO2SSAJ0ZWf?= =?utf-8?q?2iMpdeFxeWYq/ccLss8LSZ9IIY6GQIzCq1O0WCjn+ur6GWi5qtjir7Js6FbFf0C5I?= =?utf-8?q?icZZ2rCm1esEYPnNps2kxLteZlaxNA82f2EgfI6amKKfSUvuv90JpZ9wTWfYVpIZ0?= =?utf-8?q?FEGw4RYrW/904/BgNkAP0SizKTqIjhvO1pYerqlxCFgzFgiRlhyO3sm++i6u0IpM8?= =?utf-8?q?eco7WSv4CNaQHa2SXq5Z0h4+x1lkUva6QXQ6wpNs410spANCSoGjCvUzZU9ctx6oJ?= =?utf-8?q?o4NiHD+z1WLUVv39kcF+ijT+6A47zqYDrKC5Sgxj4kMzvg/jdOaLgYN7KL3q8jYWw?= =?utf-8?q?kHYZvCX/c6jkz6BEafsIpU4QLcZz+IeoT1Lhz3TJJKXE+zytZPKg0baKSnvEVJpmW?= =?utf-8?q?3WK33dPX8zWPQa0AX6OO6Plp4qlxJDNc99Z0+CH7lW8yBONlMnh4aNKC7gv1nXNIS?= =?utf-8?q?yKEv0oVVLlVi3NzIgcN9YC1Kjg4g/Px86n6ikZlbUCVQ1v8nfpd+LxSrgFNdMf6rf?= =?utf-8?q?VV1LWUasFvLSV+p3W2xL0FNtY9vrCGMIEqJ+xUeAqnrL2smx+Fb3W/xPp8v5IwvVw?= =?utf-8?q?qn8EybITPZvaLEtTOON8jnB6UBFxCDKlQw=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 727c190e-c76d-41d5-0231-08dab0b81304 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:06.7097 (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: nYwizplBG2wHHhLyf0hUHxb937IZSH53PvCxk/0aK+/4QNMk1P5P2QCVh2J2L5ef7YCvDSrtsqzo4Pcc4ecat/dFWuuGwPJ3FbkD83MSJxQ= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR13MB4149 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 related data structure and functions, prepare for the encap action of IPv6 tunnel. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- drivers/net/nfp/flower/nfp_flower_cmsg.c | 29 +++++++++ drivers/net/nfp/flower/nfp_flower_cmsg.h | 40 ++++++++++++ drivers/net/nfp/nfp_flow.c | 105 ++++++++++++++++++++++++++++++- 3 files changed, 173 insertions(+), 1 deletion(-) diff --git a/drivers/net/nfp/flower/nfp_flower_cmsg.c b/drivers/net/nfp/flower/nfp_flower_cmsg.c index 7021d1f..8983178 100644 --- a/drivers/net/nfp/flower/nfp_flower_cmsg.c +++ b/drivers/net/nfp/flower/nfp_flower_cmsg.c @@ -275,3 +275,32 @@ return 0; } + +int +nfp_flower_cmsg_tun_neigh_v6_rule(struct nfp_app_fw_flower *app_fw_flower, + struct nfp_flower_cmsg_tun_neigh_v6 *payload) +{ + uint16_t cnt; + size_t msg_len; + struct rte_mbuf *mbuf; + struct nfp_flower_cmsg_tun_neigh_v6 *msg; + + mbuf = rte_pktmbuf_alloc(app_fw_flower->ctrl_pktmbuf_pool); + if (mbuf == NULL) { + PMD_DRV_LOG(DEBUG, "Failed to alloc mbuf for v6 tun neigh"); + return -ENOMEM; + } + + msg_len = sizeof(struct nfp_flower_cmsg_tun_neigh_v6); + msg = nfp_flower_cmsg_init(mbuf, NFP_FLOWER_CMSG_TYPE_TUN_NEIGH_V6, msg_len); + memcpy(msg, payload, msg_len); + + cnt = nfp_flower_ctrl_vnic_xmit(app_fw_flower, mbuf); + if (cnt == 0) { + PMD_DRV_LOG(ERR, "Send cmsg through ctrl vnic failed."); + rte_pktmbuf_free(mbuf); + return -EIO; + } + + return 0; +} diff --git a/drivers/net/nfp/flower/nfp_flower_cmsg.h b/drivers/net/nfp/flower/nfp_flower_cmsg.h index e44e311..d1e0562 100644 --- a/drivers/net/nfp/flower/nfp_flower_cmsg.h +++ b/drivers/net/nfp/flower/nfp_flower_cmsg.h @@ -160,6 +160,42 @@ struct nfp_flower_cmsg_tun_neigh_v4 { }; /* + * NFP_FLOWER_CMSG_TYPE_TUN_NEIGH_V6 + * Bit 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 + * -----\ 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + * +---------------------------------------------------------------+ + * 0 | DST_IPV6 [0] | + * +---------------------------------------------------------------+ + * 1 | DST_IPV6 [1] | + * +---------------------------------------------------------------+ + * 2 | DST_IPV6 [2] | + * +---------------------------------------------------------------+ + * 3 | DST_IPV6 [3] | + * +---------------------------------------------------------------+ + * 4 | SRC_IPV6 [0] | + * +---------------------------------------------------------------+ + * 5 | SRC_IPV6 [1] | + * +---------------------------------------------------------------+ + * 6 | SRC_IPV6 [2] | + * +---------------------------------------------------------------+ + * 7 | SRC_IPV6 [3] | + * +---------------------------------------------------------------+ + * 8 | DST_MAC_B5_B4_B3_B2 | + * +-------------------------------+-------------------------------+ + * 9 | DST_MAC_B1_B0 | SRC_MAC_B5_B4 | + * +-------------------------------+-------------------------------+ + * 10 | SRC_MAC_B3_B2_B1_B0 | + * +---------------+---------------+---------------+---------------+ + * 11 | Egress Port (NFP internal) | + * +---------------------------------------------------------------+ + */ +struct nfp_flower_cmsg_tun_neigh_v6 { + uint8_t dst_ipv6[16]; + uint8_t src_ipv6[16]; + struct nfp_flower_tun_neigh common; +}; + +/* * NFP_FLOWER_CMSG_TYPE_FLOW_STATS * Bit 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 * -----\ 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 @@ -629,6 +665,8 @@ struct nfp_fl_act_pre_tun { }; }; +#define NFP_FL_PRE_TUN_IPV6 (1 << 0) + /* * Set tunnel * 3 2 1 @@ -676,5 +714,7 @@ int nfp_flower_cmsg_flow_add(struct nfp_app_fw_flower *app_fw_flower, struct rte_flow *flow); int nfp_flower_cmsg_tun_neigh_v4_rule(struct nfp_app_fw_flower *app_fw_flower, struct nfp_flower_cmsg_tun_neigh_v4 *payload); +int nfp_flower_cmsg_tun_neigh_v6_rule(struct nfp_app_fw_flower *app_fw_flower, + struct nfp_flower_cmsg_tun_neigh_v6 *payload); #endif /* _NFP_CMSG_H_ */ diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index 6efb95a..b8e666c 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -1800,6 +1800,16 @@ struct nfp_mask_id_entry { } __rte_unused static void +nfp_flow_pre_tun_v6_process(struct nfp_fl_act_pre_tun *pre_tun, + const uint8_t ipv6_dst[]) +{ + pre_tun->head.jump_id = NFP_FL_ACTION_OPCODE_PRE_TUNNEL; + pre_tun->head.len_lw = sizeof(struct nfp_fl_act_pre_tun) >> NFP_FL_LW_SIZ; + pre_tun->flags = rte_cpu_to_be_16(NFP_FL_PRE_TUN_IPV6); + memcpy(pre_tun->ipv6_dst, ipv6_dst, sizeof(pre_tun->ipv6_dst)); +} + +__rte_unused static void nfp_flow_set_tun_process(struct nfp_fl_act_set_tun *set_tun, enum nfp_flower_tun_type tun_type, uint64_t tun_id, @@ -1863,7 +1873,7 @@ struct nfp_mask_id_entry { return nfp_flower_cmsg_tun_neigh_v4_rule(app_fw_flower, &payload); } -__rte_unused static int +static int nfp_flower_del_tun_neigh_v4(struct nfp_app_fw_flower *app_fw_flower, rte_be32_t ipv4) { @@ -1875,6 +1885,99 @@ struct nfp_mask_id_entry { return nfp_flower_cmsg_tun_neigh_v4_rule(app_fw_flower, &payload); } +__rte_unused static int +nfp_flower_add_tun_neigh_v6_encap(struct nfp_app_fw_flower *app_fw_flower, + struct nfp_fl_rule_metadata *nfp_flow_meta, + struct nfp_fl_tun *tun, + const struct rte_ether_hdr *eth, + const struct rte_flow_item_ipv6 *ipv6) +{ + struct nfp_fl_tun *tmp; + struct nfp_flow_priv *priv; + struct nfp_flower_in_port *port; + struct nfp_flower_cmsg_tun_neigh_v6 payload; + + tun->payload.v6_flag = 1; + memcpy(tun->payload.dst.dst_ipv6, ipv6->hdr.dst_addr, sizeof(tun->payload.dst.dst_ipv6)); + memcpy(tun->payload.src.src_ipv6, ipv6->hdr.src_addr, sizeof(tun->payload.src.src_ipv6)); + memcpy(tun->payload.dst_addr, eth->dst_addr.addr_bytes, RTE_ETHER_ADDR_LEN); + memcpy(tun->payload.src_addr, eth->src_addr.addr_bytes, RTE_ETHER_ADDR_LEN); + + tun->ref_cnt = 1; + priv = app_fw_flower->flow_priv; + LIST_FOREACH(tmp, &priv->nn_list, next) { + if (memcmp(&tmp->payload, &tun->payload, sizeof(struct nfp_fl_tun_entry)) == 0) { + tmp->ref_cnt++; + return 0; + } + } + + LIST_INSERT_HEAD(&priv->nn_list, tun, next); + + port = (struct nfp_flower_in_port *)((char *)nfp_flow_meta + + sizeof(struct nfp_fl_rule_metadata) + + sizeof(struct nfp_flower_meta_tci)); + + memset(&payload, 0, sizeof(struct nfp_flower_cmsg_tun_neigh_v6)); + memcpy(payload.dst_ipv6, ipv6->hdr.dst_addr, sizeof(payload.dst_ipv6)); + memcpy(payload.src_ipv6, ipv6->hdr.src_addr, sizeof(payload.src_ipv6)); + memcpy(payload.common.dst_mac, eth->dst_addr.addr_bytes, RTE_ETHER_ADDR_LEN); + memcpy(payload.common.src_mac, eth->src_addr.addr_bytes, RTE_ETHER_ADDR_LEN); + payload.common.port_id = port->in_port; + + return nfp_flower_cmsg_tun_neigh_v6_rule(app_fw_flower, &payload); +} + +static int +nfp_flower_del_tun_neigh_v6(struct nfp_app_fw_flower *app_fw_flower, + uint8_t *ipv6) +{ + struct nfp_flower_cmsg_tun_neigh_v6 payload; + + memset(&payload, 0, sizeof(struct nfp_flower_cmsg_tun_neigh_v6)); + memcpy(payload.dst_ipv6, ipv6, sizeof(payload.dst_ipv6)); + + return nfp_flower_cmsg_tun_neigh_v6_rule(app_fw_flower, &payload); +} + +__rte_unused static int +nfp_flower_del_tun_neigh(struct nfp_app_fw_flower *app_fw_flower, + struct rte_flow *nfp_flow) +{ + int ret; + bool flag = false; + struct nfp_fl_tun *tmp; + struct nfp_fl_tun *tun; + + tun = &nfp_flow->tun; + LIST_FOREACH(tmp, &app_fw_flower->flow_priv->nn_list, next) { + ret = memcmp(&tmp->payload, &tun->payload, sizeof(struct nfp_fl_tun_entry)); + if (ret == 0) { + tmp->ref_cnt--; + flag = true; + break; + } + } + + if (!flag) { + PMD_DRV_LOG(DEBUG, "Can't find nn entry in the nn list"); + return -EINVAL; + } + + if (tmp->ref_cnt == 0) { + LIST_REMOVE(tmp, next); + if (tmp->payload.v6_flag != 0) { + return nfp_flower_del_tun_neigh_v6(app_fw_flower, + tmp->payload.dst.dst_ipv6); + } else { + return nfp_flower_del_tun_neigh_v4(app_fw_flower, + tmp->payload.dst.dst_ipv4); + } + } + + return 0; +} + static int nfp_flow_compile_action(__rte_unused struct nfp_flower_representor *representor, const struct rte_flow_action actions[], From patchwork Tue Oct 18 03:22:19 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 118316 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 7F43DA0560; Tue, 18 Oct 2022 05:23:32 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 407ED427F2; Tue, 18 Oct 2022 05:23:11 +0200 (CEST) Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2126.outbound.protection.outlook.com [40.107.223.126]) by mails.dpdk.org (Postfix) with ESMTP id 469B042684 for ; Tue, 18 Oct 2022 05:23:10 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=S0KAtRGRbGL1O1fApDmHWVwLeH3XEMP0dFwxq4LCGPnzTJrhh2HgVSJMf5On5oyt7Oi4lJYRzgwiWr0tpl3c4lpf98gUnQCrw9xc5iylBPzTw5JmEHgacOtR3J/KsGmZbDoSl+LYL/N9YZoEg5U3NO4O5mZaRYq1EqYEXNTjQon2p6fMNmFPX/0zR68q+0lfGkQsFzs9QgzRQGRJrb6fFgzLitatNwuS1S/JdPO8ZXAT1XmcNKjQ3AB7CGYn4PZL+6Zcr21XOekz1SQoKdydBDJR1Ocgb38eCuyaL08HXYh1TYq4mF/cYXFCTYoAW+HM4Nyg/s69q27YpssvBE7ZRQ== 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=O0wT5lPctQFE9agA63PZsVDB8KBoOkbakguWjuFuxgk=; b=GU5XOHotu1iricdde7Lj6TW91PfrUnFF9/yRtxHnHay4A8M57z3OmiFikW/jq/THWWHKA75XfQXkTjD9L4vSKhiZLdyiTUrCriEH1LHi+PW6xWHMQVyrPVFd1/NMnCaHK99/XVAS8LXqL9Y1yOV4EkZZHQgPMlcZhW5RTNZHZa9qh3Xv7eF2GaQVtYSI3Ckn3GUg8uCvqLsgW0qOAtjjOqvmcOcC18+rbImL7VWATHeGrD1eAigiipfdhxw2OHFpII+YXo1tWxqLNxoHromne8+kfA/ms0IpYdROLEy4frrQmlEGU9ZdYerE5pXyj8QF4ZHbruZkClGq/EeSmkCTTw== 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=O0wT5lPctQFE9agA63PZsVDB8KBoOkbakguWjuFuxgk=; b=O6mUrGgi3l8O2FiE5Y9LioH7ExV8Z9CzPL8Xie0F9E6X87HIqz4zlKMx6ceJ4RgBG2Aow2KlAHnbdeM7faKGvW4WwzHO2Y6EUKH61bPEHtpbockCJ1x4+bpmoamqM9Z9NM9odet8/khSTQ9dM3cvdXPzxyitOAs2GxRKCzRxoBs= 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 MN2PR13MB4149.namprd13.prod.outlook.com (2603:10b6:208:24f::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.20; Tue, 18 Oct 2022 03:23:08 +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:08 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH 05/25] net/nfp: add the offload support of IPv4 VXLAN encap action Date: Tue, 18 Oct 2022 11:22:19 +0800 Message-Id: <1666063359-34283-6-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> 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_|MN2PR13MB4149:EE_ X-MS-Office365-Filtering-Correlation-Id: bc586961-0999-4aed-04b9-08dab0b81423 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: v2ppTThaOzazW24wjYNov0KMkHIv5wciMh4+TpWcwIBZaoOsu7STPZ1SwoScFxTd5Jg4A7GJ4FS/zdaX3TCPBDdEXpbl634ZywIUjb6RprNAf8O0mrgciHDucfcIAhzi+OdBTYVFwcqipqfe+Dli1HxIc/V6ItMIkgT/ocIi35qV8Y7EJpe4fIJBiGbBXt7QVkoskDyEP4jHuCzqVqh3X5APnQLW54d+vfCfuc8BN6UoFkqBKinyp1GBAGu/AtUxI/EvNzoT0/Lu0aGOg1HnAaycEj1ZY+FCCkjBXg0ijal9s5CGzdcPP1NJz8P9LctnpZV42U7iRRyntjiFdquouI74dCUJbBjCrKY4Phk/bKcEld1YSinaVK3d7fD+MYjWInbAZR5x9BjFehp+e98RHeK9wjvk0WxHPKRT+edUFLq/ZxAwORBBQSONv4nQqPjsgofsERy/w0u5HoNMrcm3o/g4g4M41wpsPyWYJSvzsO+PwD5eFeC4zdIP7kLZsoBjZ9xDtsCREZ0r+zsC+ySEFheJ3iGR9aRZM1ijOEWno5XfmHvJmVRLDQsylwNE6aUv+nDZYXzNvUl31uyDlau3pFJmVt1tkRymlLLRpxgltvf2698+/NFWAK46EPV9OeF8wcN5CEXH4FNWhFQ6hEq0lUBfe8bDvKAoCo8UgdgbIboZMsfcgDvVvCzMdNPPVJQz/VNgbmDFk7D4mnyQVM23kstZN7+4kWPV0KqxGLwKG6pJS8quEfsPrDKv0CnvMljyWPwDxpxJnXKc8HbAtTvOhIQai5NYWow2/nJkACunxgqdFIc09ePXM9OR9AGXmZ7P 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)(366004)(346002)(376002)(396003)(39840400004)(451199015)(38350700002)(86362001)(38100700002)(36756003)(83380400001)(66574015)(5660300002)(52116002)(6506007)(2616005)(26005)(6512007)(186003)(6666004)(2906002)(6916009)(316002)(6486002)(107886003)(4326008)(66946007)(66556008)(478600001)(8936002)(44832011)(41300700001)(8676002)(66476007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?v692nlsNYpu14U4IhAKRBVUTQRHb?= =?utf-8?q?EmHoi7JLHq42moUZAFsYoTjxeA4SwqLf/1w0wS2ajCnFqcRsgWW3euQ4DGWJ9pcSF?= =?utf-8?q?PPjvvGGZ54dJhmjrP1dyFapcLYJ6Uk09CDYuNQMicAGy21ws/F6QhJqDhVU5f9EJs?= =?utf-8?q?Xepbkc05BJyxc1gAWMde3ay0KB/ViPlVNThDRSiJHi5/x7MWtOGXXt8lfEJ1/IWxN?= =?utf-8?q?8xF2HEoP3LGWAg/sBU4LkE8cOjtTnWu4sRVjbwvzbtFWbM1APa97TZE0GPGZ6JXz4?= =?utf-8?q?LvYWJ/pGON3DmDlBkI5a3K/6TQPkvIrIaIkpfpJbdcwMlO6K8R74/FtDVp00hMafz?= =?utf-8?q?2oHAeawgTCEXuDf4Doa0bmU3O3lD1uKmyQnZHx/cwOBdJp4/IwX4/5YOUYRec+ZRD?= =?utf-8?q?Nr1RhU/e5htz0AZXonNrC/5a/uj9dQ28aDlm2WcaE092GMuCT0xoPHeGAOwe8jzTF?= =?utf-8?q?YXEjdwrF+mbKbMSrZB6c6i4dwx4c0CrfPq5gDys0+cheoDluj9ZY+U+q/0QC6eve0?= =?utf-8?q?w1+A2OWA/f3S/5wkD9qaCfz3BOLBZ1IimgaC2sR90JlmJ8R/5nEc28SzTVu123gsv?= =?utf-8?q?gaAjIhPNEvoy3KXDbhdKj2tVr/9N76XiqMfPFceCsZDV2LAc5ysuEeaKnsUMxj5Wx?= =?utf-8?q?ARKzZ90N7+Nlk0qcK72p3JRq7mlVyXFbgxvCJbp1alwypGMA0FiL9cG0iQxL8uSpP?= =?utf-8?q?W+3gtWUqx3dnGAVx7u4k1/L3ktVL2Rr/LIxQUbI6cp9OyMYhKucRsuXXlFwNZtamI?= =?utf-8?q?t8bn0Og/5VbBxJvnoBW6WoUZsb/UkBQz600nFIC0WMUWqsPD4p4/qiRzeWUGQBcsw?= =?utf-8?q?1jBprd3CDLKWcNKOAYZ0R4MVwO4LcxC4UUPK8lWa2GtDdUTbpUUqMqEJe44w9T8bX?= =?utf-8?q?G8Xe8DSNjSeZT8n58XfekwMBgPk0h2CNHP1Yb4jy5CZ2AV087Vqmu6PMlb+d90xXP?= =?utf-8?q?OxKpxfXyvFBxb5cOe2T7JSHfuqHcTFKPMJA3ue/6CP6e7ASJILBkkQsy9fZdUS3Vh?= =?utf-8?q?LKLET4Sk1MF1pts0yMlCaPfM7GuznnnmFAlQsTAVRmJxfxRDjjTzAIjMUsfaw6F/h?= =?utf-8?q?SRKSojRcpRuOxVOy+Pkz50G4QvwmW8oHe7UMc7dRKs372W7cEKBQUMXp8djclGJZm?= =?utf-8?q?94/uIgk2UZSYyYjs5yjbGCsxvoSAitrwZOup4KR2b0NTrMFXVAZX0axi1IxVLDcjp?= =?utf-8?q?1PoT0ALhCHTXD1XbufkD9IeNPfHzi2IHQ9VSpV5dUuTxrrilZMDrntXd3pXox2lEQ?= =?utf-8?q?uYnNud6FWdZR2OElkZfzc/tfGEVYUT03gEuykh6h+Cq41CdlDmV+wG14KdSR0O9Wo?= =?utf-8?q?N48OzOISY6X9L/RRa2PdC8f1PZgj7H+H+g4pBNcVEQQClg6MON6Fon0W2FMu44BEv?= =?utf-8?q?Im8e0dWoqskFxvGthNH2Y3WNZnJnLJyOGj+znI5dUS0fe/FOdIx9YXXyHDd/Oam5z?= =?utf-8?q?qj+2fPCwSGHIn1ST53vS5fRCYWHX1ISNaSiD3iBOB/M+ZtQvXWr16+gp/Z+3K72gi?= =?utf-8?q?jvtsZIL3rJYl3sEwlMBeVQ2kRl4BqotnfQ=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: bc586961-0999-4aed-04b9-08dab0b81423 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:08.7797 (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: L4sdYdAxibKE7xiPq20NluzY5XaGhOc5hJcSylpzUcC0710I4oBo3vowLFtgE4nIq9s/8bGnbHlakqhAUjqbNq9LH6cSPJEl1MfwChzrAfY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR13MB4149 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 offload support of encap action for IPv4 VXLAN tunnel. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- doc/guides/nics/features/nfp.ini | 1 + drivers/net/nfp/nfp_flow.c | 132 +++++++++++++++++++++++++++++++++++++-- 2 files changed, 128 insertions(+), 5 deletions(-) diff --git a/doc/guides/nics/features/nfp.ini b/doc/guides/nics/features/nfp.ini index 40b9a4d..fbfd5ba 100644 --- a/doc/guides/nics/features/nfp.ini +++ b/doc/guides/nics/features/nfp.ini @@ -58,3 +58,4 @@ set_mac_src = Y set_tp_dst = Y set_tp_src = Y set_ttl = Y +vxlan_encap = Y diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index b8e666c..2f04fdf 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -10,8 +10,10 @@ #include #include "nfp_common.h" +#include "nfp_ctrl.h" #include "nfp_flow.h" #include "nfp_logs.h" +#include "nfp_rxtx.h" #include "flower/nfp_flower.h" #include "flower/nfp_flower_cmsg.h" #include "flower/nfp_flower_ctrl.h" @@ -19,6 +21,17 @@ #include "nfpcore/nfp_mip.h" #include "nfpcore/nfp_rtsym.h" +/* + * Maximum number of items in struct rte_flow_action_vxlan_encap. + * ETH / IPv4(6) / UDP / VXLAN / END + */ +#define ACTION_VXLAN_ENCAP_ITEMS_NUM 5 + +struct vxlan_data { + struct rte_flow_action_vxlan_encap conf; + struct rte_flow_item items[ACTION_VXLAN_ENCAP_ITEMS_NUM]; +}; + /* Static initializer for a list of subsequent item types */ #define NEXT_ITEM(...) \ ((const enum rte_flow_item_type []){ \ @@ -742,6 +755,11 @@ struct nfp_mask_id_entry { tc_hl_flag = true; } break; + case RTE_FLOW_ACTION_TYPE_VXLAN_ENCAP: + PMD_DRV_LOG(DEBUG, "RTE_FLOW_ACTION_TYPE_VXLAN_ENCAP detected"); + key_ls->act_size += sizeof(struct nfp_fl_act_pre_tun); + key_ls->act_size += sizeof(struct nfp_fl_act_set_tun); + break; default: PMD_DRV_LOG(ERR, "Action type %d not supported.", action->type); return -ENOTSUP; @@ -1790,7 +1808,7 @@ struct nfp_mask_id_entry { tc_hl->reserved = 0; } -__rte_unused static void +static void nfp_flow_pre_tun_v4_process(struct nfp_fl_act_pre_tun *pre_tun, rte_be32_t ipv4_dst) { @@ -1809,7 +1827,7 @@ struct nfp_mask_id_entry { memcpy(pre_tun->ipv6_dst, ipv6_dst, sizeof(pre_tun->ipv6_dst)); } -__rte_unused static void +static void nfp_flow_set_tun_process(struct nfp_fl_act_set_tun *set_tun, enum nfp_flower_tun_type tun_type, uint64_t tun_id, @@ -1830,7 +1848,7 @@ struct nfp_mask_id_entry { set_tun->tos = tos; } -__rte_unused static int +static int nfp_flower_add_tun_neigh_v4_encap(struct nfp_app_fw_flower *app_fw_flower, struct nfp_fl_rule_metadata *nfp_flow_meta, struct nfp_fl_tun *tun, @@ -1940,7 +1958,7 @@ struct nfp_mask_id_entry { return nfp_flower_cmsg_tun_neigh_v6_rule(app_fw_flower, &payload); } -__rte_unused static int +static int nfp_flower_del_tun_neigh(struct nfp_app_fw_flower *app_fw_flower, struct rte_flow *nfp_flow) { @@ -1979,7 +1997,81 @@ struct nfp_mask_id_entry { } static int -nfp_flow_compile_action(__rte_unused struct nfp_flower_representor *representor, +nfp_flow_action_vxlan_encap_v4(struct nfp_app_fw_flower *app_fw_flower, + char *act_data, + char *actions, + const struct vxlan_data *vxlan_data, + struct nfp_fl_rule_metadata *nfp_flow_meta, + struct nfp_fl_tun *tun) +{ + struct nfp_fl_act_pre_tun *pre_tun; + struct nfp_fl_act_set_tun *set_tun; + const struct rte_flow_item_eth *eth; + const struct rte_flow_item_ipv4 *ipv4; + const struct rte_flow_item_vxlan *vxlan; + size_t act_pre_size = sizeof(struct nfp_fl_act_pre_tun); + size_t act_set_size = sizeof(struct nfp_fl_act_set_tun); + + eth = (const struct rte_flow_item_eth *)vxlan_data->items[0].spec; + ipv4 = (const struct rte_flow_item_ipv4 *)vxlan_data->items[1].spec; + vxlan = (const struct rte_flow_item_vxlan *)vxlan_data->items[3].spec; + + pre_tun = (struct nfp_fl_act_pre_tun *)actions; + memset(pre_tun, 0, act_pre_size); + nfp_flow_pre_tun_v4_process(pre_tun, ipv4->hdr.dst_addr); + + set_tun = (struct nfp_fl_act_set_tun *)(act_data + act_pre_size); + memset(set_tun, 0, act_set_size); + nfp_flow_set_tun_process(set_tun, NFP_FL_TUN_VXLAN, vxlan->hdr.vx_vni, + ipv4->hdr.time_to_live, ipv4->hdr.type_of_service); + set_tun->tun_flags = vxlan->hdr.vx_flags; + + /* Send the tunnel neighbor cmsg to fw */ + return nfp_flower_add_tun_neigh_v4_encap(app_fw_flower, nfp_flow_meta, + tun, ð->hdr, ipv4); +} + +static int +nfp_flow_action_vxlan_encap(struct nfp_app_fw_flower *app_fw_flower, + char *act_data, + char *actions, + const struct rte_flow_action *action, + struct nfp_fl_rule_metadata *nfp_flow_meta, + struct nfp_fl_tun *tun) +{ + size_t act_len; + size_t act_pre_size; + const struct vxlan_data *vxlan_data; + + vxlan_data = action->conf; + if (vxlan_data->items[0].type != RTE_FLOW_ITEM_TYPE_ETH || + vxlan_data->items[1].type != RTE_FLOW_ITEM_TYPE_IPV4 || + vxlan_data->items[2].type != RTE_FLOW_ITEM_TYPE_UDP || + vxlan_data->items[3].type != RTE_FLOW_ITEM_TYPE_VXLAN || + vxlan_data->items[4].type != RTE_FLOW_ITEM_TYPE_END) { + PMD_DRV_LOG(ERR, "Not an valid vxlan action conf."); + return -EINVAL; + } + + /* + * Pre_tunnel action must be the first on the action list. + * If other actions already exist, they need to be pushed forward. + */ + act_len = act_data - actions; + if (act_len != 0) { + act_pre_size = sizeof(struct nfp_fl_act_pre_tun); + memmove(actions + act_pre_size, actions, act_len); + } + + if (vxlan_data->items[1].type == RTE_FLOW_ITEM_TYPE_IPV4) + return nfp_flow_action_vxlan_encap_v4(app_fw_flower, act_data, + actions, vxlan_data, nfp_flow_meta, tun); + + return 0; +} + +static int +nfp_flow_compile_action(struct nfp_flower_representor *representor, const struct rte_flow_action actions[], struct rte_flow *nfp_flow) { @@ -2142,6 +2234,20 @@ struct nfp_mask_id_entry { tc_hl_flag = true; } break; + case RTE_FLOW_ACTION_TYPE_VXLAN_ENCAP: + PMD_DRV_LOG(DEBUG, "Process RTE_FLOW_ACTION_TYPE_VXLAN_ENCAP"); + ret = nfp_flow_action_vxlan_encap(representor->app_fw_flower, + position, action_data, action, nfp_flow_meta, + &nfp_flow->tun); + if (ret != 0) { + PMD_DRV_LOG(ERR, "Failed when process" + " RTE_FLOW_ACTION_TYPE_VXLAN_ENCAP"); + return ret; + } + position += sizeof(struct nfp_fl_act_pre_tun); + position += sizeof(struct nfp_fl_act_set_tun); + nfp_flow->type = NFP_FLOW_ENCAP; + break; default: PMD_DRV_LOG(ERR, "Unsupported action type: %d", action->type); return -ENOTSUP; @@ -2418,6 +2524,22 @@ struct nfp_mask_id_entry { goto exit; } + switch (nfp_flow->type) { + case NFP_FLOW_COMMON: + break; + case NFP_FLOW_ENCAP: + /* Delete the entry from nn table */ + ret = nfp_flower_del_tun_neigh(app_fw_flower, nfp_flow); + break; + default: + PMD_DRV_LOG(ERR, "Invalid nfp flow type %d.", nfp_flow->type); + ret = -EINVAL; + break; + } + + if (ret != 0) + goto exit; + /* Delete the flow from hardware */ if (nfp_flow->install_flag) { ret = nfp_flower_cmsg_flow_delete(app_fw_flower, nfp_flow); From patchwork Tue Oct 18 03:22:20 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 118317 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 43795A0560; Tue, 18 Oct 2022 05:23:45 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id EE4DA415D7; Tue, 18 Oct 2022 05:23:13 +0200 (CEST) Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2119.outbound.protection.outlook.com [40.107.92.119]) by mails.dpdk.org (Postfix) with ESMTP id 70EB24282E for ; Tue, 18 Oct 2022 05:23:12 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=m2bZLOsjywGVSh0jKOrm5VblU660eqoONOExbaWGEfdBxkiCUDVAzFos2DNRytDgZSjHoNWlXMAvNv88jcf6ZRgXUDW5oZO7Zso9RVX0gmTkQrWVpNVXjU6U3ggcpWIOOBzGKExdk5rSfYFdyXEHVqPjPOtU891FuP0rJA2P536c6ZgaRreZlJ0/kpWIMaFfer2kkq/w+t3ydLhuqL8IoG2MaCZ5fe8id3iuxaGpHOLTSmkyYphrlFWmpeKuJuZVsksc7iRUdlUPM5EMAFC5SAVHbB++KilucrQbKn8yNx6cHNYAgson6sByxU1vMxYIGODxPiLxECtsgmW0sgvDlw== 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=1QFDkLsZiRHjafhygBu2xgvNNIssy8dqSvB8BUs4Uv8=; b=Vsi59NmsiKy3QMop5bpeN9XyHsgPjLuejj/HLOg5oQwctxcg4KidQJxgY+DJHi4TYuF/U3fxn/9K3n/qWrL1E9A/F3TUQxnjnclW7A3P/lkmGKkpzy9PUJJXp4wTwEzudkCSbGtaKw+pXf9wBIfgZUZAOudNqqA9FR7K162zibkNs0bO3iWwYr2gG6yo6opTVYmVOpoEtwzHtD0lLbZ8O7D8erhvOrSLWgNp9eB14O+Koz6raoF3/1QVMhzV8oopsJwJhgbNY3Xi556MITOkcOnVx7Lv9Y8gV+Wfe9J/G7bVGZm4HhO69NcMin/7ViM4O+LchWAxmmy2uRsptf7Xlw== 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=1QFDkLsZiRHjafhygBu2xgvNNIssy8dqSvB8BUs4Uv8=; b=CpnDOvflPGknXRXU2kXaNmN4UD+Xe2TFUR4P19mt8h2AqKHlpoPEG+GbxWNmBpDrR0zsNm8XaIJa1gKr0Vrw7jHZmLvc8EpPzK7i+hwVPX6cRRDXx9QFhuDjxlxpmjAgSmDqKcieXZ51uRcBFOr/9DkryBjYVkTGCq6eMtmG9q0= 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 BL3PR13MB5147.namprd13.prod.outlook.com (2603:10b6:208:33a::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.20; Tue, 18 Oct 2022 03:23:10 +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:10 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH 06/25] net/nfp: add the offload support of IPv6 VXLAN encap action Date: Tue, 18 Oct 2022 11:22:20 +0800 Message-Id: <1666063359-34283-7-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> 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_|BL3PR13MB5147:EE_ X-MS-Office365-Filtering-Correlation-Id: 05377338-c292-4b2b-897b-08dab0b8155b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Yc7FZkq4TVyt8OczvS9bo48ps47Pyf3RzPhMBVR3bLJsIa9jx7Qu0IKX7ReIUBGUsG+PjGT+su74Ip2oW40K7T4YXjvTVHo75bc7LSFFfa085xFgOlSLOhI4EhkZPS7iMYo4QSAt4m6pRrdjgEzjAMSbUtBbgfop1mGr3MU8d01HCyzXnG1wqMNYRskXDs8TgW86pPFcvPd8aEHvujbPEXxxsa/IZoZQFTjRiNDB7Jm2g5BXD0wrWN6DjJcAT/zVaLPtDSh7CXeOEbo5qBnaAME3TIYFAaxLoBDQEErYGBPEnFn/tG+dxxHNMc93TAOM5kQ9EvD07mIAGsjlSM58O6aR2I/Dk7TSfGeYtPU62B+Z2VPcKQX3oy288XxU+rDjw0kpzH7rQUvE12M2c9DUQl7PZ2tgv0rnaoEOE9VQg0i8bNVdfDKvxdrmidhwdfFMrpX520BoEqYShjxGkG69ZXhSJz8s5fI7CABUuFfNNRifL1eGmK4I+kqQHdVcnh2iw0axDfRx1DdfpJjO6rXZfZB4npPzPxz0rGHyaJqGn3/DT5OfZQxsTmEd69008VWu00QgNSC01M2I55A3IYRtlr1LaICZUalb2RFMIgRtnoO7q0oQ9/PyEUAei6ChUcpTbHXeanlvAJNgoEzRVf1kIk1DP5LotHiXwle7MNPeS0I9Jg3lIPBau6lPBnqvlIRo3xGb2DTZFZCvVCEYnUAIMIdudY/ZQGjNN1McvFg+5QqGI+kI0DPs3i3wxJP7+Oi4bvTWxQNqJR4Pm+Tj4FurmQ== 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)(366004)(346002)(39840400004)(396003)(376002)(451199015)(36756003)(4326008)(66946007)(6916009)(316002)(5660300002)(66476007)(66556008)(38100700002)(38350700002)(86362001)(107886003)(6666004)(6486002)(478600001)(26005)(6512007)(6506007)(52116002)(41300700001)(8936002)(2906002)(44832011)(8676002)(83380400001)(186003)(2616005); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?96jLpFsgJc6RRCCKsYDceTSe2gt3?= =?utf-8?q?Aaio9vaFbDnJ8Ak6OMZmXGh8Cf4XnwOt8J8ey5+Fe8FUhudfsS26zERiLVLWKXYZo?= =?utf-8?q?Az4SrAeSkUF10AAAN1825jcV8x5PTyyAhuD0ToW0eZfePr8NuP/V7pyu1SHsZAVHx?= =?utf-8?q?jHhRygsdAqnf3ZF9riAjzO6JRWRphxi3irikIf1WRozKLlikrPQjo6/EOVz7vhVrN?= =?utf-8?q?QKjF6MTyGgcua0lofyJoZbF/c3k5neyIgwgVq4aTxVbuFTJeQWHpYrQ9buKP9f9f8?= =?utf-8?q?YRNvJx94t8vq+lkQfwaizBEFtnX1LzWASgybjkvU3FXhHJr+SS5p7sR8Z+3+h8mP5?= =?utf-8?q?XbVMCNqgs71NnIzndqWxseoviKfohw94XV80wvX/HauRz8RUpxKSbwSk9WWVLAXcn?= =?utf-8?q?JyIuqc44Fg1GKGIb4dMYP4ikm4GHqZiVeIlGr6ATjXkzACHBzQzEzPoiHU3fkoeFC?= =?utf-8?q?HBxac8TfgiND43UZCiIhBDckfsP3+ClDksbKDt385DVdRPui15hTsxY96bB08+nJn?= =?utf-8?q?lTiaqzOlHwJpzSAR9u8Ck5HYv7RYvShU++ymnraG4HukyEZ0CoSy+5JHiB3sU+oMU?= =?utf-8?q?OoBEA2t5V86AKZDBSsSyS+3QFTvIxLMibMtY6Oo0bGqDkljR+pla6y2yIyq52dXD7?= =?utf-8?q?rNCSVvXpXr5TrRLJLHHxYQO7GQEh46hoX9rGU8Cd7TKaeNaaLeIHHqeAdf7bReAir?= =?utf-8?q?QT5VfLoIoX3EALrbna9vFKZb2Z6bWNGARkOWXcgZJNaae2VhH0on2dig4vrgI2zkU?= =?utf-8?q?y6TR5WFT1im454IKP57FYQUdLenDwMI8hPHKdlrYl/GXwgmo8tKeKmN0TKoQJs4bF?= =?utf-8?q?xcrUf5F701opb4Zq+4Q2NB4UDbiuxD9A7B/TKXojTa+2fLrWfet6mJcpfcrje6yLx?= =?utf-8?q?cgmAYllrpPUwq4V9mJFcJC+Odq7awVjyi7sfNSnBUboec8xF7nxeshJ7R1joDaAgI?= =?utf-8?q?P7S4mcp9ceEaRxQrsBdoAm6f9O6+QEZPMOxpu/8/6T7NrKHtNVwX3rYd1jXLX2rm+?= =?utf-8?q?255BttHZYSXgKg5B56vtIaiP40ZgwulObx7ivaJY5xoQG7RjC7aR5VbREk5Dx6lNj?= =?utf-8?q?hKMz98nkvCS4p3y14rQMTN4qtYjN60gvZh3UtKGEJPcPnAsPqkyK9rXRU5zeJv+jk?= =?utf-8?q?XN19Ps460C8jp5AZ7bt8TDuG+fgmc7HNKCBmZ/0eXHZ9i/UaelEC6E21Of3DyyzQH?= =?utf-8?q?UA/KssqJnEwwkuoQYmnGr3/j7bifbZAKYSGXwR3R2QnlVerEruP6jCxv3o3CEi9gO?= =?utf-8?q?X00rjPsUo4rDWlg1w5fWixWMBiFYsGUp44TnzhrJhIUul4zUxNvLpZVUIHhcVIelF?= =?utf-8?q?zp3cLckMenvQfmHzp0dT+iV7oAfVpSJBzpHoZuKBrDjWZlmVOLETXRNeDiN0bjWAI?= =?utf-8?q?bdeU7s24x0vDTKv/3pk3l16D7xWKH/0TR59iY69lYlkb6ZU5jgiWAQeYiOVLldvJ6?= =?utf-8?q?2mFr94kO9lNBVK95VmoQpMh1eU2vKSc8IY6aBW2fYmlRPH3gVztVimQ0sUXuOlv6W?= =?utf-8?q?uSz+iyGERJ7rx+Tf8fHBPOk7UkjE3ua9eA=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 05377338-c292-4b2b-897b-08dab0b8155b 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:10.8275 (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: cZz2wTZFOpo6K3A1z+vNCo7GYySqhqvNbtTz7rDnHqCBisCubMW/WpML1pNIai+9h0/OdjZU5dp7byTIbEhALCExe9DKa519Qsp0goHNPc4= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL3PR13MB5147 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 offload support of encap action for IPv6 VXLAN tunnel. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- doc/guides/rel_notes/release_22_11.rst | 1 + drivers/net/nfp/nfp_flow.c | 48 ++++++++++++++++++++++++++++++---- 2 files changed, 44 insertions(+), 5 deletions(-) diff --git a/doc/guides/rel_notes/release_22_11.rst b/doc/guides/rel_notes/release_22_11.rst index c2bf721..351fb02 100644 --- a/doc/guides/rel_notes/release_22_11.rst +++ b/doc/guides/rel_notes/release_22_11.rst @@ -184,6 +184,7 @@ New Features * Set the port number * Set the TTL * Set the DSCP of IPv4 and IPv6 + * Encap of VXLAN tunnel * **Updated NXP dpaa2 driver.** diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index 2f04fdf..b9c37b6 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -1817,7 +1817,7 @@ struct nfp_mask_id_entry { pre_tun->ipv4_dst = ipv4_dst; } -__rte_unused static void +static void nfp_flow_pre_tun_v6_process(struct nfp_fl_act_pre_tun *pre_tun, const uint8_t ipv6_dst[]) { @@ -1903,7 +1903,7 @@ struct nfp_mask_id_entry { return nfp_flower_cmsg_tun_neigh_v4_rule(app_fw_flower, &payload); } -__rte_unused static int +static int nfp_flower_add_tun_neigh_v6_encap(struct nfp_app_fw_flower *app_fw_flower, struct nfp_fl_rule_metadata *nfp_flow_meta, struct nfp_fl_tun *tun, @@ -2032,6 +2032,42 @@ struct nfp_mask_id_entry { } static int +nfp_flow_action_vxlan_encap_v6(struct nfp_app_fw_flower *app_fw_flower, + char *act_data, + char *actions, + const struct vxlan_data *vxlan_data, + struct nfp_fl_rule_metadata *nfp_flow_meta, + struct nfp_fl_tun *tun) +{ + struct nfp_fl_act_pre_tun *pre_tun; + struct nfp_fl_act_set_tun *set_tun; + const struct rte_flow_item_eth *eth; + const struct rte_flow_item_ipv6 *ipv6; + const struct rte_flow_item_vxlan *vxlan; + size_t act_pre_size = sizeof(struct nfp_fl_act_pre_tun); + size_t act_set_size = sizeof(struct nfp_fl_act_set_tun); + + eth = (const struct rte_flow_item_eth *)vxlan_data->items[0].spec; + ipv6 = (const struct rte_flow_item_ipv6 *)vxlan_data->items[1].spec; + vxlan = (const struct rte_flow_item_vxlan *)vxlan_data->items[3].spec; + + pre_tun = (struct nfp_fl_act_pre_tun *)actions; + memset(pre_tun, 0, act_pre_size); + nfp_flow_pre_tun_v6_process(pre_tun, ipv6->hdr.dst_addr); + + set_tun = (struct nfp_fl_act_set_tun *)(act_data + act_pre_size); + memset(set_tun, 0, act_set_size); + nfp_flow_set_tun_process(set_tun, NFP_FL_TUN_VXLAN, vxlan->hdr.vx_vni, + ipv6->hdr.hop_limits, + (ipv6->hdr.vtc_flow >> RTE_IPV6_HDR_TC_SHIFT) & 0xff); + set_tun->tun_flags = vxlan->hdr.vx_flags; + + /* Send the tunnel neighbor cmsg to fw */ + return nfp_flower_add_tun_neigh_v6_encap(app_fw_flower, nfp_flow_meta, + tun, ð->hdr, ipv6); +} + +static int nfp_flow_action_vxlan_encap(struct nfp_app_fw_flower *app_fw_flower, char *act_data, char *actions, @@ -2045,7 +2081,8 @@ struct nfp_mask_id_entry { vxlan_data = action->conf; if (vxlan_data->items[0].type != RTE_FLOW_ITEM_TYPE_ETH || - vxlan_data->items[1].type != RTE_FLOW_ITEM_TYPE_IPV4 || + (vxlan_data->items[1].type != RTE_FLOW_ITEM_TYPE_IPV4 && + vxlan_data->items[1].type != RTE_FLOW_ITEM_TYPE_IPV6) || vxlan_data->items[2].type != RTE_FLOW_ITEM_TYPE_UDP || vxlan_data->items[3].type != RTE_FLOW_ITEM_TYPE_VXLAN || vxlan_data->items[4].type != RTE_FLOW_ITEM_TYPE_END) { @@ -2066,8 +2103,9 @@ struct nfp_mask_id_entry { if (vxlan_data->items[1].type == RTE_FLOW_ITEM_TYPE_IPV4) return nfp_flow_action_vxlan_encap_v4(app_fw_flower, act_data, actions, vxlan_data, nfp_flow_meta, tun); - - return 0; + else + return nfp_flow_action_vxlan_encap_v6(app_fw_flower, act_data, + actions, vxlan_data, nfp_flow_meta, tun); } static int From patchwork Tue Oct 18 03:22:21 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 118318 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 64C7CA0560; Tue, 18 Oct 2022 05:23:51 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 6B189427FF; Tue, 18 Oct 2022 05:23:17 +0200 (CEST) Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2097.outbound.protection.outlook.com [40.107.92.97]) by mails.dpdk.org (Postfix) with ESMTP id B66724281B for ; Tue, 18 Oct 2022 05:23:14 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=PH/v+dkP9Waoeu1hCouWX95+dmabuDAOD0hoxhKmyf1V4Pu1cwBLD7+3cfue13sCmaobw7GYf9H2fzwK79dBRyuEP8FG1Qr7H7noTkYChwKkYEvfduGsofwoxocXbrzV8BUiAN/MDdl51UsEeYGZw/ujloYfIJbsazhhVTxPXmbBWWFk45Ergu8jq1Ooi36lnr9uh5bi75ExnuVuHihxmVPlfGs4cntl4MilaZ3AUgZ0c3O1wGOzNcqlwLcgJp+qNAGJbw5+eVPuoLbH2N55cKiFdyNBWKtENAgsvQlBm+rAlywrG0A0aiN3YCXXKqbEXbtIvki+wnkFyDzjSc9thQ== 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=t1msdm+6h5xL5almSsws8TG8/To+rXaXwzAUkjACsvQ=; b=Bju3hQqQKDt6Lgtb5T9Xk3O+lSZZ6djTlyc7Bi5i5lzWjVkXZYr7icnCUERjZtVY7a9jYc1gc0g2/1rJjTjWQu6J3sHVeNIuWuf+FdXbnCUX9uS/xTAK19W8mEyWiAIOq2kHqkM8OS2ZBBamupMNtIN2xlFlCjpQ5ydL0TT1fMd3eMkspX2Dz2bSy863QGYOchWPh6u4c4glmukUkKkygH5Nc9lVpXxVtgXyAsLHM8vY7GjqA7gqnzWBqGtvubM8BebPuRZy02LYHiUI2xWmaHNGRbM5Bnv08JPCBsol9yAgeWjnTRlk++xFW7TuUrN/lKXBn8n+6ssrUlXctwiQMw== 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=t1msdm+6h5xL5almSsws8TG8/To+rXaXwzAUkjACsvQ=; b=uskx8TrwKIAo+BboTeqAafsA1OZiaNh8BAU1x9CfbvTjfAy8kpZCwuU786IHBldb2lFoN3bb+zADbN9ywk8t1aP7rn/SkMlmSEQ+1MGxnTvEqP8n5QDbDuqLHqskRyGOZdOpjqzLbGGi2FxpkrhkpNcKbN85HZObPj/P1CvwMns= 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 BL3PR13MB5147.namprd13.prod.outlook.com (2603:10b6:208:33a::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.20; Tue, 18 Oct 2022 03:23:12 +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:12 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH 07/25] net/nfp: prepare for the decap action of IPv4 UDP tunnel Date: Tue, 18 Oct 2022 11:22:21 +0800 Message-Id: <1666063359-34283-8-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> 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_|BL3PR13MB5147:EE_ X-MS-Office365-Filtering-Correlation-Id: a0be85c1-1ab9-4bbb-f775-08dab0b816a4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Zsw3jylAR/Q1kMWsMFD1NNd++QvsjPvg8JR5tkN3TVeeRItGnJt4bvB4F4IZTPJpb1nQKMVIS7LAOdWbekCmemG68L5i3VIVSoU6lmANcFcSfY4F1S+R7q7cHXVeJh8FdoGKY5PtCvuyaQLXJN+B8HfM8LRPd1OyqomJjmjKGtxzWCUuVBAH0j7L/4f45QDS3b+P2JvG8DKxkE+l5xDlU6lmcq3jEk2d8TbCjJpEXUdwkxZMo7KOUCUyhy0bMR6oJY0SAS68Ybb9QGLHOUKfKOMxA2Czt4W65Iaswc/xixlrOW+/wMVM0ipOJbNl/TkJV17+YxANNbTHHe1VYvSWIUpCoaczGkn/bTIT2gWFJ5UpI9vuO27tKWcwvLbk0Yuy20qrMaNQHV/SnSHgpHFS4Hazfq6+7XFn9kOPZtB1Pn8hXqfXfDKIkwyDspI9FZgF2TIWmm4i4y4r+9nmbeVqa16YQSw/wvW/WnUmUD5ICfw4Fv28EwjFo6OproTzL7u3uwHfbpoZ73HAz+7Co/cDg4SzolLublGjuP0hfOE3cs4sxmM+NpAgj4VF7gP07kvUs+EML+RfGsnpKIxBqR3xQ29pkZa5z4Rg8UUl1YVe6fht3nGZg1FxOSgIrlelvLtxV3Bl+VlDGl49TuI91KVBZwtjyuCCc5wk/UtiT9/rKD9hcz2Ga45XGo1JeFFexs+uhVkEwmM5T8yVc6Py9oC8VbcHID4SAd8McONHPrPvOnwmYpRE70aXRPz3MaYnH2y8gldMFsmVr31LjJvX4oWMlg== 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)(366004)(346002)(39840400004)(396003)(376002)(451199015)(36756003)(4326008)(66946007)(6916009)(316002)(5660300002)(30864003)(66476007)(66556008)(38100700002)(38350700002)(86362001)(107886003)(6666004)(6486002)(478600001)(26005)(6512007)(6506007)(52116002)(41300700001)(8936002)(2906002)(44832011)(8676002)(83380400001)(186003)(66574015)(2616005); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?4NDOKTIlG5JytUwjreRo0fMzN6Hy?= =?utf-8?q?T+TKkkk+oR+lWtxzJFWxb9LVA2E9Diiif1aczHCsN/D73bBoj3xwIUnWDNWjbM0bF?= =?utf-8?q?HGu44659xWVnX8/lRdSHUU+ckabMhZu+uOTN+YKVRr+jdF4ub7sL/8HF7r4qwCQ4T?= =?utf-8?q?3Ftr5hnar8ex90x5kP+2mc0boBpEqKEMO2ASA7YKIKOCDCtZPdSaPQSUsaSlSy/o9?= =?utf-8?q?d2yEJkCf1wHoJChMghvzzGJm9mehnIDpzK1XKflrBFq7chm3QXTLt5Wf/wyc0dAcA?= =?utf-8?q?q0Zbx3NWtkWeElNg7bXytSX/f3usAvqMcQ2AXvZF0r/Yy85p/sYPlp7o9cMhJDFLs?= =?utf-8?q?0qRjkyt2WEoDVLH/8vkBbtVDJJfsUy0WK9AmFXZwNGne+Wl4XEtW0+M6hmrZiJvI2?= =?utf-8?q?V3BDyWTTdkRFs/SzyGsehtCD9H1Y0Bty0n1Dw6TfMj6CQHrHjKmWpOxQOP3pZFn7Z?= =?utf-8?q?Fs4/TDp5kcZV5T78e+EAR+jFJVtpQLP1zZGatkRK7PNSzx6LLaPBK8nCyXkO4fpAp?= =?utf-8?q?WqnpiM7jdk2ugdew8iTwiLa5u45fR3+Y/YozhrJ+Noil6rb+Zb+MDz79huAVw8y29?= =?utf-8?q?Dc5YQdgmSF0FwlOjuhOMFsRWDUjBlbrpgqdxFXbLcF3MYagTCp3soNmW1cf8Wo+6J?= =?utf-8?q?o1Ye2abkW2CAvUHWTRJsqDYX0iwKS+AAr8XlrZDqxKQxw/LFQib6SexIGj5RsilCx?= =?utf-8?q?ybU99CwJsiYQZoqeGwRa7Ikn9653cWSLpsJ7x/63imMxueoxk8ue+Zht00FIA7s80?= =?utf-8?q?1o/IHSk5MeK99jSiMs82CM20aQy6IIT6DRrjVL3et5P019rwl4Di4JFDq1qbWYlzm?= =?utf-8?q?dkg8K2p2EDpt8HqH2juW+LCNZnubgBPmA9DWYWclZICKuRPqW9sMIfMwh6NP/LAD+?= =?utf-8?q?eZiJW3MJ/Cyp5kSuqgApZjie3oL+Izws5Zx6I/k8ToyZ4uaHumrExOz4gX2ZSovb/?= =?utf-8?q?r1uS2v+WQMdaXb6Y6QNFQw+Nk7XzSeFVsjNLdwWfE85XKOkdQaYi2Eqm0zc7RBQn7?= =?utf-8?q?GkWkso6JCAtsvnceUBzF1c40mayeJ6P6+/v7GhIyl6QdAubQ5n7b4MCWKkKuRq1dE?= =?utf-8?q?jWULi2IpwzldTyClL9HEysg+WlCGT+Z66NGW2VKzUg+4UjIAhHTSPTXbZSC+gwqqm?= =?utf-8?q?51kSMxC726L2EXGxc0dSzbvsjd/CC8Tw8grJvnO1Go/GKqAXt5NeEglgmUwo4gwQf?= =?utf-8?q?+xVlTMIlFcMmRu+nqBgn2McYZ0bbFCsbcoJrI42wNn/QGqnQgmD7lieQlGRfwiKva?= =?utf-8?q?OdzXk1+HL0HWNt2JzjY1Y4GA/+mvZ0iHs2f9nyzj06GwEDddkV+2FvfWL7UJ+YM9L?= =?utf-8?q?DyhtEZ8ZEEJY7LFab6cSJ05K0NjNqXGofotxo7J+KOUvj6iXf9Rh9ejw6Yro7+GCU?= =?utf-8?q?yHts0MYNm/biJu17wGV+asLMCIw4gwOUV3am76nUoUi+VRw8UtvupqsBPcIUH+w1K?= =?utf-8?q?5nkggCiz3SuLIePfMmFcWhMS0bYibJBgyWfm7mSiT6k4cd/cN4A6iW6s2NmR3Ws4Z?= =?utf-8?q?rWTydHOpFF+CUcO64jhNmifPmXv3wsqcRQ=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: a0be85c1-1ab9-4bbb-f775-08dab0b816a4 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:12.8133 (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: Xo3SgrfSGa1RtDcgQLK6puyccUMdJvggGd/F+scnrjhRY/vITNgcuFUcZAF7cU2losf7Opf5i2A6OflED60AhfRM/jaOLJh+EYOcGhhBln8= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL3PR13MB5147 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 related data structure and functions, prepare for the decap action of IPv4 UDP tunnel. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- drivers/net/nfp/flower/nfp_flower_cmsg.c | 118 ++++++++ drivers/net/nfp/flower/nfp_flower_cmsg.h | 94 +++++++ drivers/net/nfp/nfp_flow.c | 461 ++++++++++++++++++++++++++++++- drivers/net/nfp/nfp_flow.h | 17 ++ 4 files changed, 675 insertions(+), 15 deletions(-) diff --git a/drivers/net/nfp/flower/nfp_flower_cmsg.c b/drivers/net/nfp/flower/nfp_flower_cmsg.c index 8983178..f18f3de 100644 --- a/drivers/net/nfp/flower/nfp_flower_cmsg.c +++ b/drivers/net/nfp/flower/nfp_flower_cmsg.c @@ -304,3 +304,121 @@ return 0; } + +int +nfp_flower_cmsg_tun_off_v4(struct nfp_app_fw_flower *app_fw_flower) +{ + uint16_t cnt; + uint32_t count = 0; + struct rte_mbuf *mbuf; + struct nfp_flow_priv *priv; + struct nfp_ipv4_addr_entry *entry; + struct nfp_flower_cmsg_tun_ipv4_addr *msg; + + mbuf = rte_pktmbuf_alloc(app_fw_flower->ctrl_pktmbuf_pool); + if (mbuf == NULL) { + PMD_DRV_LOG(DEBUG, "Failed to alloc mbuf for v4 tun addr"); + return -ENOMEM; + } + + msg = nfp_flower_cmsg_init(mbuf, NFP_FLOWER_CMSG_TYPE_TUN_IPS, sizeof(*msg)); + + priv = app_fw_flower->flow_priv; + rte_spinlock_lock(&priv->ipv4_off_lock); + LIST_FOREACH(entry, &priv->ipv4_off_list, next) { + if (count >= NFP_FL_IPV4_ADDRS_MAX) { + rte_spinlock_unlock(&priv->ipv4_off_lock); + PMD_DRV_LOG(ERR, "IPv4 offload exceeds limit."); + return -ERANGE; + } + msg->ipv4_addr[count] = entry->ipv4_addr; + count++; + } + msg->count = rte_cpu_to_be_32(count); + rte_spinlock_unlock(&priv->ipv4_off_lock); + + cnt = nfp_flower_ctrl_vnic_xmit(app_fw_flower, mbuf); + if (cnt == 0) { + PMD_DRV_LOG(ERR, "Send cmsg through ctrl vnic failed."); + rte_pktmbuf_free(mbuf); + return -EIO; + } + + return 0; +} + +int +nfp_flower_cmsg_pre_tunnel_rule(struct nfp_app_fw_flower *app_fw_flower, + struct nfp_fl_rule_metadata *nfp_flow_meta, + uint16_t mac_idx, + bool is_del) +{ + uint16_t cnt; + struct rte_mbuf *mbuf; + struct nfp_flower_meta_tci *meta_tci; + struct nfp_flower_cmsg_pre_tun_rule *msg; + + mbuf = rte_pktmbuf_alloc(app_fw_flower->ctrl_pktmbuf_pool); + if (mbuf == NULL) { + PMD_DRV_LOG(DEBUG, "Failed to alloc mbuf for pre tunnel rule"); + return -ENOMEM; + } + + msg = nfp_flower_cmsg_init(mbuf, NFP_FLOWER_CMSG_TYPE_PRE_TUN_RULE, sizeof(*msg)); + + meta_tci = (struct nfp_flower_meta_tci *)((char *)nfp_flow_meta + + sizeof(struct nfp_fl_rule_metadata)); + if (meta_tci->tci) + msg->vlan_tci = meta_tci->tci; + else + msg->vlan_tci = 0xffff; + + if (is_del) + msg->flags = rte_cpu_to_be_32(NFP_TUN_PRE_TUN_RULE_DEL); + + msg->port_idx = rte_cpu_to_be_16(mac_idx); + msg->host_ctx_id = nfp_flow_meta->host_ctx_id; + + cnt = nfp_flower_ctrl_vnic_xmit(app_fw_flower, mbuf); + if (cnt == 0) { + PMD_DRV_LOG(ERR, "Send cmsg through ctrl vnic failed."); + rte_pktmbuf_free(mbuf); + return -EIO; + } + + return 0; +} + +int +nfp_flower_cmsg_tun_mac_rule(struct nfp_app_fw_flower *app_fw_flower, + struct rte_ether_addr *mac, + uint16_t mac_idx, + bool is_del) +{ + uint16_t cnt; + struct rte_mbuf *mbuf; + struct nfp_flower_cmsg_tun_mac *msg; + + mbuf = rte_pktmbuf_alloc(app_fw_flower->ctrl_pktmbuf_pool); + if (mbuf == NULL) { + PMD_DRV_LOG(DEBUG, "Failed to alloc mbuf for tunnel mac"); + return -ENOMEM; + } + + msg = nfp_flower_cmsg_init(mbuf, NFP_FLOWER_CMSG_TYPE_TUN_MAC, sizeof(*msg)); + + msg->count = rte_cpu_to_be_16(1); + msg->index = rte_cpu_to_be_16(mac_idx); + rte_ether_addr_copy(mac, &msg->addr); + if (is_del) + msg->flags = rte_cpu_to_be_16(NFP_TUN_MAC_OFFLOAD_DEL_FLAG); + + cnt = nfp_flower_ctrl_vnic_xmit(app_fw_flower, mbuf); + if (cnt == 0) { + PMD_DRV_LOG(ERR, "Send cmsg through ctrl vnic failed."); + rte_pktmbuf_free(mbuf); + return -EIO; + } + + return 0; +} diff --git a/drivers/net/nfp/flower/nfp_flower_cmsg.h b/drivers/net/nfp/flower/nfp_flower_cmsg.h index d1e0562..0933dac 100644 --- a/drivers/net/nfp/flower/nfp_flower_cmsg.h +++ b/drivers/net/nfp/flower/nfp_flower_cmsg.h @@ -195,6 +195,91 @@ struct nfp_flower_cmsg_tun_neigh_v6 { struct nfp_flower_tun_neigh common; }; +#define NFP_TUN_PRE_TUN_RULE_DEL (1 << 0) +#define NFP_TUN_PRE_TUN_IDX_BIT (1 << 3) +#define NFP_TUN_PRE_TUN_IPV6_BIT (1 << 7) + +/* + * NFP_FLOWER_CMSG_TYPE_PRE_TUN_RULE + * Bit 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 + * -----\ 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + * +---------------------------------------------------------------+ + * 0 | FLAGS | + * +---------------------------------------------------------------+ + * 1 | MAC_IDX | VLAN_ID | + * +---------------------------------------------------------------+ + * 2 | HOST_CTX | + * +---------------------------------------------------------------+ + */ +struct nfp_flower_cmsg_pre_tun_rule { + rte_be32_t flags; + rte_be16_t port_idx; + rte_be16_t vlan_tci; + rte_be32_t host_ctx_id; +}; + +#define NFP_TUN_MAC_OFFLOAD_DEL_FLAG 0x2 + +/* + * NFP_FLOWER_CMSG_TYPE_TUN_MAC + * Bit 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 + * -----\ 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + * Word +-----------------------+---+-+-+---------------+---------------+ + * 0 | spare |NBI|D|F| Amount of MAC’s in this msg | + * +---------------+-------+---+-+-+---------------+---------------+ + * 1 | Index 0 | MAC[0] | MAC[1] | + * +---------------+---------------+---------------+---------------+ + * 2 | MAC[2] | MAC[3] | MAC[4] | MAC[5] | + * +---------------+---------------+---------------+---------------+ + * 3 | Index 1 | MAC[0] | MAC[1] | + * +---------------+---------------+---------------+---------------+ + * 4 | MAC[2] | MAC[3] | MAC[4] | MAC[5] | + * +---------------+---------------+---------------+---------------+ + * ... + * +---------------+---------------+---------------+---------------+ + * 2N-1 | Index N | MAC[0] | MAC[1] | + * +---------------+---------------+---------------+---------------+ + * 2N | MAC[2] | MAC[3] | MAC[4] | MAC[5] | + * +---------------+---------------+---------------+---------------+ + * + * F: Flush bit. Set if entire table must be flushed. Rest of info in cmsg + * will be ignored. Not implemented. + * D: Delete bit. Set if entry must be deleted instead of added + * NBI: Network Block Interface. Set to 0 + * The amount of MAC’s per control message is limited only by the packet + * buffer size. A 2048B buffer can fit 253 MAC address and a 10240B buffer + * 1277 MAC addresses. + */ +struct nfp_flower_cmsg_tun_mac { + rte_be16_t flags; + rte_be16_t count; /**< Should always be 1 */ + rte_be16_t index; + struct rte_ether_addr addr; +}; + +#define NFP_FL_IPV4_ADDRS_MAX 32 + +/* + * NFP_FLOWER_CMSG_TYPE_TUN_IPS + * Bit 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 + * -----\ 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + * +---------------------------------------------------------------+ + * 0 | Number of IP Addresses | + * +---------------------------------------------------------------+ + * 1 | IP Address #1 | + * +---------------------------------------------------------------+ + * 2 | IP Address #2 | + * +---------------------------------------------------------------+ + * | ... | + * +---------------------------------------------------------------+ + * 32 | IP Address #32 | + * +---------------------------------------------------------------+ + */ +struct nfp_flower_cmsg_tun_ipv4_addr { + rte_be32_t count; + rte_be32_t ipv4_addr[NFP_FL_IPV4_ADDRS_MAX]; +}; + /* * NFP_FLOWER_CMSG_TYPE_FLOW_STATS * Bit 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 @@ -716,5 +801,14 @@ int nfp_flower_cmsg_tun_neigh_v4_rule(struct nfp_app_fw_flower *app_fw_flower, struct nfp_flower_cmsg_tun_neigh_v4 *payload); int nfp_flower_cmsg_tun_neigh_v6_rule(struct nfp_app_fw_flower *app_fw_flower, struct nfp_flower_cmsg_tun_neigh_v6 *payload); +int nfp_flower_cmsg_tun_off_v4(struct nfp_app_fw_flower *app_fw_flower); +int nfp_flower_cmsg_pre_tunnel_rule(struct nfp_app_fw_flower *app_fw_flower, + struct nfp_fl_rule_metadata *nfp_flow_meta, + uint16_t mac_idx, + bool is_del); +int nfp_flower_cmsg_tun_mac_rule(struct nfp_app_fw_flower *app_fw_flower, + struct rte_ether_addr *mac, + uint16_t mac_idx, + bool is_del); #endif /* _NFP_CMSG_H_ */ diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index b9c37b6..816c733 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -47,7 +47,8 @@ struct nfp_flow_item_proc { /* Size in bytes for @p mask_support and @p mask_default. */ const unsigned int mask_sz; /* Merge a pattern item into a flow rule handle. */ - int (*merge)(struct rte_flow *nfp_flow, + int (*merge)(struct nfp_app_fw_flower *app_fw_flower, + struct rte_flow *nfp_flow, char **mbuf_off, const struct rte_flow_item *item, const struct nfp_flow_item_proc *proc, @@ -63,6 +64,12 @@ struct nfp_mask_id_entry { uint8_t mask_id; }; +struct nfp_pre_tun_entry { + uint16_t mac_index; + uint16_t ref_cnt; + uint8_t mac_addr[RTE_ETHER_ADDR_LEN]; +} __rte_aligned(32); + static inline struct nfp_flow_priv * nfp_flow_dev_to_priv(struct rte_eth_dev *dev) { @@ -417,6 +424,83 @@ struct nfp_mask_id_entry { return 0; } +__rte_unused static int +nfp_tun_add_ipv4_off(struct nfp_app_fw_flower *app_fw_flower, + rte_be32_t ipv4) +{ + struct nfp_flow_priv *priv; + struct nfp_ipv4_addr_entry *entry; + struct nfp_ipv4_addr_entry *tmp_entry; + + priv = app_fw_flower->flow_priv; + + rte_spinlock_lock(&priv->ipv4_off_lock); + LIST_FOREACH(entry, &priv->ipv4_off_list, next) { + if (entry->ipv4_addr == ipv4) { + entry->ref_count++; + rte_spinlock_unlock(&priv->ipv4_off_lock); + return 0; + } + } + rte_spinlock_unlock(&priv->ipv4_off_lock); + + tmp_entry = rte_zmalloc("nfp_ipv4_off", sizeof(struct nfp_ipv4_addr_entry), 0); + if (tmp_entry == NULL) { + PMD_DRV_LOG(ERR, "Mem error when offloading IP address."); + return -ENOMEM; + } + + tmp_entry->ipv4_addr = ipv4; + tmp_entry->ref_count = 1; + + rte_spinlock_lock(&priv->ipv4_off_lock); + LIST_INSERT_HEAD(&priv->ipv4_off_list, tmp_entry, next); + rte_spinlock_unlock(&priv->ipv4_off_lock); + + return nfp_flower_cmsg_tun_off_v4(app_fw_flower); +} + +static int +nfp_tun_del_ipv4_off(struct nfp_app_fw_flower *app_fw_flower, + rte_be32_t ipv4) +{ + struct nfp_flow_priv *priv; + struct nfp_ipv4_addr_entry *entry; + + priv = app_fw_flower->flow_priv; + + rte_spinlock_lock(&priv->ipv4_off_lock); + LIST_FOREACH(entry, &priv->ipv4_off_list, next) { + if (entry->ipv4_addr == ipv4) { + entry->ref_count--; + if (entry->ref_count == 0) { + LIST_REMOVE(entry, next); + rte_free(entry); + rte_spinlock_unlock(&priv->ipv4_off_lock); + return nfp_flower_cmsg_tun_off_v4(app_fw_flower); + } + break; + } + } + rte_spinlock_unlock(&priv->ipv4_off_lock); + + return 0; +} + +static int +nfp_tun_check_ip_off_del(struct nfp_flower_representor *repr, + struct rte_flow *nfp_flow) +{ + int ret; + struct nfp_flower_ipv4_udp_tun *udp4; + + udp4 = (struct nfp_flower_ipv4_udp_tun *)(nfp_flow->payload.mask_data - + sizeof(struct nfp_flower_ipv4_udp_tun)); + ret = nfp_tun_del_ipv4_off(repr->app_fw_flower, udp4->ipv4.dst); + + return ret; +} + static void nfp_flower_compile_meta_tci(char *mbuf_off, struct nfp_fl_key_ls *key_layer) { @@ -653,6 +737,9 @@ struct nfp_mask_id_entry { case RTE_FLOW_ACTION_TYPE_RSS: PMD_DRV_LOG(DEBUG, "RTE_FLOW_ACTION_TYPE_RSS detected"); break; + case RTE_FLOW_ACTION_TYPE_JUMP: + PMD_DRV_LOG(DEBUG, "RTE_FLOW_ACTION_TYPE_JUMP detected"); + break; case RTE_FLOW_ACTION_TYPE_PORT_ID: PMD_DRV_LOG(DEBUG, "RTE_FLOW_ACTION_TYPE_PORT_ID detected"); key_ls->act_size += sizeof(struct nfp_fl_act_output); @@ -804,7 +891,8 @@ struct nfp_mask_id_entry { } static int -nfp_flow_merge_eth(__rte_unused struct rte_flow *nfp_flow, +nfp_flow_merge_eth(__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, const struct nfp_flow_item_proc *proc, @@ -841,7 +929,8 @@ struct nfp_mask_id_entry { } static int -nfp_flow_merge_vlan(struct rte_flow *nfp_flow, +nfp_flow_merge_vlan(__rte_unused struct nfp_app_fw_flower *app_fw_flower, + struct rte_flow *nfp_flow, __rte_unused char **mbuf_off, const struct rte_flow_item *item, const struct nfp_flow_item_proc *proc, @@ -871,7 +960,8 @@ struct nfp_mask_id_entry { } static int -nfp_flow_merge_ipv4(struct rte_flow *nfp_flow, +nfp_flow_merge_ipv4(__rte_unused struct nfp_app_fw_flower *app_fw_flower, + struct rte_flow *nfp_flow, char **mbuf_off, const struct rte_flow_item *item, const struct nfp_flow_item_proc *proc, @@ -932,7 +1022,8 @@ struct nfp_mask_id_entry { } static int -nfp_flow_merge_ipv6(struct rte_flow *nfp_flow, +nfp_flow_merge_ipv6(__rte_unused struct nfp_app_fw_flower *app_fw_flower, + struct rte_flow *nfp_flow, char **mbuf_off, const struct rte_flow_item *item, const struct nfp_flow_item_proc *proc, @@ -997,7 +1088,8 @@ struct nfp_mask_id_entry { } static int -nfp_flow_merge_tcp(struct rte_flow *nfp_flow, +nfp_flow_merge_tcp(__rte_unused struct nfp_app_fw_flower *app_fw_flower, + struct rte_flow *nfp_flow, char **mbuf_off, const struct rte_flow_item *item, const struct nfp_flow_item_proc *proc, @@ -1070,7 +1162,8 @@ struct nfp_mask_id_entry { } static int -nfp_flow_merge_udp(struct rte_flow *nfp_flow, +nfp_flow_merge_udp(__rte_unused struct nfp_app_fw_flower *app_fw_flower, + struct rte_flow *nfp_flow, char **mbuf_off, const struct rte_flow_item *item, const struct nfp_flow_item_proc *proc, @@ -1118,7 +1211,8 @@ struct nfp_mask_id_entry { } static int -nfp_flow_merge_sctp(struct rte_flow *nfp_flow, +nfp_flow_merge_sctp(__rte_unused struct nfp_app_fw_flower *app_fw_flower, + struct rte_flow *nfp_flow, char **mbuf_off, const struct rte_flow_item *item, const struct nfp_flow_item_proc *proc, @@ -1160,7 +1254,8 @@ struct nfp_mask_id_entry { } static int -nfp_flow_merge_vxlan(struct rte_flow *nfp_flow, +nfp_flow_merge_vxlan(__rte_unused struct nfp_app_fw_flower *app_fw_flower, + struct rte_flow *nfp_flow, char **mbuf_off, const struct rte_flow_item *item, const struct nfp_flow_item_proc *proc, @@ -1409,7 +1504,8 @@ struct nfp_mask_id_entry { } static int -nfp_flow_compile_item_proc(const struct rte_flow_item items[], +nfp_flow_compile_item_proc(struct nfp_flower_representor *repr, + const struct rte_flow_item items[], struct rte_flow *nfp_flow, char **mbuf_off_exact, char **mbuf_off_mask, @@ -1420,6 +1516,7 @@ struct nfp_mask_id_entry { bool continue_flag = true; const struct rte_flow_item *item; const struct nfp_flow_item_proc *proc_list; + struct nfp_app_fw_flower *app_fw_flower = repr->app_fw_flower; proc_list = nfp_flow_item_proc_list; for (item = items; item->type != RTE_FLOW_ITEM_TYPE_END && continue_flag; ++item) { @@ -1455,14 +1552,14 @@ struct nfp_mask_id_entry { break; } - ret = proc->merge(nfp_flow, mbuf_off_exact, item, + ret = proc->merge(app_fw_flower, nfp_flow, mbuf_off_exact, item, proc, false, is_outer_layer); if (ret != 0) { PMD_DRV_LOG(ERR, "nfp flow item %d exact merge failed", item->type); break; } - ret = proc->merge(nfp_flow, mbuf_off_mask, item, + ret = proc->merge(app_fw_flower, nfp_flow, mbuf_off_mask, item, proc, true, is_outer_layer); if (ret != 0) { PMD_DRV_LOG(ERR, "nfp flow item %d mask merge failed", item->type); @@ -1476,7 +1573,7 @@ struct nfp_mask_id_entry { } static int -nfp_flow_compile_items(__rte_unused struct nfp_flower_representor *representor, +nfp_flow_compile_items(struct nfp_flower_representor *representor, const struct rte_flow_item items[], struct rte_flow *nfp_flow) { @@ -1507,7 +1604,7 @@ struct nfp_mask_id_entry { is_outer_layer = false; /* Go over items */ - ret = nfp_flow_compile_item_proc(loop_item, nfp_flow, + ret = nfp_flow_compile_item_proc(representor, loop_item, nfp_flow, &mbuf_off_exact, &mbuf_off_mask, is_outer_layer); if (ret != 0) { PMD_DRV_LOG(ERR, "nfp flow item compile failed."); @@ -1516,7 +1613,7 @@ struct nfp_mask_id_entry { /* Go over inner items */ if (is_tun_flow) { - ret = nfp_flow_compile_item_proc(items, nfp_flow, + ret = nfp_flow_compile_item_proc(representor, items, nfp_flow, &mbuf_off_exact, &mbuf_off_mask, true); if (ret != 0) { PMD_DRV_LOG(ERR, "nfp flow outer item compile failed."); @@ -1891,6 +1988,59 @@ struct nfp_mask_id_entry { return nfp_flower_cmsg_tun_neigh_v4_rule(app_fw_flower, &payload); } +__rte_unused static int +nfp_flower_add_tun_neigh_v4_decap(struct nfp_app_fw_flower *app_fw_flower, + struct rte_flow *nfp_flow) +{ + struct nfp_fl_tun *tmp; + struct nfp_fl_tun *tun; + struct nfp_flow_priv *priv; + struct nfp_flower_ipv4 *ipv4; + struct nfp_flower_mac_mpls *eth; + struct nfp_flower_in_port *port; + struct nfp_flower_meta_tci *meta_tci; + struct nfp_flower_cmsg_tun_neigh_v4 payload; + + meta_tci = (struct nfp_flower_meta_tci *)nfp_flow->payload.unmasked_data; + port = (struct nfp_flower_in_port *)(meta_tci + 1); + eth = (struct nfp_flower_mac_mpls *)(port + 1); + + if (meta_tci->nfp_flow_key_layer & NFP_FLOWER_LAYER_TP) + ipv4 = (struct nfp_flower_ipv4 *)((char *)eth + + sizeof(struct nfp_flower_mac_mpls) + + sizeof(struct nfp_flower_tp_ports)); + else + ipv4 = (struct nfp_flower_ipv4 *)((char *)eth + + sizeof(struct nfp_flower_mac_mpls)); + + tun = &nfp_flow->tun; + tun->payload.v6_flag = 0; + tun->payload.dst.dst_ipv4 = ipv4->ipv4_src; + tun->payload.src.src_ipv4 = ipv4->ipv4_dst; + memcpy(tun->payload.dst_addr, eth->mac_src, RTE_ETHER_ADDR_LEN); + memcpy(tun->payload.src_addr, eth->mac_dst, RTE_ETHER_ADDR_LEN); + + tun->ref_cnt = 1; + priv = app_fw_flower->flow_priv; + LIST_FOREACH(tmp, &priv->nn_list, next) { + if (memcmp(&tmp->payload, &tun->payload, sizeof(struct nfp_fl_tun_entry)) == 0) { + tmp->ref_cnt++; + return 0; + } + } + + LIST_INSERT_HEAD(&priv->nn_list, tun, next); + + memset(&payload, 0, sizeof(struct nfp_flower_cmsg_tun_neigh_v4)); + payload.dst_ipv4 = ipv4->ipv4_src; + payload.src_ipv4 = ipv4->ipv4_dst; + memcpy(payload.common.dst_mac, eth->mac_src, RTE_ETHER_ADDR_LEN); + memcpy(payload.common.src_mac, eth->mac_dst, RTE_ETHER_ADDR_LEN); + payload.common.port_id = port->in_port; + + return nfp_flower_cmsg_tun_neigh_v4_rule(app_fw_flower, &payload); +} + static int nfp_flower_del_tun_neigh_v4(struct nfp_app_fw_flower *app_fw_flower, rte_be32_t ipv4) @@ -2108,6 +2258,200 @@ struct nfp_mask_id_entry { actions, vxlan_data, nfp_flow_meta, tun); } +static struct nfp_pre_tun_entry * +nfp_pre_tun_table_search(struct nfp_flow_priv *priv, + char *hash_data, + uint32_t hash_len) +{ + int index; + uint32_t hash_key; + struct nfp_pre_tun_entry *mac_index; + + hash_key = rte_jhash(hash_data, hash_len, priv->hash_seed); + index = rte_hash_lookup_data(priv->pre_tun_table, &hash_key, (void **)&mac_index); + if (index < 0) { + PMD_DRV_LOG(DEBUG, "Data NOT found in the hash table"); + return NULL; + } + + return mac_index; +} + +static bool +nfp_pre_tun_table_add(struct nfp_flow_priv *priv, + char *hash_data, + uint32_t hash_len) +{ + int ret; + uint32_t hash_key; + + hash_key = rte_jhash(hash_data, hash_len, priv->hash_seed); + ret = rte_hash_add_key_data(priv->pre_tun_table, &hash_key, hash_data); + if (ret != 0) { + PMD_DRV_LOG(ERR, "Add to pre tunnel table failed"); + return false; + } + + return true; +} + +static bool +nfp_pre_tun_table_delete(struct nfp_flow_priv *priv, + char *hash_data, + uint32_t hash_len) +{ + int ret; + uint32_t hash_key; + + hash_key = rte_jhash(hash_data, hash_len, priv->hash_seed); + ret = rte_hash_del_key(priv->pre_tun_table, &hash_key); + if (ret < 0) { + PMD_DRV_LOG(ERR, "Delete from pre tunnel table failed"); + return false; + } + + return true; +} + +__rte_unused static int +nfp_pre_tun_table_check_add(struct nfp_flower_representor *repr, + uint16_t *index) +{ + uint16_t i; + uint32_t entry_size; + uint16_t mac_index = 1; + struct nfp_flow_priv *priv; + struct nfp_pre_tun_entry *entry; + struct nfp_pre_tun_entry *find_entry; + + priv = repr->app_fw_flower->flow_priv; + if (priv->pre_tun_cnt >= NFP_TUN_PRE_TUN_RULE_LIMIT) { + PMD_DRV_LOG(ERR, "Pre tunnel table has full"); + return -EINVAL; + } + + entry_size = sizeof(struct nfp_pre_tun_entry); + entry = rte_zmalloc("nfp_pre_tun", entry_size, 0); + if (entry == NULL) { + PMD_DRV_LOG(ERR, "Memory alloc failed for pre tunnel table"); + return -ENOMEM; + } + + entry->ref_cnt = 1U; + memcpy(entry->mac_addr, repr->mac_addr.addr_bytes, RTE_ETHER_ADDR_LEN); + + /* 0 is considered a failed match */ + for (i = 1; i < NFP_TUN_PRE_TUN_RULE_LIMIT; i++) { + if (priv->pre_tun_bitmap[i] == 0) + continue; + entry->mac_index = i; + find_entry = nfp_pre_tun_table_search(priv, (char *)entry, entry_size); + if (find_entry != NULL) { + find_entry->ref_cnt++; + *index = find_entry->mac_index; + rte_free(entry); + return 0; + } + } + + for (i = 1; i < NFP_TUN_PRE_TUN_RULE_LIMIT; i++) { + if (priv->pre_tun_bitmap[i] == 0) { + priv->pre_tun_bitmap[i] = 1U; + mac_index = i; + break; + } + } + + entry->mac_index = mac_index; + if (!nfp_pre_tun_table_add(priv, (char *)entry, entry_size)) { + rte_free(entry); + return -EINVAL; + } + + *index = entry->mac_index; + priv->pre_tun_cnt++; + return 0; +} + +static int +nfp_pre_tun_table_check_del(struct nfp_flower_representor *repr, + struct rte_flow *nfp_flow) +{ + uint16_t i; + int ret = 0; + uint32_t entry_size; + uint16_t nfp_mac_idx; + struct nfp_flow_priv *priv; + struct nfp_pre_tun_entry *entry; + struct nfp_pre_tun_entry *find_entry; + struct nfp_fl_rule_metadata *nfp_flow_meta; + + priv = repr->app_fw_flower->flow_priv; + if (priv->pre_tun_cnt == 1) + return 0; + + entry_size = sizeof(struct nfp_pre_tun_entry); + entry = rte_zmalloc("nfp_pre_tun", entry_size, 0); + if (entry == NULL) { + PMD_DRV_LOG(ERR, "Memory alloc failed for pre tunnel table"); + return -ENOMEM; + } + + entry->ref_cnt = 1U; + memcpy(entry->mac_addr, repr->mac_addr.addr_bytes, RTE_ETHER_ADDR_LEN); + + /* 0 is considered a failed match */ + for (i = 1; i < NFP_TUN_PRE_TUN_RULE_LIMIT; i++) { + if (priv->pre_tun_bitmap[i] == 0) + continue; + entry->mac_index = i; + find_entry = nfp_pre_tun_table_search(priv, (char *)entry, entry_size); + if (find_entry != NULL) { + find_entry->ref_cnt--; + if (find_entry->ref_cnt != 0) + goto free_entry; + priv->pre_tun_bitmap[i] = 0; + break; + } + } + + nfp_flow_meta = nfp_flow->payload.meta; + nfp_mac_idx = (find_entry->mac_index << 8) | + NFP_FLOWER_CMSG_PORT_TYPE_OTHER_PORT | + NFP_TUN_PRE_TUN_IDX_BIT; + ret = nfp_flower_cmsg_tun_mac_rule(repr->app_fw_flower, &repr->mac_addr, + nfp_mac_idx, true); + if (ret != 0) { + PMD_DRV_LOG(ERR, "Send tunnel mac rule failed"); + ret = -EINVAL; + goto free_entry; + } + + ret = nfp_flower_cmsg_pre_tunnel_rule(repr->app_fw_flower, nfp_flow_meta, + nfp_mac_idx, true); + if (ret != 0) { + PMD_DRV_LOG(ERR, "Send pre tunnel rule failed"); + ret = -EINVAL; + goto free_entry; + } + + find_entry->ref_cnt = 1U; + if (!nfp_pre_tun_table_delete(priv, (char *)find_entry, entry_size)) { + PMD_DRV_LOG(ERR, "Delete entry from pre tunnel table failed"); + ret = -EINVAL; + goto free_entry; + } + + rte_free(entry); + rte_free(find_entry); + priv->pre_tun_cnt--; + +free_entry: + rte_free(entry); + + return ret; +} + static int nfp_flow_compile_action(struct nfp_flower_representor *representor, const struct rte_flow_action actions[], @@ -2149,6 +2493,9 @@ struct nfp_mask_id_entry { case RTE_FLOW_ACTION_TYPE_RSS: PMD_DRV_LOG(DEBUG, "Process RTE_FLOW_ACTION_TYPE_RSS"); break; + case RTE_FLOW_ACTION_TYPE_JUMP: + PMD_DRV_LOG(DEBUG, "Process RTE_FLOW_ACTION_TYPE_JUMP"); + break; case RTE_FLOW_ACTION_TYPE_PORT_ID: PMD_DRV_LOG(DEBUG, "Process RTE_FLOW_ACTION_TYPE_PORT_ID"); ret = nfp_flow_action_output(position, action, nfp_flow_meta); @@ -2569,6 +2916,15 @@ struct nfp_mask_id_entry { /* Delete the entry from nn table */ ret = nfp_flower_del_tun_neigh(app_fw_flower, nfp_flow); break; + case NFP_FLOW_DECAP: + /* Delete the entry from nn table */ + ret = nfp_flower_del_tun_neigh(app_fw_flower, nfp_flow); + if (ret != 0) + goto exit; + + /* Delete the entry in pre tunnel table */ + ret = nfp_pre_tun_table_check_del(representor, nfp_flow); + break; default: PMD_DRV_LOG(ERR, "Invalid nfp flow type %d.", nfp_flow->type); ret = -EINVAL; @@ -2578,6 +2934,10 @@ struct nfp_mask_id_entry { if (ret != 0) goto exit; + /* Delete the ip off */ + if (nfp_flow_is_tunnel(nfp_flow)) + nfp_tun_check_ip_off_del(representor, nfp_flow); + /* Delete the flow from hardware */ if (nfp_flow->install_flag) { ret = nfp_flower_cmsg_flow_delete(app_fw_flower, nfp_flow); @@ -2707,6 +3067,49 @@ struct nfp_mask_id_entry { return 0; } +static int +nfp_flow_tunnel_decap_set(__rte_unused struct rte_eth_dev *dev, + struct rte_flow_tunnel *tunnel, + struct rte_flow_action **pmd_actions, + uint32_t *num_of_actions, + __rte_unused struct rte_flow_error *err) +{ + struct rte_flow_action *nfp_action; + + nfp_action = rte_zmalloc("nfp_tun_action", sizeof(struct rte_flow_action), 0); + if (nfp_action == NULL) { + PMD_DRV_LOG(ERR, "Alloc memory for nfp tunnel action failed."); + return -ENOMEM; + } + + switch (tunnel->type) { + default: + *pmd_actions = NULL; + *num_of_actions = 0; + rte_free(nfp_action); + break; + } + + return 0; +} + +static int +nfp_flow_tunnel_action_decap_release(__rte_unused struct rte_eth_dev *dev, + struct rte_flow_action *pmd_actions, + uint32_t num_of_actions, + __rte_unused struct rte_flow_error *err) +{ + uint32_t i; + struct rte_flow_action *nfp_action; + + for (i = 0; i < num_of_actions; i++) { + nfp_action = &pmd_actions[i]; + rte_free(nfp_action); + } + + return 0; +} + static const struct rte_flow_ops nfp_flow_ops = { .validate = nfp_flow_validate, .create = nfp_flow_create, @@ -2715,6 +3118,8 @@ struct nfp_mask_id_entry { .query = nfp_flow_query, .tunnel_match = nfp_flow_tunnel_match, .tunnel_item_release = nfp_flow_tunnel_item_release, + .tunnel_decap_set = nfp_flow_tunnel_decap_set, + .tunnel_action_decap_release = nfp_flow_tunnel_action_decap_release, }; int @@ -2759,6 +3164,15 @@ struct nfp_mask_id_entry { .extra_flag = RTE_HASH_EXTRA_FLAGS_RW_CONCURRENCY, }; + struct rte_hash_parameters pre_tun_hash_params = { + .name = "pre_tunnel_table", + .entries = 32, + .hash_func = rte_jhash, + .socket_id = rte_socket_id(), + .key_len = sizeof(uint32_t), + .extra_flag = RTE_HASH_EXTRA_FLAGS_RW_CONCURRENCY, + }; + ctx_count = nfp_rtsym_read_le(pf_dev->sym_tbl, "CONFIG_FC_HOST_CTX_COUNT", &ret); if (ret < 0) { @@ -2839,11 +3253,27 @@ struct nfp_mask_id_entry { goto free_mask_table; } + /* pre tunnel table */ + priv->pre_tun_cnt = 1; + pre_tun_hash_params.hash_func_init_val = priv->hash_seed; + priv->pre_tun_table = rte_hash_create(&pre_tun_hash_params); + if (priv->pre_tun_table == NULL) { + PMD_INIT_LOG(ERR, "Pre tunnel table creation failed"); + ret = -ENOMEM; + goto free_flow_table; + } + + /* ipv4 off list */ + rte_spinlock_init(&priv->ipv4_off_lock); + LIST_INIT(&priv->ipv4_off_list); + /* neighbor next list */ LIST_INIT(&priv->nn_list); return 0; +free_flow_table: + rte_hash_free(priv->flow_table); free_mask_table: rte_free(priv->mask_table); free_stats: @@ -2867,6 +3297,7 @@ struct nfp_mask_id_entry { app_fw_flower = NFP_PRIV_TO_APP_FW_FLOWER(pf_dev->app_fw_priv); priv = app_fw_flower->flow_priv; + rte_hash_free(priv->pre_tun_table); rte_hash_free(priv->flow_table); rte_hash_free(priv->mask_table); rte_free(priv->stats); diff --git a/drivers/net/nfp/nfp_flow.h b/drivers/net/nfp/nfp_flow.h index 14da800..84a3005 100644 --- a/drivers/net/nfp/nfp_flow.h +++ b/drivers/net/nfp/nfp_flow.h @@ -6,6 +6,7 @@ #ifndef _NFP_FLOW_H_ #define _NFP_FLOW_H_ +#include #include #define NFP_FLOWER_LAYER_EXT_META (1 << 0) @@ -92,6 +93,7 @@ enum nfp_flower_tun_type { enum nfp_flow_type { NFP_FLOW_COMMON, NFP_FLOW_ENCAP, + NFP_FLOW_DECAP, }; struct nfp_fl_key_ls { @@ -168,6 +170,14 @@ struct nfp_fl_stats { uint64_t bytes; }; +struct nfp_ipv4_addr_entry { + LIST_ENTRY(nfp_ipv4_addr_entry) next; + rte_be32_t ipv4_addr; + int ref_count; +}; + +#define NFP_TUN_PRE_TUN_RULE_LIMIT 32 + struct nfp_flow_priv { uint32_t hash_seed; /**< Hash seed for hash tables in this structure. */ uint64_t flower_version; /**< Flow version, always increase. */ @@ -183,6 +193,13 @@ struct nfp_flow_priv { struct nfp_fl_stats_id stats_ids; /**< The stats id ring. */ struct nfp_fl_stats *stats; /**< Store stats of flow. */ rte_spinlock_t stats_lock; /** < Lock the update of 'stats' field. */ + /* pre tunnel rule */ + uint16_t pre_tun_cnt; /**< The size of pre tunnel rule */ + uint8_t pre_tun_bitmap[NFP_TUN_PRE_TUN_RULE_LIMIT]; /**< Bitmap of pre tunnel rule */ + struct rte_hash *pre_tun_table; /**< Hash table to store pre tunnel rule */ + /* IPv4 off */ + LIST_HEAD(, nfp_ipv4_addr_entry) ipv4_off_list; /**< Store ipv4 off */ + rte_spinlock_t ipv4_off_lock; /**< Lock the ipv4 off list */ /* neighbor next */ LIST_HEAD(, nfp_fl_tun)nn_list; /**< Store nn entry */ }; From patchwork Tue Oct 18 03:22:22 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 118319 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 69F49A0560; Tue, 18 Oct 2022 05:23:58 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 5150A427F9; Tue, 18 Oct 2022 05:23:18 +0200 (CEST) Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2123.outbound.protection.outlook.com [40.107.244.123]) by mails.dpdk.org (Postfix) with ESMTP id B5F5442685 for ; Tue, 18 Oct 2022 05:23:16 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YrFFd2Cg9VxJ7QIcwbggP54ae5+ALwekOchSvBxL6p8tLYMPDKwPHUKs0ryqB5p1mLs4/cFXe6+jemVSibSNvF7Z5IceDh9uLqBLLKaW6vkUB1F9V5g3iqiUKXvPp6t8XVQqq4HB6sBbLoPrbX6a8uCeGY6kYX0tDy2gPMW9uqubXqJLee8dp7tZKWFaVlpSQAxMfLxHyzHFfXxnt+fDrTOys/771gFmn0EAuGtcvbABoP/8IjSqKjo3THGhZuBnagy4j18BkWYLPyIvfgsjPaSq72wSoiWP6zIEn+hhcAYpu0QuIMNYkEqVCNJVUo+iC4mhqS2TapsHe/fwILjpaQ== 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=XkvZHnKd23qJTWtyPZUemdzdBjMgd8d8hzLzYD5w70I=; b=fCwpwBo+HQxpLFdqMRZy3+FPzATP9YaW4Lwii+d1CLakl5zJ5R8nt3yCt+rwbp4Ebu9b5BagOCSfVU52HlGBscdsddVFIHVNRTk9Ky8IOOf1ePWArS2HjaUUKPUMKtBbb6IDOdTGNpzSYSbGtb2WcCv8LBJx7w1YmHekc4l5KdK5IkCmi6ZZl++wCgbDHrJ34NDFKrfPXlxdV6R81WzUGMRG1u2NXURr4PLO93OdMg/j6vwMls4WNZ9c2qq/7f8zlagG0ZLFW3z2ioj5Xi05BQLYb1vwbrQGfynR0R+5IcgBMvgt2hxU+VwFi2KRyi0jLVEM04fhp1Zt+NHdMOevnA== 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=XkvZHnKd23qJTWtyPZUemdzdBjMgd8d8hzLzYD5w70I=; b=WHdY3onGJ9cXqpvacc86U/oq1ljJ0BpTZ4yq2I1Mttui+THm5d3Fkobnl/qz4A+DRNa02kNyyzzK7Ia7ZiiMjchk4gAzhLHIeuQMdzo8m6NvJ3WgSi3R9GNibVAKnE6lkvU4HnteKOReW4v/GRUzrEiHAt2ZDEEwjEfV28vx6KY= 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 BL3PR13MB5147.namprd13.prod.outlook.com (2603:10b6:208:33a::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.20; Tue, 18 Oct 2022 03:23:15 +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:15 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH 08/25] net/nfp: prepare for the decap action of IPv6 UDP tunnel Date: Tue, 18 Oct 2022 11:22:22 +0800 Message-Id: <1666063359-34283-9-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> 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_|BL3PR13MB5147:EE_ X-MS-Office365-Filtering-Correlation-Id: ba8102c0-d2bd-4512-5d6b-08dab0b817e9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 7VDwx9Kv782JE/7+WVdWDecD9qBvhtxx0e8J2Z7mfTHYX2ogxld3F+kIX8pl8CiZY8pTnoS3SAcXRWT7JVVawrJrFD9wkhEyp+ZWA/I8sRAM0Zir2GBJFBplBTPOfgXKMLruDp+etvnDbs+AE5pcw7QoDy/Ec0ntRJ/NFNYjyWr5RvQqM/iGZefnG2VWZox0L/xHEmEfTccKXMXWI5fALHAn9oXUfjynLjsZKUzYLKnogW7wO5MsNmOBIzqbeb9IT3omYMYwLExksI2w23ghjKuK/8fVJaqqFDqnYoqDWebeKmQsXNzZZDNKWM6TLzSosXt7mVtTHoXUhXPwigtTnNq/MmUJaoq4avFEysjYfocRrCw7j8zQ01SFhfrBEdLQ+R53dzIWjv2rggUAGAkWH5pfLJWvBtHTo/CJpQSWYce492giu3sPuD7463YW34pioX0h52DEtZMOnQJrMXy7H24nOASscQmkWTDKEKw0671b6vMQrWLJOmwWHmSLGs+EmVrYmhUq8jL6L1hHJ1w9v+CGdIFBWBGxgIFnap6QluTQCgARbfCJHnwdze0F/TbXblqHFipty8ez5VqxD/hXFohurKmy2bJ+/+yJkvZCzZsMsxKNGmTKk9KicxPp6gS3mfbCXJcalD2stwtA3l+lr7HjXzkanEt8TwkCLkTopatBERnHcHNfVcjHvEoj633O9FsnU6TLK+/YL2WJNYT1RAcRa8I1RfAk/Gx2fyQXSJ3v/m21Yxm446/qD83EUSm9 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)(366004)(346002)(39840400004)(396003)(376002)(451199015)(36756003)(4326008)(66946007)(6916009)(316002)(5660300002)(30864003)(66476007)(66556008)(38100700002)(38350700002)(86362001)(107886003)(6666004)(6486002)(478600001)(26005)(6512007)(6506007)(52116002)(41300700001)(8936002)(2906002)(44832011)(8676002)(83380400001)(186003)(66574015)(2616005); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?66YjT5Yk5yJ4FflAiW/ZorCwL8S0?= =?utf-8?q?xdA6V4Sb5IzvFBJv9uy5nJYR68NrDOVO5cWmlnYBmt8ILkrr9zSLyLUbmSb0IU0ae?= =?utf-8?q?xrQ5P8vCeO6nWfN678sSU7OTvkHJMld2DwmmlPJAUweooBIhSP6gy9rEiHIzR6U21?= =?utf-8?q?XDi5kg2x2XSpAadlULPQQp0FUGI9NO5yasj2zxBxSEBRSUt1dZrDePUrRrsR9ig1Y?= =?utf-8?q?LIZkgMlf0XlvUkvwTAGUoSsUnkHJGi4zJyI7oIvDbCUH0l55yQemycOSPMQF+7CDL?= =?utf-8?q?xqVdechG6rkkl7JKDFwzn3dSoywCHLJVwt88zMPLLwcTuPK0qbWhTkEA1sg87xUO/?= =?utf-8?q?/4bzGko+susyqjzqSmy+iMgDk7H/O6MgeLRZOZe5VSzwQQEiwPRDd8vVXXM+VFVpZ?= =?utf-8?q?j4z7J+3sHGdVoCNhlm6bLhIMsvynakh8pw5q8S8YCl85HGB9HjPiKnw0owXN/VkN3?= =?utf-8?q?VpTtqWlWgOlhdVj8bI0+xNK+NgSNh2xekWYOQmhuY4n5CkzFBaIZ53nyJ5ujeCqDI?= =?utf-8?q?/8PmPOa0y8JfJXHvqSHCNRm5C7C5uSD4pVUWLN/B31tLiPcFRcVMVYForIwLJD2sb?= =?utf-8?q?WwtCrCF1Vp9acda38zS18ZoQqdVKpEK3WthNcPiLaA/VyP+ZDwDywCyLCZRLpMzcH?= =?utf-8?q?cojcJxCvQFWK8as2EBWMtObxo+B4GWwC+Y2RRUbXnGridaKjN07cgGbOD3bdBXBjv?= =?utf-8?q?eRIRgBV+e/okzFX+4pxc7w5HCPgpyL5nsXNVXZVfeZi4yCMQWkNMa0+UpTauneYQR?= =?utf-8?q?duLgZr+MVnQiAJa2MXwN6ClZAy5x6bTeNUbJHkdT3Qn/73ls/c9s/Ca68wiSqFdtY?= =?utf-8?q?3EcZf/qUEUJk+YMhR6JKolLtzMQA+m/e8Zta11auhMxKM9PIHCHusLF0XrsvNFIYb?= =?utf-8?q?/hwI+0luzdFquQRnV+16rbQUhpESS8v94aunKgkAdyO95LtV6aS2NNJAf8ASMRObJ?= =?utf-8?q?UBAVzCbxjt9DbQKeoB1UmORCnx+UI5YO0Nd39eRCDIN2/92QD5O9zfOOZcnm7lp1J?= =?utf-8?q?LspLha8CZjOb2+BRTGRvM1P++/esMvCu52ZADQFJdy53zUOhlawm6A2Xm+2b6hgJF?= =?utf-8?q?7FvCSWVzRTXIw+w6LebZOLgQntFTjRj8FqRj+3HuzTKRz6sn4K2WzFR1qxrOZU6FP?= =?utf-8?q?UPh5DxDaJ06gHs7fFY0J1pzn0ne1pxhwQg3XKeKpRvY/tv2Ox4P3JTiDp2bMUcSxD?= =?utf-8?q?HFWt322N8osdqjxBMoKiBuTXWu9vDzD+CpaVL4v28ZmBYS+eqA1M0ncN1kIMorzB6?= =?utf-8?q?vzqinXNGy3fu6hJ9XGbCA8DbnVkwZadj3VnCgAwItlc19RYWx+IlpomLr6/J2SHlM?= =?utf-8?q?y3xMbxbJckNKYQOJiSg9Yp0Gbi+gR7n1Z+IJCHjVxoTvf3Kyf477zCMvUQYzguVxv?= =?utf-8?q?S4N17b1g8qJwoECqOrS98Hey2uzhN4Oev7ZfbSdbPKmJ2qgZLuy4HyIDmHfhZ4F9Q?= =?utf-8?q?dYnsYQL5Ov7+KdAymHv0t16zTdGYsX7nNMigeOt9kDVpJn1lcnpMimqDJk4AwFXM7?= =?utf-8?q?0E75szYGFWeriKnw5sdS7RVgP8r2x4WoLA=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: ba8102c0-d2bd-4512-5d6b-08dab0b817e9 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:14.9237 (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: 4TBvL05WWQbkYesjgG2D/8JQ9gcL2Rxv/oGB2FOMl+yF8wlewBv9P90SwXRCNdWEGilTq9X8rumuu1qRRZRLMCQw75oi+Zhtk8XmEvflTtc= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL3PR13MB5147 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 related data structure and functions, prepare for the decap action of IPv6 UDP tunnel. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- drivers/net/nfp/flower/nfp_flower_cmsg.c | 42 +++++++++ drivers/net/nfp/flower/nfp_flower_cmsg.h | 24 +++++ drivers/net/nfp/nfp_flow.c | 145 ++++++++++++++++++++++++++++++- drivers/net/nfp/nfp_flow.h | 9 ++ 4 files changed, 217 insertions(+), 3 deletions(-) diff --git a/drivers/net/nfp/flower/nfp_flower_cmsg.c b/drivers/net/nfp/flower/nfp_flower_cmsg.c index f18f3de..76815cf 100644 --- a/drivers/net/nfp/flower/nfp_flower_cmsg.c +++ b/drivers/net/nfp/flower/nfp_flower_cmsg.c @@ -348,6 +348,48 @@ } int +nfp_flower_cmsg_tun_off_v6(struct nfp_app_fw_flower *app_fw_flower) +{ + uint16_t cnt; + uint32_t count = 0; + struct rte_mbuf *mbuf; + struct nfp_flow_priv *priv; + struct nfp_ipv6_addr_entry *entry; + struct nfp_flower_cmsg_tun_ipv6_addr *msg; + + mbuf = rte_pktmbuf_alloc(app_fw_flower->ctrl_pktmbuf_pool); + if (mbuf == NULL) { + PMD_DRV_LOG(DEBUG, "Failed to alloc mbuf for v6 tun addr"); + return -ENOMEM; + } + + msg = nfp_flower_cmsg_init(mbuf, NFP_FLOWER_CMSG_TYPE_TUN_IPS_V6, sizeof(*msg)); + + priv = app_fw_flower->flow_priv; + rte_spinlock_lock(&priv->ipv6_off_lock); + LIST_FOREACH(entry, &priv->ipv6_off_list, next) { + if (count >= NFP_FL_IPV6_ADDRS_MAX) { + rte_spinlock_unlock(&priv->ipv6_off_lock); + PMD_DRV_LOG(ERR, "IPv6 offload exceeds limit."); + return -ERANGE; + } + memcpy(&msg->ipv6_addr[count * 16], entry->ipv6_addr, 16UL); + count++; + } + msg->count = rte_cpu_to_be_32(count); + rte_spinlock_unlock(&priv->ipv6_off_lock); + + cnt = nfp_flower_ctrl_vnic_xmit(app_fw_flower, mbuf); + if (cnt == 0) { + PMD_DRV_LOG(ERR, "Send cmsg through ctrl vnic failed."); + rte_pktmbuf_free(mbuf); + return -EIO; + } + + return 0; +} + +int nfp_flower_cmsg_pre_tunnel_rule(struct nfp_app_fw_flower *app_fw_flower, struct nfp_fl_rule_metadata *nfp_flow_meta, uint16_t mac_idx, diff --git a/drivers/net/nfp/flower/nfp_flower_cmsg.h b/drivers/net/nfp/flower/nfp_flower_cmsg.h index 0933dac..61f2f83 100644 --- a/drivers/net/nfp/flower/nfp_flower_cmsg.h +++ b/drivers/net/nfp/flower/nfp_flower_cmsg.h @@ -280,6 +280,29 @@ struct nfp_flower_cmsg_tun_ipv4_addr { rte_be32_t ipv4_addr[NFP_FL_IPV4_ADDRS_MAX]; }; +#define NFP_FL_IPV6_ADDRS_MAX 4 + +/* + * NFP_FLOWER_CMSG_TYPE_TUN_IP_V6 + * Bit 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 + * -----\ 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + * +---------------------------------------------------------------+ + * 0 | Number of IP Addresses | + * +---------------------------------------------------------------+ + * 1 | IP Address1 #1 | + * +---------------------------------------------------------------+ + * 2 | IP Address1 #2 | + * +---------------------------------------------------------------+ + * | ... | + * +---------------------------------------------------------------+ + * 16 | IP Address4 #4 | + * +---------------------------------------------------------------+ + */ +struct nfp_flower_cmsg_tun_ipv6_addr { + rte_be32_t count; + uint8_t ipv6_addr[NFP_FL_IPV6_ADDRS_MAX * 16]; +}; + /* * NFP_FLOWER_CMSG_TYPE_FLOW_STATS * Bit 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 @@ -802,6 +825,7 @@ int nfp_flower_cmsg_tun_neigh_v4_rule(struct nfp_app_fw_flower *app_fw_flower, int nfp_flower_cmsg_tun_neigh_v6_rule(struct nfp_app_fw_flower *app_fw_flower, struct nfp_flower_cmsg_tun_neigh_v6 *payload); int nfp_flower_cmsg_tun_off_v4(struct nfp_app_fw_flower *app_fw_flower); +int nfp_flower_cmsg_tun_off_v6(struct nfp_app_fw_flower *app_fw_flower); int nfp_flower_cmsg_pre_tunnel_rule(struct nfp_app_fw_flower *app_fw_flower, struct nfp_fl_rule_metadata *nfp_flow_meta, uint16_t mac_idx, diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index 816c733..cc63aa5 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -487,16 +487,95 @@ struct nfp_pre_tun_entry { return 0; } +__rte_unused static int +nfp_tun_add_ipv6_off(struct nfp_app_fw_flower *app_fw_flower, + uint8_t ipv6[]) +{ + struct nfp_flow_priv *priv; + struct nfp_ipv6_addr_entry *entry; + struct nfp_ipv6_addr_entry *tmp_entry; + + priv = app_fw_flower->flow_priv; + + rte_spinlock_lock(&priv->ipv6_off_lock); + LIST_FOREACH(entry, &priv->ipv6_off_list, next) { + if (!memcmp(entry->ipv6_addr, ipv6, sizeof(entry->ipv6_addr))) { + entry->ref_count++; + rte_spinlock_unlock(&priv->ipv6_off_lock); + return 0; + } + } + rte_spinlock_unlock(&priv->ipv6_off_lock); + + tmp_entry = rte_zmalloc("nfp_ipv6_off", sizeof(struct nfp_ipv6_addr_entry), 0); + if (tmp_entry == NULL) { + PMD_DRV_LOG(ERR, "Mem error when offloading IP6 address."); + return -ENOMEM; + } + memcpy(tmp_entry->ipv6_addr, ipv6, sizeof(tmp_entry->ipv6_addr)); + tmp_entry->ref_count = 1; + + rte_spinlock_lock(&priv->ipv6_off_lock); + LIST_INSERT_HEAD(&priv->ipv6_off_list, tmp_entry, next); + rte_spinlock_unlock(&priv->ipv6_off_lock); + + return nfp_flower_cmsg_tun_off_v6(app_fw_flower); +} + +static int +nfp_tun_del_ipv6_off(struct nfp_app_fw_flower *app_fw_flower, + uint8_t ipv6[]) +{ + struct nfp_flow_priv *priv; + struct nfp_ipv6_addr_entry *entry; + + priv = app_fw_flower->flow_priv; + + rte_spinlock_lock(&priv->ipv6_off_lock); + LIST_FOREACH(entry, &priv->ipv6_off_list, next) { + if (!memcmp(entry->ipv6_addr, ipv6, sizeof(entry->ipv6_addr))) { + entry->ref_count--; + if (entry->ref_count == 0) { + LIST_REMOVE(entry, next); + rte_free(entry); + rte_spinlock_unlock(&priv->ipv6_off_lock); + return nfp_flower_cmsg_tun_off_v6(app_fw_flower); + } + break; + } + } + rte_spinlock_unlock(&priv->ipv6_off_lock); + + return 0; +} + static int nfp_tun_check_ip_off_del(struct nfp_flower_representor *repr, struct rte_flow *nfp_flow) { int ret; + uint32_t key_layer2 = 0; struct nfp_flower_ipv4_udp_tun *udp4; + struct nfp_flower_ipv6_udp_tun *udp6; + struct nfp_flower_meta_tci *meta_tci; + struct nfp_flower_ext_meta *ext_meta = NULL; - udp4 = (struct nfp_flower_ipv4_udp_tun *)(nfp_flow->payload.mask_data - - sizeof(struct nfp_flower_ipv4_udp_tun)); - ret = nfp_tun_del_ipv4_off(repr->app_fw_flower, udp4->ipv4.dst); + meta_tci = (struct nfp_flower_meta_tci *)nfp_flow->payload.unmasked_data; + if (meta_tci->nfp_flow_key_layer & NFP_FLOWER_LAYER_EXT_META) + ext_meta = (struct nfp_flower_ext_meta *)(meta_tci + 1); + + if (ext_meta != NULL) + key_layer2 = rte_be_to_cpu_32(ext_meta->nfp_flow_key_layer2); + + if (key_layer2 & NFP_FLOWER_LAYER2_TUN_IPV6) { + udp6 = (struct nfp_flower_ipv6_udp_tun *)(nfp_flow->payload.mask_data - + sizeof(struct nfp_flower_ipv6_udp_tun)); + ret = nfp_tun_del_ipv6_off(repr->app_fw_flower, udp6->ipv6.ipv6_dst); + } else { + udp4 = (struct nfp_flower_ipv4_udp_tun *)(nfp_flow->payload.mask_data - + sizeof(struct nfp_flower_ipv4_udp_tun)); + ret = nfp_tun_del_ipv4_off(repr->app_fw_flower, udp4->ipv4.dst); + } return ret; } @@ -2096,6 +2175,59 @@ struct nfp_pre_tun_entry { return nfp_flower_cmsg_tun_neigh_v6_rule(app_fw_flower, &payload); } +__rte_unused static int +nfp_flower_add_tun_neigh_v6_decap(struct nfp_app_fw_flower *app_fw_flower, + struct rte_flow *nfp_flow) +{ + struct nfp_fl_tun *tmp; + struct nfp_fl_tun *tun; + struct nfp_flow_priv *priv; + struct nfp_flower_ipv6 *ipv6; + struct nfp_flower_mac_mpls *eth; + struct nfp_flower_in_port *port; + struct nfp_flower_meta_tci *meta_tci; + struct nfp_flower_cmsg_tun_neigh_v6 payload; + + meta_tci = (struct nfp_flower_meta_tci *)nfp_flow->payload.unmasked_data; + port = (struct nfp_flower_in_port *)(meta_tci + 1); + eth = (struct nfp_flower_mac_mpls *)(port + 1); + + if (meta_tci->nfp_flow_key_layer & NFP_FLOWER_LAYER_TP) + ipv6 = (struct nfp_flower_ipv6 *)((char *)eth + + sizeof(struct nfp_flower_mac_mpls) + + sizeof(struct nfp_flower_tp_ports)); + else + ipv6 = (struct nfp_flower_ipv6 *)((char *)eth + + sizeof(struct nfp_flower_mac_mpls)); + + tun = &nfp_flow->tun; + tun->payload.v6_flag = 1; + memcpy(tun->payload.dst.dst_ipv6, ipv6->ipv6_src, sizeof(tun->payload.dst.dst_ipv6)); + memcpy(tun->payload.src.src_ipv6, ipv6->ipv6_dst, sizeof(tun->payload.src.src_ipv6)); + memcpy(tun->payload.dst_addr, eth->mac_src, RTE_ETHER_ADDR_LEN); + memcpy(tun->payload.src_addr, eth->mac_dst, RTE_ETHER_ADDR_LEN); + + tun->ref_cnt = 1; + priv = app_fw_flower->flow_priv; + LIST_FOREACH(tmp, &priv->nn_list, next) { + if (memcmp(&tmp->payload, &tun->payload, sizeof(struct nfp_fl_tun_entry)) == 0) { + tmp->ref_cnt++; + return 0; + } + } + + LIST_INSERT_HEAD(&priv->nn_list, tun, next); + + memset(&payload, 0, sizeof(struct nfp_flower_cmsg_tun_neigh_v6)); + memcpy(payload.dst_ipv6, ipv6->ipv6_src, sizeof(payload.dst_ipv6)); + memcpy(payload.src_ipv6, ipv6->ipv6_dst, sizeof(payload.src_ipv6)); + memcpy(payload.common.dst_mac, eth->mac_src, RTE_ETHER_ADDR_LEN); + memcpy(payload.common.src_mac, eth->mac_dst, RTE_ETHER_ADDR_LEN); + payload.common.port_id = port->in_port; + + return nfp_flower_cmsg_tun_neigh_v6_rule(app_fw_flower, &payload); +} + static int nfp_flower_del_tun_neigh_v6(struct nfp_app_fw_flower *app_fw_flower, uint8_t *ipv6) @@ -2419,6 +2551,9 @@ struct nfp_pre_tun_entry { nfp_mac_idx = (find_entry->mac_index << 8) | NFP_FLOWER_CMSG_PORT_TYPE_OTHER_PORT | NFP_TUN_PRE_TUN_IDX_BIT; + if (nfp_flow->tun.payload.v6_flag != 0) + nfp_mac_idx |= NFP_TUN_PRE_TUN_IPV6_BIT; + ret = nfp_flower_cmsg_tun_mac_rule(repr->app_fw_flower, &repr->mac_addr, nfp_mac_idx, true); if (ret != 0) { @@ -3267,6 +3402,10 @@ struct nfp_pre_tun_entry { rte_spinlock_init(&priv->ipv4_off_lock); LIST_INIT(&priv->ipv4_off_list); + /* ipv6 off list */ + rte_spinlock_init(&priv->ipv6_off_lock); + LIST_INIT(&priv->ipv6_off_list); + /* neighbor next list */ LIST_INIT(&priv->nn_list); diff --git a/drivers/net/nfp/nfp_flow.h b/drivers/net/nfp/nfp_flow.h index 84a3005..1b4a51f 100644 --- a/drivers/net/nfp/nfp_flow.h +++ b/drivers/net/nfp/nfp_flow.h @@ -176,6 +176,12 @@ struct nfp_ipv4_addr_entry { int ref_count; }; +struct nfp_ipv6_addr_entry { + LIST_ENTRY(nfp_ipv6_addr_entry) next; + uint8_t ipv6_addr[16]; + int ref_count; +}; + #define NFP_TUN_PRE_TUN_RULE_LIMIT 32 struct nfp_flow_priv { @@ -200,6 +206,9 @@ struct nfp_flow_priv { /* IPv4 off */ LIST_HEAD(, nfp_ipv4_addr_entry) ipv4_off_list; /**< Store ipv4 off */ rte_spinlock_t ipv4_off_lock; /**< Lock the ipv4 off list */ + /* IPv6 off */ + LIST_HEAD(, nfp_ipv6_addr_entry) ipv6_off_list; /**< Store ipv6 off */ + rte_spinlock_t ipv6_off_lock; /**< Lock the ipv6 off list */ /* neighbor next */ LIST_HEAD(, nfp_fl_tun)nn_list; /**< Store nn entry */ }; From patchwork Tue Oct 18 03:22:23 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 118320 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 8472FA0560; Tue, 18 Oct 2022 05:24:07 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A2ED242B75; Tue, 18 Oct 2022 05:23:21 +0200 (CEST) Received: from NAM11-BN8-obe.outbound.protection.outlook.com (mail-bn8nam11on2100.outbound.protection.outlook.com [40.107.236.100]) by mails.dpdk.org (Postfix) with ESMTP id 752D24281C for ; Tue, 18 Oct 2022 05:23:18 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=l8yeXG7NAqVIwwe5elGgAhqnqCHbt7gegUb/Rrpy6gpO/sg4mWZx0o2lwegd/L6uZntq4BBRPOjRKj6D5Rp+IDmimt6hYIuaQ0vLB+CZnQxpM3pJmDkXRITi1iZGQWCKTTTKg5uzG/nSws1lcFHopXnfnJS2T2xrfR2OelPfwxXzcGFVjAE56jpkNZkN0VvUovb40xw++o3+JMz4hxgejttoQkYoVrVVM5E9Yi1iRniNKaeOZ1bdZ2N7+9KsPZ5953txL2hobCq1KAl+u8JmRn0ZeObjywCC+SHShi9Z7vtMG0iI/h1fF25ROb0f52skqkaKvP9TioSQK6cpeqJHgQ== 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=Q1RctE7RW6zm49k0fiVkf3fCeerSHSPl2pQ3kKYyz64=; b=VvPyarKfggNoC6nJuYKAEixEXbtq0iVtOaxSnkyv3ctONRrgLdFU7lKPwoZoIa5w6xb61GeQcbpQsnnYN0LQCpt/p+pme8Rsd4AazY+VB0mZdzw/5vxwTqOoDzf+JSUHaGGjZWmKC41uowArrBYVHbWkf39b9lB3MGdzf1TSv6Nhs7erp1OhfMT4IxLtvd0fQgzVuFsqtqlxxjwA2RJTeVW9E7QF4fHekS/rqr+SsImYKFynxHQccKsnvttKhZ1PtCJaJc1O2bTNbWDhOg//84flVfplrA+2t9Zhjg/GjsthijVZjEsDEBI7o+aG9aFLRBpjTEaOlFf1zC/6QuYEjw== 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=Q1RctE7RW6zm49k0fiVkf3fCeerSHSPl2pQ3kKYyz64=; b=p/gEe6P/BgijmSfgzwdbfPFgTbqjuUHmrBlnVcwKTKlS4fqnNMreQFlV3/oNwzLg3BpjF25Ecj3QGFZLyUnjRyNivmFTwlFb6zv3goirqm0Pmz2CS1tPnXp1Fa1XOt//T3kN7rUapTP5bhFmjNLFSsnSfBim4ARdF6xZilmf63Y= 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 BL3PR13MB5147.namprd13.prod.outlook.com (2603:10b6:208:33a::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.20; Tue, 18 Oct 2022 03:23:16 +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:16 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH 09/25] net/nfp: add the offload support of IPv4 VXLAN decap action Date: Tue, 18 Oct 2022 11:22:23 +0800 Message-Id: <1666063359-34283-10-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> 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_|BL3PR13MB5147:EE_ X-MS-Office365-Filtering-Correlation-Id: fbe321a9-738c-4bc5-1aad-08dab0b81905 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: E+0aQEsLDmpwJY6+gflCiWIdsIM32ykFHuVGG0TOnVVcdrHWxMvCcdsWCIrwykPM0sl47SK2yCfguwIAX3d1Bmfe/OMKgXutciBzw66AcuXis1yz7SCuR9vw1GnzZZf1/he8axejTl0XwcWbsrFIuR7QiqusPjajNL3KtFyC9zqGLC4beQ800VFu2W74yUTO++VB+l0qvvHdDY1GE4DBnKNPLsF/xSsLgjB/wTcnxwqy6iU7JGs5DVJm8kA7pfGsfDg+RNMAv4eXzoXIpFLWxyrQkuaXxJu1RhzxsRRFQyIsAYk2lRxb2kZCNUebIpK40lifEk6CfXRB2sKirn/0Trw3h+X5S4Wn95D0hUujxueRcYWERFbylvhIvfB2pLq+u54XWLjXF+fdB0bx3+ZkezM+5KpsKhKAhx1iGbJsZ/4QnyTLaMpH0Rcski+PWFPRSnPNyqB/XOlrCJkGHn/wjStEggEenVKunrth4adiBg+P0SgpXGDapXzk/5I4MoZEN5OHWFXctw0dQeaqhYlTax0S0CqqctJa86SkwZE48UouplFQt3LmNCe/QR+docL3TQIeznY0B8kBUrsiitzb0c8i1cnVzqN9M1hITMO2KUzSncadQIyif2y94aWm1na2WzziHpRiaccD4HHRuo8/SRYO5Znj6bwqG+fHI/shM710Nd6jf0sk+dryFjprbmCnIzkbwEomBGA0HH/NhfG8n64lXW2cXNlqF1X/1mOVuEMfg8rup0C1TwUFoVL6sVuov4ce5iL3KX2qNrDO04HPeA== 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)(366004)(346002)(39840400004)(396003)(376002)(451199015)(36756003)(4326008)(66946007)(6916009)(316002)(5660300002)(66476007)(66556008)(38100700002)(38350700002)(86362001)(107886003)(6666004)(6486002)(478600001)(26005)(6512007)(6506007)(52116002)(41300700001)(8936002)(2906002)(44832011)(8676002)(83380400001)(186003)(2616005); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?oXSFnRrzPCkKDob124cu9WYQiO5M?= =?utf-8?q?gChnVnmTD+CIu7iv/718YzmeuIail4UMmw2/SEMVSMqAk5ClF5J4LuKUJtUX0zpbV?= =?utf-8?q?6JtJm0HCAv4Lgmi6adhk4Ghf68xR6sZRrTHsugZmTr/F29plGRcMhXiINwxI+BNcz?= =?utf-8?q?joM4FSWsv/nL0VeGorCSeLnbaPTqRvFJTMajojfJ85iKtjIBK3ev1kh0C2/RbqSpv?= =?utf-8?q?urqAchNOBsdRsdLDG23abiD3783IPGhq0/MkVnkqogGkRVzY7OC06iu+pFvdHyfmo?= =?utf-8?q?tlQQkWdbDsUdu6WsmSlFEZExkoGyhClTdCFqwBOwWA2+9AX9WGPQ568+Ll8zeZi+e?= =?utf-8?q?zAawn3rLhxUrPUy2m1bfXUmx8dUqU103W44ET49vWO148Zzmwz1W2d9QWO3ZCMyjJ?= =?utf-8?q?4ZxDp3P5FAJ+sgFwZV3IWdcCiqEFUTe/47pdiyFo9eDiM6FrcdFYoGcLDrvArSgrd?= =?utf-8?q?QKf8qE77YXYgUK2yOnQsDYDu/RQM08JXPP/SLDv4k+lDoF24q1FuGB2JhActBzNYy?= =?utf-8?q?tDaaI0PwU6LAFJDxWDeX50IyU0tccuiEK/vv9dWDEXiesZQoAdqtyRBnHIS2PaDPf?= =?utf-8?q?cBYdGAXMoVpc7h5UqzeiDnijUfSpoHIUTLdcawh4e6E7EM6CM6/pRpht+KE7yOFUo?= =?utf-8?q?BI9bf+7nZz0DIs1ZjRAMsCVfNsXEyxNiEkXf9ckGPQX6CyEDrd9B7E0ZRrewdZJ4y?= =?utf-8?q?9xUj5i/xtD9/b5dahQrkf39tfFCwRTLx8m/+zLkWfjFhrSSthNc0E3bfeYuT8CwUW?= =?utf-8?q?LOowzfrui/F6zi/pvzHum4crC9G9edod219eP8fFDtPsTuDTRb7nBsUydNdhRBEvL?= =?utf-8?q?Ry663lB38gI8Wf0Lfa5p+5Y5Bd2JgT0wYmCvE5JIwvCOXSFrY+4Gnc9kc3GYCRFSo?= =?utf-8?q?WUhT4ioFP1dGFh/9Ec7rzKcxwOHpJyFEDZGX6n2k1RIKZvhRDJ0KYJm9ZJWFuGepb?= =?utf-8?q?SGk2Hn4zVacfcyJ9pk8db4yqXeq1ET4lgfccdOfzbwsOefPLPitMT0TuHtNgAKoI+?= =?utf-8?q?Yj38+3LUPxgiU/faudnOW88c3NQmPorGbaFMKyqnPCGRwR7QoGbVyex2PFGI/P8Ir?= =?utf-8?q?VFaoQQ+fTOuFg2CmzgTGgjrVKCQc+ClKMl4vC2YW27snIBFsriFDKuXVseK9EtP/j?= =?utf-8?q?QE4ykI6bCXBSKCgjtEIe/WKHvoUGS+FksmsKu91UnTLlgSPb0/u9x1ewwUxVTtrpJ?= =?utf-8?q?VUBCttTEV9l1nzCTUTJAZvfiqS6ARxQG+ZfghUMHD4bc91cI6BGhoTphlZghj/bOo?= =?utf-8?q?9y5oWYTagdJ4Z9SMAc9RyXm2Szdn/uhwmPtyvPKFjC1GYP7SyNrdA5Q5OaGCOSNvq?= =?utf-8?q?1PII5kdXScviPoGXYpvLidHdCugAcwvcmLYr/gCg/0Ezl3aKO3fUQpmoSTIxgN8QG?= =?utf-8?q?uCb7d11tD+pZBPja4n7BbGvwi07lUROM5Dt+ncq+PV9Ib9PtVGIjC7tlz/bc0KIqv?= =?utf-8?q?+BlP2NZEE4Dm1K4i7ohuzXtD9og/xQl4n2bV9w+cyKoWJt+BSsHXgjsog8Pyyywzm?= =?utf-8?q?t0c9dQnIPGZvtpD8WmEbMNuwc1RKYZMfzA=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: fbe321a9-738c-4bc5-1aad-08dab0b81905 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:16.7832 (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: v/LBujSluObeIEcXLtGzSPOS84M7sBDoHIhW2pkAwgG0AFUdPAnzsvvHZSQTYjoOb9BdcLH4ddV8xTntMRhFaK33rRZEnNeEyzkzv3baaiY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL3PR13MB5147 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 offload support of decap action for IPv4 VXLAN tunnel. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- doc/guides/nics/features/nfp.ini | 1 + drivers/net/nfp/nfp_flow.c | 75 +++++++++++++++++++++++++++++++++++++--- 2 files changed, 71 insertions(+), 5 deletions(-) diff --git a/doc/guides/nics/features/nfp.ini b/doc/guides/nics/features/nfp.ini index fbfd5ba..3b5b052 100644 --- a/doc/guides/nics/features/nfp.ini +++ b/doc/guides/nics/features/nfp.ini @@ -58,4 +58,5 @@ set_mac_src = Y set_tp_dst = Y set_tp_src = Y set_ttl = Y +vxlan_decap = Y vxlan_encap = Y diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index cc63aa5..0578679 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -424,7 +424,7 @@ struct nfp_pre_tun_entry { return 0; } -__rte_unused static int +static int nfp_tun_add_ipv4_off(struct nfp_app_fw_flower *app_fw_flower, rte_be32_t ipv4) { @@ -926,6 +926,9 @@ struct nfp_pre_tun_entry { key_ls->act_size += sizeof(struct nfp_fl_act_pre_tun); key_ls->act_size += sizeof(struct nfp_fl_act_set_tun); break; + case RTE_FLOW_ACTION_TYPE_VXLAN_DECAP: + PMD_DRV_LOG(DEBUG, "RTE_FLOW_ACTION_TYPE_VXLAN_DECAP detected"); + break; default: PMD_DRV_LOG(ERR, "Action type %d not supported.", action->type); return -ENOTSUP; @@ -1333,7 +1336,7 @@ struct nfp_pre_tun_entry { } static int -nfp_flow_merge_vxlan(__rte_unused struct nfp_app_fw_flower *app_fw_flower, +nfp_flow_merge_vxlan(struct nfp_app_fw_flower *app_fw_flower, struct rte_flow *nfp_flow, char **mbuf_off, const struct rte_flow_item *item, @@ -1341,6 +1344,7 @@ struct nfp_pre_tun_entry { bool is_mask, __rte_unused bool is_outer_layer) { + int ret = 0; const struct rte_vxlan_hdr *hdr; struct nfp_flower_ipv4_udp_tun *tun4; struct nfp_flower_ipv6_udp_tun *tun6; @@ -1369,6 +1373,8 @@ struct nfp_pre_tun_entry { } else { tun4 = (struct nfp_flower_ipv4_udp_tun *)*mbuf_off; tun4->tun_id = hdr->vx_vni; + if (!is_mask) + ret = nfp_tun_add_ipv4_off(app_fw_flower, tun4->ipv4.dst); } vxlan_end: @@ -1378,7 +1384,7 @@ struct nfp_pre_tun_entry { else *mbuf_off += sizeof(struct nfp_flower_ipv4_udp_tun); - return 0; + return ret; } /* Graph of supported items and associated process function */ @@ -2067,7 +2073,7 @@ struct nfp_pre_tun_entry { return nfp_flower_cmsg_tun_neigh_v4_rule(app_fw_flower, &payload); } -__rte_unused static int +static int nfp_flower_add_tun_neigh_v4_decap(struct nfp_app_fw_flower *app_fw_flower, struct rte_flow *nfp_flow) { @@ -2445,7 +2451,7 @@ struct nfp_pre_tun_entry { return true; } -__rte_unused static int +static int nfp_pre_tun_table_check_add(struct nfp_flower_representor *repr, uint16_t *index) { @@ -2588,6 +2594,49 @@ struct nfp_pre_tun_entry { } static int +nfp_flow_action_tunnel_decap(struct nfp_flower_representor *repr, + __rte_unused const struct rte_flow_action *action, + struct nfp_fl_rule_metadata *nfp_flow_meta, + struct rte_flow *nfp_flow) +{ + int ret; + uint16_t nfp_mac_idx = 0; + struct nfp_flower_meta_tci *meta_tci; + struct nfp_app_fw_flower *app_fw_flower; + + ret = nfp_pre_tun_table_check_add(repr, &nfp_mac_idx); + if (ret != 0) { + PMD_DRV_LOG(ERR, "Pre tunnel table add failed"); + return -EINVAL; + } + + nfp_mac_idx = (nfp_mac_idx << 8) | + NFP_FLOWER_CMSG_PORT_TYPE_OTHER_PORT | + NFP_TUN_PRE_TUN_IDX_BIT; + + app_fw_flower = repr->app_fw_flower; + ret = nfp_flower_cmsg_tun_mac_rule(app_fw_flower, &repr->mac_addr, + nfp_mac_idx, false); + if (ret != 0) { + PMD_DRV_LOG(ERR, "Send tunnel mac rule failed"); + return -EINVAL; + } + + ret = nfp_flower_cmsg_pre_tunnel_rule(app_fw_flower, nfp_flow_meta, + nfp_mac_idx, false); + if (ret != 0) { + PMD_DRV_LOG(ERR, "Send pre tunnel rule failed"); + return -EINVAL; + } + + meta_tci = (struct nfp_flower_meta_tci *)nfp_flow->payload.unmasked_data; + if (meta_tci->nfp_flow_key_layer & NFP_FLOWER_LAYER_IPV4) + return nfp_flower_add_tun_neigh_v4_decap(app_fw_flower, nfp_flow); + else + return -ENOTSUP; +} + +static int nfp_flow_compile_action(struct nfp_flower_representor *representor, const struct rte_flow_action actions[], struct rte_flow *nfp_flow) @@ -2768,6 +2817,17 @@ struct nfp_pre_tun_entry { position += sizeof(struct nfp_fl_act_set_tun); nfp_flow->type = NFP_FLOW_ENCAP; break; + case RTE_FLOW_ACTION_TYPE_VXLAN_DECAP: + PMD_DRV_LOG(DEBUG, "process RTE_FLOW_ACTION_TYPE_TUNNEL_DECAP"); + ret = nfp_flow_action_tunnel_decap(representor, action, + nfp_flow_meta, nfp_flow); + if (ret != 0) { + PMD_DRV_LOG(ERR, "Failed when process tunnel decap"); + return ret; + } + nfp_flow->type = NFP_FLOW_DECAP; + nfp_flow->install_flag = false; + break; default: PMD_DRV_LOG(ERR, "Unsupported action type: %d", action->type); return -ENOTSUP; @@ -3218,6 +3278,11 @@ struct nfp_pre_tun_entry { } switch (tunnel->type) { + case RTE_FLOW_ITEM_TYPE_VXLAN: + nfp_action->type = RTE_FLOW_ACTION_TYPE_VXLAN_DECAP; + *pmd_actions = nfp_action; + *num_of_actions = 1; + break; default: *pmd_actions = NULL; *num_of_actions = 0; From patchwork Tue Oct 18 03:22:24 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 118321 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 5EF0CA0560; Tue, 18 Oct 2022 05:24:16 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 1CDB54284D; Tue, 18 Oct 2022 05:23:28 +0200 (CEST) Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2109.outbound.protection.outlook.com [40.107.92.109]) by mails.dpdk.org (Postfix) with ESMTP id 5C4A741145 for ; Tue, 18 Oct 2022 05:23:26 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Sn4jPoGKkuX0IzBBxhxD1byouECofiEUWGhHJKY56DwCpioBtYKfZdqUfdHIcUbhjRb1TZKZqMMPQ+/kBV2CCzSd38AXev0DO+RftV6Qn7v1zR0Amt5H+OPkRPF156jltoAfIYNGBMd87e/X+kHmcnPIQiVdpvpWBFr2NuwcrZinXc5i9j2RMEHpclhCuoedy4VeUrCDoG3e2q2KpCYsKSBEVUiyFubX/9vGDolMFqI46dQVfCVnV9JVDsJg1RRjisyYJjOGaKIcxYpvN+lSfSfb2kVjilb1o/e9C7UuWceLZZhG8Gl8auBOWrydOBwtF+sZyzU0P5WaHdclbqVXhA== 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=ljSkeaF57yEZJ3TbWPPlqwbQ+hkuEjey0T+ZaR4os28=; b=TbQOI1A1ZRkQZImswYjdB3YMW4bcKwWsn2hLulLvzKAWdQM2tf9cie//Pbl7Qe7s8DqPIs1ksVoNnNkFIC9LGzWbSu0czjT5sbbyhORa+QrvaKLP5JyXvdzde4dmj73PpDBGsevuXNaSMCfuQI1EOdSBZCXR3YPeeVIISKENj4t2vIbi4GEA6y2xIqajG1gjHiKFzEjSPGh46lfOCacM5GDCYiBtONCC5SCzyKnHoQgukT0c9lRXwvLjjxHJfDz0FhXujtj04chBubXpTzkPoo95RxYLgMd7VHx0FDY/PkuDz8bm4HpfXJA91rvl6lLBerwpJYYf9nR2nlEKQYfXmg== 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=ljSkeaF57yEZJ3TbWPPlqwbQ+hkuEjey0T+ZaR4os28=; b=X5lhHFwW4npzyysJb+laWd7+TT07JiydiI3FCcXIXPof3sYoqeVoJjeqwL5KMAQ5iRFTajL/QLLv/16QxPdy+5iQg6p1fFZEE6CnJQhw7vPt3yR+6Lb7KdWBPvOj2y9czWnFmaUe7ScUoaqkA/kB5gHIISQLgfsRdjFj4hWlun8= 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 BL3PR13MB5147.namprd13.prod.outlook.com (2603:10b6:208:33a::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.20; Tue, 18 Oct 2022 03:23:18 +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:18 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH 10/25] net/nfp: add the offload support of IPv6 VXLAN decap action Date: Tue, 18 Oct 2022 11:22:24 +0800 Message-Id: <1666063359-34283-11-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> 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_|BL3PR13MB5147:EE_ X-MS-Office365-Filtering-Correlation-Id: a8c22b09-1610-4579-c457-08dab0b81a20 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 4aEuONO9vtr+62zla1fiuGAOdzE+ndyDYC/XYX+45REEIwjuoG208XK1AAUo/s9itlxprOuL2suyxQYpBwQze9n0bmKlscnoQfNvgKJBXi1TqPrx6bf+9HrHvux8tF4r4E9GPxyel8th3wEZanXpn8AzcZAl7PNjEucEMJyQ94aoBZmM5dd5RJ2mFmP6ZqCyhNCVK2cCPWPAsg3JjuzAGP9VqIlSI4G7jfnMhLOYhJr0DqX5n8m6e0yH/h3whlLFND5a6zl0Y6ydQrjOBKsZtJeaky0cq0ADIZPUq2OgXa2EYfzDXq6gGQa3bVoy85C/tjJbp5XnWt84RffiDPfhV6qTBsD7I4r5otqbFUJtVwaF5i2hHf7mQ4AalOKRHSAPSijORf2eBnPJ8RHvc/kjZzBL0ZP8GYEsybvmjLv1QUHOVnObUX7x4OrCO1VEiqGOoPtUqgg1IrgZ9toO8RhrSo4Op4Epv7Nr7ssWZmXzGPZfwKYyj72aAIE5jshmmOcU2T22UQtrdzK2EDZm6UaMajUiIPNkEoS51hgXq2M59v+5bJcZY20teEylCdFFJe/8P6kkNbBatgAsk0NHMMR1ccYg8oGySW/X5ro8OTbTfjuh8zJjdWNqLdeyVrMcpk1b7GNzB/u2bPLKtPjkhj2VBz7YDR0S87gxjWTIGklpkG1Aq+feXY/z7AeNx1Kl6g6pnUuSJ1yyd0Nk0qATYyJMYs/wShNlCZFk/VyQbUYpkH/pvhz3SHvLbygWRHcBlLd9w7os2PgriRI6rBfjBQXuNA== 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)(366004)(346002)(39840400004)(396003)(376002)(451199015)(36756003)(4326008)(66946007)(6916009)(316002)(5660300002)(66476007)(66556008)(38100700002)(38350700002)(86362001)(107886003)(6666004)(6486002)(478600001)(26005)(6512007)(6506007)(52116002)(41300700001)(8936002)(2906002)(44832011)(8676002)(83380400001)(186003)(2616005); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?NfEUlypFI6NBzKmF2D9FMl/K6BFP?= =?utf-8?q?X7aos779Aqp/drGLWII4M9PHjOc0fYMcHOgD0WEkd9s2jPx1cKcMd38lOKRDt+c2/?= =?utf-8?q?wn3ZFoAWoxcUe00gW+jl19Mf37kkW/v1jon8xk3E6H/fbmQCp/RJWvVX47/6r3Ci6?= =?utf-8?q?gQ/bzd3QgwYd/kyLqqqCSe05VNX7+6ed0U7exr0q0lqxEj9Qdwg5dj5PjKJ+pP+oJ?= =?utf-8?q?vVjwLVkItWchNhOOVu6dBqGvVCTorGd7FJg9kj0S6Uu+MggeKGpDx/FVgMgx00ER6?= =?utf-8?q?uwIU2vw97fyJ913HJJtFxZyw6yXu1wTj6qScWfT8XAMiXv50CnelC4dhokZnse8yT?= =?utf-8?q?tRjHxTJEy6yfTyBvQNdC3hk6Cdo7D0knxgzqsDGqfU3b9t9tOhLsR44tDsm3a6gBn?= =?utf-8?q?XUPtXekiFGaL5CyimzDMK3KdTG2aus7jSB8TgVjmINP+XN7cZSAhCOoLHg7m8D0DU?= =?utf-8?q?2t+hAkCDz6T8l1vSi4D9DDsmU5gzP2qkStYle80lRynTC6vdSvxYzMLzQc7Uk5ERe?= =?utf-8?q?jF21NiKyCL+KHdjiCRHlVdV4vejPK09hddL5I7sXtixYXAsuf3U2r3z+bWn2IISva?= =?utf-8?q?HJOC1eA7QARl68vPTEmSLGKtAOS82EMYQnTbsSVyUXNacJkBbwCQSNkTVaNJBCnph?= =?utf-8?q?NUAJRBOrrRVLQ3kkD0bpeocmEerYoDTIthXa7TtFzyACb6gT9kJmOwYPen5W46B99?= =?utf-8?q?OW6phWyEY0zXXy4aHkoWuga2GMnt1ivxxThIEpEaO912CguRmpGHX31Wd7a3UneI1?= =?utf-8?q?mtQAJQqO7jnfNL2MvpxKxJXbn00bI2ielHwzL6muPz40k1lXuDD1Wi9plrX5vUfOG?= =?utf-8?q?j91WwHHUb+ep4n1RREUBnsr0criznX5U+NZ2gsmzSq7K0bLO8wsyVW6wx+zDkTE0Y?= =?utf-8?q?cn5U5wlYXde8lZiCgPFp9zCOTTpdnbYYLhA6fE8eTbQJEvQtk0eUIw7Fk/pBgFL8e?= =?utf-8?q?ft/RtXDfHlnbXRBnCMYGHEGoWAogI8IOC6LTr3/jaCbGag74XgAt/XRcyiMF5XezB?= =?utf-8?q?VlTXFJ/VA+zDN8qDdAvnmc3U7+rGvUfXKugdrktUiUjkogUigCbxwsOF3tN7f52ui?= =?utf-8?q?bEURwf5A1s3e4g2zq1brmw7ZaYuG45EfsbWB6Hpy/Q1Ls1LAJzzVykoRFhpAW2obN?= =?utf-8?q?ziM+wMJYhPTho94R5ta/D84j6Leke1CeOfbghMKruMadMwHI25jbruvAbi7W/OuUd?= =?utf-8?q?n3j7wFDLrbfAaa3jKB+2zXwmhY4WwJAEF7Ky865kWrtI7WMKghVpLm9C9c+cKA3hu?= =?utf-8?q?qWIXC/IDUOoJffPhW518Ksw2Ztwj6m29pi22tx9mBbTdgmpcjp2tE1CFL0G0O9ZYZ?= =?utf-8?q?aw19xY7JASN7MiPug9f1eP3TFrjHITgV2tPwaRB0vz3lHq4MsGJiOcW3lUxzYS7Tr?= =?utf-8?q?f25CgYwdkY78htjINSr+Z1gDGBylQNFrDy1/y5df40xdwEi+/x/7/MvQh+EQyhpdX?= =?utf-8?q?5ftK+XX+9ZB1b3ihQy8tSN6XPora85/kq8e+0CcxXmDZwU+o07vZYQaqnaOw8GEDB?= =?utf-8?q?Be5iHo+me8RQJyvsUMCBo/1hGh84+qmTNg=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: a8c22b09-1610-4579-c457-08dab0b81a20 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:18.8154 (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: ayqWftS48vIFGNJqQbDu0/+JL4nQ6br7qvnYHiN7suFk4r63MgT8loNPa4fErYem/gliWR/DUpSaHLEf2BzyV7QttAxEnlSVaDa2o6Vyw0g= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL3PR13MB5147 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 offload support of decap action for IPv6 VXLAN tunnel. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- doc/guides/rel_notes/release_22_11.rst | 2 +- drivers/net/nfp/nfp_flow.c | 18 ++++++++++++++---- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/doc/guides/rel_notes/release_22_11.rst b/doc/guides/rel_notes/release_22_11.rst index 351fb02..49e92cc 100644 --- a/doc/guides/rel_notes/release_22_11.rst +++ b/doc/guides/rel_notes/release_22_11.rst @@ -184,7 +184,7 @@ New Features * Set the port number * Set the TTL * Set the DSCP of IPv4 and IPv6 - * Encap of VXLAN tunnel + * Encap and decap of VXLAN tunnel * **Updated NXP dpaa2 driver.** diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index 0578679..e212e96 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -487,7 +487,7 @@ struct nfp_pre_tun_entry { return 0; } -__rte_unused static int +static int nfp_tun_add_ipv6_off(struct nfp_app_fw_flower *app_fw_flower, uint8_t ipv6[]) { @@ -1370,6 +1370,8 @@ struct nfp_pre_tun_entry { NFP_FLOWER_LAYER2_TUN_IPV6)) { tun6 = (struct nfp_flower_ipv6_udp_tun *)*mbuf_off; tun6->tun_id = hdr->vx_vni; + if (!is_mask) + ret = nfp_tun_add_ipv6_off(app_fw_flower, tun6->ipv6.ipv6_dst); } else { tun4 = (struct nfp_flower_ipv4_udp_tun *)*mbuf_off; tun4->tun_id = hdr->vx_vni; @@ -2181,7 +2183,7 @@ struct nfp_pre_tun_entry { return nfp_flower_cmsg_tun_neigh_v6_rule(app_fw_flower, &payload); } -__rte_unused static int +static int nfp_flower_add_tun_neigh_v6_decap(struct nfp_app_fw_flower *app_fw_flower, struct rte_flow *nfp_flow) { @@ -2595,7 +2597,7 @@ struct nfp_pre_tun_entry { static int nfp_flow_action_tunnel_decap(struct nfp_flower_representor *repr, - __rte_unused const struct rte_flow_action *action, + const struct rte_flow_action *action, struct nfp_fl_rule_metadata *nfp_flow_meta, struct rte_flow *nfp_flow) { @@ -2613,6 +2615,8 @@ struct nfp_pre_tun_entry { nfp_mac_idx = (nfp_mac_idx << 8) | NFP_FLOWER_CMSG_PORT_TYPE_OTHER_PORT | NFP_TUN_PRE_TUN_IDX_BIT; + if (action->conf != NULL) + nfp_mac_idx |= NFP_TUN_PRE_TUN_IPV6_BIT; app_fw_flower = repr->app_fw_flower; ret = nfp_flower_cmsg_tun_mac_rule(app_fw_flower, &repr->mac_addr, @@ -2633,7 +2637,7 @@ struct nfp_pre_tun_entry { if (meta_tci->nfp_flow_key_layer & NFP_FLOWER_LAYER_IPV4) return nfp_flower_add_tun_neigh_v4_decap(app_fw_flower, nfp_flow); else - return -ENOTSUP; + return nfp_flower_add_tun_neigh_v6_decap(app_fw_flower, nfp_flow); } static int @@ -2827,6 +2831,8 @@ struct nfp_pre_tun_entry { } nfp_flow->type = NFP_FLOW_DECAP; nfp_flow->install_flag = false; + if (action->conf != NULL) + nfp_flow->tun.payload.v6_flag = 1; break; default: PMD_DRV_LOG(ERR, "Unsupported action type: %d", action->type); @@ -3277,6 +3283,9 @@ struct nfp_pre_tun_entry { return -ENOMEM; } + if (tunnel->is_ipv6) + nfp_action->conf = (void *)~0; + switch (tunnel->type) { case RTE_FLOW_ITEM_TYPE_VXLAN: nfp_action->type = RTE_FLOW_ACTION_TYPE_VXLAN_DECAP; @@ -3304,6 +3313,7 @@ struct nfp_pre_tun_entry { for (i = 0; i < num_of_actions; i++) { nfp_action = &pmd_actions[i]; + nfp_action->conf = NULL; rte_free(nfp_action); } From patchwork Tue Oct 18 03:22:25 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 118322 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id A2DCCA0560; Tue, 18 Oct 2022 05:24:22 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 05D5E41155; Tue, 18 Oct 2022 05:23:29 +0200 (CEST) Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2109.outbound.protection.outlook.com [40.107.92.109]) by mails.dpdk.org (Postfix) with ESMTP id 8B7584114B for ; Tue, 18 Oct 2022 05:23:26 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=BWHMwonQ//e82JxXm4kml6UiW/f8YbfMVLvpFmT2zWDpivjEGeK9MPbsn5Zl12mNajTk4xqYTbAUYDo37MeHoeQDick0QgzWluokKhKiNzN7mjgXdeMZXjpqTwP5O/Dgw+mSX3iguf0ETvcAwRH51xeI9koFkieT0GYvLMGd3eWU/lWocdai1EZMt9VKkPaaikp1H4fATUfsbXkeWTeJMlHUgJFe/iIpJHClO/6PeVDMTOZKoTYPRYvSKZe3tfUon0Q0wEu8S/4w1ji6BeQNdyv8Bz5jOAyhKEN81FpA2pVpGqTSk/iX6MjHVbTfaWwRq4N4wM8nvWXy4NacdjU6qw== 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=oka3cHiMEOHbxXL1sE1KTiQP3F1ZkaCxQuU1I1+O5Ps=; b=XNE37KnI7urd5ndflv9KS8kIR1vzG68nuXM5Ql/7L6sXKjHQhWrOfGw6L1Cb8plnqApIZpfl8ikhT0A8dNVnISOxYWP5oODqQBUfgyqO8dccxSMOvnfIZVZNsTdK6NgAT0xgOes6mp1EeLntyPPuuf5SIc11tHEcDikwiCLuuGRZS3OmGErOu+RlsjFTd0Z3eK86LG2b14MbbnCf61ep9TjI42/tn++XJm2HpLsQfNiMa2Fmtf3EUbdYCKzRkS0gfO4bzcboW/HID0nGaYhlWvSIa1OLRNwHVWgukA1bKoXKAwGCe/3U0+taIZI6NYd84x33BJVBczu/oG6SDPVxFw== 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=oka3cHiMEOHbxXL1sE1KTiQP3F1ZkaCxQuU1I1+O5Ps=; b=RQUdpZ7SiV+J8B/BhhEF7KbvpZ82bqxDOTj8tfeJ4dZwt5FxzzHGxIfZo79++SZZDTG7TMAkDoSOmxpvMJicapBQG8ZveZHz/BBFypnjEQuYlKQOnhrbN5ROClOBg8xecjx0tinZX6VqcY4RqDB6aergzle2fKj/8F9V5nB3+JI= 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 BL3PR13MB5147.namprd13.prod.outlook.com (2603:10b6:208:33a::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.20; Tue, 18 Oct 2022 03:23:20 +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:20 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH 11/25] net/nfp: add the offload support of IPv4 GENEVE encap action Date: Tue, 18 Oct 2022 11:22:25 +0800 Message-Id: <1666063359-34283-12-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> 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_|BL3PR13MB5147:EE_ X-MS-Office365-Filtering-Correlation-Id: d89c67e6-7aa0-4fd9-a29f-08dab0b81b5b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 6m7ecIzFQyeEnTM90WN5mu7vwh0PXLZBeteUyyLrOMEuCojayxpLmFyEoB7qMtQDqqnPtpkK5fY0c4aUkjiNUAMEMHopI4YqTHSEAAe75MUQ3hIWPj06kpp9edQOFguzj5ZL4aW7KfZb9cfWLNP/k5eYsBBbl3rPsfy/PIC/IyTbpiJuUHHKeuNNUTG++GwEH4tfXCYugCQ9/hZNTySMTEVKhIpoA3GcLbmHshSjB6Vgx9rff1vj2AA3pgdiDOCYvvuv3/S/AA8qZEhmXzcZOCsuagBwSa2j4GOB8carIRAONEaCnjmjdD2ZHShxA9TbGOMGTtkc45a8DetU4cabjr18OKjlKXvPvOMB+9dj6T2S5WXgSGchhHd2VyGOOviQWoXTbdgJOuc9b9UrUQx53l3SC710U42VwkOeBMmlTgYX2uaWCpj2e+bOu6spx7U/t3QZLfDvj960PJyV+YmWDxZmh5ocIdvQut16RHm5oenhjzZzHgwfjRXxiT2QrtEpzrgCULmIVc05SO3x+SFuA78AX76g6KPJr6UamdRrhEqT5DAA2ozbMMGs0+6UmaBQVCIOnqkK6yTUQKHDqvqu7Q9kh1ThumxipYY9RyaPI5/ctmxVzQWDCPgNZ23Q2Ps8RCRU2RSipi5ZkRe304zQB4d/eJ7lJV7N3+R1ai6BzPt43aE2C/wB/ffecmgtEW+IV/yuZxNrRVWVQ+gBnp/+fokbwJBUg+jfMZvyZ7WlGgiyaHMWZDjLdfnUohqbVhn5Ll2dIINNpVxZyUMhHJVLsQ== 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)(366004)(346002)(39840400004)(396003)(376002)(451199015)(36756003)(4326008)(66946007)(6916009)(316002)(5660300002)(66476007)(66556008)(38100700002)(38350700002)(86362001)(107886003)(6486002)(478600001)(26005)(6512007)(6506007)(52116002)(41300700001)(8936002)(2906002)(44832011)(8676002)(83380400001)(186003)(2616005); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?UecrA7PLmKz+kX3110zjnmy7yMnd?= =?utf-8?q?n6E1KEvzWO0oNoCrRgTSlbOpAcawSBCqq5kVdZXBE3tcxN4mY03j8G8/qp7VILos7?= =?utf-8?q?c1zilLNwwj5SP0ryWuFEcTUPUzn+shLBIItvX4Z5HTAw8P/GneuKRGrqLoxKg4UBm?= =?utf-8?q?d/+YWsytKp5iQnj9D8oeck0Ygchz4oeRMhqvchhaZA7teRHW0zh1XVVRzo2dFqkuV?= =?utf-8?q?nv4L9rCq9Kvr48uFU2UKVFFUmw3glaxK7YLXCZYY7C2D1/oqiMnVWYkl+PAy00IBN?= =?utf-8?q?Y/ihrYKNGUuyAb4UanYQF6FskZG3XrOZqCApzsVa0gSlS0G/7BKPeIrLMj25zQw7y?= =?utf-8?q?prXrZ7KLuMuzUVxtkLYkzn5CNmYPM3IWZlu4s+e1O+b7TK78/R/DCrn7kEZ93k4nc?= =?utf-8?q?+b+98HmUc3K9XBqRrCGUmd3zCLpau/moh0avtlvVrFigvAO/PcBW13sH5M30KIAZW?= =?utf-8?q?Pkophvvrh3/oax1R58jE95++Z1UuurYRPgQdkIn2d09dWJuRvKwwrSyO/LFoEoyrv?= =?utf-8?q?JgU2hi1FdpD0anagcebN/KsMylj6crEIHAarOd3LGAkwiWkuQd6w3ty6ML8ccF4Ex?= =?utf-8?q?rvwXt3+Z9FKGooZVtDQiHKQOszqWcpl9PGDpxSJvjdFFv4LuMakmhoikJl5xcS1aa?= =?utf-8?q?Yeue5iAacnVk8Vu3IGRN1/02SVfmPp1mIprUa2BYWHm545kUXcE08yyAKwMRD3ky2?= =?utf-8?q?HTKCPypuvkgD6YMsymWbMDnhsvskXt2uhO+RPFBkYgtCIF9VImZdbXq+hWhl7lZyv?= =?utf-8?q?wVfXdUsrlDPVyXJQ9Yo/ce4mIYZ8nLHFTWh+Wl+fCYzOLZpAEQbqutwIDCwHb7bw/?= =?utf-8?q?0AdEVykxbiLL6BGREd+WiNlMweInK4El2/jxt+krYgNhyhcrO8vpGBwOeXEOzVgHL?= =?utf-8?q?LQjSPYZo5/6oSCJWvrAfyWTd7h/4ph+tMSm/1OnTEdbM0Q9FzyKt//3EvO9Fy9ncz?= =?utf-8?q?6GBQgq1vITXHIIoE+kaRETASk+4AgILajtzLEUfEEpkc3RMrnTrW/a+G+5a4TOZVF?= =?utf-8?q?4m9ODXGJD6hXliORe9Ii+gx7GJleI6SBf0A9yNC7qBpsdi+IHCR9UuMHQPOgaZrK+?= =?utf-8?q?7e7hHDtnpWKm25CmyzjlBcX0gIT37qyXfOQtBbk0fR44xeO9Tu5utoiQOR/dq6SQ9?= =?utf-8?q?+bMDvtHlvlV/hPrbOyFiNHuGKr1cviCMz/WR3HxuC2QtSMwAgxDFSeTt0F9Y2CiuR?= =?utf-8?q?+Ahcp/69TOfi+pwHBCsNjVdO7s6rpwBqoTUyqQgsAjuACAmcq4mbaCoqnGdvM43IV?= =?utf-8?q?ohk1KSd0tkUVnGj07d+aRBqQEnYGCsb4teqQ5Tpte+VjU13WiLo9cjrZ9LYNmjhtO?= =?utf-8?q?v9oOQed4ISOeSZu1/YYYRI98UXOILW9tsMpSbRLJFU/qL3WIJPUzjuKUGZTSMwyof?= =?utf-8?q?YkxgenD0xn5Sl2b1egv8oMRbEwFXf2uiFSCYkuf3UCzmjoXCXi00e2cwwYApg9wIV?= =?utf-8?q?v5XieIKygJL0zxNhRoz4SV01Err2Dm6CYvWLTt7FE3W+olGYC4lFNoMym1JiwoM0w?= =?utf-8?q?QOn6NTkFxeuuQcsRT8j8o/AzEEXylwrtAA=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: d89c67e6-7aa0-4fd9-a29f-08dab0b81b5b 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:20.7229 (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: 3AXqUW9i3UaGGj3lkwChCAJdCNfjCtU1b/3+DZ7pLGtfTtE/nHEtH0gzC448eOHs8BDVahUCbfspGlyGnjpKDJTSGhuIP5md01MQPu4AALM= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL3PR13MB5147 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 offload support of encap action for IPv4 GENEVE tunnel. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- doc/guides/nics/features/nfp.ini | 1 + drivers/net/nfp/nfp_flow.c | 107 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 108 insertions(+) diff --git a/doc/guides/nics/features/nfp.ini b/doc/guides/nics/features/nfp.ini index 3b5b052..171b633 100644 --- a/doc/guides/nics/features/nfp.ini +++ b/doc/guides/nics/features/nfp.ini @@ -46,6 +46,7 @@ of_pop_vlan = Y of_push_vlan = Y of_set_vlan_pcp = Y of_set_vlan_vid = Y +raw_encap = Y port_id = Y set_ipv4_dscp = Y set_ipv4_dst = Y diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index e212e96..265c7e8 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -38,6 +38,12 @@ struct vxlan_data { __VA_ARGS__, RTE_FLOW_ITEM_TYPE_END, \ }) +/* Data length of various conf of raw encap action */ +#define GENEVE_V4_LEN (sizeof(struct rte_ether_hdr) + \ + sizeof(struct rte_ipv4_hdr) + \ + sizeof(struct rte_udp_hdr) + \ + sizeof(struct rte_flow_item_geneve)) + /* Process structure associated with a flow item */ struct nfp_flow_item_proc { /* Bit-mask for fields supported by this PMD. */ @@ -926,6 +932,11 @@ struct nfp_pre_tun_entry { key_ls->act_size += sizeof(struct nfp_fl_act_pre_tun); key_ls->act_size += sizeof(struct nfp_fl_act_set_tun); break; + case RTE_FLOW_ACTION_TYPE_RAW_ENCAP: + PMD_DRV_LOG(DEBUG, "RTE_FLOW_ACTION_TYPE_RAW_ENCAP detected"); + key_ls->act_size += sizeof(struct nfp_fl_act_pre_tun); + key_ls->act_size += sizeof(struct nfp_fl_act_set_tun); + break; case RTE_FLOW_ACTION_TYPE_VXLAN_DECAP: PMD_DRV_LOG(DEBUG, "RTE_FLOW_ACTION_TYPE_VXLAN_DECAP detected"); break; @@ -2641,6 +2652,88 @@ struct nfp_pre_tun_entry { } static int +nfp_flow_action_geneve_encap_v4(struct nfp_app_fw_flower *app_fw_flower, + char *act_data, + char *actions, + const struct rte_flow_action_raw_encap *raw_encap, + struct nfp_fl_rule_metadata *nfp_flow_meta, + struct nfp_fl_tun *tun) +{ + uint64_t tun_id; + const struct rte_ether_hdr *eth; + const struct rte_flow_item_udp *udp; + const struct rte_flow_item_ipv4 *ipv4; + const struct rte_flow_item_geneve *geneve; + struct nfp_fl_act_pre_tun *pre_tun; + struct nfp_fl_act_set_tun *set_tun; + size_t act_pre_size = sizeof(struct nfp_fl_act_pre_tun); + size_t act_set_size = sizeof(struct nfp_fl_act_set_tun); + + eth = (const struct rte_ether_hdr *)raw_encap->data; + ipv4 = (const struct rte_flow_item_ipv4 *)(eth + 1); + udp = (const struct rte_flow_item_udp *)(ipv4 + 1); + geneve = (const struct rte_flow_item_geneve *)(udp + 1); + + pre_tun = (struct nfp_fl_act_pre_tun *)actions; + memset(pre_tun, 0, act_pre_size); + nfp_flow_pre_tun_v4_process(pre_tun, ipv4->hdr.dst_addr); + + set_tun = (struct nfp_fl_act_set_tun *)(act_data + act_pre_size); + memset(set_tun, 0, act_set_size); + tun_id = (geneve->vni[0] << 16) | (geneve->vni[1] << 8) | geneve->vni[2]; + nfp_flow_set_tun_process(set_tun, NFP_FL_TUN_GENEVE, tun_id, + ipv4->hdr.time_to_live, ipv4->hdr.type_of_service); + set_tun->tun_proto = geneve->protocol; + + /* Send the tunnel neighbor cmsg to fw */ + return nfp_flower_add_tun_neigh_v4_encap(app_fw_flower, nfp_flow_meta, + tun, eth, ipv4); +} + +static int +nfp_flow_action_raw_encap(struct nfp_app_fw_flower *app_fw_flower, + char *act_data, + char *actions, + const struct rte_flow_action *action, + struct nfp_fl_rule_metadata *nfp_flow_meta, + struct nfp_fl_tun *tun) +{ + int ret; + size_t act_len; + size_t act_pre_size; + const struct rte_flow_action_raw_encap *raw_encap; + + raw_encap = action->conf; + if (raw_encap->data == NULL) { + PMD_DRV_LOG(ERR, "The raw encap action conf is NULL."); + return -EINVAL; + } + + /* Pre_tunnel action must be the first on action list. + * If other actions already exist, they need to be + * pushed forward. + */ + act_len = act_data - actions; + if (act_len != 0) { + act_pre_size = sizeof(struct nfp_fl_act_pre_tun); + memmove(actions + act_pre_size, actions, act_len); + } + + switch (raw_encap->size) { + case GENEVE_V4_LEN: + ret = nfp_flow_action_geneve_encap_v4(app_fw_flower, act_data, + actions, raw_encap, nfp_flow_meta, tun); + break; + default: + PMD_DRV_LOG(ERR, "Not an valid raw encap action conf."); + ret = -EINVAL; + break; + } + + return ret; +} + +static int nfp_flow_compile_action(struct nfp_flower_representor *representor, const struct rte_flow_action actions[], struct rte_flow *nfp_flow) @@ -2821,6 +2914,20 @@ struct nfp_pre_tun_entry { position += sizeof(struct nfp_fl_act_set_tun); nfp_flow->type = NFP_FLOW_ENCAP; break; + case RTE_FLOW_ACTION_TYPE_RAW_ENCAP: + PMD_DRV_LOG(DEBUG, "Process RTE_FLOW_ACTION_TYPE_RAW_ENCAP"); + ret = nfp_flow_action_raw_encap(representor->app_fw_flower, + position, action_data, action, nfp_flow_meta, + &nfp_flow->tun); + if (ret != 0) { + PMD_DRV_LOG(ERR, "Failed when process" + " RTE_FLOW_ACTION_TYPE_RAW_ENCAP"); + return ret; + } + position += sizeof(struct nfp_fl_act_pre_tun); + position += sizeof(struct nfp_fl_act_set_tun); + nfp_flow->type = NFP_FLOW_ENCAP; + break; case RTE_FLOW_ACTION_TYPE_VXLAN_DECAP: PMD_DRV_LOG(DEBUG, "process RTE_FLOW_ACTION_TYPE_TUNNEL_DECAP"); ret = nfp_flow_action_tunnel_decap(representor, action, From patchwork Tue Oct 18 03:22:26 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 118323 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id A4FECA0560; Tue, 18 Oct 2022 05:24:28 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id C833642B88; Tue, 18 Oct 2022 05:23:29 +0200 (CEST) Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2109.outbound.protection.outlook.com [40.107.92.109]) by mails.dpdk.org (Postfix) with ESMTP id BAEB641145 for ; Tue, 18 Oct 2022 05:23:26 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=j9uqIxfGKjKorcagUDe5yci1j84IYZGsxE5TJ0TcQcHCCyQLpBKFONnyRrJOTjnQOE4UtptKSzIfmDAOfQy+EtjJ8UVKlIWFKI0aw+KM+q7M8Qh7GJSvLppajXwWLjhmOg5EdTXHls8X2uXooPUsTBLVq7UFWsid52r+NuLQeCudSdS+dDkwGiAaLnUKOlUT87ihpgcs7QtaBhoa5FSjt2Ot61AZEAOJDb2wxcXI+tUpIqM/UwaT/k8pPMXWw08QuWKX1G3HcIoauJ0bgy2ZfSHNWWkcEO6iOGluxSEnI1KZYNa4LvdMo5GvO7UgxHvRclk1SgHKhxIbgC/6EZg62g== 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=7GHBLz1cR/VmFQTrIPDkcU7ajdKSd8zffLPogdhvviY=; b=SK60qhvrDd1pqvRY1sU5CJh9+iiZGnlCKVfuIdLFpkxMLnUqQKhwv3s15eCNAelSxdVjCXLjJYlWudiPUXnVLTCwPWs3sxT51jWvlMhH5Vp7EgGd1pSnUlJRvsHahs6TgDgVqzV5wxrF2H/LrGzA4FrOyBLy52i5+0m8P7/Xy5d5E3ho3jsaK4POKsgiVuDhceJklgUG9o8rLQx/UEZ6rbVVobvqJGhkSrVWMhjeyH5AY72mZQ0UCXsBoQlcJobqJcrlfSGdZx0v8xT2ZluUyCWex3ATluFwscznHtZnuHiIGcMTFqYGMsCbHskcqThU6Scw+BpssMosdMLj9GlNTQ== 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=7GHBLz1cR/VmFQTrIPDkcU7ajdKSd8zffLPogdhvviY=; b=Z4JlUkod7RN1ihqRpi2P5RtSnIOBBRCs+jvSlZrs93OFY3PYyiuFerIjKzvg0J+L928NQm/NSR3/sRn2quGcEKpOMdFSza2G1p+l9hIt0bzZYQwAJtIInYbfHpjuhvhKik+UBAHZAo99JnkRIiW3AUTdIMcUPYn1DGQNqTytwFQ= 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 BL3PR13MB5147.namprd13.prod.outlook.com (2603:10b6:208:33a::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.20; Tue, 18 Oct 2022 03:23:22 +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:22 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH 12/25] net/nfp: add the offload support of IPv6 GENEVE encap action Date: Tue, 18 Oct 2022 11:22:26 +0800 Message-Id: <1666063359-34283-13-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> 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_|BL3PR13MB5147:EE_ X-MS-Office365-Filtering-Correlation-Id: b56c3797-7793-463f-fd27-08dab0b81c79 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 4vBXtcIEDew3EXOVJA3BAsbGIkG+qQXhwaSfWRvcwKRs5yPkfPsFQjhy8XjiTVs6iPLobuiZ4wdrLbdDBKz/p+7+Fz/Iq+Niq1vdt+rFve+z/hYxgZrApE+41bPe/i8ET7mpmLk215C6TiZbRIFWzKJ0Trjh4FsxNpDbIYIn6emSc5PboefrNWylPTvyY4ctjDTsVN8ApDrzdcqJ2YMXzv9eg8T9UMtQJv+/xjDmtUoeXmuIJzqoe2JnKDdTFPchI3P14USbDne1I/HGIMgc+vFIKn3J5NmUdi834NVZQs/kRJegd+C9W1ozX63TcJp+0yum/nuH7nDawsBsJpUsb8i3mLUQttorNcCj8DhsFpPcaRZrsAjJi5yK0xoBRNixzfCJ6CH/aRWTdfOmPpqNim5lgFQXUg5gzDQ7FUcmAKPwCxAa6I3rfKCmRBUReYFXanUNuDqpowPHzFhnEixeVnuWWHiiNgPl5hEnWs619IMZ+Ipu4NiyV+HBlZ/71wizDOZOlA4Ms85ePg/uLJtImnRJf4xTrlCwTx4rRl2FeGBhH72gRjxjJ5/naCqR8Itha+IZxPqTchCXDserhuSt+2GXVj/H3I3aykMKbhAz5oCtULXvY/RgDAjcsq5FVM0SjVPftv7jkH0kHgmAC8XDMIbzUs/zgELTwNF87iRJ9oU/641FcuLt6GfLEaYOy5asPsNI7e47vo2zzqaTXC/PMfuq7pbeOuCppkoCzMf313oJnYzjLyL1q3ZdG7HKoIdsqE4buHpLsE7V9Ee0Rc1loQ== 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)(366004)(346002)(39840400004)(396003)(376002)(451199015)(36756003)(4326008)(66946007)(6916009)(316002)(5660300002)(66476007)(66556008)(38100700002)(38350700002)(86362001)(107886003)(6486002)(478600001)(26005)(6512007)(6506007)(52116002)(41300700001)(8936002)(2906002)(44832011)(8676002)(83380400001)(186003)(2616005); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?929v3z81RgGxRcQZyB+Tc8KwMF4h?= =?utf-8?q?apO/a1fg6ZEfr6ufLo2nBoZmzifAtZve7ejId1PAw8Mj9w/uio+CBlff4ngiIxeQj?= =?utf-8?q?mCl35Q58ekufiCWiusxP83G7KuqoWAsJqD56zVpGb2My2RmX3qGCmiWzh5BUe51c+?= =?utf-8?q?tOYvg+NTTiubdBGesfBGD/2chqzXMWnfDnvpNQFBBPdvIw48+SheSv/E50HlLfoEF?= =?utf-8?q?Abk1ia3NmMfgrZ3UX15RKvbh0EVAsr1BmlR1/QfNHXmTjq9zi73KRs5ZzoKSWShcJ?= =?utf-8?q?cruTUFdJKarFnyh4vWZE3pz+o2gqKMYyrv67kvGlGoYR5y0/eL2hvLm14JwGpFSWN?= =?utf-8?q?3sZMi24sS8+RfjxvgefDoGwF3I/8PBF3u1u3gwmswz6kV9Nqz8lDShhuSIX3KyuMX?= =?utf-8?q?oOVgQpg96z6aYHfgC7lSGkekHoQez1vxK0xduABzrmVtLQLlEBwlT576LES52SrxI?= =?utf-8?q?ZZIkErpVEYixs9B6xtXhMtSySKrf4zkRISHXKkwI7oYC2JBYxFA5WY9EzpI9FNeP0?= =?utf-8?q?kS96m7d/WfNrCO5Ls5owoQUABiHPhj6jFiJbuNtwtojKyLdxhWfIIGek3RnVa1Ebd?= =?utf-8?q?DnmO82AUlsfm8hnCLsKyueE3c29gn25+KTiHfrgY+SpIyyI041OJN/QCn/HMZCLkx?= =?utf-8?q?yBKVNMOAxPCiA8ELg9M/mx51PQJEhhya1MCr4YIAH/PuPWGm0WlLZXcGNR6kUyODF?= =?utf-8?q?MmD9zaas+Dr/7PhsGIILgT9Vz303ldap3RNWNZk1gDHplRlbxXtrF0IzLs86sG3a/?= =?utf-8?q?HYmPuo2Sz3Td892GSvxGvpIStgtKmWL8i9c6QebF/6DMwiBaI4h+jIKatxO+APzaO?= =?utf-8?q?0Cq1Kvatmwq36IPA437va/Vi4Ku2ma84J25k6BXuslosKc1oxH/IhjeDGcjrloj8B?= =?utf-8?q?C54+wX6PjEe8B8ecnmg+JfmfCDWKr9RsHUFbd7/Tm4cVNZPbHUW4m+pfqii4gC8Rs?= =?utf-8?q?X1EyYmlvBWjgVBVI5/yXJ5gucjVEk2PCTNSi8wwcd4wuPwv/aqE4phIB73IPlhgQP?= =?utf-8?q?bl3lTXaEe2XT3IH47Bwl0L76pez6LriU1vKnO0MlWxd1d3+g9MmqER/8Uf0hOEzA6?= =?utf-8?q?gvy8necRseGqSnn9QvnKWSEGf6rLpWkal0GS8ubFf7NdSUqtma1y06+alKsfIDyGt?= =?utf-8?q?HyXiBjUR+iNUgCOp+WJ1eGSrNKHwrZIZT2hAqtYJhB5V0JxaLWn0tdbzEKXGGtmXW?= =?utf-8?q?M10O89IwVFFSRayM7imYbALW6gtkgrwhMAGk8kd1vWmLKw4fC341fpVdwtebuabSu?= =?utf-8?q?N2EK4WKoBiiZYaU9aMuOnDQCDTIV9bb+B+Gv9aqJe4nzJ4nxGGLnRE3ahz5QBfOV9?= =?utf-8?q?qAWzSfK9RYD+0bwKQdi9Ljg0Vfo8fhkM17UuKW1mYa1uLeYGmnQXuu+ewHVVS7REk?= =?utf-8?q?KwUAWlHchGniM/wE3PUkix9oSAgMW1nFkgLZa8Lre/kKmsLYAz0L1/N10dNqcUFwV?= =?utf-8?q?fDSU4nKdegQ10tjMFyOdxUDRG6Qii7525LOa3W2XketTClTLVNlOtvGn9beQWH3ru?= =?utf-8?q?Ltns/lJd8V3ph21LBnioUKNr6odV22soKA=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: b56c3797-7793-463f-fd27-08dab0b81c79 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:22.7711 (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: sboCwb74JzP+P4/uO+omS6ci9WyreA/00+ffMj/t2QlxYRAA6JlgCVZebv0j4eFtTS1fsfSd4H0wXRNHtADRqHICOL67uxbyNdzV9i8DOSQ= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL3PR13MB5147 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 offload support of encap action for IPv6 GENEVE tunnel. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- doc/guides/rel_notes/release_22_11.rst | 1 + drivers/net/nfp/nfp_flow.c | 49 ++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/doc/guides/rel_notes/release_22_11.rst b/doc/guides/rel_notes/release_22_11.rst index 49e92cc..92a0d64 100644 --- a/doc/guides/rel_notes/release_22_11.rst +++ b/doc/guides/rel_notes/release_22_11.rst @@ -185,6 +185,7 @@ New Features * Set the TTL * Set the DSCP of IPv4 and IPv6 * Encap and decap of VXLAN tunnel + * Encap of GENEVE tunnel * **Updated NXP dpaa2 driver.** diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index 265c7e8..d93883a 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -43,6 +43,10 @@ struct vxlan_data { sizeof(struct rte_ipv4_hdr) + \ sizeof(struct rte_udp_hdr) + \ sizeof(struct rte_flow_item_geneve)) +#define GENEVE_V6_LEN (sizeof(struct rte_ether_hdr) + \ + sizeof(struct rte_ipv6_hdr) + \ + sizeof(struct rte_udp_hdr) + \ + sizeof(struct rte_flow_item_geneve)) /* Process structure associated with a flow item */ struct nfp_flow_item_proc { @@ -2691,6 +2695,47 @@ struct nfp_pre_tun_entry { } static int +nfp_flow_action_geneve_encap_v6(struct nfp_app_fw_flower *app_fw_flower, + char *act_data, + char *actions, + const struct rte_flow_action_raw_encap *raw_encap, + struct nfp_fl_rule_metadata *nfp_flow_meta, + struct nfp_fl_tun *tun) +{ + uint8_t tos; + uint64_t tun_id; + const struct rte_ether_hdr *eth; + const struct rte_flow_item_udp *udp; + const struct rte_flow_item_ipv6 *ipv6; + const struct rte_flow_item_geneve *geneve; + struct nfp_fl_act_pre_tun *pre_tun; + struct nfp_fl_act_set_tun *set_tun; + size_t act_pre_size = sizeof(struct nfp_fl_act_pre_tun); + size_t act_set_size = sizeof(struct nfp_fl_act_set_tun); + + eth = (const struct rte_ether_hdr *)raw_encap->data; + ipv6 = (const struct rte_flow_item_ipv6 *)(eth + 1); + udp = (const struct rte_flow_item_udp *)(ipv6 + 1); + geneve = (const struct rte_flow_item_geneve *)(udp + 1); + + pre_tun = (struct nfp_fl_act_pre_tun *)actions; + memset(pre_tun, 0, act_pre_size); + nfp_flow_pre_tun_v6_process(pre_tun, ipv6->hdr.dst_addr); + + set_tun = (struct nfp_fl_act_set_tun *)(act_data + act_pre_size); + memset(set_tun, 0, act_set_size); + tos = (ipv6->hdr.vtc_flow >> RTE_IPV6_HDR_TC_SHIFT) & 0xff; + tun_id = (geneve->vni[0] << 16) | (geneve->vni[1] << 8) | geneve->vni[2]; + nfp_flow_set_tun_process(set_tun, NFP_FL_TUN_GENEVE, tun_id, + ipv6->hdr.hop_limits, tos); + set_tun->tun_proto = geneve->protocol; + + /* Send the tunnel neighbor cmsg to fw */ + return nfp_flower_add_tun_neigh_v6_encap(app_fw_flower, nfp_flow_meta, + tun, eth, ipv6); +} + +static int nfp_flow_action_raw_encap(struct nfp_app_fw_flower *app_fw_flower, char *act_data, char *actions, @@ -2724,6 +2769,10 @@ struct nfp_pre_tun_entry { ret = nfp_flow_action_geneve_encap_v4(app_fw_flower, act_data, actions, raw_encap, nfp_flow_meta, tun); break; + case GENEVE_V6_LEN: + ret = nfp_flow_action_geneve_encap_v6(app_fw_flower, act_data, + actions, raw_encap, nfp_flow_meta, tun); + break; default: PMD_DRV_LOG(ERR, "Not an valid raw encap action conf."); ret = -EINVAL; From patchwork Tue Oct 18 03:22:27 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 118324 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id DC641A0560; Tue, 18 Oct 2022 05:24:34 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A95D642B8C; Tue, 18 Oct 2022 05:23:30 +0200 (CEST) Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2109.outbound.protection.outlook.com [40.107.92.109]) by mails.dpdk.org (Postfix) with ESMTP id EC4504114B for ; Tue, 18 Oct 2022 05:23:26 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=HoMkC/ixv4HFUdFebifBTyUtp1ScsJnCaYdwwgRuuCVKC+m5oinmLPO6bey/EAcJjtYrWsJWFCB0rEI9UWXxDJWtgymL0uRHAj4qg2ynu/P7z+SZ8F3ZBZ3me8Y9rxJksVyRksbhBXG779jbYeE3N+Okg/p202rFbsweKhpbLWyWyI9fxalJnG2/RL3cLf8cC+8ESGBAHcMN5htixGOQ+ewoNOHi3S3A12HYlkUo+HJkZWPYV1KgM6SZXPLa6TZ6ng/SYw8KuW+TzvIsfATcDwVCbh36bqutfppCzynwVfS0nhDbkPhEVfXm0/kvMwAG4l/i1b4YdbilKC2D410m9A== 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=1oa96l1hElyoVc+0w9bfFAMacAhLaEb8BLFCaD6mOys=; b=C8QENM38GCCfqpNDoa4xBdxYbM4YEvA3eHRTkOhfcbgzXO8Ewo174U1E1Bf+y5FFuNgY46gLX9KWVouMxec72ckEYgD6wQZMiGlOoXdYeWjBK18SdtmZhDjaXLDy58VsP8U1UFU5LY+yVjj74p3quCMTRgY/yAjpezuUMfy5kTJ3K95gvhK1Y5bYmuRtXd6FZ6NGVy+KMGYzae0s1oTUkDiH3dfwEu0M166dJA9DCzoa+mEEFbuSZZKHXkWFw2X1MehAbG6FlyyFQXn9Vzqwj/sBY/KXaLsJQLubQfzyszGawo3kV07fBPco7n2yMwHvAbw2Rdphbusb+EOj0JkvGA== 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=1oa96l1hElyoVc+0w9bfFAMacAhLaEb8BLFCaD6mOys=; b=EhAISLNEU5zzrV75X16DjJgYY8YxsQmn8qW1Y2/yFLniqVMXrU6IYjcyFjPyy2eaQxk4/kg/uxys4dXJVTQeqyGPK8MrEA5L7bBsL7YeeaNurjmeFrPrJFrdpGnFsxLM507/hrBoP4UcHPIAmnMwETnvZCjoaxLCDgWgvHnalzk= 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 BL3PR13MB5147.namprd13.prod.outlook.com (2603:10b6:208:33a::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.20; Tue, 18 Oct 2022 03:23:24 +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:24 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH 13/25] net/nfp: add the offload support of IPv4 GENEVE item Date: Tue, 18 Oct 2022 11:22:27 +0800 Message-Id: <1666063359-34283-14-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> 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_|BL3PR13MB5147:EE_ X-MS-Office365-Filtering-Correlation-Id: af8185be-82ee-4ee1-742c-08dab0b81db2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: g7JnPqUmuZHoT6Xbkdgpvw8tdMrEE1P0MVrOir3OfiNz7rYZ/l+RgvOuu8ICqBKcg7SRxilR2K0CQx1HnDz848p7RznkRFZT8L6vajft0Uj84lFCnUrQkvhj2s9LjdzerF1ZWrKjp3HhclPXl59I2VoZWzyvauzQe46TL5/KZ/S8VIgklubdENgWYMLZWHvdvwaSGUtrjFZUFeW0z/mclGCsKG3rOiMznxhn9wMy9pj9c0MAOSxLDatYSxILnpPIT/7zGDQYhVYe04yQ410eRymmxsX+TkKxda1XKVwhN1xFCK7sbGWm1l5i5FTIY4dqL1XfVkHbO/8hGHdiPChx33NA4mxPzhaXmXrl0Jjnc+wFDBBh7ZMdwNZjO4dHKAicOnW2QPsfWn+UBk2fVfyYdLcjoGEkSwJYD/LdgETMUeEul/ftwnkSW5hGVFhnXWXz5f1XP4DPDU7Nk+Lcl6uKFXsEozVe+vYbOvWciiFr7FaOh+VnABXVoIaN0e1+NhGAByA4EXQUZqm7Bf8FbafeG7evPCepx+1RA/SoSIP5HkAjU/gqH9KW9zcsCcu2R7JzXeMZegx8Iv2S4lQRAFII75IkUsjoiTUDVhrmt7WOTVZzvPGTkKANIB8bWeLdmxDrjWopq3JVEcBKY+GLj8Jb4ab61/QiSmTJsCr/tC0umneYxZJGiZUw0rtRuSbe3F4jSoUtmKdaOwThlUeAriSukLY01xo0lTovrm0I7O256sA8g1RPG2laI8b/ikbho/fzDopIMfSfW+EmEP51D4FjQw== 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)(366004)(346002)(39840400004)(396003)(376002)(451199015)(36756003)(4326008)(66946007)(6916009)(316002)(5660300002)(66476007)(66556008)(38100700002)(38350700002)(86362001)(107886003)(6486002)(478600001)(26005)(6512007)(6506007)(52116002)(41300700001)(8936002)(2906002)(44832011)(8676002)(83380400001)(186003)(2616005); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?+VzatStGufdFAw4U2bgO9/3tmLIP?= =?utf-8?q?b7Y2nm5LchIRPzf8RiP/dekHHTVg/oCjN4y/nddRcilXqsc2WqyCSXZzojiWlwQdg?= =?utf-8?q?eddX0GMYviP/SmojmzoWTsWGT8I8aCHebinFJifCutH7Vv0+h/PWTPA7HTiNNBryQ?= =?utf-8?q?2CliN6kGQ4weh0MZxrWl67POGm6Pd4sgjDAyN9P91CaNrPsZpONhaxusO6B9aCA3j?= =?utf-8?q?esL7QfUa/EGH9/GxDZU6P+yQJtS4btUHoBTSBG80Us6LFi0psQJzhC3s+IfIoZK1v?= =?utf-8?q?2Q1u5BcGTEHl7CyUj/6YWsX4vG1zOzzP/cqbdgIzJlDK8b/wqAagpyH0Xvwq4vPe3?= =?utf-8?q?pFZyUbPXHDaChXRGis5CdCyDn6HyPGXKPp2IFBzdW2Yu/pU/4Mi09/HgH1I5oJqXt?= =?utf-8?q?FZmD4dflYadFOypJS1ptLUzeLUsrPmicFbJFAZTWh5NFlDnBJ6LPug5isBWrqLjKa?= =?utf-8?q?PHokp+LkpktgakVfvWP6BWCvAwTxX+CMAAyUspzOCSS75IdjjUjnkis2lthfeSILg?= =?utf-8?q?VQUuPe+yVpiHV5+ocak22S3sTczhd+h0lXJx3EhiJIdJp2S1WuRG1xogrTLrCq4O2?= =?utf-8?q?7DfMKYHFZDZiAF7OZuQfxZBkJ1p6SeU3GLKE/dJQDZNEYVKQMZiy4N1RRNlZ95J+O?= =?utf-8?q?j2owPUatQwt4yteS0jjNKUZfBlawhbqCX88aFyCwtzyUZMI+esQhRY9/O5454RDU2?= =?utf-8?q?ajxT/UqC2KSgDYAJK+jh6I9v4n/pN5oW+g0US2eZuPrdqdPEpbMhNM2vIuqMIZx1H?= =?utf-8?q?TWusdclDmx1s3lbRMzPdhtrX4KGxvqesQg+lKhz3OJvGG7atOCSqZqqc4URo3NY0w?= =?utf-8?q?cOHxN9J6yWgekYm4owicN0iD+FcNFwNww6WvbDPUfch0WkCNRwGqIbk02PlrxNdI4?= =?utf-8?q?25QgQybS0amDPWOsOjqp4oLzp//PBgvvxSGfylJGVguVEA6BkfsR6BrwqqWqcwXba?= =?utf-8?q?SG1Zs+Gw8jlNXSD0QKAm6IYblv2jpag8PyGFE7dRHMJDLVeVGUmXrEmDz9eO44Gvk?= =?utf-8?q?RNjrPItelydt2TirSipzKwsZaKZJgEyjgqXNJLIS/mSJ24mfV7vFaGgPT9zyGkwKz?= =?utf-8?q?aLSnrExh5d6Hp24QWyMBk7h6cwzwy9GP607JZwLNdXst0JstbaHw4cSUbGpkYB+0S?= =?utf-8?q?dY6Q2EzJlLijxOhOm36NM5ElS1Ivo+UCaRdvF1TvAPysDkjFDlETw1B3cAoHX+JoB?= =?utf-8?q?YH7hAfLSduCPeHpWusJqLoOzhRkneilfBUGsZcMbmQXJaRe612l0BXzyTg6Jel4zf?= =?utf-8?q?TXPsjiDqPfPbubx9I+Rf/agR4Fr884m0lmq3VUA2mCpNqDG2i04rFVBZrAKwS5fv/?= =?utf-8?q?8iAhLkDYStaZROEn2zFy9k7qYIhxjbtRGvTGVHWBJIoJpq1xsjAUnXaf1JWMwDFfa?= =?utf-8?q?uwxgAKbgymIuR9A5GW5ILtEB7OAoSiaBM7wEn9D5OqTLAcbSNrXPWgpNgLhHB3oQC?= =?utf-8?q?iEr9e8mFvZEmsmSHfuiQPE7WC6KY5UNSQnfcCNnwPrRyDEEzl6E2J5vObEDT0nbDr?= =?utf-8?q?R6bNAUDmEjSZx68zUjpdVE05Ilaudu7KRw=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: af8185be-82ee-4ee1-742c-08dab0b81db2 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:24.8032 (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: 2AWqnBCVPakxxmASPoyohNVxeg0bjY8/x5BYZLNG1CHZm+SOxsvyxUeYNL9Oj9UbAmUCusWeIO2L1QQaw544yTY2aUySrFzCSvT9Hsmo0P4= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL3PR13MB5147 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 GENEVE item. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- doc/guides/nics/features/nfp.ini | 1 + drivers/net/nfp/nfp_flow.c | 75 ++++++++++++++++++++++++++++++++++++++-- 2 files changed, 74 insertions(+), 2 deletions(-) diff --git a/doc/guides/nics/features/nfp.ini b/doc/guides/nics/features/nfp.ini index 171b633..4c0d1ab 100644 --- a/doc/guides/nics/features/nfp.ini +++ b/doc/guides/nics/features/nfp.ini @@ -28,6 +28,7 @@ Usage doc = Y [rte_flow items] eth = Y +geneve = 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 d93883a..da3ac69 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -781,6 +781,23 @@ struct nfp_pre_tun_entry { return -EINVAL; } break; + case RTE_FLOW_ITEM_TYPE_GENEVE: + PMD_DRV_LOG(DEBUG, "RTE_FLOW_ITEM_TYPE_GENEVE detected"); + /* Clear IPv4 bits */ + key_ls->key_layer &= ~NFP_FLOWER_LAYER_IPV4; + key_ls->tun_type = NFP_FL_TUN_GENEVE; + key_ls->key_layer |= NFP_FLOWER_LAYER_EXT_META; + key_ls->key_layer_two |= NFP_FLOWER_LAYER2_GENEVE; + key_ls->key_size += sizeof(struct nfp_flower_ext_meta); + if (outer_ip4_flag) { + key_ls->key_size += sizeof(struct nfp_flower_ipv4_udp_tun); + /* + * The outer l3 layer information is + * in `struct nfp_flower_ipv4_udp_tun` + */ + key_ls->key_size -= sizeof(struct nfp_flower_ipv4); + } + break; default: PMD_DRV_LOG(ERR, "Item type %d not supported.", item->type); return -ENOTSUP; @@ -978,12 +995,22 @@ struct nfp_pre_tun_entry { static bool nfp_flow_is_tunnel(struct rte_flow *nfp_flow) { + uint32_t key_layer2; + struct nfp_flower_ext_meta *ext_meta; struct nfp_flower_meta_tci *meta_tci; meta_tci = (struct nfp_flower_meta_tci *)nfp_flow->payload.unmasked_data; if (meta_tci->nfp_flow_key_layer & NFP_FLOWER_LAYER_VXLAN) return true; + if (!(meta_tci->nfp_flow_key_layer & NFP_FLOWER_LAYER_EXT_META)) + return false; + + ext_meta = (struct nfp_flower_ext_meta *)(meta_tci + 1); + key_layer2 = rte_be_to_cpu_32(ext_meta->nfp_flow_key_layer2); + if (key_layer2 & NFP_FLOWER_LAYER2_GENEVE) + return true; + return false; } @@ -1404,6 +1431,39 @@ struct nfp_pre_tun_entry { return ret; } +static int +nfp_flow_merge_geneve(__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, + const struct nfp_flow_item_proc *proc, + bool is_mask, + __rte_unused bool is_outer_layer) +{ + struct nfp_flower_ipv4_udp_tun *tun4; + const struct rte_flow_item_geneve *spec; + const struct rte_flow_item_geneve *mask; + const struct rte_flow_item_geneve *geneve; + + spec = item->spec; + if (spec == NULL) { + PMD_DRV_LOG(DEBUG, "nfp flow merge geneve: no item->spec!"); + goto geneve_end; + } + + mask = item->mask ? item->mask : proc->mask_default; + geneve = is_mask ? mask : spec; + + tun4 = (struct nfp_flower_ipv4_udp_tun *)*mbuf_off; + tun4->tun_id = rte_cpu_to_be_32((geneve->vni[0] << 16) | + (geneve->vni[1] << 8) | (geneve->vni[2])); + +geneve_end: + *mbuf_off += sizeof(struct nfp_flower_ipv4_udp_tun); + + return 0; +} + /* 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] = { @@ -1492,7 +1552,8 @@ struct nfp_pre_tun_entry { .merge = nfp_flow_merge_tcp, }, [RTE_FLOW_ITEM_TYPE_UDP] = { - .next_item = NEXT_ITEM(RTE_FLOW_ITEM_TYPE_VXLAN), + .next_item = NEXT_ITEM(RTE_FLOW_ITEM_TYPE_VXLAN, + RTE_FLOW_ITEM_TYPE_GENEVE), .mask_support = &(const struct rte_flow_item_udp){ .hdr = { .src_port = RTE_BE16(0xffff), @@ -1525,6 +1586,15 @@ struct nfp_pre_tun_entry { .mask_sz = sizeof(struct rte_flow_item_vxlan), .merge = nfp_flow_merge_vxlan, }, + [RTE_FLOW_ITEM_TYPE_GENEVE] = { + .next_item = NEXT_ITEM(RTE_FLOW_ITEM_TYPE_ETH), + .mask_support = &(const struct rte_flow_item_geneve){ + .vni = "\xff\xff\xff", + }, + .mask_default = &rte_flow_item_geneve_mask, + .mask_sz = sizeof(struct rte_flow_item_geneve), + .merge = nfp_flow_merge_geneve, + }, }; static int @@ -1581,7 +1651,8 @@ struct nfp_pre_tun_entry { static bool nfp_flow_is_tun_item(const struct rte_flow_item *item) { - if (item->type == RTE_FLOW_ITEM_TYPE_VXLAN) + if (item->type == RTE_FLOW_ITEM_TYPE_VXLAN || + item->type == RTE_FLOW_ITEM_TYPE_GENEVE) return true; return false; From patchwork Tue Oct 18 03:22:28 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 118325 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 18F24A0560; Tue, 18 Oct 2022 05:24:42 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id C8BCD42BA3; Tue, 18 Oct 2022 05:23:31 +0200 (CEST) Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2138.outbound.protection.outlook.com [40.107.92.138]) by mails.dpdk.org (Postfix) with ESMTP id 76D5C42B73 for ; Tue, 18 Oct 2022 05:23:28 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=lavakA2L/X2zPS8KdTeHMVvLOnC17qot9Ew4Cf/fqDZ2Zy7fbcHlTPM0LxmjzdhrSwVwSeaqtO+CfaXkTq1e1oJongFa5xyxCFCsv8LAAhR69HM+32VvTxRG7C+EuDsOYXI/2T68riAXT2FP+43WjQ3z+c1eFFUsvwnplnNCfDlzHlZ+rvdFBmSQS6mW2XMYVsh24PNeUIMnoS5D05zRDg31xkWY0UTrTT1ab47j0AHNsDXtmtQySb2kNLQxrOAuSrMUWQvcCjBpb5YwQ2iZeL3o4QmXXlyrll1gIyjB0q4xoOkUo3flFYXiUJ9Y7i8SoZkKfmbz5+Yq8zaDltnwsA== 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=z9sK5XsTPEnjOQORJWm4vyy/OlxNdJCzTFy46kVOJ50=; b=jVTPxiNtA/dMp03TUJ+yvQD3qcOMZy44dEx11mI6owM1fJ5usR6HrzZ2bRw0wNGld29z4Bnqgbfw1DsAau4uLIpWm9W0/0I/qHk+Vcl4VH7eLDzWGchQ8Xxv1APAUA/Sjbiv7jJik/sN/jEe1x7aIoIhQbNo3xodTQtwHtAZgne40epXh02s9Wj7zrU48piEtUmUOgAfbaDq7aI4fC3ah8T6DhYSMBDuNIN03eQkcMcTCb0mpwvYMuQuaS1pJU6hV0XOfXX0XUeqmBkNj0A1OHPXGYidYJvS6Hqy97kbDxW31Z0OQc2bcOeDNvdk/iJznCTIHcb1rTSqUckVYeFOFA== 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=z9sK5XsTPEnjOQORJWm4vyy/OlxNdJCzTFy46kVOJ50=; b=Bf52dG5Fibp8ZrdybkP9tybflSK2hulhlcy6LMF4kOSJ/DqMneRzyKBiygDIWGfQCoXp3Q506ej2r+gHwRsLXaAkz/H73OQyf8iD5HQJmBj14iM+jMmfMHBeFBfpvjOZqU4vdPVXGTdSxoCTagdWB80eN5XIpV8i9ktf8i5CkRI= 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 BL3PR13MB5147.namprd13.prod.outlook.com (2603:10b6:208:33a::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.20; Tue, 18 Oct 2022 03:23:27 +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:27 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH 14/25] net/nfp: add the offload support of IPv6 GENEVE item Date: Tue, 18 Oct 2022 11:22:28 +0800 Message-Id: <1666063359-34283-15-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> 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_|BL3PR13MB5147:EE_ X-MS-Office365-Filtering-Correlation-Id: 05b043cc-e826-422e-c45b-08dab0b81eea X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: VECpru094kK4Be+AYEjAxjNC+i304VbsYI0o0wxegVFFJAsdJtXfzEeFTnS8kCMCNhE+HI4Q2pY08wSKSWUwtfWojgzqR7U2hmGTjYqtD8VsttV3wpBZamYycI6pdKD5PwVy3/ytnzO8f6ekGP92pYMNJBuPqAYOB2iB+4kibIxgBNmBPn7QnvvLdI/OAOGcRiu1TgdUqDsci53UX20jEtGmkjKLxt4DsP953VgUXLU84tK4IfZcRW2OBB0x6KU22eqIeME9ZtC7uXAF07SdUFzdntx/qRki0kFqeZen8Px/iLfoIEPOMj9qIphVq2xbNQl+KCSMuPQu8rEnSVlekQljwU4seJO3n5tliTBcCGGi+v1oFga27vuFVox6arNnhYjyuYBxAgOD14fXV91pQLtTC66Eq2bqWSzsXfpnUkQqbj2Ac0xnO/2M5spEhnbnwEe67p4uttP7c7r9jYCao/79JPb833L1gh8pGIoGOAJxuFxHdHsWalYqH3oc3pOWgaIwP1LeQU+ITi1UXC4EYd3IFgOUe8VIPylRhQe7j4UZq5TKgD4hOiXwMQucHZF1YwUJb4PjPHUNcvustwxwAQQ6HUD2WjowzB0r2Yb+o3Fm3oRmABhQgeeGDfneRwFWPQKKXUIwY4t38NxLR1c5pR9ueIB/8Cw/4E4wSCCyVA9d3++yhONwd8wRQzS9/NY69A7XSKwgndRdtlkOlWw/08YRQPMmnFGY3bQV4ub9Dx14I/q6W6S5iqxAWL4TsOd04Y7RbVqAlU/oixBtpMrRvg== 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)(366004)(346002)(39840400004)(396003)(376002)(451199015)(36756003)(4326008)(66946007)(6916009)(316002)(5660300002)(66476007)(66556008)(38100700002)(38350700002)(86362001)(107886003)(6486002)(478600001)(26005)(6512007)(6506007)(52116002)(41300700001)(8936002)(2906002)(44832011)(8676002)(83380400001)(186003)(2616005); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?dxy5VnKRpnE+7PJcMErXjciiVeNw?= =?utf-8?q?SJqJ0Jd21yLyld/uhZSZ2910ZUp6vvtCGyygNk/Wa6B9etUCPjPLL2Vv932X8ha/E?= =?utf-8?q?OB7kk6myo3gUr37/nTdOVUyztN35jtjdpuEaO7vQAggUR9ovEWO/vSA7hvzTv+MPe?= =?utf-8?q?yhaQAIS2nseCl0XVqVFEf/dzmtRz6G/jGk0ypb7gRp9ET4ycyRAj9sh40e+zxrw2e?= =?utf-8?q?XWPBCFRlcHVOMIUIdqcbIIHWXTSDE43ANNgyoNeDNMtyT4WxrQkosT0Mx+o42ZtO4?= =?utf-8?q?EXUlbksQSp7FsAaOnpQ/gw3UeSMpEpyNfVzhM81J+h6zEKIue8FlZQsruCOpUNCq0?= =?utf-8?q?1OCuLlmZ9ANwU5UiEnBdhK09f932k3CGgb0XPMcD9lvqYhVlFe5yXVfOOUJJ57bK4?= =?utf-8?q?tzxxI5WzVxuVprcegVM/gbPKJUjqxVI9ID7/ArHRvqM146E8a2uLwu+xIoCCPAizw?= =?utf-8?q?PPvb+6U6E6Ds3oj3NQbh8MpJEPRvnJPmmO+xPJV4p89N5HlmheAPPkBwgY2q6NMwD?= =?utf-8?q?u+D5MTKVmGb5iorE31ZwJJ2Y7v9fAVXD7Q2+DRC6ypyaRs2LyZWqRYt7xaHIzwylN?= =?utf-8?q?zOw5Oi49MnGeSkV1BZe8Pn1YNcmAPoKSw8j1KG3kQ8IXOamac8Z7tPV0F7XxZIZBr?= =?utf-8?q?C0LZ/C0enKWojai/3i5cgG40j+vmi/tG7xRH1MmdohPZkGMethwjAT04aBLUiL4b4?= =?utf-8?q?KR1FYL6Qfj91C7Nuvy2BStKbeskftWEM/c8iRGpufV0iY4+FSscGGOfODNVJQlHMc?= =?utf-8?q?p1Y5LaKkdGek6yNx1s/EEuOXOSshT7PpVf2woro+J5BCwdXLgFKKJd9Qn/UFmGmjO?= =?utf-8?q?Ou2bmuHSPmyWhuqnvw4JXed6+UWCqq/qMF6hr6JUdgZsKFRMIsfrplMsbROxDRqSR?= =?utf-8?q?L09g4acvILsbjGO/941cyAQYJZvJcFLZsebaoesEC2o4LseDorGVJnIwv7nslNu9h?= =?utf-8?q?tlDw6sfu53fMZwsTuUCU4JlJR2n/gnQg5yLByEYhStRoK4cNqhmVh+ysEtUiVz43E?= =?utf-8?q?Pjxj4bCDbZM9spHGDbH6xSoWRYmbBqNGfhymyFS+XGnTOOuiWCx4dMogxVMvA0oX6?= =?utf-8?q?98zRNxbsxBHMLBjubwbhzc3UDQm2Cfyoe/jamBDM2AVXH2L6JBQbV/IzwReokZMK5?= =?utf-8?q?V7Ia72wUBfBwom7fKcRZqMvO0g9rhF2PIvaJ8qpXnR/NSYVF7SREEnT4OUZEgJgFQ?= =?utf-8?q?cPH+EO+m/pKmq2KRwut7pZo95f+OcBumakTk1dGZ9HzcN2HRnFEUrwywQPI2680YQ?= =?utf-8?q?pGe1ddYV2vtpv/90tBJxBMnvl77PqzndJIPvv0y6LVOfMTl49qBQ1ClJgOzartXpD?= =?utf-8?q?6rPYyHqrk5JUZcwI02cQ8M2QaucjngoHQZ/4Bwj3uuXbKfTVBBh8oqQQDI8ykP/ZA?= =?utf-8?q?QGq7hnQSgBGORArLzlJLAnly87myg38gviPMPUqVABhm5pSH61MH1gaOyQpu2mttl?= =?utf-8?q?l6Przb0RZrUEFKDn1iU9MQmr0E0wl34BfZY/DR1wgTw27I6d4R9BTZdks3L9I9iEg?= =?utf-8?q?62l0IOVk/3aV4IBqWu2RzcfRiDokU6BxeQ=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 05b043cc-e826-422e-c45b-08dab0b81eea 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:26.8812 (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: fPua5/R4nJsEBpOSNz9c3SNAk4gXPSlW2kouR95DOhPuqykgVq50rbP2y8UNaGG1l4XEbpeQFOzGcsS7Tp/ey9VQuFiRjmYW6LEIopeVq7o= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL3PR13MB5147 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 IPv6 GENEVE item. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- drivers/net/nfp/nfp_flow.c | 43 +++++++++++++++++++++++++++++++++++++------ 1 file changed, 37 insertions(+), 6 deletions(-) diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index da3ac69..36dbf27 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -783,8 +783,9 @@ struct nfp_pre_tun_entry { break; case RTE_FLOW_ITEM_TYPE_GENEVE: PMD_DRV_LOG(DEBUG, "RTE_FLOW_ITEM_TYPE_GENEVE detected"); - /* Clear IPv4 bits */ + /* Clear IPv4 and IPv6 bits */ key_ls->key_layer &= ~NFP_FLOWER_LAYER_IPV4; + key_ls->key_layer &= ~NFP_FLOWER_LAYER_IPV6; key_ls->tun_type = NFP_FL_TUN_GENEVE; key_ls->key_layer |= NFP_FLOWER_LAYER_EXT_META; key_ls->key_layer_two |= NFP_FLOWER_LAYER2_GENEVE; @@ -796,6 +797,17 @@ struct nfp_pre_tun_entry { * in `struct nfp_flower_ipv4_udp_tun` */ key_ls->key_size -= sizeof(struct nfp_flower_ipv4); + } else if (outer_ip6_flag) { + key_ls->key_layer_two |= NFP_FLOWER_LAYER2_TUN_IPV6; + key_ls->key_size += sizeof(struct nfp_flower_ipv6_udp_tun); + /* + * The outer l3 layer information is + * in `struct nfp_flower_ipv6_udp_tun` + */ + key_ls->key_size -= sizeof(struct nfp_flower_ipv6); + } else { + PMD_DRV_LOG(ERR, "No outer IP layer for GENEVE tunnel."); + return -EINVAL; } break; default: @@ -1433,7 +1445,7 @@ struct nfp_pre_tun_entry { static int nfp_flow_merge_geneve(__rte_unused struct nfp_app_fw_flower *app_fw_flower, - __rte_unused struct rte_flow *nfp_flow, + struct rte_flow *nfp_flow, char **mbuf_off, const struct rte_flow_item *item, const struct nfp_flow_item_proc *proc, @@ -1441,9 +1453,16 @@ struct nfp_pre_tun_entry { __rte_unused bool is_outer_layer) { struct nfp_flower_ipv4_udp_tun *tun4; + struct nfp_flower_ipv6_udp_tun *tun6; + struct nfp_flower_meta_tci *meta_tci; const struct rte_flow_item_geneve *spec; const struct rte_flow_item_geneve *mask; const struct rte_flow_item_geneve *geneve; + struct nfp_flower_ext_meta *ext_meta = NULL; + + meta_tci = (struct nfp_flower_meta_tci *)nfp_flow->payload.unmasked_data; + if (meta_tci->nfp_flow_key_layer & NFP_FLOWER_LAYER_EXT_META) + ext_meta = (struct nfp_flower_ext_meta *)(meta_tci + 1); spec = item->spec; if (spec == NULL) { @@ -1454,12 +1473,24 @@ struct nfp_pre_tun_entry { mask = item->mask ? item->mask : proc->mask_default; geneve = is_mask ? mask : spec; - tun4 = (struct nfp_flower_ipv4_udp_tun *)*mbuf_off; - tun4->tun_id = rte_cpu_to_be_32((geneve->vni[0] << 16) | - (geneve->vni[1] << 8) | (geneve->vni[2])); + if (ext_meta && (rte_be_to_cpu_32(ext_meta->nfp_flow_key_layer2) & + NFP_FLOWER_LAYER2_TUN_IPV6)) { + tun6 = (struct nfp_flower_ipv6_udp_tun *)*mbuf_off; + tun6->tun_id = rte_cpu_to_be_32((geneve->vni[0] << 16) | + (geneve->vni[1] << 8) | (geneve->vni[2])); + } else { + tun4 = (struct nfp_flower_ipv4_udp_tun *)*mbuf_off; + tun4->tun_id = rte_cpu_to_be_32((geneve->vni[0] << 16) | + (geneve->vni[1] << 8) | (geneve->vni[2])); + } geneve_end: - *mbuf_off += sizeof(struct nfp_flower_ipv4_udp_tun); + if (ext_meta && (rte_be_to_cpu_32(ext_meta->nfp_flow_key_layer2) & + NFP_FLOWER_LAYER2_TUN_IPV6)) { + *mbuf_off += sizeof(struct nfp_flower_ipv6_udp_tun); + } else { + *mbuf_off += sizeof(struct nfp_flower_ipv4_udp_tun); + } return 0; } From patchwork Tue Oct 18 03:22:29 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 118326 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 6923BA0560; Tue, 18 Oct 2022 05:24:47 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B63FA42BAF; Tue, 18 Oct 2022 05:23:32 +0200 (CEST) Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2119.outbound.protection.outlook.com [40.107.92.119]) by mails.dpdk.org (Postfix) with ESMTP id 34C1241148 for ; Tue, 18 Oct 2022 05:23:30 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nlISpC5c9c078vNKxRHTVvwDA/dkZ/EPMLVW75B4Lpf68wvZF2u/EY9MZ6r7eoxQJjefG3NIpcaOwZKKHsg279pNWVcXqmeqhaQ7aQO+PbO1PuRhYusUGhsMSdzIKJfCfH8m5cFGBX4gIwodxmYM1HA45GDRr/i7jc93IxCuCnbmAWuYBqqULaG3oySIuPRVv3qiUYtmcxhIwiQPEkcrwxS5rRpxXyb9xXOuEwDcHoftv3SvDPmVD8kK/L1OnpfhUj83CbHp/+PHpKJyX9/ekKiJeYosDP8cx4KwS80jWJEOcA5fMHin0HaSzDduZBaWH8f+/aeteMkKQCbZwsq8Iw== 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=pLrJ0UUE9u646wXPnFLmEyS801orNN8Is1vo1yMzkUk=; b=SmQ3TeoRJAcKRSYJJgZ7mVBknnXfmAw8etzNRgie8j+x03Gwgx2LPEtdEOEc3/3FqChJ4pH978WA4lgjVa9GIwp+pmytuy6w/BtTUIi2Wi+AWFgq/TLScjv1BGgtbB9oODeEaEyj1fCI/fOSW6FQgsPf0yqixdl+jYpJAR+EOBf+RF1CMsjamIkhFowLgxyZ9oiZkfWaIzKdwYxKYG0Wu1P14sxxXkfta8BOSB/wkOjI+AzHDBGC1SUL+Wp2SoSS4RttUl4ep8dGzYu7UdVlr17M1kYhcBSU3uPVvHv8tYL5IriTWXSaA/hsWrYn5fmqFnU966YnlT+4q7udxPDUqQ== 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=pLrJ0UUE9u646wXPnFLmEyS801orNN8Is1vo1yMzkUk=; b=ssuAPVMZTwr3s6LM3RGNNEQRSlG08QXKzxJvDtBtWGyzlzBFyF64gdxJUb41cfp19RNfohlEeLKx2HH418fTftV9W+AMbumrpycnDDOuMgkUX3IhgwH/JkXd//BM+clBtqoc5b3sa319y4c5fo6RyPbQpA8mnmbGZ+8qfqRr9Dk= 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 BL3PR13MB5147.namprd13.prod.outlook.com (2603:10b6:208:33a::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.20; Tue, 18 Oct 2022 03:23:29 +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:28 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH 15/25] net/nfp: add the offload support of IPv4 GENEVE decap action Date: Tue, 18 Oct 2022 11:22:29 +0800 Message-Id: <1666063359-34283-16-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> 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_|BL3PR13MB5147:EE_ X-MS-Office365-Filtering-Correlation-Id: 391fea9d-79ab-49c1-cc3a-08dab0b82025 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: JdIAfZ5hlUv+C1LP4XZfttUmgHl0pysAe5/UcPuo6vsaj0OFdLcH1X9YbXTxmRIUmiT8rtGZxsGahIuKXTGyt8SrDms7k58F51RxWmjaRgd8XnxaV1kfWGBjoTxz/r5i0BQtlKbtD/fG7VOSnf/HyT+KG8swJsIG9OXPIrL1rvT6fZdMd8JIV33aRuLLJAUzEGwPFUPBJC2tBN9MpPq+ORHtGILdpr1aI5I1bmym3g/F+dxRm7/EZwnJHiWEdqXjCpzEcoiLSg20Mujqf5oYDQ9CeAQFryndZf7N8yCFVQ8odNlopG16COjhWkSqLecTQPZZ8iVPlygM++lBA2CTAuKKv741JW+/B5r7LqafGap7S0ksSz/PBZyvCbpvMaztj5Z9A9HTxLrWT9kOmPzyHdB3MElBOOjsk2Z4FIkdTQhBMOI4XPZD4U2bKZTYQarN39zmkXPRg8Cn5j906rT3muvhpMJyN3iWiNeEN+bIB28MdCGs6iYV2s3N+87F0ufDpcVJniCNXwJVJwvff+8W2VZ4JBdC9UAD6GL+i43ug6tWuTDOuEeQNYbi4P8sw21PJ/40EYDMvFU1i+jgBQndEWSbxXKYcm7a+pGpAKsao+/OwBcgnfMLRFaQdGJM7dEacCArjI5KIwdlqvogzyeTsGH8MG4bS59JhHENsOSsBUQh5M8gs8pnISz39fIJ7MqSBEOws7OCYW9PnlswOqUkr18mh9zvV19UU7wn3Npf33aLexW8WjGHKOrkWUvpkGkzARn16H0oGLZbKsLAAh1Agg== 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)(366004)(346002)(39840400004)(396003)(376002)(451199015)(36756003)(4326008)(66946007)(6916009)(316002)(5660300002)(66476007)(66556008)(38100700002)(38350700002)(86362001)(107886003)(6486002)(478600001)(26005)(6512007)(6506007)(52116002)(41300700001)(8936002)(2906002)(44832011)(8676002)(83380400001)(186003)(2616005); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?HscVq1jGh/HsqScgqXW7gZIoCm7p?= =?utf-8?q?iUiKysBqoUtlv4Txxhcq+KV9lzgUyVDFlL0MMGGvWzK/jRqO9U4JrcOm9Asl0Gcwn?= =?utf-8?q?Z9FNLZu72ON2iwcDMWrebvZn+HMnz6s2nBCZaeXFN2BohNefYn0ix2VYbDF9foThp?= =?utf-8?q?ABwfXpiz0GU5hHxtOS6jXmWHVVZjKcRNsJElZ2xIbFKGG00/R9196OzR1rdxAofwC?= =?utf-8?q?WGyrGhXhTBx/w1D477CJXtDKamrX7iPMTZBA1bQFK/LBrNr30uorehAn0DAmGEXQg?= =?utf-8?q?Do06laVN4iUrvuPhzUwTuCLzb+zWButROwesbL3dKhWomV3IvTdRZVAiECXTqi/nY?= =?utf-8?q?TJ9aSbKE7VBAAT/UuVg+sGn/Q2NsBPp/N+SSaGSnbVk30mULTmSvovig4yc6Vd4cg?= =?utf-8?q?OQOsbjkrai+gYhRKlJYEB20yRnIMZOKJigS7yhIqtx7nbQSnCne3/JW0twSTqMKLi?= =?utf-8?q?mpKF1uUISLXgV1AhUd+i8G8hEdOXR8nWPz8dlRg4NioGKMoSJJKsNPDvJvh8nekVj?= =?utf-8?q?dI8YrELAgFl+Q3iB6dz7G59vQkLC7imHpDj8gVI2wQ8B8iqNCkZUJBlofFInXBpzJ?= =?utf-8?q?i1FgMGdclLAInsaOuXSm8MUtbYJrX29pIE2by4RlW1klcz/DW6Qsgq/G+4t/OnEBv?= =?utf-8?q?8lCuFSL+skCqIBjYw+HrxOqYLNrbnVJ7hKTDPD0BKU1iCfg1KAOiZt+WkhSzWeayu?= =?utf-8?q?ueFEgGuLCYmclxqACDYXN54f4fnRhPiy2TUj0/fqvy9YU3pXgG+97uezgmU0kjLle?= =?utf-8?q?jYtQ/vPEmdrAWcbcFrjH9Fy7J5dIG1JNqdn1sh2hdEPDtHyGcOMqmY0FipRCgB3Ec?= =?utf-8?q?kABCWw2kVqbi1pAIFPnElN4H+T0knITL8MJ24lz/SlZyFZEXsK3HouN7gjTOj9or+?= =?utf-8?q?nwfRXQlUsygN6DNou++lPDIi0Lna5S+YUI25TrU/TELD3DUczFDks44pXpxQuG4iy?= =?utf-8?q?8bJ460OihVlBT5ffinL8w7pUrB6Pazd6yzSyRsE4+LuCZipwUsbwR24MmcWxCvQst?= =?utf-8?q?W3PhZICEe0Mhge3xG/36TpRIHwJcoru0QqOPHroo7XDagsgB3I/Z9Lpie2BMJhGlL?= =?utf-8?q?erOnGL9x6tWEd94k5v+jukSnksU6nyc3yrYqNiwXwRelWBhvkFe5zJj+Y+h5RCA2Z?= =?utf-8?q?D2sYgWPOBJ2AnXryhArtbPy6W+ujJNvWmOwapzipkZDyzeo+lmUqcz6A2ovqH77WO?= =?utf-8?q?E7WbF0z3cEz+uhdpZUHM3kdsNXgd9BhRQcPH9ePT6bekZOoX73t4WA65ox16Oxiwz?= =?utf-8?q?T/48dMG6gjgqOgLnq9Y964RuRYKMAaHDj7x6CTHPXBBNsjr3bh5pkoCK7tMQ7yjdD?= =?utf-8?q?TS3UGJEze/GZgZIY+EXvbL72UAgupJADeIskGPO0JqLSV4YLGCWRf/x0ocFX3A23+?= =?utf-8?q?PnYOpsgAusbaj5nYUuJe8E6i+bpPfFxTHipYWLmkrakZ9dVqMja140El7vrQ4KXTe?= =?utf-8?q?nZ0PAxF5Eq4MNBnB7b/SiiD8sg8PaDAtpEQbWz1haKaQG6GfVU5jwYfjCeyV2qLds?= =?utf-8?q?QIuUDC8O8GJAKRzcLZHUtuZnm+5yxR0NZQ=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 391fea9d-79ab-49c1-cc3a-08dab0b82025 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:28.9134 (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: GAjYS8/Y3ZCMSEok5ta8do1XDgdIYRRVkOYQNJCfgACCzYMGk57bVvdQByHzuUUscnuBs6D9IXVVH0AY9MtRjwKe5QPGhUkPZO5yL2KqNUQ= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL3PR13MB5147 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 offload support of decap action for IPv4 GENEVE tunnel. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- doc/guides/nics/features/nfp.ini | 1 + drivers/net/nfp/nfp_flow.c | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/doc/guides/nics/features/nfp.ini b/doc/guides/nics/features/nfp.ini index 4c0d1ab..7453109 100644 --- a/doc/guides/nics/features/nfp.ini +++ b/doc/guides/nics/features/nfp.ini @@ -47,6 +47,7 @@ of_pop_vlan = Y of_push_vlan = Y of_set_vlan_pcp = Y of_set_vlan_vid = Y +raw_decap = Y raw_encap = Y port_id = Y set_ipv4_dscp = Y diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index 36dbf27..a8287a1 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -973,6 +973,9 @@ struct nfp_pre_tun_entry { case RTE_FLOW_ACTION_TYPE_VXLAN_DECAP: PMD_DRV_LOG(DEBUG, "RTE_FLOW_ACTION_TYPE_VXLAN_DECAP detected"); break; + case RTE_FLOW_ACTION_TYPE_RAW_DECAP: + PMD_DRV_LOG(DEBUG, "RTE_FLOW_ACTION_TYPE_RAW_DECAP detected"); + break; default: PMD_DRV_LOG(ERR, "Action type %d not supported.", action->type); return -ENOTSUP; @@ -1444,7 +1447,7 @@ struct nfp_pre_tun_entry { } static int -nfp_flow_merge_geneve(__rte_unused struct nfp_app_fw_flower *app_fw_flower, +nfp_flow_merge_geneve(struct nfp_app_fw_flower *app_fw_flower, struct rte_flow *nfp_flow, char **mbuf_off, const struct rte_flow_item *item, @@ -1452,6 +1455,7 @@ struct nfp_pre_tun_entry { bool is_mask, __rte_unused bool is_outer_layer) { + int ret = 0; struct nfp_flower_ipv4_udp_tun *tun4; struct nfp_flower_ipv6_udp_tun *tun6; struct nfp_flower_meta_tci *meta_tci; @@ -1482,6 +1486,8 @@ struct nfp_pre_tun_entry { tun4 = (struct nfp_flower_ipv4_udp_tun *)*mbuf_off; tun4->tun_id = rte_cpu_to_be_32((geneve->vni[0] << 16) | (geneve->vni[1] << 8) | (geneve->vni[2])); + if (!is_mask) + ret = nfp_tun_add_ipv4_off(app_fw_flower, tun4->ipv4.dst); } geneve_end: @@ -1492,7 +1498,7 @@ struct nfp_pre_tun_entry { *mbuf_off += sizeof(struct nfp_flower_ipv4_udp_tun); } - return 0; + return ret; } /* Graph of supported items and associated process function */ @@ -3080,6 +3086,7 @@ struct nfp_pre_tun_entry { nfp_flow->type = NFP_FLOW_ENCAP; break; case RTE_FLOW_ACTION_TYPE_VXLAN_DECAP: + case RTE_FLOW_ACTION_TYPE_RAW_DECAP: PMD_DRV_LOG(DEBUG, "process RTE_FLOW_ACTION_TYPE_TUNNEL_DECAP"); ret = nfp_flow_action_tunnel_decap(representor, action, nfp_flow_meta, nfp_flow); @@ -3550,6 +3557,11 @@ struct nfp_pre_tun_entry { *pmd_actions = nfp_action; *num_of_actions = 1; break; + case RTE_FLOW_ITEM_TYPE_GENEVE: + nfp_action->type = RTE_FLOW_ACTION_TYPE_RAW_DECAP; + *pmd_actions = nfp_action; + *num_of_actions = 1; + break; default: *pmd_actions = NULL; *num_of_actions = 0; From patchwork Tue Oct 18 03:22:30 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 118327 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 18CFCA0560; Tue, 18 Oct 2022 05:24:54 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 9802042BBC; Tue, 18 Oct 2022 05:23:34 +0200 (CEST) Received: from NAM11-BN8-obe.outbound.protection.outlook.com (mail-bn8nam11on2100.outbound.protection.outlook.com [40.107.236.100]) by mails.dpdk.org (Postfix) with ESMTP id 1E8D342BA7 for ; Tue, 18 Oct 2022 05:23:32 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GxT2sRf7tL1girpsiXQrfMxVIEmBhCoLsMyiwq0sNK54yOTX6rFTeNuAqWn5eq4Fnp90syEw7TYr1vxDyMzT3FAbYuLg8ozywT2FF1ed3FFyAvW355u4t31CCTdZgNiuainzGkd6SM/uc58DrskG+m5v514UM7rLxuB1WN7eWERNRvJdqZJ/r9LU6g1buBRCq+lMaAiwig8CpLyM/E7T+8dK3IR0L8BK89rPLD8cKpQNw9wVnZTIiJIeOeL4MGz3iA7Wv8OBFf5lFahCT6OyLeZxuasTcSBHLfPpK/oNsgk7+nN6VnW6lAANhYdf5EHMcc2vZUv/JxmlLJ0NByg+4g== 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=AAGwjt1/opRD2N8Ml9lvukRSR/NezUwYGIs7Xk4F4KU=; b=hi8VP50Gsym5pkCL6dYb5zEm652H7Tia3RmTqL9LyDMIOPOeeFxLk9uG7q9S1pWx9d1tDaT7thR1Z3xKg2lB7IoUrgUXMF2n6tbdl+dfMvp6nZsmWO0OGLANtkcIWhmEaMQOPMLxFCiwWRJ9DdhTS1lMOPVo6K0TTxwdg3XpmzeeejhUI2HTrVm0wMfe6TNeq+F8kMnxR17bPiEf+57PSteZClm7HhUfhasohvinXNNSiDugsBdRUuEJEMPLggPNG76qznNTW/2jgu+SWUzscGYrOM+k7FsUBRiCih4RXjfJR4Bf/O9IT35XX36VRCbQrAYugwHSJnRApbdZZAPp3g== 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=AAGwjt1/opRD2N8Ml9lvukRSR/NezUwYGIs7Xk4F4KU=; b=pVeREwvhCODTUXVWpKbcqW+artS1IRvkx0XW6TL9RipWZ3674lp9XdTW60JNnCvdyLMWaZ8mO4GkejNKABb3xhfVgYNrcn18ZoJGYaBD2iR/06zIx/mgmjNgelkgIjo1VPB4j2HJc/EShR4Tc4z1FOopJus9Ump4I0YFSe4KJAY= 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 BL3PR13MB5147.namprd13.prod.outlook.com (2603:10b6:208:33a::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.20; Tue, 18 Oct 2022 03:23:31 +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:30 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH 16/25] net/nfp: add the offload support of IPv6 GENEVE decap action Date: Tue, 18 Oct 2022 11:22:30 +0800 Message-Id: <1666063359-34283-17-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> 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_|BL3PR13MB5147:EE_ X-MS-Office365-Filtering-Correlation-Id: 8fbb2139-8f57-4f5f-7d23-08dab0b82159 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: SWvJXsFjcHMRnTuU+vEIYXo3rRXxG2wqTNN4zOm0ugClwf1ahZ1Wb74uq5K/xFEw6Jaj3v7RpPUOXkuFa3Jmif6+9pbCQm1wSa3Ci0JvVzxAwEtaYAF48bPSKs7ofmqQipXr+34oL4z6Lbn9cyYSnXCsIKehYnh/h+gNF5KV03FDvoQKqwR7VvgEaa2ta/Ne+MULr6MdKYoqvlfTmGTiBU0kx1n+M/6Mk5DY6m4kfxYscVyfc5uggR2ww5L1fxoqwEWw/ACv43cmmU1EKmpTW9P6UXmBJU8LZbRkvDn5qHMJo/EBDmnTG0gIil3npwRliW52q7Ix0TyZ8UB54AM/DAwYx/uXAI4BR9k65c/f7VlKGqofWfX+rQO+eGNKiFH9/1poVcDlIVc49ca5NeaoI8b0D4JqFv9H6x0OcilmLSwqEG/zNN1dPDW1pdrnB29nFJNxIK8iIy7QpKZa4pRBQAo8wMdkeIsp+FoOMNgpjR+9fJXfNMT9w53gkMvJ13ybEKRyru+pC906I8mQQAmZkbhH30xHOYOIWgta9enS9P+RmMkukB1P+KioPiKd8zfSR90sP+Q/5JiZu2HGYz7D2nICRTT3t07mXltNmsmFRqJOnWdLovwpx64ConcFRfA1Iq8V4i+h6YL0z+Hn9chqlnNqyXlHVlYE2jHt4IEMUn62ceE5qOsYe3r4Y9HkCFMm2VcP86Eocso1SU7zfUnnHpykJuFI8JWMa5x440buihW/BgQidfdg1Q/Vv8dplfXL9PwKrqZtck7PJMq+5yCbkw== 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)(366004)(346002)(39840400004)(396003)(376002)(451199015)(36756003)(4326008)(66946007)(6916009)(316002)(5660300002)(66476007)(66556008)(38100700002)(38350700002)(86362001)(107886003)(6486002)(478600001)(26005)(6512007)(6506007)(52116002)(41300700001)(8936002)(2906002)(44832011)(8676002)(83380400001)(186003)(66574015)(2616005); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?EmUud6AXWFcxwjm1ucFB9dCzM8pg?= =?utf-8?q?OlSJlHDaPt/3tT0QEr8NSe9Cf8ebiB0mbBKW5+vhbACo7ItVvRpbnqkYVmdK3oVnT?= =?utf-8?q?6HonNEknbtOrJiF/zq9FO/uEDH/LSBkKxssMFKa4m3fUJFbcZJ3VdNkfruYub5tMk?= =?utf-8?q?7+AsEq5BR+ByHwiK7UQiM5tO8zt4+8xub85XMwWC7OZcg13r9p0gzss6bfm0inwfc?= =?utf-8?q?rdTdg9CK3TBTyD2Ls9XToK6TKvlBzqJPi2MXYiZJwPZ1udnrHTvkSvM98q1c+RHhl?= =?utf-8?q?NmcJT5eiWRCkk6lWdBxy7hgw2awAdE6ZFaHocg6uHSnnorFjSBp7qY4aJAv2TyxK3?= =?utf-8?q?7q64qMO0Hnsu9FGqWmARCrGK7avuQZTUP1CJ/g0MdW4leeacz0U9T0jGcEgFKllTe?= =?utf-8?q?OBi03cGCzkEMMaeLdgDhKusK0vMK74MTIu5yOt2xtYNuHoRfqH/LaJeBPhQsBa3rR?= =?utf-8?q?HWpznMUMXXM6+93mAj708GQt/8CyvHD1w8rKS4wU1exbKcfVzWYNyCvmjEO3cxqpI?= =?utf-8?q?ECU+eRweU9Rm2wvpASX/Cxvo6sD3LYAs6jYGdEUH1G7llnSXyB+yAnIggonmTd9VQ?= =?utf-8?q?0TxbF8ADGcI+k4fOzcdHL+rlXnwBrPBuKo8b780LpGsSLcookztX8MnsLCIqagBv/?= =?utf-8?q?1S0trTtTV8mYyL8Kk1fVu8mt1FAaXYbTAswBVDqhJQfE/T3wfh51G5iHxGsw57QuM?= =?utf-8?q?ynwp+UdFwIROM4U0b4BwzQ2x6brMkQvTYbHzpBWMclhUM2Eaw9MmvEVWzQPoqF+/o?= =?utf-8?q?Sl43bTm+az+RtrxwuQz1AbJXibwssrRc7eE91VNhAqHatNPp+aMs4HHQhAGPL0uyc?= =?utf-8?q?pF9vMp07+KhrkPuPljL02Zi1DRM4gPsOY40+K3t2Iu4KDuxqGO4g7Agm0pWqZS51a?= =?utf-8?q?AAhWcD+0UxUrthCpdcIb/Lih4/FdZqTas6afhKongKp7ZOpvNTL4dty4ysGYYIaZB?= =?utf-8?q?RGg13tzRPWbSsUlHHZxUqyfCiG51i52Iv6P7/D91EXl4GfRTHNJBgAS3M2Sdqrisc?= =?utf-8?q?fVdIwguywHzPJSuxOoXXaje2CGOdlzYJpIkQ6oMQKEz5Rpt2S0lyjXIoBBxOMuKDJ?= =?utf-8?q?AaMid/lt10NzQgtolSCajh7uRAVFEJoJtzCiT8apsbjYQBJJjW1SbKkJ+/4u3a3lE?= =?utf-8?q?Z8FJcNQeGhBvQKjFNUyKOUgL80gpKNMwmNYw/lk+8dFblT/IxPr+psYh8ED21/pWc?= =?utf-8?q?sUe/y9im/vZ+nxko60w1wdrtZi1ACr69/Hyr1j4XgkTNzHQ5RAXJOa3U4Jp54qMuW?= =?utf-8?q?3MDGSAbYCa3Smbcx7TVbKKW4sAJuI+a4AIvMJJGAVVv325Oi+IMOTFUbinXVaEsZr?= =?utf-8?q?lYQFzisriopMlidxmV6jZ5LCkTiUb8AGLd0yOtOSYCvAIwCsqJJysZd6ApWzUjiqg?= =?utf-8?q?kH+FjMUfhwuqabWraQhteJAVOUsiLntvL8FuMOrodH1RIvMOh4ODYIZczU4A9O1wh?= =?utf-8?q?+zDvRj7ABvuKKHn4lf+38SIK4IzyW6udz8DLrAYdcVrEvABy2BeWwB0WYO67Ai6IF?= =?utf-8?q?93U9c4XCPK98NRuQ8yqNh+95XUnLF7jZHA=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8fbb2139-8f57-4f5f-7d23-08dab0b82159 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:30.9298 (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: Fhfma6toguU1MjJGaTICBv+tX0QSE+Yk2igZ48qlg3yWdeJeaXqX1S3HxC++Tb3YHO+78o3mJ20PwveZgML2F1n3jzQT+/yjlUkx4IR6ykI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL3PR13MB5147 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 offload support of decap action for IPv6 GENEVE tunnel. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- doc/guides/rel_notes/release_22_11.rst | 2 +- drivers/net/nfp/nfp_flow.c | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/doc/guides/rel_notes/release_22_11.rst b/doc/guides/rel_notes/release_22_11.rst index 92a0d64..4adad3c 100644 --- a/doc/guides/rel_notes/release_22_11.rst +++ b/doc/guides/rel_notes/release_22_11.rst @@ -185,7 +185,7 @@ New Features * Set the TTL * Set the DSCP of IPv4 and IPv6 * Encap and decap of VXLAN tunnel - * Encap of GENEVE tunnel + * Encap and decap of GENEVE tunnel * **Updated NXP dpaa2 driver.** diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index a8287a1..f42cf77 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -1482,6 +1482,8 @@ struct nfp_pre_tun_entry { tun6 = (struct nfp_flower_ipv6_udp_tun *)*mbuf_off; tun6->tun_id = rte_cpu_to_be_32((geneve->vni[0] << 16) | (geneve->vni[1] << 8) | (geneve->vni[2])); + if (!is_mask) + ret = nfp_tun_add_ipv6_off(app_fw_flower, tun6->ipv6.ipv6_dst); } else { tun4 = (struct nfp_flower_ipv4_udp_tun *)*mbuf_off; tun4->tun_id = rte_cpu_to_be_32((geneve->vni[0] << 16) | From patchwork Tue Oct 18 03:22:31 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 118328 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 4135EA0560; Tue, 18 Oct 2022 05:24:59 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id AFC9342B90; Tue, 18 Oct 2022 05:23:37 +0200 (CEST) Received: from NAM11-BN8-obe.outbound.protection.outlook.com (mail-bn8nam11on2100.outbound.protection.outlook.com [40.107.236.100]) by mails.dpdk.org (Postfix) with ESMTP id 76BF142B90 for ; Tue, 18 Oct 2022 05:23:34 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JRlA1QLSCaxRTJQecFN70JbGizillDpB4duJmswZ8PMszvwc+hYu6oF7aMwAcvj2CdLhjRQVcn9MBQ7qPzwAbu6zp7vCxwhoTyAC1Ld1WNK9FnEcltP7LFpDpusta4Um4bSi21jJsPuRv7f3hW/FZV6r95S5i/tLx1k60RRktbnAEH6zq38lV1+J+P4JsEHdZVFkfbqFuOvhtHULzKBhsUKMI5/bouHY0RQVRKdOIURk/PWcXnRo/SRnvfa5waVEwxsbzeQjneP4suW5yRzrsHYoDL3JLM3dS/EORv87uIgLY4q7N9vBil9qENbA8lWbNmX6WNep4VSNb5uYnJ1T0g== 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=n4xC8m8BD0050iYQu7aQQttUk4UVL8SiFIGKJnVD5hY=; b=bYyxeHkOTIVhZmsv8ARQ+XrYx7uHagyggmpNHegBpvHvYMRgG0eOjuNyeESjEfGrb7sSSG9d/OSkGvsnBrgnV8Batqgj2TGepXtux+y9FJ8dtU0UA4qCwvncctxydzRB6LwnRiQXBHyJDL5iW+uDLdLRmxdyVYYEqXhls8fOg39el8dfziYqEBClRUOs+Atsj89WU8WiMAtWKyMJb+cwQqqBvtgB2nO/WeeoAfgNt2gS+P6V2xGeRE+tZcz59J4bSY/JfuIShovHT57qeI5djBGGmcGwlfburmZBBras0tVbUNjWc3ivTLRm4nyhZUc2HKAfqbFCfAozBk5KNe63Cg== 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=n4xC8m8BD0050iYQu7aQQttUk4UVL8SiFIGKJnVD5hY=; b=IJnzpyXENW6WN0bAP5FBb+yIoXn66FEz0vxPxpl2stuF6C0MSSkbbnqNl697T7Rgx2KdJXrDVpIOwxR1og06rXRXTaAH7ugblapzVhQO/V5nfVtQgvqXyNZqDV56ti/Yf22jmjxAmfngI1hCg83DKoy4inOZcMsvhVOhAswWLPE= 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 BL3PR13MB5147.namprd13.prod.outlook.com (2603:10b6:208:33a::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.20; Tue, 18 Oct 2022 03:23:33 +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:33 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH 17/25] net/nfp: add the offload support of IPv4 NVGRE encap action Date: Tue, 18 Oct 2022 11:22:31 +0800 Message-Id: <1666063359-34283-18-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> 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_|BL3PR13MB5147:EE_ X-MS-Office365-Filtering-Correlation-Id: 274ab8ca-0d33-46f0-ba28-08dab0b8228c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: +66LKZeB7wkt40FRQHrdzO7xwH41+BLaMV+qx9o8RZaQswg3SJCDAY06LuZqjz69gMisV5HYSLNiisUY+GKLLfOSu9WYcezk8Wx5DXLz/WSt20Y/KazN1b81EAuspUC+MFwOrFBm98mXo/eDhVH9n1HVKFPJFsGvhd3NPBFMNB8PZcwAZyq49s9cvPPyceAdks90+pQWdeV54l23eVvcbqOW4TvJUet0YytdNk9nh60Y2kbe/SRJ+5Iam+8KmM3xk/vD11cM83mmiw60wY2QsF7d2aQUQ27tprA7OUZpg40stMJKVxH1TtkrvjMdypp0nTsKawxVPyKmo0HpAdlhIMlVtclDEV5MbBiUqVqyRQzoDpI68Sond/Pd7BhWmBYjcPoQKbvb9jdgFgsF27qM2aBZHwFzwzDYjlT/wKOyI1vzg/0HkBpbZtGcxKHjmcZ2k9De9OygzixnJFUG9nd8IZ/SHo9ltfZDcJw6mB/FMcnhS2POfLc41uJvm8ld/K3zo5yYruT0OQgaCZamRcnCeIGQ592SVvL66PC0xLjONrhUwGPlRNohepi1EKwbaheV36DAAt5voosNm1JTg7rTDucGL9noGSKnLPpkeQ4IaOzwPjl7bn+sMABq4qNkTZ7hGKpdj6xBNClLFowWxQLD26hvuEvX7k1k6ZzIKi88U5FWtVkv/nZLmkIq4We421V6VS6HY1K1anlnLKbHQNdK/LieS8Y6m4ISUQQbNqOa/U2MiybJ2ONiAsRmstFbR/lGKL+e8Zaav8z7uCpcUZoOiw== 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)(366004)(346002)(39840400004)(396003)(376002)(451199015)(36756003)(4326008)(66946007)(6916009)(316002)(5660300002)(66476007)(66556008)(38100700002)(38350700002)(86362001)(107886003)(6486002)(478600001)(26005)(6512007)(6506007)(52116002)(41300700001)(8936002)(2906002)(44832011)(8676002)(186003)(2616005); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?Hn9dRYlTA+wwP5SVZC9UlJO5m5We?= =?utf-8?q?sn2iENtaQBGFrga04oPoakPF/CpX7gJD4yP+XdR+ALWLxzRmvPjm8ToedRvC0Y6+Y?= =?utf-8?q?uL/WfQ6/gZJmnqc/oWBzzg4QIsfsETJjS+pVaGfkVtDOpalLJ/MRo7LU3g3QRAQ10?= =?utf-8?q?G004K519H2YGY6oWQr39sDq5hL0Us6NFHjQ9SpK52qQoezPyntjlvOh15rx6ydJOH?= =?utf-8?q?5g5L0UUYg2JFHhVaUGHTCQWk2GCeX5sN6JkT6OI0L4WCs9iiMcXelJepmp69KTfNi?= =?utf-8?q?TI2Woq3WPeMqg48f9rxKhNKpFq3+EidaAsF/aZhbfnmeNsrXyJervP9F9tBEwAuFO?= =?utf-8?q?6XH7fggajUTcv8NiVgv/Yi7HvEkSvkwTA631L9WdfFXsMRja3DeemY5mPMgWKUTYt?= =?utf-8?q?Bp1vd8770auGECYNuatkTLM/+BQ/UqtjZveT2Vmvur1y0BOuoNYFazvawEZcPW5ay?= =?utf-8?q?HoIGiBIaf/5KsdsBV9+rRwRz0Au99ZVA6lKwE10sB8S7K5/HyejEKuStCsAIiWUHJ?= =?utf-8?q?QTVHZSwauvPLs2YnG9RoEEQyWe25+g0FIRAx3kwXGCWxW9g5w50gEGZMdokfHVLQd?= =?utf-8?q?5HjGzzAtblkyCFEeQYHijWW86PHI88VU1u8rkn0wbrXas1Sk1NxgVurxyDHHYjeSF?= =?utf-8?q?vJ45QkjMfdQ0g/8fDBsXaEiu2WBM3tODZ1VvFv5gdPL8PbqJgMt9vweJne6TtYgtF?= =?utf-8?q?hjnyEYkNwGwRji7m0acLPEaThfUOJ2JmsOcv89KBq0qaBEL0LA8DQXLuQB/h+YaU6?= =?utf-8?q?KM4EXcrdzeQ94LqZ81A5QHP2e5hg1M/2Pw1IO3jbpP6Yf0s3Yr9cCnDb9//VzLY34?= =?utf-8?q?r31REfKtIrY0xoTBCrLF2e7pCxyiJNcC+isrbfu+yCjrho3VakOm9HnYBPHxnl1Eg?= =?utf-8?q?iyRrhRI68iF/i+RO+dy89VRrEVRs7kk5toH7tOC4MZIVrcGE+b2PuXRa05AHbzvlD?= =?utf-8?q?T1t/H+8RQ//sk2lBvMs7SGSyGwvI5t6GYtxeeX34Pd7LL5WvYjfBq+jdGHZ1bc/SJ?= =?utf-8?q?UYQSzUvEtm3rON0GNINQCUdNgr+H2c5Ft0ooqxwX/mIEWqoRvTpQJeFcg44GUV0pY?= =?utf-8?q?F7k+VZO8GWkxYvue7kPs0VaAdm9T9PRS5KsQDEK4800/jzibog+xx4sQcx4MZnk0A?= =?utf-8?q?w2nRUbZVZXLN8BM65m5NLndjvUTDsKCkhr8/bXaHLGhbHs+GNt7hSVNby1V8BTkIf?= =?utf-8?q?AImPzyOpdSC2NJ+LFCMuICaAWYR2Wa1davp/H8y+zBK3O99lZX81cozz60wfo03mO?= =?utf-8?q?n1W/G7BTaKa2+zfrqD7dNV3zkwI0fwu5kG+6U/o/noiDmJXXyXYDc1dA/5gAYkrac?= =?utf-8?q?o6PcQ8LzvqXuyPwUw7ZpsrWihOEjVKDulyx9ifkIE44FHLfR7hMLshaXLwyo5ZLQ2?= =?utf-8?q?LqNW/MugEXMOFIwtVLn/oIAX26YZe1pUcb2TofAOBUU0Dbn8SiapnFCdZP/KQy6gl?= =?utf-8?q?t8T96vy8BI4qID+qn4lFbgsUTa1y2b+DM74xN1mEDTkdUlZLY9WS8mqDQaZg751GP?= =?utf-8?q?IfpzgxqxIQsHmo/tyI93cs+gjbnJDuGDaw=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 274ab8ca-0d33-46f0-ba28-08dab0b8228c 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:32.9433 (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: 2VY9cmX1vGRGwsDdqMQEYAwPvMItmp1TXZ9zIupQeKb6hTVoXcypj/ijBVQDfsbkJvEFmOfAseYnsHPYi0X2N8BKEBj0BPctWlJ86diiR5A= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL3PR13MB5147 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 offload support of encap action of IPv4 NVGRE tunnel. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- doc/guides/nics/features/nfp.ini | 1 + drivers/net/nfp/nfp_flow.c | 43 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/doc/guides/nics/features/nfp.ini b/doc/guides/nics/features/nfp.ini index 7453109..5a3d0a8 100644 --- a/doc/guides/nics/features/nfp.ini +++ b/doc/guides/nics/features/nfp.ini @@ -43,6 +43,7 @@ vxlan = Y count = Y dec_ttl = Y drop = Y +nvgre_encap = Y of_pop_vlan = Y of_push_vlan = Y of_set_vlan_pcp = Y diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index f42cf77..823b02a 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -47,6 +47,10 @@ struct vxlan_data { sizeof(struct rte_ipv6_hdr) + \ sizeof(struct rte_udp_hdr) + \ sizeof(struct rte_flow_item_geneve)) +#define NVGRE_V4_LEN (sizeof(struct rte_ether_hdr) + \ + sizeof(struct rte_ipv4_hdr) + \ + sizeof(struct rte_flow_item_gre) + \ + sizeof(rte_be32_t)) /* gre key */ /* Process structure associated with a flow item */ struct nfp_flow_item_proc { @@ -2846,6 +2850,41 @@ struct nfp_pre_tun_entry { } static int +nfp_flow_action_nvgre_encap_v4(struct nfp_app_fw_flower *app_fw_flower, + char *act_data, + char *actions, + const struct rte_flow_action_raw_encap *raw_encap, + struct nfp_fl_rule_metadata *nfp_flow_meta, + struct nfp_fl_tun *tun) +{ + const struct rte_ether_hdr *eth; + const struct rte_flow_item_ipv4 *ipv4; + const struct rte_flow_item_gre *gre; + struct nfp_fl_act_pre_tun *pre_tun; + struct nfp_fl_act_set_tun *set_tun; + size_t act_pre_size = sizeof(struct nfp_fl_act_pre_tun); + size_t act_set_size = sizeof(struct nfp_fl_act_set_tun); + + eth = (const struct rte_ether_hdr *)raw_encap->data; + ipv4 = (const struct rte_flow_item_ipv4 *)(eth + 1); + gre = (const struct rte_flow_item_gre *)(ipv4 + 1); + + pre_tun = (struct nfp_fl_act_pre_tun *)actions; + memset(pre_tun, 0, act_pre_size); + nfp_flow_pre_tun_v4_process(pre_tun, ipv4->hdr.dst_addr); + + set_tun = (struct nfp_fl_act_set_tun *)(act_data + act_pre_size); + memset(set_tun, 0, act_set_size); + nfp_flow_set_tun_process(set_tun, NFP_FL_TUN_GRE, 0, + ipv4->hdr.time_to_live, ipv4->hdr.type_of_service); + set_tun->tun_proto = gre->protocol; + + /* Send the tunnel neighbor cmsg to fw */ + return nfp_flower_add_tun_neigh_v4_encap(app_fw_flower, nfp_flow_meta, + tun, eth, ipv4); +} + +static int nfp_flow_action_raw_encap(struct nfp_app_fw_flower *app_fw_flower, char *act_data, char *actions, @@ -2883,6 +2922,10 @@ struct nfp_pre_tun_entry { ret = nfp_flow_action_geneve_encap_v6(app_fw_flower, act_data, actions, raw_encap, nfp_flow_meta, tun); break; + case NVGRE_V4_LEN: + ret = nfp_flow_action_nvgre_encap_v4(app_fw_flower, act_data, + actions, raw_encap, nfp_flow_meta, tun); + break; default: PMD_DRV_LOG(ERR, "Not an valid raw encap action conf."); ret = -EINVAL; From patchwork Tue Oct 18 03:22:32 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 118329 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 9106CA0560; Tue, 18 Oct 2022 05:25:04 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 8581D42BC0; Tue, 18 Oct 2022 05:23:38 +0200 (CEST) Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2104.outbound.protection.outlook.com [40.107.92.104]) by mails.dpdk.org (Postfix) with ESMTP id 5943742B92 for ; Tue, 18 Oct 2022 05:23:36 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=aDEv4maTUhoy8f1CY+Z32OJEPbOQVSpM31uFh99XcXUVZOXMMOKy2/JXWzdepuJlalyuF6q7zfgEU/KytrjhZt7U9UlcRhOIQ2uMqSdbqvmoz8KbJl4SpdH+2+aPPF7OSfZ0WumLCnwu5dXQ1vPSCtg4LX37Synt4IiILln62/yjmUdmVAlCZf1u2lRFuPNd7ho/TPcqFhy0EKvVkAUgwqc/7z2nfEKoScPQ8OF6VFP5hOofKEuc5XeB6oWrCmTvAj2IhSwLi7tpn0/5UA7TBghifr+lp13OboYbT7FzkLR3usMBln51qVAbDTmy6Jhq2s8RJUYI+rLDEJOwSgSC2A== 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=MxJC+Y39NY4NjlZZaYyzngSoBOBIT8B984zvT8jCHSc=; b=icPRi8AXbOHq9Z6SoUUYjc48Q3+p6fDKpuljFkqu3YHxqd5PNzCaXCrpujWUeu0K+Z0zkG7R0xPobg4LsgXy2VhV5A4e/yOHvBcsrrngL0AnJ/tn9Ia8cBWRPSunrQ4Hcyp6bhf5rt0utD6aZ1Z9DFsoRwxVRhkwvdTpJp0rSn5NvavintsU2yRMp9ucSqNnb2+rNzEc+KyyWLX1q1qcvX7Yc/krpDn04iVWMRzzXTRmDAyf+hbgosMg5Tcq5+izQBcBK5s7MNjofv8VgsQylNgpCUPonnNOtk7O5REGxm78od6+HZhRIu7dRuRIdJyDZX/MKlZngpcqcjnpGxp9nA== 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=MxJC+Y39NY4NjlZZaYyzngSoBOBIT8B984zvT8jCHSc=; b=wEeuIvQ/cxSo5Ws6mbXSCXhE4uAyMpQu9GhALIXKEgjJeIHDn+OaDdSLIZ6GhdnblJd1DCksxnLyLd05aF4N2zGKQ7ySx1xymQ7wBa6r/UdtDC7LGQkuqSbMQuEh87Ay32aOFLK5XcJ1zZ6dAgVu0A9Meqfzum/pcrpDo7/6oIc= 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 BL3PR13MB5147.namprd13.prod.outlook.com (2603:10b6:208:33a::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.20; Tue, 18 Oct 2022 03:23:35 +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:35 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH 18/25] net/nfp: add the offload support of IPv6 NVGRE encap action Date: Tue, 18 Oct 2022 11:22:32 +0800 Message-Id: <1666063359-34283-19-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> 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_|BL3PR13MB5147:EE_ X-MS-Office365-Filtering-Correlation-Id: c680c670-3c1e-434d-8e1b-08dab0b823c7 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: WnbIKGVv6Up8Ax3ybmFk2tBTftdKnlLfjZ1QJKEu9+8M9FOUBmeEtbaE8lonnDGhdvwM56eXuKNXiU0rjQ2Q0Wpw4UKNes0jOYng1yIsQFrAFMrTK31GeVZ6EYupfy+BaEyqxRN4CyDMxvEbpFhZ2ZOo/Hgs7v3FhpGd3FFEafn3grLICrnucDyP1Lu+aLaVhNoTmEzxtCi89gKlFGAldJ1m0p2O7azscVQyTG0Af+Txs0/2g1tZnncf4FZPse8gbcOL21Ykg1GlKPlFFz8VIpZLskZfuP7jNGHbNQJ9nwDfpvsgaGsflBK7L3moiEH1C0+Craa/XmDhRJHJT+cMffq3f8V/BJjFuDtQUkKJPp/T9ughpRY61Q3ATywkF8HxpVZRNArNQT+H6++Qb5AOgv+CQzc9xN3avZt2EQWwdPYcNOy6+gDd7w6kE9cOZKdixnLmlzN5VHZhAx+PQ8dLY8A2IlXWF+ocZfBMqCSPr35xksgWFC+JZENSh5h18qg9b2IY053p6a1lANFHCBLwfzXlHYSsaqoRaLQzDsh0iz+g57o/pcdRJKEsvcQtI3Xw20umPZV1oZ9Ddko4gsU6xz/9ri+nfvDIJe78Y0CeDB+x+QGQK7IoAqqzcVf20xC0aAbfdMggkXquYRWJkJAPn/trSg8Gaga7gnLAssaEBHu2UHNO/ApuA8d0fb/sv8bFsU+i/owTmLQwyinGUGnAUCoUQt1t8tOZ3R1Zl0LO6csEqYN99QmijCDpWZhy+Vl8xyLcpcYEfWJy56oiAZ3FYw== 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)(366004)(346002)(39840400004)(396003)(376002)(451199015)(36756003)(4326008)(66946007)(6916009)(316002)(5660300002)(66476007)(66556008)(38100700002)(38350700002)(86362001)(107886003)(6666004)(6486002)(478600001)(26005)(6512007)(6506007)(52116002)(41300700001)(8936002)(2906002)(44832011)(8676002)(83380400001)(186003)(2616005); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?9xLMbp/YFpdjtUElGFpyTaRoSsX9?= =?utf-8?q?PChfmdtHYjRJVz+xqApqCcrgioQuYe8La7Tg4VxUnBiiFCOUr+m/pB58FXnSVQHFg?= =?utf-8?q?NFe+LCakpHhDzg2r9cX04+JeeMuRbSVLOCTSVjAly0ruJtBBg47gvPKAPPw/is2Uz?= =?utf-8?q?vilqVZ8FdKPPCyr3LPgLMu90dhAJa14xbqItfP643GDuigrFKuofQR1gr5gyaCML+?= =?utf-8?q?wq0A7KJoFglAUo15ubCx80VDa8qHz330vCcI2q6Ijyrwa/Po1g60zuBKJXVlb1PeD?= =?utf-8?q?qFc0SufVVIJZ/8a6ruAdLuwm8OwOaJwigV2dMqemgFIvbiy4yPZY16abP+HTkcEhb?= =?utf-8?q?xn2Xq+rA4Ne0Sadg/yNZoFEDhU50G0EvECkyJj4snsD7VizgPqgTnws5MTY+923ie?= =?utf-8?q?Bn5AZ2EeDTGu7noKfT/oklPLdR7eU9ONj9MdC64FRCqX4tFgVZQ1D3lmcjsb2Ham8?= =?utf-8?q?2l8oDEFFs1J1jH+SXcH43S0EN6rQUEdP20pQHeoy1wiLD8hHx/iYhL0hVAi2WJAFM?= =?utf-8?q?yOBjrXolPDamPJZfzIV8jdrhD8WmFLIC1bb6udOm0vcEayphUpR/Gfr7mqjr08CHa?= =?utf-8?q?t9xbwPH1EWAZujETg9TUMOv6Q+OClgSN32iloAQZjMr/XKnOD9wQi5YBGvZWE6IjE?= =?utf-8?q?omimnoWOR7y7sCAlU7VhnQOrzEuWPoYaLMY3uLndKXamqSu7/9MwB2KxtU/f+oLtn?= =?utf-8?q?nGyKfbZGA5HyGjXLtccnlQDO6UuxXg4FXreTeE5tq5G5KKzOjj4/0pyshYAb9rWkO?= =?utf-8?q?8Bw0LBB5Xc0UIbnCUMO5qBPg6tbhrDKTDqFbDQzhsAHW8uCbgyte3HH3NTaqtaUAG?= =?utf-8?q?5OurYZUX+nIg8K4mi22xWoo3SDFzKA23tItWmqeXHfNU3pvHc+yB+PDOiUkXJyi+c?= =?utf-8?q?yhph/WHnaCb0CLKX3hR/tkLH5tDctS9xGiifF9m2mo368hktSQ9HOKPZir3IC3N2b?= =?utf-8?q?NvrL4vtHI0yzVlFEiHsztTB7UQAABegy3VI60cqGdyRMrzmLyVJbooru4lf+tXQAT?= =?utf-8?q?8J3ERhl4FIjkkn37qHRqCJ6HVuQ3ghCrlf9db3T/zTk2vHStI2ZdD02NP5eOw9BK6?= =?utf-8?q?KjBoWW+YOuoSY5yR/RqdapwEwaZ3tatJFSA9/ZYu6NjTS7haq0xNB3atj5RoXuMR6?= =?utf-8?q?v/p8JklrS1UIMTSHmRtbsybVtx4nnc4hpLrPJeuaiMfbXuDvFGHKKJBjFX5HrnLSY?= =?utf-8?q?dGgKMjv7et4hlnbvJl7IdThcfhPLedi3fc5AciIP8ZMPbQ5ygbyqAIAwTxOzv39+D?= =?utf-8?q?qzmhjjYScam+8rZmO48lDPGvogeQ6LyWuGt7MPQZMhOIRB0fSELcBzyyh1M+r060n?= =?utf-8?q?zSLI7Wv5INXhVlYxh9FMbox2ctUW2TcSyuobTRP0HhcBGXjPXldHQSrKbNbFO9gTX?= =?utf-8?q?vcDkwF4oa7/vnRrcqMh7xJfMeIvW/duPsEd6z5CSq91jtzrZuMff/GxB21y1UtbDw?= =?utf-8?q?PUiPyNFd9/lsRDMKcpnoheVkbRzzYZ+JPmrTAOf+iPKFsf4RaP/T+SqRmyNkeUwm7?= =?utf-8?q?kKO9fJZmjP5Dpk3H23TAhI3Jve+6FcQBoA=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: c680c670-3c1e-434d-8e1b-08dab0b823c7 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:35.0066 (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: Gnu1P/NPKx3BTVK9esEWJKJ9ISsSa21WV01PDbXk8wHYfxLFkwJpKPJUe8cy8ZZHZOfY7/yHTnLee8YnPg4KT596BP27XLqdDXvhK0c8Yxg= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL3PR13MB5147 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 offload support of encap action of IPv6 NVGRE tunnel. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- doc/guides/rel_notes/release_22_11.rst | 1 + drivers/net/nfp/nfp_flow.c | 45 ++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/doc/guides/rel_notes/release_22_11.rst b/doc/guides/rel_notes/release_22_11.rst index 4adad3c..e2f7295 100644 --- a/doc/guides/rel_notes/release_22_11.rst +++ b/doc/guides/rel_notes/release_22_11.rst @@ -186,6 +186,7 @@ New Features * Set the DSCP of IPv4 and IPv6 * Encap and decap of VXLAN tunnel * Encap and decap of GENEVE tunnel + * Encap of NVGRE tunnel * **Updated NXP dpaa2 driver.** diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index 823b02a..adba6c3 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -51,6 +51,10 @@ struct vxlan_data { sizeof(struct rte_ipv4_hdr) + \ sizeof(struct rte_flow_item_gre) + \ sizeof(rte_be32_t)) /* gre key */ +#define NVGRE_V6_LEN (sizeof(struct rte_ether_hdr) + \ + sizeof(struct rte_ipv6_hdr) + \ + sizeof(struct rte_flow_item_gre) + \ + sizeof(rte_be32_t)) /* gre key */ /* Process structure associated with a flow item */ struct nfp_flow_item_proc { @@ -2885,6 +2889,43 @@ struct nfp_pre_tun_entry { } static int +nfp_flow_action_nvgre_encap_v6(struct nfp_app_fw_flower *app_fw_flower, + char *act_data, + char *actions, + const struct rte_flow_action_raw_encap *raw_encap, + struct nfp_fl_rule_metadata *nfp_flow_meta, + struct nfp_fl_tun *tun) +{ + uint8_t tos; + const struct rte_ether_hdr *eth; + const struct rte_flow_item_ipv6 *ipv6; + const struct rte_flow_item_gre *gre; + struct nfp_fl_act_pre_tun *pre_tun; + struct nfp_fl_act_set_tun *set_tun; + size_t act_pre_size = sizeof(struct nfp_fl_act_pre_tun); + size_t act_set_size = sizeof(struct nfp_fl_act_set_tun); + + eth = (const struct rte_ether_hdr *)raw_encap->data; + ipv6 = (const struct rte_flow_item_ipv6 *)(eth + 1); + gre = (const struct rte_flow_item_gre *)(ipv6 + 1); + + pre_tun = (struct nfp_fl_act_pre_tun *)actions; + memset(pre_tun, 0, act_pre_size); + nfp_flow_pre_tun_v6_process(pre_tun, ipv6->hdr.dst_addr); + + set_tun = (struct nfp_fl_act_set_tun *)(act_data + act_pre_size); + memset(set_tun, 0, act_set_size); + tos = (ipv6->hdr.vtc_flow >> RTE_IPV6_HDR_TC_SHIFT) & 0xff; + nfp_flow_set_tun_process(set_tun, NFP_FL_TUN_GRE, 0, + ipv6->hdr.hop_limits, tos); + set_tun->tun_proto = gre->protocol; + + /* Send the tunnel neighbor cmsg to fw */ + return nfp_flower_add_tun_neigh_v6_encap(app_fw_flower, nfp_flow_meta, + tun, eth, ipv6); +} + +static int nfp_flow_action_raw_encap(struct nfp_app_fw_flower *app_fw_flower, char *act_data, char *actions, @@ -2926,6 +2967,10 @@ struct nfp_pre_tun_entry { ret = nfp_flow_action_nvgre_encap_v4(app_fw_flower, act_data, actions, raw_encap, nfp_flow_meta, tun); break; + case NVGRE_V6_LEN: + ret = nfp_flow_action_nvgre_encap_v6(app_fw_flower, act_data, + actions, raw_encap, nfp_flow_meta, tun); + break; default: PMD_DRV_LOG(ERR, "Not an valid raw encap action conf."); ret = -EINVAL; From patchwork Tue Oct 18 03:22:33 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 118330 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id C0119A0560; Tue, 18 Oct 2022 05:25:11 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 97B3942BC8; Tue, 18 Oct 2022 05:23:41 +0200 (CEST) Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2127.outbound.protection.outlook.com [40.107.92.127]) by mails.dpdk.org (Postfix) with ESMTP id 637EF42B93 for ; Tue, 18 Oct 2022 05:23:38 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=F0PN+vFrF+xdZi/oaY816N4hZQFGEgH00GyFEMsXpyQjekEu/p4GkVnGcif8Bhwqp7v12gWxL2xtiWNwpN7HqBF0cUsKPnWCWkRORvskRuL1LAQsJSiaQG9uuIQTgoGGaBly2G4NdhKfTaILKYCqeeMYm5ti0/ZiXGgpzvYA6ht+Hhuf7r7TPOyCoxpiyLIK9ZddrEti+9o5QIHBgEQEJVnU+jeA26PpH3OY7zTsPUbT7tOtshQj42x9t/B5kOOK7n22jpFQ+mpxG7PigbsMYFsNCt1eiPM5FUtWmzEiv7J4BLefGLbTciH0W3SBRSQU+WiNLBigF+z8/PpOdglpeQ== 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=rtID+SN/TVL/DP6z6xxTKNCMtjXwwhxiOMc940gznqc=; b=TcJDoUxMwfjtrX0AowWVNXnhxczFs1J/g41TMHqo0BurYiXpaT6WqHWSMxNZy0pGOZ6v0dNue2ti2RwtjmMUh7NY19CijsZaca8/Y8W7oJEuta/LrIdMz1wMmTWenVU6KzhHySPLAEY/xMbzftJPXt5fDfmRYTFDCcXxoAfIk/F4oGyk+/rAS7zWornvYIuj1D23IMMyt8rXcFwtsUbaPsAYNGGik1f0VicMSi1iWQN3dF8rhzt754ioAgI6Iyh0HAozd1XFA4X/dOygz+UOcoZ7RaEG+JvO4vdUnpH1WdRwD7arUjnT3QSfFpAL36JG+tZNeUMQJXjFO0dWk6Uq4w== 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=rtID+SN/TVL/DP6z6xxTKNCMtjXwwhxiOMc940gznqc=; b=Rrew7n22FAUm6BKi7Vw4gcTUeY1IfQ4K8+i3ghd4OQqiXPIV/jS2A45ZJy7omXn+8EWLwY53m39buQH42bmAa+/Z6b9eNkabF8Xwr1oe0FpRdlQx4BtDhhm0zxU+LnK6FZEIMpbFCSqiYuUWwCun+KhaRVK+XDi2jj++UH1bnNk= 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 BL3PR13MB5147.namprd13.prod.outlook.com (2603:10b6:208:33a::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.20; Tue, 18 Oct 2022 03:23:37 +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:37 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH 19/25] net/nfp: prepare for the decap action of IPv4 GRE tunnel Date: Tue, 18 Oct 2022 11:22:33 +0800 Message-Id: <1666063359-34283-20-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> 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_|BL3PR13MB5147:EE_ X-MS-Office365-Filtering-Correlation-Id: 2ccdf36a-d9d8-43e4-8349-08dab0b824fd X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: hNqIm60S59Ysg0z+is/5zgRHxCOZvbDnJuV6KQtwiLfB6KAHm4vkCJtBlvBHDVzTUk8DPYxT3uhN1v8DksxfoGS73J4gw4FGrg93jssNfm/dOuC76wQmnUkJzAyz+jsJL6a4BrrX5M9xKBuAd9+V6UIJY9p6NWBKNSIEdFkyv1zAAisdM6sk01YvLDJ5nBKOr/IjWMuYO/aWXwE69xL8VtmkPqosVKLP2HF7RigrV7CO9fy2UrACaMzooKuc7gEVSUiJv1YV1hzmhnYRUXBlfKdJB83ZPZQyyRRI48DzaN/G93TFChvCMhrpxwzcD4OnAjZ3SylNOomTjTGi04dYEXGHzVH2dgHG8Ja41VOBtrRthlB4Cb799N0aON6xVm8KCSC/hzxNlpRqt0Ty+8/jf1ECfiojZhFttCVgeW2zvGmxGQI/cX3iQnQxCc2ZcOXWfg8/UyqOPnWX8H2wdSWwv5WO/YQF8iGuzIn92IOMtEktn4HJJY5tnFZcm/Ox3cuJDE/UiKNp7dsMlWwuO/T8LW5bTuwMo8cvFWMzR9wfvNati8QId2iJcoaap665z4drZhu9UeVVMegftwlTr5E5PQoc18kL1wtaKqOC55oljtSuXhsIL1aqW+QpUrImEfGTPhyFzstoBX2ajm8bZznKJOC3ZVknrpuP/jOBXlTT+OBxB93d9ebsvpKpH1kpcpFMZU+KB4WQ2mLVoCYC5ZodQVM882tRbej/uqylnUPjR5/+q9Lm+QcEJ2cL1kueqviq6BYMsdZNMZgkE/tSh54r6g== 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)(366004)(346002)(39840400004)(396003)(376002)(451199015)(36756003)(4326008)(66946007)(6916009)(316002)(5660300002)(66476007)(66556008)(38100700002)(38350700002)(86362001)(107886003)(6666004)(6486002)(478600001)(26005)(6512007)(6506007)(52116002)(41300700001)(8936002)(2906002)(44832011)(8676002)(83380400001)(186003)(2616005); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?L7nAtb2OTQReySQXiQ6YC6zqkOf1?= =?utf-8?q?tI+Aa1t5LNg8G9tgrAZHFh46wmdo1d9FKUNyC3ILT1D71xndxTv+U7wYrJzyARl5V?= =?utf-8?q?/NvWLAVN/a4lMBMD50vyXy/SpQ6++ord5KIFCj1a7Z6HN3Ngy/qxB4XgOQrRKkqEq?= =?utf-8?q?8EAlWA/GHAX47Qpv4Oao+f8SEfTzR0uKvPQ048ej9TEo+MAk2IKb4P4rRJjWTsDmE?= =?utf-8?q?m1CBrrvO1x/6ZxFeMDSy8muFyHPqyG4LHAqjCao82AYx2i5yTwoa+9aMatHgsXLn6?= =?utf-8?q?LZU+1z5KZ1kwcN1WfoVHitVqbQPzByxgTYyz1T4EDi9OfkagvTgGAbiuaApgdyFxU?= =?utf-8?q?yp6oFXAzwwo562ClV4y/WkCVUYLd+/mYNIZirh9z7OMjFfIbwb9VYEH6lLMFAjCzY?= =?utf-8?q?7T8gYt12POOz1WOrvIlfFDP1dgH3lIIKSzWDcB0ypW9m2jZ/IZ1Lx5Y3YauXvMmE3?= =?utf-8?q?OhJLYN2LI+Vs5KN/4doFq0kKYXmpAoThDt+REbw5y/f5GvXvXm6wzv6gw98dGPtRU?= =?utf-8?q?tpGBkzsUXRwH8yIu7/iTVJ7LBgg0AFAZcRty7fVQqbFVF0jZv61H3wFKbF4iQ0a59?= =?utf-8?q?+BTqMToOOBq5U+46TE/gZ9Runclr3fs+AmHZFc5MIlI2ZKEDKggG3St9dev7RJXmW?= =?utf-8?q?tZv3E+6NjeBdpHFw1VXMnFyHYjeVGQTk9nq/JIA8/FF1QzqNtp2u321M+ZVTycjY5?= =?utf-8?q?Pa2aDuV/heBH9sSqg4MUpXq8S+NDIFhFSqO2rA0MvF6B93BUJaIP+2r+wx0dNWjRN?= =?utf-8?q?HrDEmI7jVJRiAcfxphs4pDS9g2A5vKq2T+q+51EhXbNi3fTbcEfpfZWRiIlZmPALW?= =?utf-8?q?SAxMDAWY8CM+WnftsRu9x0fYAMiOImSsyA5UsziB6dUMFX+RYQujixWmN2Bx4EEi1?= =?utf-8?q?AWekoax9DT+YdXr9CLozqvNnF+PEyuXyZjOxsB4m6gXa0dn8mIEAjhN0ceWVDEMa7?= =?utf-8?q?lalpxCBWNx3dh/jd2wpcBw/W/FGGoZBlSy3tu7AwOB4mEx7ft7GVcw9ue2MDAXeWs?= =?utf-8?q?Nk303binfJ43zWEWWdkoXUgMBsotE5psk82j59P1FWV2Hu5ETKStz9cFB37rqqjxr?= =?utf-8?q?jX1tFM+iVOZRGO6owmgwF9Jph2XCdACfSWN7DRBf08jznrDkrwD26quMHCLrSyVBR?= =?utf-8?q?/XldMOOOMA0vSxMxLgZkPJxoIRgBMY40xJ4KID3bzIrbKFUh4V84s46Q9xA0jvr5u?= =?utf-8?q?oycbPQd9xGs23UgKX1foTwU7G0VIMrnZQtr3XGb0pxNcAz75YpluCF7VByhkaMIHz?= =?utf-8?q?jx86EkZlUgSzz8bN+X5/i6d2FoefH65a6LZXXxmp6wBnC4LvLhqz37Gc7ohzRoVp4?= =?utf-8?q?6zd+gMlgMRuQJtYZy7UZxz2AeIX201W9CLoE4Kpi2ow3eIhDrXEVw7Uiw+QptHrtu?= =?utf-8?q?aef7FtoYMenOEVQGH5jFbYEhYMXJ5SafKyxhF+n7XvG89BCj2Gu5fPmT/6IZIoT5t?= =?utf-8?q?SlFeKZm91iKdEtpl1Xyb/2SxIKYztTvWJLOf5Nw63kNPtWCq14+6v6J9DYRgm3lPi?= =?utf-8?q?KpH3am7iaIH2RGpePT/mPc+z2roGSjKAeQ=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2ccdf36a-d9d8-43e4-8349-08dab0b824fd 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:37.0535 (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: 0zLXV3lGVcO+ieChBVN2wau+trUMRJdgBEMe0kAEbXwSm+BrvpDmLf0Sr9l0mIc7PP4azbrjV26qxlrELQ1+4LS7v3U+HtcTH2N9ZntVJnE= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL3PR13MB5147 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 related data structure and logics, prepare for the decap action of IPv4 GRE tunnel. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- drivers/net/nfp/flower/nfp_flower_cmsg.h | 29 +++++++++++++++++++++++ drivers/net/nfp/nfp_flow.c | 40 +++++++++++++++++++++++++------- drivers/net/nfp/nfp_flow.h | 3 +++ 3 files changed, 63 insertions(+), 9 deletions(-) diff --git a/drivers/net/nfp/flower/nfp_flower_cmsg.h b/drivers/net/nfp/flower/nfp_flower_cmsg.h index 61f2f83..8bca7c2 100644 --- a/drivers/net/nfp/flower/nfp_flower_cmsg.h +++ b/drivers/net/nfp/flower/nfp_flower_cmsg.h @@ -575,6 +575,35 @@ struct nfp_flower_ipv6_udp_tun { rte_be32_t tun_id; }; +/* + * Flow Frame GRE TUNNEL --> Tunnel details (6W/24B) + * ----------------------------------------------------------------- + * 3 2 1 + * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | ipv4_addr_src | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | ipv4_addr_dst | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | tun_flags | tos | ttl | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | Reserved | Ethertype | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | Key | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | Reserved | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + */ +struct nfp_flower_ipv4_gre_tun { + struct nfp_flower_tun_ipv4 ipv4; + rte_be16_t tun_flags; + struct nfp_flower_tun_ip_ext ip_ext; + rte_be16_t reserved1; + rte_be16_t ethertype; + rte_be32_t tun_key; + rte_be32_t reserved2; +}; + struct nfp_fl_act_head { uint8_t jump_id; uint8_t len_lw; diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index adba6c3..0c0e321 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -575,6 +575,7 @@ struct nfp_pre_tun_entry { uint32_t key_layer2 = 0; struct nfp_flower_ipv4_udp_tun *udp4; struct nfp_flower_ipv6_udp_tun *udp6; + struct nfp_flower_ipv4_gre_tun *gre4; struct nfp_flower_meta_tci *meta_tci; struct nfp_flower_ext_meta *ext_meta = NULL; @@ -590,9 +591,15 @@ struct nfp_pre_tun_entry { sizeof(struct nfp_flower_ipv6_udp_tun)); ret = nfp_tun_del_ipv6_off(repr->app_fw_flower, udp6->ipv6.ipv6_dst); } else { - udp4 = (struct nfp_flower_ipv4_udp_tun *)(nfp_flow->payload.mask_data - - sizeof(struct nfp_flower_ipv4_udp_tun)); - ret = nfp_tun_del_ipv4_off(repr->app_fw_flower, udp4->ipv4.dst); + if (key_layer2 & NFP_FLOWER_LAYER2_GRE) { + gre4 = (struct nfp_flower_ipv4_gre_tun *)(nfp_flow->payload.mask_data - + sizeof(struct nfp_flower_ipv4_gre_tun)); + ret = nfp_tun_del_ipv4_off(repr->app_fw_flower, gre4->ipv4.dst); + } else { + udp4 = (struct nfp_flower_ipv4_udp_tun *)(nfp_flow->payload.mask_data - + sizeof(struct nfp_flower_ipv4_udp_tun)); + ret = nfp_tun_del_ipv4_off(repr->app_fw_flower, udp4->ipv4.dst); + } } return ret; @@ -1031,7 +1038,7 @@ struct nfp_pre_tun_entry { ext_meta = (struct nfp_flower_ext_meta *)(meta_tci + 1); key_layer2 = rte_be_to_cpu_32(ext_meta->nfp_flow_key_layer2); - if (key_layer2 & NFP_FLOWER_LAYER2_GENEVE) + if (key_layer2 & (NFP_FLOWER_LAYER2_GENEVE | NFP_FLOWER_LAYER2_GRE)) return true; return false; @@ -1120,11 +1127,15 @@ struct nfp_pre_tun_entry { struct nfp_flower_meta_tci *meta_tci; const struct rte_flow_item_ipv4 *spec; const struct rte_flow_item_ipv4 *mask; + struct nfp_flower_ext_meta *ext_meta = NULL; struct nfp_flower_ipv4_udp_tun *ipv4_udp_tun; + struct nfp_flower_ipv4_gre_tun *ipv4_gre_tun; spec = item->spec; mask = item->mask ? item->mask : proc->mask_default; meta_tci = (struct nfp_flower_meta_tci *)nfp_flow->payload.unmasked_data; + if (meta_tci->nfp_flow_key_layer & NFP_FLOWER_LAYER_EXT_META) + ext_meta = (struct nfp_flower_ext_meta *)(meta_tci + 1); if (is_outer_layer && nfp_flow_is_tunnel(nfp_flow)) { if (spec == NULL) { @@ -1133,12 +1144,23 @@ struct nfp_pre_tun_entry { } hdr = is_mask ? &mask->hdr : &spec->hdr; - ipv4_udp_tun = (struct nfp_flower_ipv4_udp_tun *)*mbuf_off; - ipv4_udp_tun->ip_ext.tos = hdr->type_of_service; - ipv4_udp_tun->ip_ext.ttl = hdr->time_to_live; - ipv4_udp_tun->ipv4.src = hdr->src_addr; - ipv4_udp_tun->ipv4.dst = hdr->dst_addr; + if (ext_meta && (rte_be_to_cpu_32(ext_meta->nfp_flow_key_layer2) & + NFP_FLOWER_LAYER2_GRE)) { + ipv4_gre_tun = (struct nfp_flower_ipv4_gre_tun *)*mbuf_off; + + ipv4_gre_tun->ip_ext.tos = hdr->type_of_service; + ipv4_gre_tun->ip_ext.ttl = hdr->time_to_live; + ipv4_gre_tun->ipv4.src = hdr->src_addr; + ipv4_gre_tun->ipv4.dst = hdr->dst_addr; + } else { + ipv4_udp_tun = (struct nfp_flower_ipv4_udp_tun *)*mbuf_off; + + ipv4_udp_tun->ip_ext.tos = hdr->type_of_service; + ipv4_udp_tun->ip_ext.ttl = hdr->time_to_live; + ipv4_udp_tun->ipv4.src = hdr->src_addr; + ipv4_udp_tun->ipv4.dst = hdr->dst_addr; + } } else { if (spec == NULL) { PMD_DRV_LOG(DEBUG, "nfp flow merge ipv4: no item->spec!"); diff --git a/drivers/net/nfp/nfp_flow.h b/drivers/net/nfp/nfp_flow.h index 1b4a51f..e879283 100644 --- a/drivers/net/nfp/nfp_flow.h +++ b/drivers/net/nfp/nfp_flow.h @@ -48,6 +48,9 @@ #define NFP_FL_SC_ACT_POPV 0x6A000000 #define NFP_FL_SC_ACT_NULL 0x00000000 +/* GRE Tunnel flags */ +#define NFP_FL_GRE_FLAG_KEY (1 << 2) + /* Action opcodes */ #define NFP_FL_ACTION_OPCODE_OUTPUT 0 #define NFP_FL_ACTION_OPCODE_PUSH_VLAN 1 From patchwork Tue Oct 18 03:22:34 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 118331 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id A67C3A0560; Tue, 18 Oct 2022 05:25:17 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 7BA4342BCE; Tue, 18 Oct 2022 05:23:42 +0200 (CEST) Received: from NAM11-BN8-obe.outbound.protection.outlook.com (mail-bn8nam11on2100.outbound.protection.outlook.com [40.107.236.100]) by mails.dpdk.org (Postfix) with ESMTP id 8A9D442BC5 for ; Tue, 18 Oct 2022 05:23:40 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UoL6OWlbSWWSn3Gz6J1Ra6mULt1fCLkBCnlWG346eQmkCe/L+naL/fpHkYS9JHQOCx4WDbkpbiuNOFPuR5qGXwTq2mn2C66Ie77jdduFmCLMtmgHUMeAzv1o9I5q9HezJhOVAhzxIr6xA1fRotrgHWGgyGU8jxiuz7icOatiHHG8r98+drekdN88kEqezRLl1aDRxdUpMgOGUafdMkZPjlUqAUh6nWOCUdqP8pN3yBq3pMP6J/NZhO4HiAbRRG/iSbpeX8NVm3bnYfvkyD97KpF+BCXvELIpfBdQiQvESGb/76YY8mNWlMj4LpaMivTT+gVnAAULByUes8O5KyodXw== 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=drWEPf0CKMOJmY6xENDBaY7oAxsdvydQrTsOw6v6pts=; b=PXxQ8PJpNFZmWkoEJLCkgVuMAH+HHDvdwwoyP5aw706N4iXrjKgS1GaPiNJ+ohoQ19el0OQHWMmsoM+DFILItNweBDPRmbmXooDyl9OSmEw3P18Vn9rqtDa7dhWafTUs+lASfE0c1xqrXCm5w3URsY3WvFs0+nTeQtWg13N9xjppMli/7x5pFV8Ns8yIIIz9h8uTvFPJkIvPU3REflP7gafteT1n6z0AX30fWFA1Q9uT4EGVQEoOcnE568nKynW/onaREb5eQiqycKvrgZzQMyjIVsh/xSr5g+3vvDc9UWHwWlbHII4dxr36mI+PEFhox+RUZc2Wb2eDgldRxOl9OA== 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=drWEPf0CKMOJmY6xENDBaY7oAxsdvydQrTsOw6v6pts=; b=GOkq2sm4pPe9UqpQIodLcIHjQ48ShDy9lWxWXYae9MWZEDMhzazvFmcD/hhvvw7tc47OqbeFpB3CI+lkbVAEoQWjARMjDnT/SzfS2JsDbJQMefsT5cX9Xvtfbfs6ZapaKTS9XCmEDBAmxTuyJSCy07zWuktUibkM3p2YcSyOhws= 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 BL3PR13MB5147.namprd13.prod.outlook.com (2603:10b6:208:33a::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.20; Tue, 18 Oct 2022 03:23:39 +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:39 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH 20/25] net/nfp: prepare for the decap action of IPv6 GRE tunnel Date: Tue, 18 Oct 2022 11:22:34 +0800 Message-Id: <1666063359-34283-21-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> 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_|BL3PR13MB5147:EE_ X-MS-Office365-Filtering-Correlation-Id: fdc8f14c-2e41-4239-0069-08dab0b82636 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: zLDvAozXrOgUDUc6Fyxpc1BVYtrPOaSLa/xopEsIfIpKw+ee94agJ/Z0Qm0T1LW27/ViukhnH7MNSvVTYP1a4oMUH6AYGI1JMYjZmStCGiSh+eiP8gzv3PgkxFsNeU9urcaOuG2ljjmCQjTUNz7o0mRprOOTH0lR4RuT/AsBPUe7RhlQ3V090P5t2y25BXM4b/dxEMbORuIlKUdzTT4CiU+LK2FCg36bxy0e2xqnaXGTTywLc1YrQ8lfjBJIlPvEgpqxI4uQ+ve4P4kk5ActXwcjHHKAQ0CFbuSj0gVs/QuKyznyeP1AcVqhsP8gcL7131T6fto1ZBoKVT2VQOQGZc2A97odjTrJedPZP/z0sen/F0HoDmg7wYXaOW8xPr67zBPX36qXThBztfT3U5QjQJf9HlbnLueLuxyrTaUsW4WzcEmm5Ri+lKARFrNRxL9pFmS5mF9j2fuBO4nTEhcNMPxR7PKJb1qT3wqg9ly34l2j19ptJWMdZPiRk9C01kRT3XREMaleCLLjPG10s2GslH55lBSp6nTExhtp728P8hiV7FvsezO4em4dns7WmPdIWC4OGAR7+hOy3e57hAGTSLv6NG5gmOutzSmPXMkqcK32bYC2OXktuXsLZ0wS+MQ1r7U20/357v50pMrW8liawhQ+6Gd4WxNQwOkeN+FoAZmzlN7UcDpUbdmvczsyNoTrQziEL0PPaDmkzxiaZn3vEv9lArklfZFDmtjPKp8Uf3MNh+7o5xvhSKsfoAGPAFUcGu1YD6CC6bOuY6Mz0mpFgw== 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)(366004)(346002)(39840400004)(396003)(376002)(451199015)(36756003)(4326008)(66946007)(6916009)(316002)(5660300002)(66476007)(66556008)(38100700002)(38350700002)(86362001)(107886003)(6666004)(6486002)(478600001)(26005)(6512007)(6506007)(52116002)(41300700001)(8936002)(2906002)(44832011)(8676002)(83380400001)(186003)(2616005); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?7ZBc59GsdYcGH7/SGmEQhDzELrEL?= =?utf-8?q?u6r5kALMVRYny9pudB7lPm1cJdlRO+3JNmdoTtuq/9eSZsuTxznfQ1Xe3ZwNlxqzj?= =?utf-8?q?iWTxXmXtsXiLLdmPfKRJbbrva/HOyqb9ySDPSpS1rMDN1oG2v8cjeZ/bjUbxgUmoN?= =?utf-8?q?HeZ4ETAv8xyJ9GY1kd3AWx12TdFE+d+npmSpNyDz1oLhdb9D0XeWjbjjPoE813Maj?= =?utf-8?q?tv+JtXx5417EK74GevzDDfz3b1+raXQFgbR1YF7im8KgvvM6rqDGoQXgbnBr393ON?= =?utf-8?q?S9jg7rtEzjniq9/sqis0W2pke7uqc0n+5zS6Sri8b9MKcPyXSfQJOwEnf7l8WBuuJ?= =?utf-8?q?vfrRhJcFHIKfVYmFqYLOCrDAt7wJ/ZC/nssLD4hLs7Rn47ZQj5/a2+tECYf56CLaQ?= =?utf-8?q?NsM0GxxtvsxexedmtV3RCKCHI5HcnUBkOSBWGhoGa15RV1Oxy4cYNLGh4xmkyIsyo?= =?utf-8?q?kAUj/TKBQb7wepE6wgxB6owt/AG5mDOh8I4Duf/CZ2P7p7xzUfmkn6K9RAU1J1O67?= =?utf-8?q?M+FlHU3IQW4LIf/Fxp9zhL1Efp1jjJLqWLUZLQMTezAwkBBlJSkUHmMRv/nPLBGEr?= =?utf-8?q?Cag3jW9xY1CZOK0qfWuyXAW6gQqntEQor5mwPLEjBzXJpg67VgJDTYv8jw9LgxC7W?= =?utf-8?q?kZo+pC8SFDs1Tj21VDgufgFaiTQRqyflNpaqM6TA+xM2t1DKTVdYMKtiIXhn0hW5T?= =?utf-8?q?pXotuSx7VdqAOkZo5EgquE71cuV1u8rBV5TuJ2ZUyyQZtOhHo2zRCfSz5xNr3vBWd?= =?utf-8?q?xZy2Q7R9kWKf8YcIeXz8/0KcqgMni3BM7YqqoM/k7394BQmZrR9Sh70KzBwpuxY0R?= =?utf-8?q?3TuFVsAycLNcKK2aUAUczXeikMz+4i2Sfx2RuNbkIGP2kuO2RFB6AHyB6dL6CW/cE?= =?utf-8?q?eNpyuEyh2BfULw6WMWaBBc3CJhbB5DDQd580eaDbmRMPRDqKQYxi+MPglDM4ZNQKp?= =?utf-8?q?wpw1230qkJvletSYY7Y4CDKaksf5DDdlfVM78HDCQ9LSxL0tkAiQiMLrgtb6EkqNJ?= =?utf-8?q?pRAgEIAtCxPSIFUYJtDKz4r0H9Y1ZBnsLuvnJ1r33gsQX1l1nBT04tUKtuYWk4HrJ?= =?utf-8?q?SmRTyhVEq4bifAxXgPSSYrKz9WtuyWQUgv4WndN50xsuwmSu/QoVXssdsjUI0gyXe?= =?utf-8?q?VxmQ8+9/da9UpOt5J/HeHxVR5M58651BkZzqUQXCTQ2Z3ueeXJMBFCPBOxC6qojvC?= =?utf-8?q?AnNDkPTpJxVhcUCGoLaQujTZzJtfgmFnJtDmrJXsO+BLMOueJxjKZGnW10M/u8btx?= =?utf-8?q?hQWjNKmaUBSHcP3j/rot0aVOBXov2ZvoGmvEBVQ4v1j6HPXn36wsvL5pPtnccDGpL?= =?utf-8?q?U6N1w2FDCRHtrtCMrzm2XcRmAbFd8dSIn6MmpL+K0BaCbj8bqudx9vBcJLp6olyvL?= =?utf-8?q?ZE3l2/ntEKwgwn8P58j36CzdGXdoeVc2il6cUXbK5CHIaSIAUeOL9MTky00PQcvSK?= =?utf-8?q?4qHKaGDFXptXbKTvPk20PKd/j3SsmCSDfE2jRDACrLUAFlUz0VG9Eeu7daub5fiZH?= =?utf-8?q?XEmq6WqSdDG5g8qQkR2VfVsmjuS4ZYubZA=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: fdc8f14c-2e41-4239-0069-08dab0b82636 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:39.0702 (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: U52fqJM76HI5nQRRyMLqP3Da487Nrsxt757Nc2FNUUTxqClbFD85TLuuKE8VNkcs7/GafZXrfKIh+hDChZJ4G1mNTd382Qyx4DVsAZbh56I= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL3PR13MB5147 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 related data structure and logics, prepare for the decap action of IPv6 GRE tunnel. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- drivers/net/nfp/flower/nfp_flower_cmsg.h | 41 ++++++++++++++++++++++++++ drivers/net/nfp/nfp_flow.c | 49 ++++++++++++++++++++++++-------- 2 files changed, 78 insertions(+), 12 deletions(-) diff --git a/drivers/net/nfp/flower/nfp_flower_cmsg.h b/drivers/net/nfp/flower/nfp_flower_cmsg.h index 8bca7c2..a48da67 100644 --- a/drivers/net/nfp/flower/nfp_flower_cmsg.h +++ b/drivers/net/nfp/flower/nfp_flower_cmsg.h @@ -604,6 +604,47 @@ struct nfp_flower_ipv4_gre_tun { rte_be32_t reserved2; }; +/* + * Flow Frame GRE TUNNEL V6 --> Tunnel details (12W/48B) + * ----------------------------------------------------------------- + * 3 2 1 + * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | ipv6_addr_src, 31 - 0 | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | ipv6_addr_src, 63 - 32 | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | ipv6_addr_src, 95 - 64 | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | ipv6_addr_src, 127 - 96 | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | ipv6_addr_dst, 31 - 0 | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | ipv6_addr_dst, 63 - 32 | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | ipv6_addr_dst, 95 - 64 | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | ipv6_addr_dst, 127 - 96 | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | tun_flags | tos | ttl | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | Reserved | Ethertype | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | Key | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | Reserved | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + */ +struct nfp_flower_ipv6_gre_tun { + struct nfp_flower_tun_ipv6 ipv6; + rte_be16_t tun_flags; + struct nfp_flower_tun_ip_ext ip_ext; + rte_be16_t reserved1; + rte_be16_t ethertype; + rte_be32_t tun_key; + rte_be32_t reserved2; +}; + struct nfp_fl_act_head { uint8_t jump_id; uint8_t len_lw; diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index 0c0e321..3f06657 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -576,6 +576,7 @@ struct nfp_pre_tun_entry { struct nfp_flower_ipv4_udp_tun *udp4; struct nfp_flower_ipv6_udp_tun *udp6; struct nfp_flower_ipv4_gre_tun *gre4; + struct nfp_flower_ipv6_gre_tun *gre6; struct nfp_flower_meta_tci *meta_tci; struct nfp_flower_ext_meta *ext_meta = NULL; @@ -587,9 +588,15 @@ struct nfp_pre_tun_entry { key_layer2 = rte_be_to_cpu_32(ext_meta->nfp_flow_key_layer2); if (key_layer2 & NFP_FLOWER_LAYER2_TUN_IPV6) { - udp6 = (struct nfp_flower_ipv6_udp_tun *)(nfp_flow->payload.mask_data - - sizeof(struct nfp_flower_ipv6_udp_tun)); - ret = nfp_tun_del_ipv6_off(repr->app_fw_flower, udp6->ipv6.ipv6_dst); + if (key_layer2 & NFP_FLOWER_LAYER2_GRE) { + gre6 = (struct nfp_flower_ipv6_gre_tun *)(nfp_flow->payload.mask_data - + sizeof(struct nfp_flower_ipv6_gre_tun)); + ret = nfp_tun_del_ipv6_off(repr->app_fw_flower, gre6->ipv6.ipv6_dst); + } else { + udp6 = (struct nfp_flower_ipv6_udp_tun *)(nfp_flow->payload.mask_data - + sizeof(struct nfp_flower_ipv6_udp_tun)); + ret = nfp_tun_del_ipv6_off(repr->app_fw_flower, udp6->ipv6.ipv6_dst); + } } else { if (key_layer2 & NFP_FLOWER_LAYER2_GRE) { gre4 = (struct nfp_flower_ipv4_gre_tun *)(nfp_flow->payload.mask_data - @@ -1204,11 +1211,15 @@ struct nfp_pre_tun_entry { struct nfp_flower_meta_tci *meta_tci; const struct rte_flow_item_ipv6 *spec; const struct rte_flow_item_ipv6 *mask; + struct nfp_flower_ext_meta *ext_meta = NULL; struct nfp_flower_ipv6_udp_tun *ipv6_udp_tun; + struct nfp_flower_ipv6_gre_tun *ipv6_gre_tun; spec = item->spec; mask = item->mask ? item->mask : proc->mask_default; meta_tci = (struct nfp_flower_meta_tci *)nfp_flow->payload.unmasked_data; + if (meta_tci->nfp_flow_key_layer & NFP_FLOWER_LAYER_EXT_META) + ext_meta = (struct nfp_flower_ext_meta *)(meta_tci + 1); if (is_outer_layer && nfp_flow_is_tunnel(nfp_flow)) { if (spec == NULL) { @@ -1217,15 +1228,29 @@ struct nfp_pre_tun_entry { } hdr = is_mask ? &mask->hdr : &spec->hdr; - ipv6_udp_tun = (struct nfp_flower_ipv6_udp_tun *)*mbuf_off; - - ipv6_udp_tun->ip_ext.tos = (hdr->vtc_flow & - RTE_IPV6_HDR_TC_MASK) >> RTE_IPV6_HDR_TC_SHIFT; - ipv6_udp_tun->ip_ext.ttl = hdr->hop_limits; - memcpy(ipv6_udp_tun->ipv6.ipv6_src, hdr->src_addr, - sizeof(ipv6_udp_tun->ipv6.ipv6_src)); - memcpy(ipv6_udp_tun->ipv6.ipv6_dst, hdr->dst_addr, - sizeof(ipv6_udp_tun->ipv6.ipv6_dst)); + + if (ext_meta && (rte_be_to_cpu_32(ext_meta->nfp_flow_key_layer2) & + NFP_FLOWER_LAYER2_GRE)) { + ipv6_gre_tun = (struct nfp_flower_ipv6_gre_tun *)*mbuf_off; + + ipv6_gre_tun->ip_ext.tos = (hdr->vtc_flow & + RTE_IPV6_HDR_TC_MASK) >> RTE_IPV6_HDR_TC_SHIFT; + ipv6_gre_tun->ip_ext.ttl = hdr->hop_limits; + memcpy(ipv6_gre_tun->ipv6.ipv6_src, hdr->src_addr, + sizeof(ipv6_gre_tun->ipv6.ipv6_src)); + memcpy(ipv6_gre_tun->ipv6.ipv6_dst, hdr->dst_addr, + sizeof(ipv6_gre_tun->ipv6.ipv6_dst)); + } else { + ipv6_udp_tun = (struct nfp_flower_ipv6_udp_tun *)*mbuf_off; + + ipv6_udp_tun->ip_ext.tos = (hdr->vtc_flow & + RTE_IPV6_HDR_TC_MASK) >> RTE_IPV6_HDR_TC_SHIFT; + ipv6_udp_tun->ip_ext.ttl = hdr->hop_limits; + memcpy(ipv6_udp_tun->ipv6.ipv6_src, hdr->src_addr, + sizeof(ipv6_udp_tun->ipv6.ipv6_src)); + memcpy(ipv6_udp_tun->ipv6.ipv6_dst, hdr->dst_addr, + sizeof(ipv6_udp_tun->ipv6.ipv6_dst)); + } } else { if (spec == NULL) { PMD_DRV_LOG(DEBUG, "nfp flow merge ipv6: no item->spec!"); From patchwork Tue Oct 18 03:22:35 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 118333 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org 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> 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?q?x51llSH0LKRbdT9Sc2pWOI7iDtRo?= =?utf-8?q?wboqnGPHmS/CiJ3SHkBfw19PI6x5HG0RCRxH6WH4CjA2NmpXKVQoLiKSrA/VYPB3u?= =?utf-8?q?dWlocD+ReGxpyttFdhkGqb7JYDbbE82MFoay4nlEO5FDemA06iIDGpaTiM0GEKXz6?= =?utf-8?q?ZjUQSeaoO72gU6lN6MKkKaN0ALCpjR6dLBtNL6BVZE6lRnuR/GbqvDQCWekn0FXlo?= =?utf-8?q?4d5OUGjBWa3teZIis80/VjHUEkSCUE249Vn+macjv+2dOIDoeBBDihHNNOuWFl/RS?= =?utf-8?q?iaQSPQvcbqqM8MzAe4W+Yjwsz44igGzuzq6YuBaW9V1LxM9+1vI5O4LcZES23bhyT?= =?utf-8?q?yzm7iNMAGhPonRm1wGj3e59ESKmiahy1st0N42igs3ILUfFsJlsh/OVmsa/mMBo3N?= =?utf-8?q?dQ+KsPD6peCGCsB/k/iSoUqaBKFSp2uZac3CQM4zRzNgAUOTtDXnuztdKp9ooc8mM?= =?utf-8?q?MYEnBdtVLLxQmfjj8p5B2wr4wDVzdHHVPHE0sJ2X2xMXo4NRnOuxBOZsdUsPcgCBL?= =?utf-8?q?XNLMC+a5scRMs8OArY1n5BlhIXIxhng/UIlHIs+3UsdSabW4QEoGYi7PvlAJuIERH?= =?utf-8?q?x3ojcXGOkqWER2D3nqd445fodPwoCWQ0h7yjWBn8AbPQZMP2APa+yxiWyMCpUEMOj?= =?utf-8?q?3FsTdx5OJ3vVuIESpGOdgp/qZ+QytPXBnTN25nqIY3XdDD6EAE8uZi40QDmHCU6a6?= =?utf-8?q?TTqf7a/OFKa0q0mPnTC7r2P9ORnJUUqOJQbItPg+Cz9ahT3Xq/wELGGK55y1EHmNW?= =?utf-8?q?DKAFPsEZFKQFcjfBlg3ItyFHc3STEwVJwZ2RZRZRMgkW4HioZ0gBu06giNa223KcB?= =?utf-8?q?QsTAe3Md0n52IdmFcnHBXLuvAQ1UT+bIH6HZWyuh9aZ3LO4F4bWuyQAU8A3wXPNdU?= =?utf-8?q?Y2xIlYRuV6GBhpYHOCbi+aNP1Luf62Ak9YI+Mt1xR+c6aroaeWVFZ2jUCpo2ap1dR?= =?utf-8?q?nA8YA8eM2yyM9c9eEc82gKD/Trhjh0H1GyN1SgBvy0Ag3yG5Xe0G9sZ05vGEvL3cZ?= =?utf-8?q?64+pj8rtkr9/+MphNPrOOcYCutDa/nqQkFnW9I2EkXxLMQJJ8c8uSXV0XPp/Ehv46?= =?utf-8?q?cj1Q7m1s+PLQQqUgizPnqvGQJej4hbh301fy8Nx7coe4N3X9SSLu9HFfGe2jGNty4?= =?utf-8?q?JXqJGsgprPOt2y4Yqps6902HSjIDBnXuIYzzzdALQm//hlfwzjO5fWjfhIe8r4WYh?= =?utf-8?q?hUoRlDb84nKmWFCwpOFGjpXMMwUeCqtaSAtRvsdKakV8hgvU4lXO4hGUM+hej69Ge?= =?utf-8?q?NUnGto/sL4UaJytm2zlk+o8OgMRBmw7oe8apGDbhiTRlOHCUYaRaUwEvjjjndHaNx?= =?utf-8?q?rRrtm8L2gbqJsbWYyD0WacZ92sjomI2rxhkV+o8XuXq0BHhT26XvzHYgbEP+ydahb?= =?utf-8?q?jwDZCRLAWoghpGoNImnQrBJAiOoUYq6MhOz2K2zmmhqqtY1lLJTAkg30sOzgPbEE5?= =?utf-8?q?IwY90+2KEToVjuPxBUKoPhyELqDbzaWBrhEfCX5CPQ3ei7IFVvcpsGPv9ezW9uK3k?= =?utf-8?q?a36lQ02a+1YrBIG28mCTJBfy4L+eo8ENAg=3D=3D?= 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; From patchwork Tue Oct 18 03:22:36 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 118334 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 625FDA0560; Tue, 18 Oct 2022 05:25:36 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id BF29142BD8; Tue, 18 Oct 2022 05:23:50 +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 906EE410E8 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=gEaqORcxUYU6jaCF4M7YjPi7wv0emm9THHmx1DlNe/DiS0lI7GTNspr6MWyFyKJEdEeOxEq+3i0Wjl99qOnvFXmswANjXk7SYX3ZoE5V7uL+hmmN0Dh3a7j4xvAjFSlAlLTbRnPuruuFQP1jmpc1V1dhzzrN1fihZiN0C/E7/xA6vkfPpeXBLr3pzj6SL22rrFlJ0eC7vSgv1ubXTMFBKzqtlldHrL15qewdb7VfbENrXL9WpIiJb9S08HgPquQcvvl6ma9J/8YP2Y/R+DAQQbdXgS0CWC3IBSUgAS6Ns0L/6MGQOK/rONZX9sDbJcaP00e98Eb2lZmqe7HLz8uZqg== 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=JuNdgcWt29KnOLvRrPv66rpc1XoLw0Nd3aQodmRcmdg=; b=YwLEOrfz41HCNuWO2OlY5A0aS+DVfsURJXqoBPg3vo/PofucAUSbeszEGrDrXwh4Vx6Jneg4fJFTPFAhI6DSDZ0X4bH6wN+p10ItmIo7H4ehi2bnZ7/PKjFU6gNOIfslDS4q2jc1geCtmkBsXjs1cKSRWxZvsTtU+PCzUOpfZ6yccfSZBxFuPZJf89aJ5zOZNZ5I2VRtSOcyYahR6QZbAQZvydwJ1w7KTL4gEZfec2hnvNDsB0MULTkBirDd2UNIUFZHyOjUqxitbJZRUDRjFQZVBkQ/BqqFP3UJF9O41QEjsaiCjTik9d9dfBd7/1AhQVM4pw0AASiz87aqOMOEzg== 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=JuNdgcWt29KnOLvRrPv66rpc1XoLw0Nd3aQodmRcmdg=; b=d0b51xqgpFZWxHbZGgJ/PSixjvY5dnnM3JmnZ1RYdt/gQPlBv46e6zNKZpJcb93ScsVGv/bSo1Fm+FqCW1dHfJojra/8Rvnwv6XIT3EM4nyFr3oHlJCUJkDasZdhBh8cryT/r4NdhMkqfBU8db9nVCpjcfvWuU4lIu5vhk0sjXI= 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:43 +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:43 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH 22/25] net/nfp: add the offload support of IPv6 NVGRE item Date: Tue, 18 Oct 2022 11:22:36 +0800 Message-Id: <1666063359-34283-23-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> 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: 220f2825-0285-4355-3dcf-08dab0b828bb X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: mDgabfRRNrJ+Byg/xyJ7MZEB8jEzFIGkjLIoN+xhraf5WlZHYhaqHOQBR7yrhDaNRJV2XmHCDW89Hs0hMK6d7FILvxMI6q1SZxlA+jBLtQmnIa8Ez2w3b/ia6UfYr1NJYml/lK6luUGZwvVtxDMadiu5uSL3d5eGctQLXWxhaWGvqUzCWMgKF1h0Lwd2GK1C8JfvpsP9eh7inu4yE5E77F/CS1efgKazIaflK7mMdrkSK9vVLNuKnSf/KHZKeGsOVFGw+C4KJ+/kkRGX6aRdMMA+Kfa1dpvYRqANwGWIerTgs03AgqK2Hk4v54i38pcn3wvDAcqGaeer1FpwGrW0bCLVvZeFmUwUMxSzk8W8fCDO2hft/ihv6j+/UcHEZG0gFT0/+9LVLeZP5py12CXRNSrvVfTBS6c5GqJOSxntcl9fC0BRIKRLqZDUCQJgnTMu55QjVHH455J9wILyJV9pKTPeC+JnGr9fIVDoOhsBa+zQ99RBOPGHZOL5yLwu4zslIXPvDteoX81/m5QsqpRC8MQj7Pi0N64l19PZ9g4oqROqQsf/2O+PWdl7OFDA/gzb3J4CTPjMtxAjV9GNl87ErLtbF4T+ChGppPHabj2992z5z4/tnUiRluQqxjKbstr0WZoU5udW1jfxIQ/Z/lCpQYcyhSuYxfZLxJGNHFhglk4BHs5kzrelpzJQpudL2C/Tf2mDTk9OjgXJ+FQb1hRjg7L9uxVJtYkxCg0/PtmwKQfUDtqK8RYB4+Qh9eErR2z1avtYnUxAU52D4gwLx/tNrkfAwH0TTWJZgtoHtgihdj4BFt37NJd84U+yL0yILIEh 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?q?ClJR2yVdfmWapWpiV1RRJ2InSag2?= =?utf-8?q?BkqTBfMKvvk5tCp/ONt+2DmCxEfovLkSaeKPeQ/SVR9AahXQN9OuyI1J9w9jZTr6w?= =?utf-8?q?B8TihGUESBqiD7SLzEeV0DC1mBOIgV8jjZcekqcLnMGKC3zknpvK9cMNjQA0K3yCv?= =?utf-8?q?mrYMefOYSFIfccwsbw7FLKyfoLfhngg5lbWo2sdxtkxKeJHI4/Lv+SXmbsezN7byg?= =?utf-8?q?Tn0oidztik26dELijY3Fi1i+cabWqTWiNzojee+aaJJMHCbD9anVEynGJlIIzeeHl?= =?utf-8?q?ogd0dvX/UmawN9EI0hahFmP/ELKl79NSI1dQdlrzzDmTvF7qwdxPDuU8L8kKwfWPP?= =?utf-8?q?Us1TsCL2Q4ECPVI4IGRTIhrtnxogvETBhGx0V+/l8UX3F8wEtx99nrhS3QoAEJaiv?= =?utf-8?q?xMOIqsvOlUS24Afr8L2N8r/bE/SKSy8zt6rkhHaRaasFFkZqTNuddBmZlkNGsMj9k?= =?utf-8?q?DqjMaDrr22z6LDS05xhgwKdJFc4gK9nYfjr/kCoSV/q4tpI7OUPKqI+R0dNasijmS?= =?utf-8?q?1USHA9sh7I+G2gTnLpFEgxix/MU+wCukT3uxKZihLunjacM/Ql+V/+XUOY/5yehTH?= =?utf-8?q?WKE3b0Y28Ws28xjic1XIXg+klI23Dj1h1lMsPI+UDHq4cTO/LXHu4Qxx1olMky0bu?= =?utf-8?q?gL4mGxkRwL2cxl3cJIJbEXBWq+zBpRBlmOoB83UWeQteh29pigjBHYp9hZIAEtQjp?= =?utf-8?q?lGf83nhz70u4ZeACcNvDQ6VKyTQsMlvKb2JyEGZ6vXpswE1yvguObKY7UkmqXY+t5?= =?utf-8?q?LumlNH68vUfYo6Bo+FJF0i1plWfTG6hMX9SzG+bmO7YDZWFwKB2jLCaaBa2pADf7u?= =?utf-8?q?nFCVnusxBapD8M6cVrSNIdD965TIGnBRiWZqGAWPTn2urWP1Ra/G9vyJqzEC2aJFn?= =?utf-8?q?e9pFzjUei6l3vJQVfUXaED8I0WgdBOeoVzxWFyGXYxlIP3jRql/YwrivYGbCM2yxa?= =?utf-8?q?KO/mZaAiqJvDCaQw9pTWj9lj46eGu4CcZUt1DMlAAfLNjaoG4IdfA0qDCGpiUpCkq?= =?utf-8?q?LpU3GdfApkZUH1WZlLLlguHhw2b0wgPY/logKKzllaZIcGIzYUCSKd98aj1FCZE3P?= =?utf-8?q?QmQeqq63yxFEpprBzNZSmbqUyau00ahFXUGa2JmTzfxwvrI0ytZotdDLFAc/K1/jR?= =?utf-8?q?HcafIDANmHGxRWyK7Qd+aKFaZF3lOvMQ6ErcA7VeHSTJhHld7nI1JOuhvRGJp7209?= =?utf-8?q?w2/tfFdcE4TxXudkCDFmH5kYnwCqjTmQrWPPGuqgCiy8lzmuj3n2weZvWdHvKt5Tk?= =?utf-8?q?xwB6TX5XabyeGfuM/i74e42Ldzskl9E5woeTu0vLQMElCRunRf42xT3xEC72m6APK?= =?utf-8?q?fG5V9z6hcDwCjW/uW3EjnoLBTIojrGpzLIgdyOnppK55gX2mjDKaC1lRgJhiFyYei?= =?utf-8?q?Kfxuj5oe9hA+UvGYrw7EiesOZYvAkpvxjMwMDhVBLhD6XzxuFth1Xaa09GaVjl+Jl?= =?utf-8?q?8A754flecx+LShKDSMAYezW/JOEjcHCGzEzkG0R6QYlRzn8nJb5vECfhLfTrK3kUZ?= =?utf-8?q?BMVWTsVPDuVPFDGjVMBq0gOXBEYes4AWSA=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 220f2825-0285-4355-3dcf-08dab0b828bb 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:43.1583 (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: zHqDS0xmUoth5cODwizOmVWkD8+LIEshuHd2OqV4NQk8kP9Dn0M3VsGzm4y3wNlxOnJVqmNHcXx+DE1jLq4W67jc2b4742kU79JXsrn8KdA= 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 IPv6 NVGRE item. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- drivers/net/nfp/nfp_flow.c | 73 +++++++++++++++++++++++++++++++++++++--------- 1 file changed, 59 insertions(+), 14 deletions(-) diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index 94d7a27..9464211 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -834,8 +834,9 @@ struct nfp_pre_tun_entry { break; case RTE_FLOW_ITEM_TYPE_GRE: PMD_DRV_LOG(DEBUG, "RTE_FLOW_ITEM_TYPE_GRE detected"); - /* Clear IPv4 bits */ + /* Clear IPv4 and IPv6 bits */ key_ls->key_layer &= ~NFP_FLOWER_LAYER_IPV4; + key_ls->key_layer &= ~NFP_FLOWER_LAYER_IPV6; 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; @@ -847,6 +848,17 @@ struct nfp_pre_tun_entry { * in `struct nfp_flower_ipv4_gre_tun` */ key_ls->key_size -= sizeof(struct nfp_flower_ipv4); + } else if (outer_ip6_flag) { + key_ls->key_layer_two |= NFP_FLOWER_LAYER2_TUN_IPV6; + key_ls->key_size += sizeof(struct nfp_flower_ipv6_gre_tun); + /* + * The outer l3 layer information is + * in `struct nfp_flower_ipv6_gre_tun` + */ + key_ls->key_size -= sizeof(struct nfp_flower_ipv6); + } else { + PMD_DRV_LOG(ERR, "No outer IP layer for GRE tunnel."); + return -1; } break; case RTE_FLOW_ITEM_TYPE_GRE_KEY: @@ -1580,38 +1592,59 @@ struct nfp_pre_tun_entry { static int nfp_flow_merge_gre(__rte_unused struct nfp_app_fw_flower *app_fw_flower, - __rte_unused struct rte_flow *nfp_flow, + 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_meta_tci *meta_tci; + struct nfp_flower_ext_meta *ext_meta; struct nfp_flower_ipv4_gre_tun *tun4; + struct nfp_flower_ipv6_gre_tun *tun6; + + meta_tci = (struct nfp_flower_meta_tci *)nfp_flow->payload.unmasked_data; + ext_meta = (struct nfp_flower_ext_meta *)(meta_tci + 1); /* 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); + if (rte_be_to_cpu_32(ext_meta->nfp_flow_key_layer2) & + NFP_FLOWER_LAYER2_TUN_IPV6) { + tun6 = (struct nfp_flower_ipv6_gre_tun *)*mbuf_off; + if (is_mask) + tun6->ethertype = rte_cpu_to_be_16(~0); + else + tun6->ethertype = rte_cpu_to_be_16(0x6558); + } else { + 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, + struct rte_flow *nfp_flow, char **mbuf_off, const struct rte_flow_item *item, - __rte_unused const struct nfp_flow_item_proc *proc, + 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_meta_tci *meta_tci; + struct nfp_flower_ext_meta *ext_meta; struct nfp_flower_ipv4_gre_tun *tun4; + struct nfp_flower_ipv6_gre_tun *tun6; + + meta_tci = (struct nfp_flower_meta_tci *)nfp_flow->payload.unmasked_data; + ext_meta = (struct nfp_flower_ext_meta *)(meta_tci + 1); spec = item->spec; if (spec == NULL) { @@ -1622,12 +1655,23 @@ struct nfp_pre_tun_entry { 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); + if (rte_be_to_cpu_32(ext_meta->nfp_flow_key_layer2) & + NFP_FLOWER_LAYER2_TUN_IPV6) { + tun6 = (struct nfp_flower_ipv6_gre_tun *)*mbuf_off; + tun6->tun_key = tun_key; + tun6->tun_flags = rte_cpu_to_be_16(NFP_FL_GRE_FLAG_KEY); + } else { + 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); + if (rte_be_to_cpu_32(ext_meta->nfp_flow_key_layer2) & + NFP_FLOWER_LAYER2_TUN_IPV6) + *mbuf_off += sizeof(struct nfp_flower_ipv6_gre_tun); + else + *mbuf_off += sizeof(struct nfp_flower_ipv4_gre_tun); return 0; } @@ -1693,7 +1737,8 @@ struct nfp_pre_tun_entry { [RTE_FLOW_ITEM_TYPE_IPV6] = { .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_ipv6){ .hdr = { .vtc_flow = RTE_BE32(0x0ff00000), From patchwork Tue Oct 18 03:22:37 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 118332 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id A82C9A0560; Tue, 18 Oct 2022 05:25:25 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id BB4314114E; Tue, 18 Oct 2022 05:23:47 +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 E73E9410E8 for ; Tue, 18 Oct 2022 05:23:46 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Tu5YEvX/1RBQUFehqXsNbGNS/PDpWdFSCURHMxjLjPzZNG9Y01m2NCvIOJFTHT6wcgUsXrZ02RniJktiVrcLQ8W3CWhJ4ySaNiXC0rCKxViqhtvvzwL0S4GaN//wxRKEe0rrAraXEK4rhslVsv3+RZjVWPfqcC0lXKTgpD611TGJUZyFN42/+Q1+2hlklTRoN2cWEz6/PcW76sskW+CPzYgzP5OG6Dlbp+e2t808bxdoWoWsN2G9HPH0AFf+s9eCj5XaBNoG6IvU6t3IoRWD6lhB/qOC1ZnHPzez8MbcBXAvmbNYBl0EBhnpl6G8UGVclyllWtYWoNUV7DG5btKlOA== 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=rJ1WEA3ld1+BHWTjfHLmvduQgYD+L83T+QcreXPJEy8=; b=cSpTwLIfmnrxkYDO3qw6jDHKMQEBc9o8a292TGJruxfrHl1xBBWnCeba3I+urnI6+eaTeHdikJq7xOt/6WTt2Cvd99kLreNLO+ulhWd6eP/TJOwDAheWxjOTdDvsS/mvPtTdCTwDTMUhuxTodpJGxkBfdH8hEe3EoolNpPSK3larteRFxboTASxEbd9MIZk7X0g48ONeqMfk+RjT1wLn4QdSxT98lvSWf9wbQwIEqq3iAGpDKGWjUmysqV2fBkmVPZYLk3vY9tuqTTomDSoo2WBWHhJkVVVxqcTxx4rHqFz+FpCp9V7HC+4RSJgSUAtilJH9i3ThR156D77dZ9R16g== 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=rJ1WEA3ld1+BHWTjfHLmvduQgYD+L83T+QcreXPJEy8=; b=opQP/Bwgg4BGA1MkNVvi04tr30QoSHDzJST9UGXWxrq53fqZOq7uSQ5edH+w5iATz4TRVbF3Dxx/YZCkjGWqyEeskNAGF/Y8kNWqyN68XKTRZHzv3dVSJtDa4DowiYdxxd3k6Wpry8poYRhR1QaQAV9Xnf2ro1cMp3rcxidSMUo= 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:45 +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:45 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH 23/25] net/nfp: add the offload support of IPv4 NVGRE decap action Date: Tue, 18 Oct 2022 11:22:37 +0800 Message-Id: <1666063359-34283-24-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> 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: d2f3f804-7563-4848-1c45-08dab0b829d7 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: s8gRI1VYh9WkqkgdwHLIGbtIE6EvRDEAqwRH3PiZe0ypechWy8LnSsFJfEtcEWxZoLmys5MwXCUyAdKUanUSl8eWbl2ZKGBal6V3Hs0DUJ9eohiZkfBsIoYp2JfPjEatit41RTFseGN1BxRNOR3EaIaGzHz0Bz0zu2mqSvNzCzDjnuDfkfawHu5a6gKREE3AfVLO8NA+PYu7x+vtxdAl2QK9yuMVTuAJHdwK28S348KePhU2SKo1g0L5jkpbIVpYiX1gQCUml512pZSa0zxU9HsPnPwPkBLys2Kje2j/ZIqNSm6jU7ySrZuBmgkxSy8YwM2CYJaONkxzBEUHka8wDe6q4lM1FHBoUDZBOtaHCvCDFyg9cZqU24AZur+ywRNQNXoq0vkAhE2wmuUQZAcR7Fe7uMp4xfPqfQ3UbpEyegAlKiaYrvmRBbytMimE73jjeQ/UKiXjULeEVL889Kys1nOxrFvw/P7c2KSRDam31WKbqTB0G093KYE4VUdNZaTACFppJ+OnW9wah8Nn/bm8m+6JN5WagWveGwTzpotG5tgHCMcT6ArUOSyMCdWDKVLKcLqGI8wdq+mHRWUX3SrBH/iztAe7+UIfbLeZOCGCbeZe+Afs5EIUNcODn81Ft+9wpBtKIZdXsH0fXRK2SgUADAXTdqtpkqXpP8Pl+IbF8WGo0iFwQFtNCXBFvsL/xIJ1IdrEeRCIenOofL8uN8svFSrehCO7M+X1pqzdolqrluX49lg28mlxjxbHPe/0GtmZQLpaZaDRSlEOKqjxlBAoqvxNECEoUFnHzq4LvQx23/vLBEB94vN76vnuObcnMI0J 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?q?0TOO13bN78P1t0Rxqvi7yHAtgeu0?= =?utf-8?q?UFgUJWMXdRPGkrP6MezvmxGy7memUAKabHnmRB1J+DolkKic0tbQ19Z7Hyq40HER8?= =?utf-8?q?l8jjFAIjiiBD9eeJ/4n//7lh7gb8ztjWqiudsdkXnk0hyscskLTRPjicLxv0EtTIA?= =?utf-8?q?WY0n1pRoc9EBc5C8U36d1mmzCrD/vz/onC3Y2ydcZWEJN3r1ZvNR+b/Otf5uwdckD?= =?utf-8?q?OmZf/tUNo3L+LjASJQyrvMHsUNVty23cYg6qqO+V6fNRbN9g0cqw02r7TMQq/ag1Q?= =?utf-8?q?ukqAm1Y13aTZmiVPvDwE5vvRc/aKXPDK0+aS07FBqud7JaT+ehoK7AsEUe/XY3p8m?= =?utf-8?q?3oLlG/UPkauqAddTmlzwukhZuGiwIaxmdRdzXHpvSg71ifmUMoVbC4Pe7mFbTCzQM?= =?utf-8?q?+5PKNeMrvsl/EixlsnTksJSzssMfOukKZrMN1orJqbeCvLnYjMB2V/8mIv2qzBhBl?= =?utf-8?q?ZMZIq8VM/mZEiuDvLKoxS2/GjI55IMTBAhxQkF3w6XPfyPKZ6qq+HvFmrQ+qUION0?= =?utf-8?q?lPZzTbR1DSALZWmFDAde/Mo8NM9kXqrJncL8fOhs6rpPbVIQzj4uzPKEnlRMIvdVj?= =?utf-8?q?dscd8/wcvipxtneXWWVHc69xoDv5hdhxzvVcwinX1N2j6+LH/dpNh7WnhW/wD86LL?= =?utf-8?q?jTaMsMhDbxNe/z9CLqjk5Uji0ZhXgsgtVVuufzLOyz8QYSY0BNDo86vUalrb02eDq?= =?utf-8?q?dtg1y3sDi5h8MXr5nUT2fCyXbOGW+Q83FukIIcLkaC88iRA2sJANrmVXLL15Wfj6i?= =?utf-8?q?itrHV3quhEUSMlYnZ70Pa7F0CKqfyOXHCuuZNzhqNmFOc8YDmm9Nh3lUgQw855LY6?= =?utf-8?q?hmEu4Cv3KuoHqthlmg/rshzy6UyK0Z54235XNc3xym1Ja/KwSzJMZG+IF4Bn6ssT7?= =?utf-8?q?fY2oZlV+Ec9/c/THM6IxMmqzIw1CQkldgs5fYmzrcV6Tsqvh8XXiAlFv9gSEgwoNt?= =?utf-8?q?KQws2G/tQBcBf0VX672T1axwLloA/9S6rblP4GsSnnUC13U2Dwwc//CSFsCMMOXJI?= =?utf-8?q?saToXpxDKhGnLQZFWrUyfRIIS6UfX4rbEmWFDny4fesGfGaI0EMQMAAM7kVle0Uah?= =?utf-8?q?jUzdE1BCPFwNvh1dVQGWoNjlx98Fy+1GV7C4xB4R2yHV4FbGxhCHnepAQdfCRD7FO?= =?utf-8?q?M4ioyp0hJATRbRD+R6Z7Cp+/DeVrbmLblI/kxSaU4Lwbas0xWVvlR5vGUWKY0sys+?= =?utf-8?q?mDO+9xh0n6aPuiZZE/WQCOrfaaxHQgMKe0pphBoBAifZNVX7mpOHNm6KIVqjEYxJs?= =?utf-8?q?v7GCi0pqRjl1Kc0di5XRcQv6aHNyJNMR7NX+LHfZEvDPvmDktaaI+Z/yCz09GpNN8?= =?utf-8?q?IFAuDA8Zz6vYJNR/jJFXb/I2eP4zMrfPtSuK5YVgF094L+jBHkR/ftJJtVDgRcrBR?= =?utf-8?q?v3vWUNsfi14UPIKKFO0GP4nG5JoO+suchuLF2BsrnZdY+bInxtjMugFZvpTpzisdd?= =?utf-8?q?7f/90PnUZewsOzVjsVz7x8Q4gBoNWNN38J3lkL/bJZhipNU+iSa0ls+AhWx/JXvzj?= =?utf-8?q?+LO3BHQbQ6A/GjXg3t9GvaEto5JuIVqwjg=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: d2f3f804-7563-4848-1c45-08dab0b829d7 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:45.2530 (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: ityFQkYbTPMTc1qTdjfocqBgjIXfdF8EvM0HfHgh4AijQnp5D36n+p3Xa15t8Oqe0o2rmhEJfgAXblqAETtOtnH+0AnCx8SaS4IUHXrDQNM= 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 offload support of decap action of IPv4 NVGRE tunnel. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- doc/guides/nics/features/nfp.ini | 1 + drivers/net/nfp/nfp_flow.c | 8 ++++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/doc/guides/nics/features/nfp.ini b/doc/guides/nics/features/nfp.ini index 4c6d2d5..9f7a680 100644 --- a/doc/guides/nics/features/nfp.ini +++ b/doc/guides/nics/features/nfp.ini @@ -45,6 +45,7 @@ vxlan = Y count = Y dec_ttl = Y drop = Y +nvgre_decap = Y nvgre_encap = Y of_pop_vlan = Y of_push_vlan = Y diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index 9464211..514e221 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -1627,7 +1627,7 @@ struct nfp_pre_tun_entry { } static int -nfp_flow_merge_gre_key(__rte_unused struct nfp_app_fw_flower *app_fw_flower, +nfp_flow_merge_gre_key(struct nfp_app_fw_flower *app_fw_flower, struct rte_flow *nfp_flow, char **mbuf_off, const struct rte_flow_item *item, @@ -1635,6 +1635,7 @@ struct nfp_pre_tun_entry { bool is_mask, __rte_unused bool is_outer_layer) { + int ret = 0; rte_be32_t tun_key; const rte_be32_t *spec; const rte_be32_t *mask; @@ -1664,6 +1665,8 @@ struct nfp_pre_tun_entry { 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); + if (!is_mask) + ret = nfp_tun_add_ipv4_off(app_fw_flower, tun4->ipv4.dst); } gre_key_end: @@ -1673,7 +1676,7 @@ struct nfp_pre_tun_entry { else *mbuf_off += sizeof(struct nfp_flower_ipv4_gre_tun); - return 0; + return ret; } const rte_be32_t nfp_flow_item_gre_key = 0xffffffff; @@ -3835,6 +3838,7 @@ struct nfp_pre_tun_entry { *num_of_actions = 1; break; case RTE_FLOW_ITEM_TYPE_GENEVE: + case RTE_FLOW_ITEM_TYPE_GRE: nfp_action->type = RTE_FLOW_ACTION_TYPE_RAW_DECAP; *pmd_actions = nfp_action; *num_of_actions = 1; From patchwork Tue Oct 18 03:22:38 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 118335 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 7F54CA0560; Tue, 18 Oct 2022 05:25:41 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id AB2D842BDD; Tue, 18 Oct 2022 05:23:51 +0200 (CEST) Received: from NAM04-BN8-obe.outbound.protection.outlook.com (mail-bn8nam04on2099.outbound.protection.outlook.com [40.107.100.99]) by mails.dpdk.org (Postfix) with ESMTP id 75181427F4 for ; Tue, 18 Oct 2022 05:23:48 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=U16ClEpwIrMYRA2rEVSNBC8OZCPbQ2/IcObhzajoJscV/DETWfJmfASnob580L1Vkh5T8tv7fP4B6wu0GhN+IsXvMMF9LHZBisRLkT0ILaPpJVbBhjp8fPQl8/Bipv17ioR5nHMGntXbbGVSV1n8iqq6NW/Zoq1HYuPCB4H7IR3ET+vkkd+NCyV67X6cCJSq4GbNv7aihljwCnlYVleun2a/pucse45VS5Q9PYzvkg/dpBBnF0/7JfMoboOGuM04RQvEoE8gEavA9niX4h0CCf04hocDGk95jCzrxoEzN7SbGAYhh/IYN4VwdK9EbdKAGgNKGeV+4b45DXCfcbo06Q== 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=bbiGlRQvWo3UyDXsgyhAcV9KEJN5raLcNGHuLGqfezM=; b=AWaa0f1X9jQaBX99GLzJ320gdwTPZBfQTkbDAShQmruVxOPeAr7UfCGv82Ljo4xsg5oYwX2tGs5mD9esYkOQmQoNsACs5yENpFU5cIj0eFFlP5nHO1ds2luZkPsDy9jkY1FKRJeDvC5zmv8EROCvownfH6ILcicTc5qUP9IJhBoeAPv3V+qTqghovmot8cLzvrpwmKv82ntFkJmXN2kiY0Z3Hc3ciWisGDYPMCzOLhAbLLerccwcyl7QGIA4iDUpltQUty8mgo+bKf5SsBbAbTVdLJvjm0mcX8LPkqJnPnY8Fh+oPtUGhHrodqgD8duQspAC8DzLhs9P5bQLodFTzw== 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=bbiGlRQvWo3UyDXsgyhAcV9KEJN5raLcNGHuLGqfezM=; b=MLzi/ycQGRPq5UW+/5XYsUpYaMdVE0VKxkFOzgd3SO+TFGYbJL2Ku85dYkQLGTLCz7/uHQu+Dy3T+7w0FieJkYG+7lnN913ceFIxYfXd8G6f86qpTv4rEzgoL0iY3Ct0fG4Z83tG6Lmj4xE/kX7iERCMmo4rLIzN7rNL7utdXQ8= 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:47 +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:47 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH 24/25] net/nfp: add the offload support of IPv6 NVGRE decap action Date: Tue, 18 Oct 2022 11:22:38 +0800 Message-Id: <1666063359-34283-25-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> 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: ae7ffd76-a1d0-42b2-fb7a-08dab0b82b18 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: DBUMLC0rDrjI71QwzmmTIpvxxgGNxmxndvcyNoCerldczysoZLAAGtKQqGqkEZ20t7+XVmb37eO4DOC3bFI/e0e3ETEGg1uBCwbvT6SxDxWrWLSMb+YJ50v0jNKIoELNsGm70UIHpo2LaM0JEd89feeyQ89P42KwGNavJxxq9GIhTlXTvTKofTq/ebjzoJqNqQSatL3hh2YPtpmRAXFsaMPvG2XZqijDp1euWHwJLqAj1apoihRtfJAIHeYN0MOXqN7PcGtDI9nbojQHpbnf3qmUCLZpFnLDzDoUgc2NSYlHarrZHv/xo3PKo9Y7N6upPxDoG8amYC5kiNfwb1YiZq34YjT3r1+XxJs0x7YH01ht3ITYVwpsY26P205cwA9MVaHtXJmUe5wEaoJ3tyHAz4jcVZ+rs9HjxpvjGKKkKcxxROCX5qFV1nky/ycNouKa/aVIfntY2Tx0RMb9Oso+vn+aiyJeyYLp5NrtoaOIBVSS/L7IqdOKquQ031FkaztBQEBwuJhE2WNw8S6WPUymZ2k3LQw+X1w5Avo27MXoOZp+Qd1lAoSlBdFmbIXCFqHfDP8Mma8P1KvMDHgUIhMpZF0WXx4WQ2A8f6sJbTqDv+uAn8zt67v7Il/2ftrUqlCZsPXaPNtfONMtLzDrQIYQCYR9gSMIfIBoSSJPcQNUzJ8K+F+hW64Pbp+AUojiy2cIgCa74e4UZHhTfWi6X/4iTfqSZ/qQMLrfZ+Dx/H6cS0kwAAUgDcB2cQc5HSTBvF/o7FnouF9zUkVxcQwdQ9SSFY/dNxPe8Y7nzZsYCQJGvDgXZYBY8UGMHT4HTI+cdG6P 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)(66574015)(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?q?MEiy0aK4NNFFbGgZmvkBure4GZAT?= =?utf-8?q?s8LNLYEFVaR3un8LoOqOkr2f1Vi0wDOhOcvOllclpDU7jx1rFh1mPbaL7V7fhjh0V?= =?utf-8?q?uAM4Vnj2DMiUisv0kEh4ZSc8qPp2YKXmqWp15JbWiUz5DmNnd9Yamy0DKin3Y38iW?= =?utf-8?q?o4KwAWcf5ESwR6cCMilMzzEgsrx/vl60XiY1dTEVvPV/shbmexL4mG7I0IJVaX+hV?= =?utf-8?q?0ss3KSHXsHIjGZFMT8OKdiulngBi6/jzGCGjcmlAZabB7TuJeCT34Ww94QrpSNQlR?= =?utf-8?q?rR+HC3fkFlKwEBKwI814wJIXwW+nwZi12aaTm0O2TZyKVzRX27KQY1npDu+H6gTxM?= =?utf-8?q?xvfxU7TgSBN9PwTSSwKCq9ypRjqfWQXKrkA/fAyA/1y0DR46hIRWpNZXYe92HJOge?= =?utf-8?q?wKTGJZF3Zgd1A3/WiDOEes0eYmqM5frC+pt1Jp2KzFLBK0AW/NoJqqGOsUPkr/1sG?= =?utf-8?q?7HP82mRK1nL2Lfu5ZUPgFCpgCGkZGXBMSQiMk2u4eQGRBGQ5LjteSJKWDaVPssWAH?= =?utf-8?q?DrkmiRrgSTdyKCFEa32bi3c8ayd83NMdCfU8/o0kYoOVO/yGMbmJaayCVpVc/xGsT?= =?utf-8?q?dbgNAeNX/ZzPNDXuxzIuXsKPPYt4tZC/gQDOpL9px2BvEHkTTpNuXcw6YtugylGXO?= =?utf-8?q?WWFjvmW8POlNnteSMPXsTCpW7rnd6D5IZUMRioOaf+DBrMyysc6RYhq4X7sKNG/MF?= =?utf-8?q?jpuANhH6sYyqE/XeNZ8BvDdPDROSr3c3CLA91I8h9klWjIitx8yQv2PXqQxhRVpPb?= =?utf-8?q?ppZ7pFQrcBv/vcwizUmjLehTN+XG2p9IEnLpA4RtiiTvODNYNIu4UVZUbJSLL2eGV?= =?utf-8?q?QKCmTglXyHlYOvoGZKQBZQdbRcCPrDSZsSvLMqvHSzd7viX4YVkjsZVSDK55dysbe?= =?utf-8?q?u/6Z63Nmber9oSStJLzWkc13/WAQbnofl3oGdjBo92rR5Qni3qysWNeDRf+oQ5ic1?= =?utf-8?q?bHHePjto+kJcyfR0cT40Qxktk0j0I1QsPT8XKFRNLm+K6eJovRiw7Yp5873OErGUm?= =?utf-8?q?30Js2YblZBneYAjKizcrxxt+BZms8cJ7MXoSScnCg69txP24k0qRjukfnzuZuyJeA?= =?utf-8?q?Y2o+fGy+Ug6imqBOFY+Zu0S6WWzbD9BGeD5zrwxpx4cP2Uv+w299CA73LvoNIeZ6e?= =?utf-8?q?TAlZA2+O34zFkwxGPvl+2BIHL4I81bXg8RSDisQQHGjWicjRV27ZE1fuak9tGduBI?= =?utf-8?q?5FdP+HHW9zEvL2PH9VhI2gmCvpNWFj1UvYKlSAlOtUwXidiDRw+r6LhgqS0V71RAR?= =?utf-8?q?3SWUJrjUGGZ00ZCDZR48DcuuBRFFUpmjSZ7q0tSTTOrJ34RBEqy+vc9eRF/5+4GAV?= =?utf-8?q?5ksp0gnMkR6OQsji5PnrcvlQambNAeXXtGx2wTV8X677lDNPQwtTQOZRs83ydmpT/?= =?utf-8?q?C7hWuZqauByGZSVeNUak8dPplgZRlkfQRtzCBRUUjgY7pib50WCErFQYcGwFP12mS?= =?utf-8?q?Tvmke2zC5hEvTgVW7XUe8otfIM39XbHLlKLO1+VbmDfCROb98ySaAX7KFf6lxNzkd?= =?utf-8?q?eN5VLANmftqKPcfMYeYqgm2mdSKBr6D2ZQ=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: ae7ffd76-a1d0-42b2-fb7a-08dab0b82b18 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:47.2843 (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: ZYSFhO0I3ZW6abozHYJLeRPUGxyku4CrcCCO/FEL1egepgZt+7NSj5soBHrajzHkF2hWS59g7KCP8e09MCaRxJ/+1GNBJ+XgJA6f5cqcVWM= 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 offload support of decap action of IPv6 NVGRE tunnel. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- doc/guides/rel_notes/release_22_11.rst | 2 +- drivers/net/nfp/nfp_flow.c | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/doc/guides/rel_notes/release_22_11.rst b/doc/guides/rel_notes/release_22_11.rst index e2f7295..4f3edab 100644 --- a/doc/guides/rel_notes/release_22_11.rst +++ b/doc/guides/rel_notes/release_22_11.rst @@ -186,7 +186,7 @@ New Features * Set the DSCP of IPv4 and IPv6 * Encap and decap of VXLAN tunnel * Encap and decap of GENEVE tunnel - * Encap of NVGRE tunnel + * Encap and decap of NVGRE tunnel * **Updated NXP dpaa2 driver.** diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index 514e221..1ccc6ef 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -1661,6 +1661,8 @@ struct nfp_pre_tun_entry { tun6 = (struct nfp_flower_ipv6_gre_tun *)*mbuf_off; tun6->tun_key = tun_key; tun6->tun_flags = rte_cpu_to_be_16(NFP_FL_GRE_FLAG_KEY); + if (!is_mask) + ret = nfp_tun_add_ipv6_off(app_fw_flower, tun6->ipv6.ipv6_dst); } else { tun4 = (struct nfp_flower_ipv4_gre_tun *)*mbuf_off; tun4->tun_key = tun_key; From patchwork Tue Oct 18 03:22:39 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 118336 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id AC94FA0560; Tue, 18 Oct 2022 05:25:48 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id EA4B242BE7; Tue, 18 Oct 2022 05:23:52 +0200 (CEST) Received: from NAM04-BN8-obe.outbound.protection.outlook.com (mail-bn8nam04on2103.outbound.protection.outlook.com [40.107.100.103]) by mails.dpdk.org (Postfix) with ESMTP id 9153142BD5 for ; Tue, 18 Oct 2022 05:23:50 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JP7N9A3whwKqlE49hj714sbLwWkjUNVECNQekwOroUv2ZVqRDYDSS+HgX2mtwd0ZJzKS+lVsWFKzuVt84RySNzFEFdp1NZ1UDNZ0siU9oJTn+7ZiFnQGcw7TGVVZH0ETfFQr5KZOM80R8LLQY1lBE8hzrV0gn4NI91//7zXAVJucmhYRsAot4aekEswGERN7aioJ3/O2TUIqQ+tiMhXIO5XoFDVMNEYUfJjNzNh8+zxjMA6jhshi0BdsC0B/qzE+ieOCLkdWObDDr8OvMX1nTGHDW4FRyje5pRtC3zZ9Ylfh4SVcNxL0x1GtypglDI9ZOVI4/tyhazrZFtbMkx/miw== 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=7ZydYMWhjWsbv+7QrigJvLX5tWrT081pFMeaUvNj5uw=; b=c9IDrfm0EJOvMd6wH3+pF2gRyJaU8/GpqjAZ3dB2YNxLQaRifmiDGKbE4PBduEQ+ufxftAXW5+Y14toX9P4OWtB8VSckHI7PjQheew4w5ipVDOSTHLmWsGYeAt7NgcgE4QmTgPpJiRRqsf7jaXfcUgwB4vlY8wLbY+r2mMixqrMOzfvGXRpqigYV6e4eMYERK4iiQfkcBEe5DyLmM/6pVDBUuGU2aEZo8cmsZNBkOvCVOZCI5XjQUmem9JWkTbc75kthRDjijo1b3KVk6tVzZslR35tnd/y/0dKmcgRHnG9N7ItdoDWBSeScLBCAc/HVTZAp6+uKIp/+tSL+KH+Avw== 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=7ZydYMWhjWsbv+7QrigJvLX5tWrT081pFMeaUvNj5uw=; b=XO9NdAOIB6eL+gp+aFA4caHZ5d11qZ9lhK4ktXa657fy2+A/Zt7QoNLiZHXXbOKxiknWPrKz0UtknsRRTi4Ogc0+iLbyyxQxciTkF9Yukd3yTbsPTtrHkaA381rgiqtXMHQ+vsuG+bB8XOWZxnK6jj9uIEpd5TVu5e1B+NQ30g8= 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:49 +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:49 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH 25/25] net/nfp: add the support of new tunnel solution Date: Tue, 18 Oct 2022 11:22:39 +0800 Message-Id: <1666063359-34283-26-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> 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: 986cda88-5ef0-485d-ad4a-08dab0b82c58 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 2jXNAubvjDttxdro7nUlTSy0rsShV30gsciXG/FKD2vBfse34ZTlf1i0O7O3Uh43ZrCwRTqD05b0BA0DKx33OKtnbepR4h2wjhf4mAlcGTn2IhxYw29m6HCTzLr3kjrKRdVhO7vn1hVtFnO5vudx16+jfJ48pIUnEbr8GQShvVSFrcK0P7Iy4FRfEsiEa1wNC/567Ev674dIm+yvP4cRhOkAr0kBXXmFJToqtLxJXmpNILCWxbFRY/xSvHUWRpjq4WYQ0h8zGeqzTjT/Um9U+Yq1XwPSjWD/6brQfMVp0OsgUIbuxotdSVPdpOVAwb5JgZFb/iiEuoh/Zze3Jec45Wyh+S4GD5OSRTRtAQgv02uv5TH8UTkzLLJeoJZCZX7CBMkGH1Kjhe9Jpltjpyt5ggIRsTyD8Hds5CdSrCmLzPgMQSvPvaM88dEyUpMli7G2e2sfhQ3bLpoi4udLhfJNVS/jbGsFH/k3MRfm6T9wDk0tbjlGQJcRR8IUtsbHmB3EdEhccEBoTh4lXDrNy0luw+hpN0LwCQAf6ub22R/h2EmX2Ih/MJrbAHbLeRIieT7iEvp5hCQNU0ZsDJIbw2szhymnCYHtyrd2fmVyNWWgAoNpSz2CkbA+MZ+g5jf4zTtZiQGo0lR8VlB0dX+VTcAb6a4jURFQ66NUKARCC4ZzoLWcWvcvNjICKu05hR83j7EFhV1R92oGsWhHLNGBvVvcrAgUe2ixt14VS70+yYUFgMvpxQW1noQars+3aLiznapAtW/5uASRwPGIuwl4hLLaH9fgtoW4JuxcJ0DLndNyAfHW9ypOwh+dmyyqTDWctL9l 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)(30864003)(5660300002)(44832011)(41300700001)(8936002)(66574015)(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?q?v2yJvpSsKsbkHhsTmilFzWVyg4L+?= =?utf-8?q?0YmTCrmv4edMEYBLTCn8bSYZYXOsM12n5iu6TACaSO5K9oOkxOrhWmrdLt2C6YU9f?= =?utf-8?q?bv/wf3zu+o8dsweVBcKXVtefnkO57lhzNyS+Crxz9rqkxMX0GZuxStJf75LPOv48e?= =?utf-8?q?S7vGBWpx1ymOyDGyireIwYt+27ZdpdUVcmF2W13NA3gMwQovLtb8WxU7dSRltWQ0j?= =?utf-8?q?JWoOxabyHmJLr3h3GIhKI1BFaxkK9TAH5dNuBV5WSDQtCRJG1l9pkDtk2ckPTOGGJ?= =?utf-8?q?WWHb7dPRXDdZ4nq7mee0x0PfnkqhRLIoK/VYENccEJmDbhxeRhDc7GYNKJdwobMd8?= =?utf-8?q?7EP0Ii2oHgegbM3gO74a3yBbLGwG81D4q/UDt7ROkinNo8kWzmnb1mcistj0r3f3c?= =?utf-8?q?mqUo+BZS8GZ6sD8cfArjnYQUu9kj+o5mMfvXbt2q8Ap+guMElQ+32uAyQeJvPq468?= =?utf-8?q?V7O9kLdBpRI+RfTi/LvhJJRBuzi9EtBou3gFKe5XylATELZlHy6Jdql7V/aki3J/W?= =?utf-8?q?rshiF1WagyO3t7Lvh3XXBtvVl1pJROnULNPfr9MJT+VfmbfD09Hae5MyxF6zjy7IE?= =?utf-8?q?x/qrM5Q0Qg7baKUr+BnRapJE3dKdM3//IMCsdj5fF+DVvWb2JMGziihIQeiKTH7is?= =?utf-8?q?6b1w28zVKCeH4oL5ZxefLjHmolOKPMjyEf+GDDGwuwf2DR8146a6XlHVF5gEq69+0?= =?utf-8?q?hJ8Jjm/G0jhUOvo9MhU9eCQs3k7/JT6ME9tTtLwCwjgGPxJs0RXksDi+P8knMxMcz?= =?utf-8?q?kBYb4OaJaPj+De9Z8/1d29eCrxKkR9l+00R6osUY8YxNE8tnjP8ZnxZmLudaWZeoK?= =?utf-8?q?4FUyjSj4+dY7YL0vrEiNhjmwBcQITQAr0WdiJrernDSWVG9yUvHpa8GBVf1ihxScB?= =?utf-8?q?km6b2FsCnkVqvXZCO/QE4EeGrMHCNvuD5JfBDoW+Bdv+UGn0CfA/N70ZBJlkycXem?= =?utf-8?q?QEDneYLgN+jNGh/I4FVZnjNPF9HdnAgZWWY94R+/OTYeEsfGR4nlsO5U9vL4NwL5C?= =?utf-8?q?pkOHv37kq9uBa9KYTfYygDZdJKRYGq3Q48yeKYxmCBrf6aLD08qIWM4modgsaiPYc?= =?utf-8?q?jimF3dJe6NZWpLn1w+oIrIoEzx69zzDQLtaqHZSZm8tORY9HIWVZL794BjZmv5f+T?= =?utf-8?q?UTK3vBx/kDVEtZLjmLjcgqeFCe2DckIDfIy/h32mSZrWGwjYP2RTUpI2cTlu+mQVz?= =?utf-8?q?6GVV4PkOUe2Rfavn3lDBAnqMAncT6cxsBop56eeIOGPLmEyIUzHHf6mWiTcfavh/I?= =?utf-8?q?RUTVgCAFHuBWhte4LQlM9Szb/QQ6d44BzPQIj3mgtW/z0BiERgW7GJpgjY5HfPKMa?= =?utf-8?q?mAQ5aa5QstH9CCU59yP24ohMekJ8o25VQwjavm3P9RVw1gldcZJX/BJnO4fEvLGC2?= =?utf-8?q?xe6e1p6F0uY/R5H/wwp7BY1WfM0mgrRiFAsOSnY4kWAtdCbLIsGkZHkvWLzU0c/Uc?= =?utf-8?q?TNql+/z9ntRxETC+M3+HsMpb232cGuiOv3n1YprZ/ro6iX+XG6kQU6arF2afcyUJH?= =?utf-8?q?EPoXb12a51c0Mko7NAV9EskDZozQ4/uzZA=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 986cda88-5ef0-485d-ad4a-08dab0b82c58 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:49.2076 (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: RjwnTqmum1jNmL/tYGbpQpIZUWwyEa6Gy4GlxR/8DcJGuVJGaEYk5R/oH62onIfqWlbZNsGYwX+nK+Fndp4psgsuaMxUfmYA154La/CCfls= 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 The new version of flower firmware application add the support of a new tunnel solution. It changes the structure of tunnel neighbor, and use a feature flag to indicate which tunnel solution is used. Add the logic of read extra features from firmware, and store it in the app private structure. Adjust the data structure and related logic to make the PMD support both version of tunnel solutions. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- drivers/net/nfp/flower/nfp_flower.c | 14 ++++ drivers/net/nfp/flower/nfp_flower.h | 24 +++++++ drivers/net/nfp/flower/nfp_flower_cmsg.c | 4 ++ drivers/net/nfp/flower/nfp_flower_cmsg.h | 17 +++++ drivers/net/nfp/nfp_flow.c | 118 +++++++++++++++++++++++++------ 5 files changed, 157 insertions(+), 20 deletions(-) diff --git a/drivers/net/nfp/flower/nfp_flower.c b/drivers/net/nfp/flower/nfp_flower.c index 168bf0c..d2a8f9b 100644 --- a/drivers/net/nfp/flower/nfp_flower.c +++ b/drivers/net/nfp/flower/nfp_flower.c @@ -1073,6 +1073,8 @@ nfp_init_app_fw_flower(struct nfp_pf_dev *pf_dev) { int ret; + int err; + uint64_t ext_features; unsigned int numa_node; struct nfp_net_hw *pf_hw; struct nfp_net_hw *ctrl_hw; @@ -1114,6 +1116,18 @@ goto vnic_cleanup; } + /* Read the extra features */ + ext_features = nfp_rtsym_read_le(pf_dev->sym_tbl, "_abi_flower_extra_features", + &err); + if (err != 0) { + PMD_INIT_LOG(ERR, "Couldn't read extra features from fw"); + ret = -EIO; + goto pf_cpp_area_cleanup; + } + + /* Store the extra features */ + app_fw_flower->ext_features = ext_features; + /* Fill in the PF vNIC and populate app struct */ app_fw_flower->pf_hw = pf_hw; pf_hw->ctrl_bar = pf_dev->ctrl_bar; diff --git a/drivers/net/nfp/flower/nfp_flower.h b/drivers/net/nfp/flower/nfp_flower.h index b90391c..dc0eb36 100644 --- a/drivers/net/nfp/flower/nfp_flower.h +++ b/drivers/net/nfp/flower/nfp_flower.h @@ -6,6 +6,21 @@ #ifndef _NFP_FLOWER_H_ #define _NFP_FLOWER_H_ +/* Extra features bitmap. */ +#define NFP_FL_FEATS_GENEVE RTE_BIT64(0) +#define NFP_FL_NBI_MTU_SETTING RTE_BIT64(1) +#define NFP_FL_FEATS_GENEVE_OPT RTE_BIT64(2) +#define NFP_FL_FEATS_VLAN_PCP RTE_BIT64(3) +#define NFP_FL_FEATS_VF_RLIM RTE_BIT64(4) +#define NFP_FL_FEATS_FLOW_MOD RTE_BIT64(5) +#define NFP_FL_FEATS_PRE_TUN_RULES RTE_BIT64(6) +#define NFP_FL_FEATS_IPV6_TUN RTE_BIT64(7) +#define NFP_FL_FEATS_VLAN_QINQ RTE_BIT64(8) +#define NFP_FL_FEATS_QOS_PPS RTE_BIT64(9) +#define NFP_FL_FEATS_QOS_METER RTE_BIT64(10) +#define NFP_FL_FEATS_DECAP_V2 RTE_BIT64(11) +#define NFP_FL_FEATS_HOST_ACK RTE_BIT64(31) + /* * Flower fallback and ctrl path always adds and removes * 8 bytes of prepended data. Tx descriptors must point @@ -52,9 +67,18 @@ struct nfp_app_fw_flower { /* PF representor */ struct nfp_flower_representor *pf_repr; + /* Flower extra features */ + uint64_t ext_features; + struct nfp_flow_priv *flow_priv; }; +static inline bool +nfp_flower_support_decap_v2(const struct nfp_app_fw_flower *app_fw_flower) +{ + return app_fw_flower->ext_features & NFP_FL_FEATS_DECAP_V2; +} + int nfp_init_app_fw_flower(struct nfp_pf_dev *pf_dev); int nfp_secondary_init_app_fw_flower(struct nfp_cpp *cpp); uint16_t nfp_flower_pf_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, diff --git a/drivers/net/nfp/flower/nfp_flower_cmsg.c b/drivers/net/nfp/flower/nfp_flower_cmsg.c index 76815cf..babdd8e 100644 --- a/drivers/net/nfp/flower/nfp_flower_cmsg.c +++ b/drivers/net/nfp/flower/nfp_flower_cmsg.c @@ -263,6 +263,8 @@ } msg_len = sizeof(struct nfp_flower_cmsg_tun_neigh_v4); + if (!nfp_flower_support_decap_v2(app_fw_flower)) + msg_len -= sizeof(struct nfp_flower_tun_neigh_ext); msg = nfp_flower_cmsg_init(mbuf, NFP_FLOWER_CMSG_TYPE_TUN_NEIGH, msg_len); memcpy(msg, payload, msg_len); @@ -292,6 +294,8 @@ } msg_len = sizeof(struct nfp_flower_cmsg_tun_neigh_v6); + if (!nfp_flower_support_decap_v2(app_fw_flower)) + msg_len -= sizeof(struct nfp_flower_tun_neigh_ext); msg = nfp_flower_cmsg_init(mbuf, NFP_FLOWER_CMSG_TYPE_TUN_NEIGH_V6, msg_len); memcpy(msg, payload, msg_len); diff --git a/drivers/net/nfp/flower/nfp_flower_cmsg.h b/drivers/net/nfp/flower/nfp_flower_cmsg.h index a48da67..04601cb 100644 --- a/drivers/net/nfp/flower/nfp_flower_cmsg.h +++ b/drivers/net/nfp/flower/nfp_flower_cmsg.h @@ -136,6 +136,21 @@ struct nfp_flower_tun_neigh { }; /* + * Bit 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 + * -----\ 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + * +---------------------------------------------------------------+ + * 0 | VLAN_TPID | VLAN_ID | + * +---------------------------------------------------------------+ + * 1 | HOST_CTX | + * +---------------------------------------------------------------+ + */ +struct nfp_flower_tun_neigh_ext { + rte_be16_t vlan_tpid; + rte_be16_t vlan_tci; + rte_be32_t host_ctx; +}; + +/* * NFP_FLOWER_CMSG_TYPE_TUN_NEIGH_V4 * Bit 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 * -----\ 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 @@ -157,6 +172,7 @@ struct nfp_flower_cmsg_tun_neigh_v4 { rte_be32_t dst_ipv4; rte_be32_t src_ipv4; struct nfp_flower_tun_neigh common; + struct nfp_flower_tun_neigh_ext ext; }; /* @@ -193,6 +209,7 @@ struct nfp_flower_cmsg_tun_neigh_v6 { uint8_t dst_ipv6[16]; uint8_t src_ipv6[16]; struct nfp_flower_tun_neigh common; + struct nfp_flower_tun_neigh_ext ext; }; #define NFP_TUN_PRE_TUN_RULE_DEL (1 << 0) diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index 1ccc6ef..ac60e90 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -2402,8 +2402,10 @@ struct nfp_pre_tun_entry { static int nfp_flower_add_tun_neigh_v4_decap(struct nfp_app_fw_flower *app_fw_flower, + struct nfp_fl_rule_metadata *nfp_flow_meta, struct rte_flow *nfp_flow) { + bool exists = false; struct nfp_fl_tun *tmp; struct nfp_fl_tun *tun; struct nfp_flow_priv *priv; @@ -2437,11 +2439,17 @@ struct nfp_pre_tun_entry { LIST_FOREACH(tmp, &priv->nn_list, next) { if (memcmp(&tmp->payload, &tun->payload, sizeof(struct nfp_fl_tun_entry)) == 0) { tmp->ref_cnt++; - return 0; + exists = true; + break; } } - LIST_INSERT_HEAD(&priv->nn_list, tun, next); + if (exists) { + if (!nfp_flower_support_decap_v2(app_fw_flower)) + return 0; + } else { + LIST_INSERT_HEAD(&priv->nn_list, tun, next); + } memset(&payload, 0, sizeof(struct nfp_flower_cmsg_tun_neigh_v4)); payload.dst_ipv4 = ipv4->ipv4_src; @@ -2450,6 +2458,17 @@ struct nfp_pre_tun_entry { memcpy(payload.common.src_mac, eth->mac_dst, RTE_ETHER_ADDR_LEN); payload.common.port_id = port->in_port; + if (nfp_flower_support_decap_v2(app_fw_flower)) { + if (meta_tci->tci != 0) { + payload.ext.vlan_tci = meta_tci->tci; + payload.ext.vlan_tpid = 0x88a8; + } else { + payload.ext.vlan_tci = 0xffff; + payload.ext.vlan_tpid = 0xffff; + } + payload.ext.host_ctx = nfp_flow_meta->host_ctx_id; + } + return nfp_flower_cmsg_tun_neigh_v4_rule(app_fw_flower, &payload); } @@ -2510,8 +2529,10 @@ struct nfp_pre_tun_entry { static int nfp_flower_add_tun_neigh_v6_decap(struct nfp_app_fw_flower *app_fw_flower, + struct nfp_fl_rule_metadata *nfp_flow_meta, struct rte_flow *nfp_flow) { + bool exists = false; struct nfp_fl_tun *tmp; struct nfp_fl_tun *tun; struct nfp_flow_priv *priv; @@ -2545,11 +2566,17 @@ struct nfp_pre_tun_entry { LIST_FOREACH(tmp, &priv->nn_list, next) { if (memcmp(&tmp->payload, &tun->payload, sizeof(struct nfp_fl_tun_entry)) == 0) { tmp->ref_cnt++; - return 0; + exists = true; + break; } } - LIST_INSERT_HEAD(&priv->nn_list, tun, next); + if (exists) { + if (!nfp_flower_support_decap_v2(app_fw_flower)) + return 0; + } else { + LIST_INSERT_HEAD(&priv->nn_list, tun, next); + } memset(&payload, 0, sizeof(struct nfp_flower_cmsg_tun_neigh_v6)); memcpy(payload.dst_ipv6, ipv6->ipv6_src, sizeof(payload.dst_ipv6)); @@ -2558,6 +2585,17 @@ struct nfp_pre_tun_entry { memcpy(payload.common.src_mac, eth->mac_dst, RTE_ETHER_ADDR_LEN); payload.common.port_id = port->in_port; + if (nfp_flower_support_decap_v2(app_fw_flower)) { + if (meta_tci->tci != 0) { + payload.ext.vlan_tci = meta_tci->tci; + payload.ext.vlan_tpid = 0x88a8; + } else { + payload.ext.vlan_tci = 0xffff; + payload.ext.vlan_tpid = 0xffff; + } + payload.ext.host_ctx = nfp_flow_meta->host_ctx_id; + } + return nfp_flower_cmsg_tun_neigh_v6_rule(app_fw_flower, &payload); } @@ -2575,12 +2613,14 @@ struct nfp_pre_tun_entry { static int nfp_flower_del_tun_neigh(struct nfp_app_fw_flower *app_fw_flower, - struct rte_flow *nfp_flow) + struct rte_flow *nfp_flow, + bool decap_flag) { int ret; bool flag = false; struct nfp_fl_tun *tmp; struct nfp_fl_tun *tun; + struct nfp_flower_in_port *port; tun = &nfp_flow->tun; LIST_FOREACH(tmp, &app_fw_flower->flow_priv->nn_list, next) { @@ -2608,6 +2648,40 @@ struct nfp_pre_tun_entry { } } + if (!decap_flag) + return 0; + + port = (struct nfp_flower_in_port *)(nfp_flow->payload.unmasked_data + + sizeof(struct nfp_fl_rule_metadata) + + sizeof(struct nfp_flower_meta_tci)); + + if (tmp->payload.v6_flag != 0) { + struct nfp_flower_cmsg_tun_neigh_v6 nn_v6; + memset(&nn_v6, 0, sizeof(struct nfp_flower_cmsg_tun_neigh_v6)); + memcpy(nn_v6.dst_ipv6, tmp->payload.dst.dst_ipv6, sizeof(nn_v6.dst_ipv6)); + memcpy(nn_v6.src_ipv6, tmp->payload.src.src_ipv6, sizeof(nn_v6.src_ipv6)); + memcpy(nn_v6.common.dst_mac, tmp->payload.dst_addr, RTE_ETHER_ADDR_LEN); + memcpy(nn_v6.common.src_mac, tmp->payload.src_addr, RTE_ETHER_ADDR_LEN); + nn_v6.common.port_id = port->in_port; + + ret = nfp_flower_cmsg_tun_neigh_v6_rule(app_fw_flower, &nn_v6); + } else { + struct nfp_flower_cmsg_tun_neigh_v4 nn_v4; + memset(&nn_v4, 0, sizeof(struct nfp_flower_cmsg_tun_neigh_v4)); + nn_v4.dst_ipv4 = tmp->payload.dst.dst_ipv4; + nn_v4.src_ipv4 = tmp->payload.src.src_ipv4; + memcpy(nn_v4.common.dst_mac, tmp->payload.dst_addr, RTE_ETHER_ADDR_LEN); + memcpy(nn_v4.common.src_mac, tmp->payload.src_addr, RTE_ETHER_ADDR_LEN); + nn_v4.common.port_id = port->in_port; + + ret = nfp_flower_cmsg_tun_neigh_v4_rule(app_fw_flower, &nn_v4); + } + + if (ret != 0) { + PMD_DRV_LOG(DEBUG, "Failed to send the nn entry"); + return -EINVAL; + } + return 0; } @@ -2895,12 +2969,14 @@ struct nfp_pre_tun_entry { goto free_entry; } - ret = nfp_flower_cmsg_pre_tunnel_rule(repr->app_fw_flower, nfp_flow_meta, - nfp_mac_idx, true); - if (ret != 0) { - PMD_DRV_LOG(ERR, "Send pre tunnel rule failed"); - ret = -EINVAL; - goto free_entry; + if (!nfp_flower_support_decap_v2(repr->app_fw_flower)) { + ret = nfp_flower_cmsg_pre_tunnel_rule(repr->app_fw_flower, nfp_flow_meta, + nfp_mac_idx, true); + if (ret != 0) { + PMD_DRV_LOG(ERR, "Send pre tunnel rule failed"); + ret = -EINVAL; + goto free_entry; + } } find_entry->ref_cnt = 1U; @@ -2951,18 +3027,20 @@ struct nfp_pre_tun_entry { return -EINVAL; } - ret = nfp_flower_cmsg_pre_tunnel_rule(app_fw_flower, nfp_flow_meta, - nfp_mac_idx, false); - if (ret != 0) { - PMD_DRV_LOG(ERR, "Send pre tunnel rule failed"); - return -EINVAL; + if (!nfp_flower_support_decap_v2(app_fw_flower)) { + ret = nfp_flower_cmsg_pre_tunnel_rule(app_fw_flower, nfp_flow_meta, + nfp_mac_idx, false); + if (ret != 0) { + PMD_DRV_LOG(ERR, "Send pre tunnel rule failed"); + return -EINVAL; + } } meta_tci = (struct nfp_flower_meta_tci *)nfp_flow->payload.unmasked_data; if (meta_tci->nfp_flow_key_layer & NFP_FLOWER_LAYER_IPV4) - return nfp_flower_add_tun_neigh_v4_decap(app_fw_flower, nfp_flow); + return nfp_flower_add_tun_neigh_v4_decap(app_fw_flower, nfp_flow_meta, nfp_flow); else - return nfp_flower_add_tun_neigh_v6_decap(app_fw_flower, nfp_flow); + return nfp_flower_add_tun_neigh_v6_decap(app_fw_flower, nfp_flow_meta, nfp_flow); } static int @@ -3662,11 +3740,11 @@ struct nfp_pre_tun_entry { break; case NFP_FLOW_ENCAP: /* Delete the entry from nn table */ - ret = nfp_flower_del_tun_neigh(app_fw_flower, nfp_flow); + ret = nfp_flower_del_tun_neigh(app_fw_flower, nfp_flow, false); break; case NFP_FLOW_DECAP: /* Delete the entry from nn table */ - ret = nfp_flower_del_tun_neigh(app_fw_flower, nfp_flow); + ret = nfp_flower_del_tun_neigh(app_fw_flower, nfp_flow, true); if (ret != 0) goto exit;