From patchwork Sat Oct 22 08:24:05 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 118950 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 CEA48A0032; Sat, 22 Oct 2022 10:25:14 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 68EFF40DDB; Sat, 22 Oct 2022 10:25:01 +0200 (CEST) Received: from NAM10-DM6-obe.outbound.protection.outlook.com (mail-dm6nam10on2110.outbound.protection.outlook.com [40.107.93.110]) by mails.dpdk.org (Postfix) with ESMTP id 50D1640042 for ; Sat, 22 Oct 2022 10:24:58 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UxeKZRkCrGdeRG5rzyM+b/puuuCt5Ax1JN7tpg5auCIlPV1u5znAj75jreI8E9RCafnaG9L8bGatOd8+UySFikfXGr4F0Z/MtFsHOWS7PqHZ4J3fcS/MyVA9LW7bzyS6wFBfxI/7CSK4JWmds7THJPMji5licSJAzAyFx1X7ARMIzmlKSydjM649/uty7LMuBA7FRcQqSsLm9USdAH5Qs9cOYgSDZ13iTxu7PYsUGrFFbcAVKmUvN24rgIxX7UFEtdT6ZeWDeJIyIkmklsGdeAx4s9kUmlKX/s0ab+Ls5qtM/bCD+SrougsXTKa2C8cQ7fStISCml0HqCoAMJCUTGA== 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=hmcNZpazN8P0Q14vgyZW5nNrOUPPzibmJFRTvwQs7ck=; b=NXoXQ4nj6bzLIV68OiTSInXeQ7MT3foJZe+MT9X08hKjgWRkJcr3Pb6M//s2JzZcKsMpHHfVYyxmn/RC6CaKi83eumV9WoJoc3kQAR+q+82bWgauV5cDF3ytmbBpWXnxCwlwRpR4p+BRfAD5e3PYJGi3GUEpZDSstQGLvlTim1XXMjD9PSwaWEffnKSYNwBaLraMkluZ3AYMYpu8RA88AWb2DAYU/QLVgXfbyU0K5x+i+CBRs64yX6QQ1snsDbG1T3Bhch4QOSF8lJdSmUN4SKtSgaOhx2iRfpnZpu1N+PNU4z5o7KLFb2RRuTapgXdl//SOI9JA0J9Kc6xJuPoTLQ== 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=hmcNZpazN8P0Q14vgyZW5nNrOUPPzibmJFRTvwQs7ck=; b=UYgLI2wuvYyiiTbizFIgFHxFKT/yFcyceoCxI/9bHoj34THWmgFioUViAQQP9ha5JE+3np4vPUWVKI7BJ8nRDo8Tn/f/InU+oUHBcn46yqbm3JdgtL9nKs6KJEl0B3ewnmccx/bIyEUfNqaMHf8zzSl5HiOrta6h/uz5r6YcMdc= 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 PH7PR13MB5454.namprd13.prod.outlook.com (2603:10b6:510:130::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5746.8; Sat, 22 Oct 2022 08:24:48 +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; Sat, 22 Oct 2022 08:24:48 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v2 01/25] net/nfp: support IPv4 VXLAN flow item Date: Sat, 22 Oct 2022 16:24:05 +0800 Message-Id: <1666427069-10553-2-git-send-email-chaoyong.he@corigine.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> References: <1666063359-34283-1-git-send-email-chaoyong.he@corigine.com> <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR02CA0056.apcprd02.prod.outlook.com (2603:1096:4:54::20) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|PH7PR13MB5454:EE_ X-MS-Office365-Filtering-Correlation-Id: 4d073eb7-6d67-47eb-01bf-08dab406e1f7 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 5HvWmuWG3XLhXCGVo9Gg3lSeEhS04SMG811B3SSiUyNOkBD8mazr53q4io5c/Bb3NYmFC+IA74aL/fi3J3/c/N8qzpVc1yzsyZqDNGYcW56v7T6RIfCfpmWYaBGUI6RYIGheFQK5Xhjtwi2XfQJJSfydoBy57wS5Wsx2LitW0OhnZIIeyMJyS69P2fAenHPE5A5XRWB1xfBQIf+s990JLN75CXgGRfJ8598apZpdYtgKfpv1tx4ObRJ82vnij8hNPwjjG/08MDjH2Nw2X/zdCi0U0rZ/1lxaBKt9HEgR3PldjXoHMNWOxsTbrycF7aCm/MxekwuVk4Z6CHJgcEGU7M6gDjuZKI0aPuOYnZjk2zLkfoHSuom2bJJie6udhqxMEx/me+dgUxY9/ASmjp6sWAGpXBFjdWBI14aRa1303DcJg3uhW88YtnOkBG0kN7LPSQF6RHyDRwcv5OPdVtOiGDOBj3fub5fdcIO4EbQ7oL4IHIHOSw3Wl/NqNAvkgi2FCxXyHm0j0MqkjuQcwMV+wdTio97E0WeL7Vu+6+OFl8WrlhUkvKR1BRxhkEcB6V9Si0ZRiOWx/1n6/9FrUcQvC0LVWJaY/OPZe4qArpFfqjb9zlNJJMXr6eXxqh00BotFqm9PowItCSqddAzPyQcFm1k8NjPnKBF328qUcq7JpnIkojbmljx+GjB5EU9dRFul6CWWxhizcd9PMWNbWeSEpNVcEkUEvD5r8Djal4JoKoA2K4pE52sf0UEvX3gY4YLb3InJkBKGqkU6A0AorpFw+JVfZrrKYCbavnzZSBz4odWazXUZHIP09AQWCCEdZqvB 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)(346002)(366004)(396003)(376002)(39840400004)(136003)(451199015)(186003)(6916009)(316002)(66574015)(83380400001)(2616005)(38350700002)(86362001)(44832011)(30864003)(38100700002)(66556008)(5660300002)(41300700001)(107886003)(478600001)(6506007)(6486002)(6666004)(8676002)(26005)(6512007)(8936002)(4326008)(2906002)(52116002)(66946007)(66476007)(36756003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?7WVPfHhfFW1RxnBcmYzVWEIjRdWi?= =?utf-8?q?fG83IUGO2OOp3E//jp4b83+0OUr0ADr5TlfdKV31KHPZNxIucCl0Q4EFxX8HXh940?= =?utf-8?q?y5N42el6xEDfHoBsvnTFVOqVfPeLzCkx3WR7C/soWU7uVk4tMpn8FyOrXVPOTAfw6?= =?utf-8?q?WkxffGrJ5P0NbROb/90DDyXGq6HuwcdbS/fjQHclwckd8QiESnY2ExX5MTco5QWYy?= =?utf-8?q?w4inLSFjJcnFSk7sB5BNc2yyaC3hcqHtY2vy3Ea70Q5rWI8XkNPj1ZpR5ojAzS6kJ?= =?utf-8?q?eA07NQn/b7T9fzyhwAll4/RLkvFT7ahWJPuzmyeK2rzBWQw3sH+AKIarMR9elTRYz?= =?utf-8?q?ANSeF1vt1H1sAZYwyjoiM7NI7M4d6T4VGXL2KCuwZZNsAT6lEZaUVJV/pZ5FsyyZG?= =?utf-8?q?dtx1cPcYLsOp1Oddk/15bqqceZKPxQ0amYFnlQhEKhEorgI1O39mTkEro7xAJfdw9?= =?utf-8?q?ZRLdI+Bvpk/3tDyAUCVdzpMoTS9U405NEh2yahEg9JlLuS7o4NxPy1WnkRRTJwVtC?= =?utf-8?q?FiNje3mh8XHU3mboel7DJevWk9ztZq+rndXbwLfejmrVqufG9Z/HD9hCDKFha1c6b?= =?utf-8?q?xYVyJ037XAfi+RkY9M9HyqhfjxO70j6Lc2vqQgiH8plZ2UXRfLg8Nh0HkHojRcViz?= =?utf-8?q?zMUgCd5NjIq8YclLe7+8rXIFN9w1ReF47IUpbSgpHndPyKxlGEBk2Krf1fWPmxZxi?= =?utf-8?q?878bP8Ryt3x/vOhAaYHe2J9E6R1TuOLNgtsMR1Ov8O86lm2KNGcl0Tb6Qty8SK3Pk?= =?utf-8?q?gafdpWhmdK2b63AxtpNK1bEv+zdvQZ8ZDoy6lQfrErTahk/XIv6hylXCy49QbdjfY?= =?utf-8?q?pKXf82JuqRcYo3h7/hLxTNpstoIlKha+ewg8y1Atvbq7DHO2FsYudQFHCQEkSkCcn?= =?utf-8?q?zRkDKp+2NUFa3ji9mOsvEojqqvZ0Gusa0Tq8coW/0GznYe4iAh89J4LyOvLjiVMn5?= =?utf-8?q?MIPqroyrwvPbpzCnF/bbY3hF/ucCx6l/NdYuQc3OtheJgnb05L1ygJeXQkP7jIcOh?= =?utf-8?q?uXuZJTM9/0qv6xuM6FusyYR8k0mV3bRDjXevBXtn5Ia/LLJeTtZaMbtlwsnxmz92M?= =?utf-8?q?/NsDnQ3EFfIVw6PQaChcE2ly0kq6WDK5bymVIYpYwnYxoagxTR6YVRop98noKy6LE?= =?utf-8?q?2itECFocJDb0oHCtb31SJez6aBR4rZfriCYP3TzgYZ6QqRdZT0MqcyC4WybmUIlDS?= =?utf-8?q?X+Qpagj5KHYzNF269MDXMqPHAkUJJI+w7yVB7rWEWm4k+hpxFTjZaEtFSeTviRm//?= =?utf-8?q?ceSv++5kOYxZ3i8ffgtNOfmDBDOpEezJ2l99uV8lwrW4Gcb7rLw/eTjL2v9vhBiNn?= =?utf-8?q?qz24rigxtI8w2DuofEM7IcsjtXGTHpIBvwdmoA2TRzqOPrbe8biHfk+vMvWjeiaXi?= =?utf-8?q?A4Pxb0UEIMfKSqJnh2FmvY3fRxlNjIG7kecqVdkYGDtESqJSNhxFRJvUW4HlUG3/d?= =?utf-8?q?tp/gMs42cCez6Q3+2oYLDgFg3c88+NPrM273DisDLS09nTwcgPVoDgCQh4I5+UWSV?= =?utf-8?q?6KZF1trZvI+QzuvJkGAvs4z+4nv3IyKWHg=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4d073eb7-6d67-47eb-01bf-08dab406e1f7 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Oct 2022 08:24:48.3179 (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: pn+Y5LZPIE2QNILhvmJrw2tyfLmYFLw8M0aFMMITUGSSTkQF2/LADiv/6cpAcgo/+0yc+gYorKiVz0xKWzaZqztFMc4fijLjGBczfUaqR7A= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR13MB5454 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 0184980..faaa7da 100644 --- a/doc/guides/nics/features/nfp.ini +++ b/doc/guides/nics/features/nfp.ini @@ -35,6 +35,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 69fc8be..0e1e5ea 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; }; @@ -491,6 +492,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; @@ -526,6 +528,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"); @@ -547,6 +551,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; @@ -719,12 +738,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; @@ -760,7 +792,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; @@ -789,41 +822,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; } @@ -833,7 +883,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; @@ -878,7 +929,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; @@ -950,7 +1002,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; @@ -964,6 +1017,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) - @@ -991,7 +1050,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; @@ -1027,10 +1087,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, @@ -1113,6 +1205,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), @@ -1134,6 +1227,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 @@ -1187,21 +1291,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]; @@ -1230,14 +1366,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; @@ -1257,6 +1393,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) + @@ -1265,14 +1404,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; } @@ -2119,12 +2273,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 Sat Oct 22 08:24:06 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 118948 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 95193A0032; Sat, 22 Oct 2022 10:25:00 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 3AA00410D0; Sat, 22 Oct 2022 10:24:56 +0200 (CEST) Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2118.outbound.protection.outlook.com [40.107.92.118]) by mails.dpdk.org (Postfix) with ESMTP id D82A6400D6 for ; Sat, 22 Oct 2022 10:24:53 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=HnkGNlMWt9htD+T6lqCIPgoGr4Q+VKwCo86YlvX3xsZ729dWIky19VMAqhKYmzAUIVqqdDZEwytGMsIIu6aybH6/BO/2K9x2zhpVXCZFmwqe3MwmJ+32x+6Q/InjA+1FPyoap+liBrbJHL+iTLWp5qGEY7bQ6a//XXWCh18SAJv+PdOufsY6TbLh+aC/Y2GxSJFCzl+uI/YbapI52uLQ4a0yYKZR7jrM0ZEaMhq3+pPdOy9aHizzd6XU+YS688EkVfDOmbsRhoGlApKHReMW5+OxBsF+up7qE43reltFzWOFtUvM8Do4a2KIiHA/5yk6zOIySoojnpjT4IfSj9rCxA== 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=ylIX9qxb7o2h9IHt69irR52TEVeukdweLaRvfkCfgd0=; b=lT7ioPfh9gE7N2lGh/M0Wia3BvKkcffk0vpy+LAihuLHI3mlvFzlACwNWxNmUPZtvU+UwHpXyk8y/ZpB0YGu7gR/A4Hs4PvzsrzDQgcDlReQn+EmoFVDtGkOU1NZ62XANJBVwEgz5QDnEX2RxmftaMNsmKd4jq93lhQCKYAL2i63Aq8us7syqfClxUy89ftcucHEi0uL9OXZC1LtHYLG+A6aOraInXyAEBLRjmI2bch0HW382lsFY2ByIodbYwaKPhALgKeSEfoqVngvP3j3J6wa+DFsS97m0SWu7FiyQY8R0dubgK3npEIiqe1b8RvbUIebcdWwfeTMe72gzfMjcQ== 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=ylIX9qxb7o2h9IHt69irR52TEVeukdweLaRvfkCfgd0=; b=r8vysjvhHXCtW1cUJkWfPKxXD/eHbNrMmlV3IJBBRJQMptW/e3QmJX30BAjJBFzGM2IU3PQNXUK1DA3Kflm9kHTG5H+Fcryi1nJ4WfnhrA+CJ2k15MYhM5yxp4kBC9ZL1klU8yvmT3wafr0sOMUMApoL8qxbtYEYmxveptwd0xY= 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 CH2PR13MB3848.namprd13.prod.outlook.com (2603:10b6:610:9d::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.20; Sat, 22 Oct 2022 08:24:50 +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; Sat, 22 Oct 2022 08:24:50 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v2 02/25] net/nfp: support IPv6 VXLAN flow item Date: Sat, 22 Oct 2022 16:24:06 +0800 Message-Id: <1666427069-10553-3-git-send-email-chaoyong.he@corigine.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> References: <1666063359-34283-1-git-send-email-chaoyong.he@corigine.com> <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR02CA0056.apcprd02.prod.outlook.com (2603:1096:4:54::20) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|CH2PR13MB3848:EE_ X-MS-Office365-Filtering-Correlation-Id: 416fbd37-67bb-4e89-cf6e-08dab406e33d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: z9db9++WBo5+JivAd8TyqLHiQqxO2h6XeRCHtzxPo9yLh5CgQD2bRN6ppiNVo5hcKXIp8Qv2ArHASECWpXiQJ6ZuVUDX6wnSH7UXcPB7A+shHb2jgpjfs4HY9DDAHWTLzdOOwJ6REKDoUs6bi88nzKhdVxXhVJLXU11Co/5ZlKJ6bLgCirlsmJ6WrYXFcTcirWiQF3px5FLOn1dMa410bQA3oRW1vaYX0io73+66SyLZgqfc3SabS5LEDiG/jIvP+K7MBvdA9JhOmLvXvje3Q/iP6ei8gFE6l+TxBMNmWppkl4HkGCcIlA4j2bSOUpa04fjmU4Zh+VcwNnD6dTT7PCk34gqXKh1ECUVx1lodzwQAeSk/esSphlTLTnsJB6DvFdFYFAR9Pvc9isq2DxWPF6FKig8fVyIVE0f7Ys0peVixeiByiUYI/oWDsyI7xzYQsvxARtpDPtCI5kQf9uNMQTfruwHeA/JQJ35aK5WtsPK2Uof8MJtjmirWjVqoJ51f9VHUHrptSmPSNMSIZ7GT2K33Fa1zQaH5oI6fV1nPHQAhzPmm712sCKkUy98TdFoFdNk1EbceBSQNQ2PJqB7G9gQPIzNiIm+y/WoKYWJRL/OgdyhnIqOPvGbdCt1Po8HGtZhdpS0xyto++LRui6nQ8+cWTJGOjBg5ucSNfbBuODs9iwpTUew84J4n9I05NYz8QogCHh3JRinNq/zO/tWc4A3VPYQov2fmv733888ucoG8/7lS3ZUvPP/0uKYbvlscRYXsMTh8bPVa8f7RP560tQ== 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)(396003)(39830400003)(346002)(376002)(451199015)(4326008)(107886003)(36756003)(38100700002)(66946007)(66556008)(316002)(6512007)(83380400001)(52116002)(66476007)(8676002)(44832011)(66574015)(6666004)(6506007)(38350700002)(5660300002)(8936002)(6916009)(2616005)(478600001)(186003)(41300700001)(26005)(6486002)(86362001)(2906002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?GQ5bUEmceQ7pyYo3DU1Q2HS0JAqs?= =?utf-8?q?ImvQk8Xw0BHjHhnYMS2d97oDu7x6IjFyg0pjvhlJuhjt+SEDk0HzIyjdqBVA+QGqI?= =?utf-8?q?XOk8ZYbdaXMIsu/mMDuEyWzxwv1YiIecaEoCkdbcqClyARun1q5ByitGrTg3Xxf48?= =?utf-8?q?6m6jyY4dRHQDt9/crP1TOsXa9U2qdLHDqvpY9eV4i6qLWtayM2ipNDsybqyuuCmww?= =?utf-8?q?kue2Vu7eAZtez6AnIicPQlOn2Vj7Dw2LfGO3G4qFUZNGo8aImwxYTklwfMDPyIIeo?= =?utf-8?q?e9WIbeU3J0TO2dRHCYlkmp6W6QV1I5hAX769ZH3ssYIhU6U+L9klqRNd9HqgUf/5u?= =?utf-8?q?9Qe1wUqnkCLnDsrJEubSvV5xA3TmesQat35Nf8nr9hc3xccfIzlAjZdogaIAq9qtG?= =?utf-8?q?+7c+cSrbRFR9fPjx67uNTuyD9Bm6gQhMsbh+4gi0bN3HRO0SnpHVOJ4zFFJi+eRkl?= =?utf-8?q?49NPdwFpwYYTs7NEwfBu4FmmJV5hZGxoe+qRdn8JPRYLP8j2D/4MvG809JKaqBAcf?= =?utf-8?q?GhsOk2tBu3GUmE8E0ER/Qkh1uC3irwlJba5/rlE/IzIFOOwC4+6QSajFjIiDcImID?= =?utf-8?q?KrOYUZRZ5URv4DWOCJkP/nf6s6GY7gswf5hjCxoXFEylv0R7ZAu7uuZ4oIvqGOdaf?= =?utf-8?q?YiKk82/+1pzwjzNEfqJNo/drAXm/udp99hiPAXVELPcvMoQsSSU8DW9sSsJYx3+fb?= =?utf-8?q?dUoiix2a5Aql3nh0jPvDquEZNt5ckGuGZb0ZZNmDAv4dBieIoAq6z/VGkRWgFVQsu?= =?utf-8?q?TFHR5hNbodY2m1QfD+AiXxm7uVdQhYmfj+1jCcPxx6/xllQxHPej4MAOfIxwR864M?= =?utf-8?q?PpGrWsDwp8UTIkfVEalvjhr3mC/khD7gQd7FUrNtl6nrHs+OQiEblH4i3sKAb1doV?= =?utf-8?q?q9ggoK+XuKcgqRakLdsJmKFpUzQi0b3C3i3OueKa9Bb3mmKCNBjRJ+2CF4MvIQKEr?= =?utf-8?q?mVuLXsA1YD2uWYicYYtjnbywM4aiwXFBVsJ1cFtwR45wP6Y/Koi/OQUPRobeRa623?= =?utf-8?q?Do1IBU/dRvI/NftqVnxKnkbVHvwaj0APofFdo7GYh9F8I+bAmsf4v90TO+ivg9qb7?= =?utf-8?q?NSJkY74qb0QbeGBFmYPUr9y5AsoLJLHW1sy4EK3tqX3vkJyjbg+s8jbszud8sC4VW?= =?utf-8?q?+gP9o2SudBipZDTYiY9ZIb6V8XkYjZFL235omU9/DKe5TL+dtlc3VEg30+3lUTn2f?= =?utf-8?q?hD4nWd4HfVjma9XTkVSgiREXw1jq2k958jV8PPEgSx6r5D1DXo+/id76rDrWV0BB6?= =?utf-8?q?O2sLM57CQu99NMhruV73BrKlbxBEmXa0WhjchRXwyEmW5y52CMi82CK0u0LDK9cyT?= =?utf-8?q?yaERZ8i2yexZl0jH8+wkFgtWmCBhhHOl7oksMBUm6XIsPLB4alJFBgeZJjb/eUF0B?= =?utf-8?q?y3sUqa7LA43CSefCC1HbI2IrDy82F8Zsnro1SA9BFnAEo3houJiaWsa2oFZQGGjli?= =?utf-8?q?qyWk1qzD/FN433X6a9Yn6/9KKm8hGr9woL1bN4PXLTdglVkpwLjKUoNid1sDo4ala?= =?utf-8?q?uaRg8TtGyr9qQkqnnFJqrVzl5sjJNEstnQ=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 416fbd37-67bb-4e89-cf6e-08dab406e33d X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Oct 2022 08:24:50.2878 (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: LDgrITUWpNyzbSzv9SDKYm8iePChhWS/a0+oQFTqu5R0eLFNWf0SrhUKanw0ofSczWMCopVxyB2yKBNyxzfi31ybfLHojzGJ7cGOryMIQb8= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH2PR13MB3848 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 0e1e5ea..bbd9dba 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -493,6 +493,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; @@ -535,6 +536,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"); @@ -553,8 +556,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) { @@ -564,6 +568,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: @@ -884,42 +901,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; } @@ -1088,7 +1124,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, @@ -1097,8 +1133,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) { @@ -1109,11 +1152,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; } @@ -1122,7 +1175,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, @@ -1395,6 +1449,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 + @@ -1404,6 +1459,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 Sat Oct 22 08:24:07 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 118949 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 CB6B3A0032; Sat, 22 Oct 2022 10:25:08 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 65BD042670; Sat, 22 Oct 2022 10:24:57 +0200 (CEST) Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2118.outbound.protection.outlook.com [40.107.92.118]) by mails.dpdk.org (Postfix) with ESMTP id 358A040042 for ; Sat, 22 Oct 2022 10:24:54 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=djhXFM80xl3ntLZjGKwSZbH4emhn/tdkVRL4fmXK5WNzm6vIga+/rxN6CmnVXH9xg5hwqx0yZ9kQGvRSpR7IwQc2D5cXU59JNGZ0iB6ULJmDgswFhcwrfmRt2B3Nkup0O3fcsafgPUvcEv2JOGupUePKlJmCPMcsLHqbwe6GbOYp6Ve7AGIeOEUtv9R/Rv9RKWH6v9RRPr/tn1+P9IFcsCwqkB5MfRYefpVlFuRPNsSpkQizoApfhiFqFugUB1dnDP7Xo58AOgtUIeDKkN9eZ/XB/I9T3EwzqIrJV6//JcFoFeXvGiyIBc03VLMGEXOOkOSMFoqSILSt/ZijmT6O2A== 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=vNZn2FgEk5oatDEcEXneuTB+ZkcT1erk2q+Yvsv4088=; b=Hl9ingtsrgwKU27tvwGAajbDFtmWUxpIRv93vX1sqIAKgjRyp3Nw/STmM963T+5pA0CWudjoyryDXii4sKQR4SJJpUcFagFOmjSSSVWBEhFH+d+d0aa6bKMtibz1t136zsrxwkdVzPDQ22p1MxjGa/TWS3UOcnCxhom1LFqio2+G1gro6DF7uuEHCZNDnjquC6uJmCGLOK4dM0Saw8oxwe8X80A7Ak3dLg6pZD9aWX2n+a00Y2LUVAV1X+JKnGmYyrQSWTuDBV1aB2cMzQwlNI4an6zR1aPlzZy0F0a3lMjAF0bXsQKwC5Q0xW/BwwTIAurfFxuihjJ/wyx0D3TlNQ== 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=vNZn2FgEk5oatDEcEXneuTB+ZkcT1erk2q+Yvsv4088=; b=ZDIZyk86aK0IMkDZWO0i919AMYgZ+kZ/83qTGXOFcRRf32Vbet7yCvlFsdpotEZlCbulepTp89v3403qfGZxDl/VYGhVxmZuGXmUGRxqeosNeAcenm/imchr/5Gw9woOeghuZfUJsMju05INTyZGMdmFyrF3LjpaHASVUN/mojs= 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 CH2PR13MB3848.namprd13.prod.outlook.com (2603:10b6:610:9d::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.20; Sat, 22 Oct 2022 08:24:52 +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; Sat, 22 Oct 2022 08:24:52 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v2 03/25] net/nfp: prepare for IPv4 tunnel encap flow action Date: Sat, 22 Oct 2022 16:24:07 +0800 Message-Id: <1666427069-10553-4-git-send-email-chaoyong.he@corigine.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> References: <1666063359-34283-1-git-send-email-chaoyong.he@corigine.com> <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR02CA0056.apcprd02.prod.outlook.com (2603:1096:4:54::20) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|CH2PR13MB3848:EE_ X-MS-Office365-Filtering-Correlation-Id: 69ad5777-75b9-471d-1b63-08dab406e46f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 9aBV3EfnGvSLAqFolnM72jUhZf0kcv+Q8nF9umqE9t3tikIgmeyUcrkWPmpWh+DPgo6uEYYaRHoJrcQbnFeaxpfNkZ7nt1dlbYDqmJ9mrrbZe5LYGEpQOAJesk0SwURNHEH0f9ep+6/LKMKUPziv4sHr2J7nEu/5ZuRECKsNFtxrDB6Z4UtjDio9NU5zkEIKrzWjO7IB0X1YsYucF3D6zueZgmw2brE2Rw9/Oho9aI1u/qxFW93hDFbAqOgr6pDt6bMC0QSPfObJVWJXH2jMWsrnqWCgbbXA7Bvv8Y2WC+bkGUrHsJjo3alfn8QOkfxTIFmtlQaekQNWG25qqE/mXXnZXG1O82il9DUlRrhjThtV7rxrHepmjNhfBoJBopWleVTP1Sgiho1YoIb0IBWAfUHcOA9LoIl2DlCYO/BmVpPl084wtkPG3B3Grtay8jFggdX3UfPJcjzPVqYYacSxmQBzRvBTWQLJ6+M96ST3cix6N7d+8zobICSkif2DH5MJzSJAarLCxWXCDwD8u2wDZ7K5gN3cCJqK7RcUmupcKflJyZTLbKlRFWrcrlrZtgDqBOGoEsndzoUMg/lt3+WL0iVHqgN4lSZr+4LJHutR3fqVFNOkNpgJiAAUdJ3GwbiyDmb7namZvocANtPUFKR2n2H5HNHdfRQV6/OtxV5Ixkd+YacM2zPOY96dKPEn5FndKZYxeativiL/bEwXkIkRzw/BeH7iTZ2jISVM02ZvNCvOJrHhgRJz5kXiut2NfRhuvfUCUVLrOtX9e6X8/TYbSw== 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)(396003)(39830400003)(346002)(376002)(451199015)(4326008)(107886003)(36756003)(38100700002)(66946007)(66556008)(316002)(6512007)(83380400001)(52116002)(66476007)(8676002)(44832011)(66574015)(6666004)(6506007)(30864003)(38350700002)(5660300002)(8936002)(6916009)(2616005)(478600001)(186003)(41300700001)(26005)(6486002)(86362001)(2906002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?Pqe/W7YCQcP1/Ty2ewFt0hhH0PFo?= =?utf-8?q?tpyNVkNhOrWsyxiqcxZ/S5dJ8f0RiqQ3Zir+BnPcdWr0SEaPonC1ykFBWScBOJxZ1?= =?utf-8?q?5hIX4GoQoSBZGqdz4xtKnER/89nkUijx3C7lvVRvN8ryHybFM3TmJ4vQam/zY5BXX?= =?utf-8?q?KqbjL4O6Dw9+Ro5y2fqSwSAFYURci6e9PO+iN4eUuSawDWBEBjMrCTA3Nu50EXoQN?= =?utf-8?q?a1X4kFBzmY6VcFrtUzIxXH0YBFXn2BxFVAS0SzHxtdxNk/6bU/yzmCVQ9CcU0bAK5?= =?utf-8?q?TiO4kxlPGchLnlEMRYDYuxAdwKCy9d2Zpxq7BhbQgtcUJ8/etQ6/bFShUyTCPf+Cv?= =?utf-8?q?AUF9+lE7qBTeW5cFLk5x2bHZZ5AgPT2T0AT32Lid6WHo7at8K4u34Xx3L7daG+Vb5?= =?utf-8?q?02/TwBsmVuHKaN/qNW2smWJ8HUz1DQ57m/+/Ome88ZuAdrBSz4n60cNojOpkBYmDu?= =?utf-8?q?RU+hbqufrZmx3yLUmUvTr1sbPS4VFUz7+nm35WxTsw+QYk3FALfHoYYpe+ZDI5hQ9?= =?utf-8?q?qZnF5IBU8R6SXrC4GxY4Xuoui/Q0uAZG7VE+wGO1vWJt0b3S0KM2G7xeSERSdI+XC?= =?utf-8?q?8uUTUTPVjF5MHPtdHh7sbgUstJIacPhpaO8GcyZv6HP+eYHfXiFL4/0hJX9SpXeox?= =?utf-8?q?m+EweKQ73h3EkUvUvcHkJQkhxJTBcK2l+FHhxJO893NjLxzxO/VTMmKn23QF0qAEw?= =?utf-8?q?rQSgjJ+wRRfti1Ft3wbabkrS8vZRw4NsXtOutWsJYeZh7A5UQ0t4Cq9mSi8cj0OaO?= =?utf-8?q?Vv7hvsRWT+fL3dGHRFjxhQgGySxcXtjiD9j1lL6y+ZEJuTNAgCH2Y8UcBbHh0kEjH?= =?utf-8?q?KmP2NdbGttIsqwwusIW8XyPEkpYV8z8wL8UQWMIXX3BYC4LS5Qy7n7t+htL3JqHax?= =?utf-8?q?hyA8stbO49fX4xJzHg+wib9wbNT5eXTFaJOpu9LVo3/zzhEXUH6K+zNRCKbbCdoXM?= =?utf-8?q?IMyPEdzdsIdtWTLlZrkBx/gVL6b7uATcyHgD6XIhAozG72KOyOFfTIEiNm60YQzfZ?= =?utf-8?q?Ayqpqu1ntt97JG/zSHDIL9tC/WQfaGX0eDXprMOcBU3F+8Qn4jo11El5xl7IeyxC0?= =?utf-8?q?uid+73BUEASIJ70IXyzPAZGCpY1ZGjeoV1g/sD7jNd5vi4Nbmm5LwIWUZnzTP3dNO?= =?utf-8?q?Y4TrPXflL/g3i5s/Pzh6gyqZMW0nVn8qWlf8c3WbfhvbH1FQr4f+HEe+FhtgYk45C?= =?utf-8?q?Xy1voOJ8dNGRYBE04o5+T0Al7ZnMUqrGLbT+pEC1JlE2DLOOHoB0UC9mHtbGXLfSU?= =?utf-8?q?ydIPb1wiZrgdPCpWLMt1WjU+wlLMd/wOlZqzm+oQvdcFdDu6pbNSnacZZxQ2U8t2A?= =?utf-8?q?N9pdfHCe5zCXiU4mY3EYbQ0HXXBwF7yaDChxuLBkvo89NEzsH1KgMkKGtjipaH6Vy?= =?utf-8?q?5LguTFsd1MH1yFlISS6OVDHx5JUxQ8kIWpGp/n9AvckYOoNO61DNDw56iTV2/f+sW?= =?utf-8?q?Y2Lno9xewBVUF25ZirspMEVb3mkAil4vfgxYlgSD3Y+izelV2tVn4sPDrK2p57iJq?= =?utf-8?q?ASQW4CAvMPAQAQsn12gp3R1kD9zS45Z6sQ=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 69ad5777-75b9-471d-1b63-08dab406e46f X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Oct 2022 08:24:52.2886 (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: tcOc55/bqL4LeEH+M3ApJ4UhIXQ9HR0NL5/80eN6uoVGBtUgWl5JQ7mOGJd36F/Fjmohuud/Crm/O+YJVRGg9ZNdYmjxqnHee75qQoLic1s= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH2PR13MB3848 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 bbd9dba..f71f8b1 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -1772,6 +1772,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[], @@ -2487,6 +2572,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 0ad89e5..892dbc0 100644 --- a/drivers/net/nfp/nfp_flow.h +++ b/drivers/net/nfp/nfp_flow.h @@ -90,6 +90,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; @@ -118,6 +123,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 { @@ -161,13 +184,17 @@ 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; uint32_t hash_key; bool install_flag; + enum nfp_flow_type type; }; int nfp_flow_priv_init(struct nfp_pf_dev *pf_dev); From patchwork Sat Oct 22 08:24:08 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 118951 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 4C7D7A0032; Sat, 22 Oct 2022 10:25:21 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 5B580427EA; Sat, 22 Oct 2022 10:25:02 +0200 (CEST) Received: from NAM10-DM6-obe.outbound.protection.outlook.com (mail-dm6nam10on2110.outbound.protection.outlook.com [40.107.93.110]) by mails.dpdk.org (Postfix) with ESMTP id C27B4427EA for ; Sat, 22 Oct 2022 10:24:58 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UDCmZDOIoLiaWbrsLDNgGK6dyl17hPndJtoDrtWhPiTUzQaiBrs1R4GGUeMbnJChQZvljrjxzQ+4QLIOSeWz8bxok20uvy7MAkgCfu9VFPGCVnfmpK5HX5t8AleZVD0vbRRN+P+3p1t5efsLEsUDALzpgZEr2R0i0OnPD/+G/CpGobU47y1MvlTASAn/0crTw2NBAEPU7Wtq9asyVeCDHP1vONZXYzTyg5O2SKlCBMfpVQwXhv3hVvdluKW8IPZGS6WUnfnzt9s0AUXUWDcKNaQYz64vB01BdgvDk/hLTh95FnAgKOVjsyLxbCHz+3fYeA/FGdvcXY5tJXSQB6vySA== 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=TyqQNriKSm9e03HR0yLFf/OBpR3rOZrBKfszqcgzr2s=; b=nUdUa16XEVoZJ26gA12SuMlMdYW7BQBJBJryyZqhMZ8dtxkxC40172dkYRYRJoCG9pK19+B2NwKsSLOT0TCmCadw1gIBzmqHfpnZRjCelO/RS7xohEF1IxBFmpPriGv1R2FEe4/ty+lO0nJeBrknnVeajMdxxHqbncEPDonN8L0qgwpDeLNansGH9q3RJgQGuIR/cpxvZMNSv8+H7OieXilB0MrDNjo0kTlufsNk7U6WoCVrJpuZej8fFbUkAyar4PyhPRYpK3YbyfQrRu11ueFc4OtvvN4YboVm5CZNIFLxssX+4vGra0nddpU/qksneOTC2iNP6tkYoz62uaIvDQ== 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=TyqQNriKSm9e03HR0yLFf/OBpR3rOZrBKfszqcgzr2s=; b=vitlPqLov8iUxIiNbrbMUWiiyCb2gEYwyZZhLlqM8T8ukP8OfcxMqVdtuQ1qXr4dWd+sVlaumEYsApnosSq06YdYQJb9nmXdVTV6gmCi1IUeZc3LsY16D2XW0Uw8d2QSYHI+Z/D+OcjU1rYfGxMeppc+90sIUlfBqcSMFmyNOu0= 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 PH7PR13MB5454.namprd13.prod.outlook.com (2603:10b6:510:130::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5746.8; Sat, 22 Oct 2022 08:24:54 +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; Sat, 22 Oct 2022 08:24:54 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v2 04/25] net/nfp: prepare for IPv6 tunnel encap flow action Date: Sat, 22 Oct 2022 16:24:08 +0800 Message-Id: <1666427069-10553-5-git-send-email-chaoyong.he@corigine.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> References: <1666063359-34283-1-git-send-email-chaoyong.he@corigine.com> <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR02CA0056.apcprd02.prod.outlook.com (2603:1096:4:54::20) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|PH7PR13MB5454:EE_ X-MS-Office365-Filtering-Correlation-Id: 35838260-7185-4ea8-e29e-08dab406e5a1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: tM/DzKibY8U9Uoi1BPiTdSeGRCowKdwSEv0IN/ZG9q4+aVFvDfaRpLUfSLFPKVgVri/3yaOP5y0ZpWmdSGamGhOgXqGuEdHJiJ7EYZch7tGX+PQrpToxixF0OjSGBVue5XcL72dxcM9qt99KWXFf+/XXPiK0jAs6mItekgsZEbZ+9qgQzaSeWx6zcTcU2rFBFMEmkLqc/t0uzwwi9OWMkl8rcnkTLTG9SkS+z9Oj1A39iw4mLtRIQhsXw0WAvUrCKV+eaA+/U87FRs943xpq37smLZKq2p9tfxwyteGSOn/jK/ntjZfyS1abU7aVbxoo+QU8S0DFUSO6SaT+ga+tpluyvhRVsIew19bm0ooYyamX2i0cwoRJ2okr0kU/oe/y0n0dSCJWO0nGY7COUMe5ciUMVxb6bfSajZDI9F/Ae6a+ih9KU6i3ymUyNdlYOlF7kKZA9zqCNSMQSv+1hGneI8KY4hwKuYr2VoTjhagDPFOAJU4YpCzS5UrC3My/1+VjOh0AxUUOqodQwPjcMt8DSbZrNdt6XKkq7icx+YRx3OqPxo0HN8gsCftyGhCjepstmQeiceBPpsxEtK/ONaLrsJnGDFtb+GJX2Y5dasqfALFY1/VzHQbM8SqvqmKJ74SmS23YTUxMD2iprtz7cIodgGnb9DsOuOk3kJlECaDHvAp9tt7/cxDtoywkwP4QYO/zNn36Pr46oZTzsdSt5Zjk95rQ/8mgy49Pw+oVJw7vll8KL4okndc43dOrJue82rlRot2eAELDttIVKSZXOanT8kn1h3QHmX5V97JhpLvLsVLPhwn/x/YxUF+AtjO5ORr4 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)(346002)(366004)(396003)(376002)(39840400004)(136003)(451199015)(186003)(6916009)(316002)(66574015)(83380400001)(2616005)(38350700002)(86362001)(44832011)(38100700002)(66556008)(5660300002)(41300700001)(107886003)(478600001)(6506007)(6486002)(6666004)(8676002)(26005)(6512007)(8936002)(4326008)(2906002)(52116002)(66946007)(66476007)(36756003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?FACCLIOawQBaMYTkAd9wHONbWnGC?= =?utf-8?q?pE99t+nio897wpwfW5sE2Gql7MA/89AndzO+loYdP9GEHRMX/ZPfpxNLxTd4Rp6rv?= =?utf-8?q?n3z5VQ9wkNse7lUyrD3HTc1GqzegFqNbt0USzFapib8RazSWW9KSUJr5GlXrrzDkf?= =?utf-8?q?ukj38+CQrIgKs92fKttTBHQGH9lqGmf5L9Qcem6gf4jZaAHBEwQlEFJlNABc/iWnK?= =?utf-8?q?uSVZKbS2S2ilBc1qoRSOF4NKRN8txZf1rPtVXvHD4wEDB4oMN3Ag/3zrPKQgYpGTD?= =?utf-8?q?fAb80nQ196808jH8aeM8HEOfvNKxWMW9IZizYX9ptHBf2Gg+bUdZQG35CcE/xB/xt?= =?utf-8?q?dLHjkVZXnn6yobrKPh0t+GnpcfMsw8dbhxFeHZ0xcbYUjOx4piIxlCMUIFquYUPxy?= =?utf-8?q?hXH2IDbWVO3VjLGi9DDQRhZ8tq8y+0mDU4wslLy7bdtk+O9dTq1F4wdYPJyw5XwI9?= =?utf-8?q?Sm8X+0tdmQJJN84VkSjsfb+RH20GrkN2EyC0O0im0N5wD0s7ci5k6oyCbMWxICNAZ?= =?utf-8?q?8RheujSwd+7Ea2lA7oNg8G/UdU4XF6A7+Hd2b1Svf4+C0/cGcXZh5qyu+Sest3v0G?= =?utf-8?q?x1uoSLglRguv7+BBwlnDIDquekYw0ThrSnqVxhq1XA2CS3F2IVadwDyC915fsrthc?= =?utf-8?q?K44tDnlgG5vHzK/XJ+RfoL1KSXskWRxVlA1aqiWuqXtlHWW4UTlwaNizR644d8WmL?= =?utf-8?q?eAfmDUD7DI3u4Krx1fG/x2ZVCjoquYGl5nE3b81vl7cH9c09GQGF4TIh7x1/+hSUv?= =?utf-8?q?oM7IcVDW3MSO9g/Tdfriro8bnA4+P388Peflx8j9259y5js+UwNdASydcugBLQH7N?= =?utf-8?q?ppZhrbs869Xkl/MyhwH7e0t6PZGVQb5ZB6eBqfrqhHyMct5Gh5eIDlM8tf9GYHR/P?= =?utf-8?q?G+ByhoOYhnnlQsl7rR4M0AO3nHKRU/VI1gA2u6wn2Ya1CGUw8bNypmYX6I6rEnQZ1?= =?utf-8?q?dMdrz1td0whJeixxyfEJfL1P5psnp9XhsJ6+MTH7oLTWtmAbbUY9eFJvv9YvjK4Q9?= =?utf-8?q?VF7iBkFbv19/6HXQFG//n2tnARO7ocnzeGi6iFG6jEXcpV5KAWB1MuntWW88XoXM1?= =?utf-8?q?0at+z8d5f2WZpNVy9YsCQXC3P07BswXHlr745HZGcLPwzamRsmlTMJeFLxQYE4L6v?= =?utf-8?q?Yc1k3CwYMK453pFNGlHIhjZe2yL6EAwpTKN4hwMEeKHWbaJFWWIatk6BRdq5kxq/T?= =?utf-8?q?T33aNIov7JpJph/irzMg9H50iKJMHEIEV23I2+BRX9WRTKExVgVLB4c3OSd8jMR/H?= =?utf-8?q?tXf01KMF0rRyH3bGcciluxp4StjHJBjhkPvzDMtihuLfiJcP7SWMgqVmgeKi7sKod?= =?utf-8?q?LwSbPnX2P0J9YdWuToI4uoQV93iTijZ3a6p+DlDnflhodf5V+csbe9kcqS9kGjStu?= =?utf-8?q?2Ak3T95xI0h41E+AT4Pzy3uGLdGi22COZHS7vBJLfh7LsFcalCZk8w8G3YC4Otf06?= =?utf-8?q?3e8OGAbA6YkaXYe7C+oTJUxoiI//ZvPKA988GANy82wGg30mEtPRvujS+f3cYG82/?= =?utf-8?q?COrC2tbljl8659zn3ghfNQdAegF6v0ozsg=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 35838260-7185-4ea8-e29e-08dab406e5a1 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Oct 2022 08:24:54.2835 (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: /IXEyGjSzyRho9kAgpdryQ8i3bJpzVmEq7lmjmr0U32pmmz5lIQuME8rmxodbpKoxciTFXIKW1SLLklrgkXdUC1m5UJk2hkfx0QjYo3Ud/0= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR13MB5454 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 f71f8b1..e1b892f 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -1782,6 +1782,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, @@ -1845,7 +1855,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) { @@ -1857,6 +1867,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 Sat Oct 22 08:24:09 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 118952 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 226DCA0032; Sat, 22 Oct 2022 10:25:29 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 54264427F4; Sat, 22 Oct 2022 10:25:03 +0200 (CEST) Received: from NAM10-DM6-obe.outbound.protection.outlook.com (mail-dm6nam10on2110.outbound.protection.outlook.com [40.107.93.110]) by mails.dpdk.org (Postfix) with ESMTP id 3D5D740042 for ; Sat, 22 Oct 2022 10:24:59 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=OtA70NmjuXY79xQvWIRS9ZGS1zATaKJgYTwbbMPNZZCwEQ6KtlD5UR1y1LkqFNwrwWvuK73Kb4VapsxsN1CbNVerli7adYTonZoSy8zVetxKWgY5GlqVqOFWVmUsBZ07bmN/NiuEkIWnC0ipJ4W7/qcF0Qw/zO7lUbXN1y4FiLPe6kBzJCG2h5MuiuEvMdzXRK/y/GJKQU98ghEzFkJoxir+Q0ibz84qT8PV7wqtdSN/JDLNaEFOqitUWyhbOiOp4VBUOwg9etjePzSWnmoQrsToeQpVeANw1br334zXJn6o/6zEWWoLtmW3+c6XzPSSTw9D0pU9knz0VShRPZzzBg== 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=X4XhteKcXsNK5Ao1/yAvDR49o0TiMiHs4T5LyugYBUM=; b=UDIWXPoBachQg/X3lh0VfzkiSQkFARU06Uv3cY6DJimw7UIHDHcqvUU4UQKqYw7Dpl5WUUjpev0eTIWx5pP68mVPuFj4hJX6CMqv9sK8vK2bD1apAjNM8NFb/7KnujuCJh83ApZ7a0kMZQ2JGG0pV1KTYhRdNr/QtxKWeeFccWWdM/AWC89N7CR7htqpHwXQuke9ItGce5frh4/bsI+bn9P2jrBWl3j4Sf5DoiUE2AheDS7Syg3oYkSmNKE+0qW+E68fizK7b5jkRwPaUYKCMkiERiahA8E027xJ1wyAPqIOFGwxyz/rbIl6l44whLcC8EmDE6BaW5sJ2Db+jSR24g== 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=X4XhteKcXsNK5Ao1/yAvDR49o0TiMiHs4T5LyugYBUM=; b=heBfsCkQE3RYaLyH+g/iy/dDuDLy9RT0HrzSNuUajxaLExrx707/xHNfu/JRKTy0Bvfp++GbfYdLA/02EVSUWY3HHEYU4dRtKfRj71z9ev8E+wsU60eFKcHvnblqkmjdkhQdlo4s6wt1UpNASFyJtOc114sjP4H4+B2R140IQ9Y= 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 PH7PR13MB5454.namprd13.prod.outlook.com (2603:10b6:510:130::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5746.8; Sat, 22 Oct 2022 08:24:56 +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; Sat, 22 Oct 2022 08:24:56 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v2 05/25] net/nfp: support IPv4 VXLAN encap flow action Date: Sat, 22 Oct 2022 16:24:09 +0800 Message-Id: <1666427069-10553-6-git-send-email-chaoyong.he@corigine.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> References: <1666063359-34283-1-git-send-email-chaoyong.he@corigine.com> <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR02CA0056.apcprd02.prod.outlook.com (2603:1096:4:54::20) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|PH7PR13MB5454:EE_ X-MS-Office365-Filtering-Correlation-Id: c21a2b78-b388-43e5-fa1c-08dab406e6d7 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: /FZrdYbRTtXfHLiBpIGoejJElub9aZZT+PTCx/HRJGN9CGQ73RnsnFWntV4c2tRMRk83BuF1km1DpGPrStUBkwvW/jZMBHFAD9zccmf2zEaJ8MnVMBAXfteJCiggJLniOYs6gHeR85jRHuZz1qbjSbTvOBMe28qltboRDIMcXtpVLMtfLCgbatAvabKau4soHei/S4yh6LCLmI4Imtmu68UvjkYRcclEM35/qDm9AUnDU7SsNG0xqh1hTaNchY73cKgFzMfwEp8zFfJrcMr8k+TDn0ETjKH2pJsDN71TFjCPymIjUerobQf2t0yLBPaCf+9WaQg7uO89kjWlMq7ByyUsV2uVklV+bnamKcYQkYIJUPKQZGjkU74faKexWa+hdB9K2iTNdoBFATWQ/JEIMg6RFJA1sS61vXN+hOxHxBBiKibhz0jGBK/GIo+7tFiBeJaK2qrAwBPYyMysUUmCfs2x/RJ1kGX01Ir3vrb0kKrRgVYN2/dmn3saHZV4CWdjZwRPbmux0WEwGrc09Xy1h5sHWgi2BjpZavpplf/QC3sm7qL0jDiidhhsqknwD2O7w+AfyMsYzY64S/n1LSbvziWP1THF/xAUpsctEnsUfuG8+iZNzt5ELK6jnhnJQIIa8TXcCaz8zpOEstpIVH9bDH2ou/tNB7IDQaiQ/ToTIrx2cipvkILDb/XfQ2RvZxuWwqhKVaTXmdn1eNmRpB5jpPI40jYrxHwkDQ3jeMaEM2we+E8qHRBqMR0wbIEOjh30hl9AvGF8CoihH8H80zF8gQRKS12h7hLhhFT1GzX2RckStDT9bXGypfok7t9dUb3m 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)(346002)(366004)(396003)(376002)(39840400004)(136003)(451199015)(186003)(6916009)(316002)(66574015)(83380400001)(2616005)(38350700002)(86362001)(44832011)(38100700002)(66556008)(5660300002)(41300700001)(107886003)(478600001)(6506007)(6486002)(6666004)(8676002)(26005)(6512007)(8936002)(4326008)(2906002)(52116002)(66946007)(66476007)(36756003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?mus+UXRh4LWlmSgtoY77NTmWbJ2P?= =?utf-8?q?YF8qMF43lZUPHn8nhdv5ekF7mpwSGBeYyghsT6rx2d+xIDeYFlYOMYq5hVUko1qHC?= =?utf-8?q?s/oWFoEk3OuxReok8WXdGK4cVpiPIlqggskEuLJeKe4G4EqPOgYkXLhflMwz3bjtn?= =?utf-8?q?L6F9KXcgKhWKKsYDej909tslzW2FwGfMVcUchrxtjonIeXUGUOQobvKPHU+YN/h3Z?= =?utf-8?q?esFWgD66q0FwnSyN/JGzlabCKPkW6DOLNy4zO+Wzb26y22eR3yYLEiIfB8wtmlUct?= =?utf-8?q?JJa/axEt7SwH7u+xQNHOWNP0jM2Zh7r/5nE4oWteiigVdYLNut0F/1q8m4Z7C2SwK?= =?utf-8?q?TQtesILc2sZDGmskTm6HHqbBsoSugkgJP+Vncjg3aVckEg0eYVBZz/ILGDVxAhdSD?= =?utf-8?q?X1zrIDXJ3+q67IsaV7r2bg0EPiOu36l72IBKYJIB+meIehCsRJsgFPgcCaem+IsG+?= =?utf-8?q?rZtM2JVtN1AhV8gW32lUYoZX5NDpA2E0hY2oMPdS0pZUVWUWj0KeO7UA5YQ6Jx3kw?= =?utf-8?q?HwRIWtAn0wDJfkkhmc6JNnfeJQjp8KxsGzMj1OgYAfDz4SLUZw2xTjVAyW+a7Fdvu?= =?utf-8?q?TPzjsbY29NW67GB22cZa44Y5LysdqiK7/vud+sMYF9nLxn7EpjEDo76rRIPWo9EDe?= =?utf-8?q?7cafXStXlDuH1qnLsifV2TQxUIqXwftD6HTS+urPEf+QRtY2s/wEekVS9WhANLLZz?= =?utf-8?q?PC6GjQnNYjIKz+Sj0C1oMq6AYyhY/eITCZaKlkTU1tUaYzT6IbWMVkdqc1mdjkxM4?= =?utf-8?q?BC0myC5mdXaJhcxGciu0Oq6m5bi8y9uXiKmfbR0fIrpCNJV+51fgprRUTXumZy2BH?= =?utf-8?q?NDdI3AHW/FCKlL8OYp0gPWYc4Z2QUpY7MS4fwofAeVRXeWBghTrZmSjxg5l9Nw0SP?= =?utf-8?q?j+8MrZFLDqhW9XpROHZVmuOHDT97zz6Kpj8EDCrEB5qkmH/phnd0Bns4ZItfGpxGu?= =?utf-8?q?74aWNtS+2G7BKnMoT8SgQdrKs71XHblU6so2VJv8i6QqUpXXN7Xzc579KH/lauOvx?= =?utf-8?q?fMCn97A5fErq3UWrFzAeuSnKRl36gJXqaJEV3+3ewsSsp9pRUBw8M93QpzTUgncLn?= =?utf-8?q?XeDC9npyNwQYjbKvhwVAlE8JgcnPGLRVcYqgnrNUus9Lum7dBGjU1Qc+4bUzaaSdm?= =?utf-8?q?HmQrpi2UxTk9uWZ792FhNEnjFJH/1jwvYsaz5CANa3B5fZ5fJVb/EQE74MBv13X92?= =?utf-8?q?+7Ac50b9L3S94EUxMkCyiDgXyB0vP+pemDRzy9U9a+XoS1Ig1bh1I9VbQYYn6E22i?= =?utf-8?q?wjFeDHp6GJ9/shZVBPsFaEX9P/qZ1P4bMzrkwzTLFNWEFUZlohTmyH9SeJHnHjpAa?= =?utf-8?q?3rzetWt4VKGLa50biyuKI4g/4bUb0b6JTiBA14SRX8KdySSxa6+lhuNHsDJT4UlR1?= =?utf-8?q?T6YuEIO8Uzcl27gRUwaKscpnJZXuKrVX3pv3GXwBABo4+iKvppel1hSUe3sBoFGHA?= =?utf-8?q?jIP8OmWMwIHR/GqWolZFC+62pBlvY82n+f75WU99wo6ww0s2//TpcQnFnuvDs02tI?= =?utf-8?q?euZojIHjsIPBZt6iLFh/QH4si6IRLvaDgA=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: c21a2b78-b388-43e5-fa1c-08dab406e6d7 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Oct 2022 08:24:56.5187 (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: jGOtvF9HCrAJSmRRxumRBkpuLYKXD5BKXF2FfTNlrqOEyVZH+Kude1ukt9X28w7u/6mqLe6/2nwZ3H7EdPHcalqUYvbtRTl0vkn+cGmm6Qk= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR13MB5454 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 faaa7da..ff97787 100644 --- a/doc/guides/nics/features/nfp.ini +++ b/doc/guides/nics/features/nfp.ini @@ -56,3 +56,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 e1b892f..d2e779c 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 []){ \ @@ -724,6 +737,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; @@ -1772,7 +1790,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) { @@ -1791,7 +1809,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, @@ -1812,7 +1830,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, @@ -1922,7 +1940,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) { @@ -1961,7 +1979,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) { @@ -2118,6 +2210,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; @@ -2410,6 +2516,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 Sat Oct 22 08:24:10 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 118953 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 D3107A0032; Sat, 22 Oct 2022 10:25:36 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 452B0427FF; Sat, 22 Oct 2022 10:25:04 +0200 (CEST) Received: from NAM10-DM6-obe.outbound.protection.outlook.com (mail-dm6nam10on2091.outbound.protection.outlook.com [40.107.93.91]) by mails.dpdk.org (Postfix) with ESMTP id 320DD40042 for ; Sat, 22 Oct 2022 10:25:00 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=QPeHnmKTI7bbm2ajdqrn/29EfH+kXivV1hjK/4lQ4y6dfceh7lNsjHx2SEpUiVoNx6b2Fj+qqmMN2P0PboGNEqrNgqCEsIFRzha23Uw9VZ6231rXrPuGu0qeMylNcMtoN03/mT2Wc+eDzceJgQSCoz8sgU0InZQo1lcO1Y1GiZJc26ESkLsULLs+FbEKpH/jUEgbjPqLLwlYmxkhj8sWdtj0fBakaPZfIq3VdeCLb2DJXQ9INHXftE/K5X4PcXJT672yh2pvHMXgeDa0KFkvld577DvAem4uaWf1980OYT7tYhr+6qxIcemZo/jTKulL0N4n0Je5bjPr8xI07euDzg== 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=Tpc+A2Hh/i1spcwbUW1+U2QszIfRd7txPwST5nZHYm4=; b=HGQEAnO+25wlTmuHDvtAN/ZTmD6vPtcDSQLRxt+I+llmQKHyjpUBjB0GO48KDgFotA+4wKjcX5AQn4iYcVxvAzifs+ehFnDRN4JjXKr4sPhkN8wksCTogWteihcut/iLJFN6cr9N2ZqxiVnnPIuyCXijGtM6laF2u57Bzmk3Z9CyWo9G3Fy802Fqq6fqF5DNt1J5IOdZbb56omsoCNMM6xYyOkXegjgudLJQJxEA8WQDGd0DLZ1knQz0IZ21ew2cCMo6f7WPxZABB5u0vsmAsRkv4zrKGBgl5pUu2gwrpZsZaXHXUP65tQ7g67t/7VUxjajLBgiVHWrUfIAddwecUw== 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=Tpc+A2Hh/i1spcwbUW1+U2QszIfRd7txPwST5nZHYm4=; b=K8su4BcX1sEhHih8S50Zeo+3iXgqd4tR1OrTtno6RmpSNbPbkLZvgVepRoMTWZT9BRHe2G8OBAFkLQImULdGX7wgaP1yN9NrwUW/FlHtVZz6IW48TExmcXH6Gu+FDbH3knXpiHCzDj4uxp4N1aFQwzdHMHYLn/HHJ2XF+qZUrDM= 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 PH7PR13MB5454.namprd13.prod.outlook.com (2603:10b6:510:130::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5746.8; Sat, 22 Oct 2022 08:24:58 +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; Sat, 22 Oct 2022 08:24:58 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v2 06/25] net/nfp: support IPv6 VXLAN encap flow action Date: Sat, 22 Oct 2022 16:24:10 +0800 Message-Id: <1666427069-10553-7-git-send-email-chaoyong.he@corigine.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> References: <1666063359-34283-1-git-send-email-chaoyong.he@corigine.com> <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR02CA0056.apcprd02.prod.outlook.com (2603:1096:4:54::20) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|PH7PR13MB5454:EE_ X-MS-Office365-Filtering-Correlation-Id: 1bae8b78-7b71-4337-4e4b-08dab406e834 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: jcfzqLrAZgBRYWM3ks1bTYmaGqDH5RMPpvpcvj0vTZK942GyJaQKaqWx8ifoKhWhy5ml6tSWThyUfNfw/PQbOFVEAkKo34bpRfhX6BmpNyENRMsNCjG1ImsfLgsTNl71PsDh3VcA3eE8q43pJ3hyE/picLZpFVCxxOLpOPXOFTCTLwuan8GigiCNV6n+GhoqJo+6Qd5QNkmigQ0/Bqs9JH0N7Ygm5OoLUKsgqWGVbD51+3iF+EKz5SaNoDjYV2rcVyvQs9Zfz+19uTemjBuAOSPLnSrDosGzgSffPuZ8Kurg8dcQEmCIeY/0yOnHyIripfTAhqNjVnbET5n9rkTXXu7TBdc5fYIGVrX7m9DuImSHmjAwhzKcFi245+0ZNVEdR6HDkfBuQZ9PNantLViSUGT8bqx3sLquRTY9hgB6+FBsVP0Y+mtxRelj8o+bTJb4KI4+wEYsmTcYUuPBQkhPbbSDDbJ5cvf6w6mIesYvRdDlJe36xc9urpQYthsa8bvZniU5Hcm4rqVxE0elIyA88GbdXg+ZrB2fPsbrvm9EAnti/bXANF8nMoF307L/THEGR2sWEkyAoM1qgqllNXXIKBmEY3YBGVx/PBNnKRuz1I4ZQW/+p7pwvO/N7XOFcqSiGwpRBLhVv8mdENYwTf90BLIb4CvNV+ERelwwAuZC6wVVE+VBLESDUSzYBLZl/mYqaSSgsG/EtA8PB5gc7VZ33fwTv5sOa2WO7NjWqe/LYwsuYHWR82fVcGALkAQ2rt7FET4dpR7mv5JWBSs+2H/idBYpilA7frWRO758QQTn3sYHQvNllA4ZtADpoWwslHeV 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)(346002)(366004)(396003)(376002)(39840400004)(136003)(451199015)(186003)(6916009)(316002)(83380400001)(2616005)(38350700002)(86362001)(44832011)(38100700002)(66556008)(5660300002)(41300700001)(107886003)(478600001)(6506007)(6486002)(6666004)(8676002)(26005)(6512007)(8936002)(4326008)(2906002)(52116002)(66946007)(66476007)(36756003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?DMN6dxX6S5PWH51Nhd2mnlf5GLo9?= =?utf-8?q?aesx4tW+zLn3q/0OF1kPE9cnXAIThj0LCHuq2XPcQerh6qQxe/UJ2fNY8JsGD9NbT?= =?utf-8?q?TpVx7WsRKviz4NfCF/gi1LnIO3C0UD+lrl8gOwU0esXAGFVz9MS3lnsHx5+wUsph1?= =?utf-8?q?tlh0hJzKtZMOw/r16+/XTE7HjtrbtP9vlJauZ91KuhiG5zK2YMShqRHV8S8Ef7O1E?= =?utf-8?q?xsxJAmn9/oHwoJAQNR/ildgRTMsX5XTZwMapZNxMl9PWlvDWvbfzO/GIoHd4S/yEg?= =?utf-8?q?Nlye/nn2VLBV1009zPLC/El2079vrNZm8b5kice9p4k80zL6JZcnBtSwTcrIYmWK2?= =?utf-8?q?2zGtmXmEc0SphIcBwhzTBYs+1JWeOO0E5ife25KDHQp8StYI9XuXD8o1Lea6l5Cku?= =?utf-8?q?RtZwjMwv4nBou5C0AL/Ax6YdzX2Sm0BK7Ja+qJJ5lkiehPvBPr2CFqRwv5AhLCzXp?= =?utf-8?q?B/CboAvlU8mK4QQWhOBs3a/bQNWXSMKDVwP2LJBuURpqEhxY2xPqAuy60ub/pMOMz?= =?utf-8?q?ntEOIN3Oyqnp8bnKGnYLLojF54ni6Tf7sszVtS9CJw8pENcrUiKfpYBa9QERGmAU7?= =?utf-8?q?Ft/YGjXdaECfjxq5kT1gJnOxOP/OU0ZbThCuwDLfJ4RgIvyXxdAilQbqfVCUvzBsL?= =?utf-8?q?Q3srKMwqcz69D++BP2VlRRggKt2UPqoFxp7YRSL4qMYPRLWWRAQJtNOaoCuVmJONX?= =?utf-8?q?a1+V9qcCt1JWZrNHR301sf2k5RpUjYDdtGvML36AjWEn8HajM3Gpbh9+MQF2rzLni?= =?utf-8?q?pJq3+tMurYLWm8x292m7bH+dEHWWusYwW4vnT2/3LJitleluMg3uuuRegIvUa4Nud?= =?utf-8?q?l5pMYZ0nudcr6JSgC7nxR7ejKA39OnAjTG4mgQhlZwslZZQgft8M7DfrtzaXPuau7?= =?utf-8?q?Dm3EyXJirUqadMtDSFZi6sB7v7VJCoRLjnGawqcdrDWgn/x4LSgTTKxkfewHkaa3+?= =?utf-8?q?PHa1UY1tzORGeimouUJ0e4eJgJEoM06zZ/GJPAwXtSQHTvzjieREFrIFF8BT2CWHT?= =?utf-8?q?NzNhlhR4U2bKJFN+YZxFfgHMDC+Up3bMHYu6Cw5gfIFc0/pxrSAR7QxWlc0G+g1Or?= =?utf-8?q?CV6n73Yov/qBE9mNxFsFgzOzZT+st6LbcXw2TdZgufB2Yso+B7dQE/FkVxvY1WBAS?= =?utf-8?q?xiHJMJ6d00OWAzoMlvcfwQXYUOOmOM+cbFnpcpZEy+XeDT8GyjvmsZrjWJng4CNpo?= =?utf-8?q?bcVuULCqxr4o+cBeb5wb40eBrBAf7K+4a5D6vD4ypCmlLj674Od3+NOoAQJfanrMl?= =?utf-8?q?mZMFzDWWW1rVtsZtGZVy5skmlDwjq1h7LCwFEOkthYYf5dAmX7Ud0gU3LpErcX9sG?= =?utf-8?q?a6Quepa25gJTacsbIueSrTibqVG8zkALqkSTSIi7SFylq04CnGjkjGtsuu2w0EU/t?= =?utf-8?q?iRYY1FRnBmFj7QN58KjvTavqcZ+EjDYsMvmWggh2sDULAAfQx6xItTKTrcLfsu2q8?= =?utf-8?q?dhVQCF2ixF4T6YIus7bx6LfDI473W+XN7ti4OS2SPifngJ2qOSQuneoCJyPKQOlCC?= =?utf-8?q?9it9Peard8CbR/YalUUHC8ofMLSr/iaSNQ=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1bae8b78-7b71-4337-4e4b-08dab406e834 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Oct 2022 08:24:58.7703 (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: X8Bq8v1ehvTpU/KjpSJoDM/SN11mz9/u7CZ8sf0UTdJoujfpWnCPY+YBs+g6NuRsQprQj2qMeJzgKZicwjmwLMHp5aHihIHfW6LqdElw35U= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR13MB5454 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 --- drivers/net/nfp/nfp_flow.c | 48 +++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 43 insertions(+), 5 deletions(-) diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index d2e779c..9ee02b0 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -1799,7 +1799,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[]) { @@ -1885,7 +1885,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, @@ -2014,6 +2014,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, @@ -2027,7 +2063,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) { @@ -2048,8 +2085,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 Sat Oct 22 08:24:11 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 118954 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 2E863A0032; Sat, 22 Oct 2022 10:25:47 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id D34E241614; Sat, 22 Oct 2022 10:25:10 +0200 (CEST) Received: from NAM10-DM6-obe.outbound.protection.outlook.com (mail-dm6nam10on2116.outbound.protection.outlook.com [40.107.93.116]) by mails.dpdk.org (Postfix) with ESMTP id 0D28A427ED for ; Sat, 22 Oct 2022 10:25:03 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=HsRbJ9KsfVoo6EtZUMTLjUdmhhFVtp+SuMlMrlx+4VRZmnUz1Xcvn79VcsQORfO70wIBnpPEwdQfmlILKzF5UmCaN0+OYyQ4JZo+ZoLN0OIB6IGYGnLb5PE02/F9/sy3v7lY+zbwGkmJv5lMmpoXI0zmu9M/Wl/TVqESGZKoswCH8LyRMhp2e5du3CDKr0GKcmXuGG4dqTyH8+oqIaXKg11zuzUxZp9sDqm63Q8hxhmwgu+Xyf3BcaPE2FiktNhplOoAIAn10LhxYiLC5q4x4pu6mJ6oWB8y7q3F3oB1ThYKdeIT5i7VgaBNIia/mCKqdXELVQ7sIRDu4dU0XP/eqg== 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=CdvDdMSMRNzXh844ITUNGj6j66L6MGO0bSSd5/QiaIs=; b=UIi9MwhDvP02ACJLVpF5z3ZUMasWoFKXMLYy7mFnW1OoRYqac4X78xwQq5ptv6WBzDrqIvdZIUvMZZNiX9tivaMPiXt4jaioV7qkGwIDQk5v/woCkt7lxKdqiyc9rxApmcA42CiUi0O2PXVSwwk+Mwp5lEQtQYy5hOWNP+XSU4Bcc/bMDU671hwX9wO3HPIzl2jQ+jL3WGbcjr95/f0qPMImtzc85uqfQ2gVF9Akt+gGg2DltnIAdcwaS6sy/zuaCVnDCJgKwdVVPJfmQ9UfhLeAzRr8msFrQccihbo8J0MqIIHkS4jwBrWf88KXCbtmWem1JV8DXtXMG43iVWZjrg== 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=CdvDdMSMRNzXh844ITUNGj6j66L6MGO0bSSd5/QiaIs=; b=tD3jfr4QMxwYVhsdhlFaofK0FvcLjNJu+flBfB5bKzi8HHgGfdSoxnLWdopQkKjRZUp92SUQhmCb9BL/7081HLU+epA4+HWUQxjWZgZp3RwVWwXz+65/L4gNAP4EH7QKIBpG9i24xoHth0TNNuC7RtYo9SYi1EEnp28EZoEZbaE= 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 PH7PR13MB5454.namprd13.prod.outlook.com (2603:10b6:510:130::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5746.8; Sat, 22 Oct 2022 08:25: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; Sat, 22 Oct 2022 08:25:00 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v2 07/25] net/nfp: prepare for IPv4 UDP tunnel decap flow action Date: Sat, 22 Oct 2022 16:24:11 +0800 Message-Id: <1666427069-10553-8-git-send-email-chaoyong.he@corigine.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> References: <1666063359-34283-1-git-send-email-chaoyong.he@corigine.com> <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR02CA0056.apcprd02.prod.outlook.com (2603:1096:4:54::20) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|PH7PR13MB5454:EE_ X-MS-Office365-Filtering-Correlation-Id: 573580ef-a479-4a13-25d1-08dab406e98e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: L5Kd3OCV3qyYeAVU59yY6Vq0vpZEIhxi4Sg5pMgTU5yfxinVICFwSnSa1sgB1HDM03tNLEPS/Vr4FiAOTzNTJBLlg3BRjkCijgsyYVJRA03BZqSrVn43aXljhg1LOM8TJdahOsxL12/IApAImg5KLzfw0u7ZaDM3POEA+2Cdv7T+UOr5wcMSPZa9MstDOF3qENojrNaq+Ii+vQ+PK5b1g9QQzbc6S8okAZmMo8ntjF1azSxktXF7fxVkAJt62b198nl2CNG/gWJzrlfJuTuY2IEV7gh9yPuOGwQFsx/mIacryw2gPvpUbDu7yjZq9a0joKaMElpEuihYgTHJota6C2oilbTPUjegIKojorqG0BfmKcyrRDVm8N2CjJpawNhTp3E99ltxUz6eLlTWsX8Ey54SO1GdmW/1FkuZTdZ0oDH4VEttI/MKKqXRVUkvmLK6WBp1hp8Ee7uwQsg2OCnsatg3wpgavHQhi5hXVmlL0kC+1JWV8GFwBJSoJDa0T3TnyM747YKK87FnID1Xrayz2g+qRm1t3G7fMn/VRUH9wEri3LbQcrLEYaqmzVin+I78Drqm5GZtIFdtMnKwIZh++1sd08D8rvuzcrHfmbhbBRzSsZV5qR2NJIvgAtW1vDwWxS5RYOUa4YYqWWVPA5+6hpepagk+mbSqzxk6jZn6KgEnyOu8vjjoWZE4U1QexLqD/VB5VIacvYnwJc7SmZsLmx96kIG3YlHPkNwvufp5chivTgNCqWjVQ9mntDlWyuhkMyxASCRkAoy0sGe9/GpF3kzs5G23lv6k4UoYhbVWEZme43w2zqyDulLMybolLOwk 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)(346002)(366004)(396003)(376002)(39840400004)(136003)(451199015)(186003)(6916009)(316002)(66574015)(83380400001)(2616005)(38350700002)(86362001)(44832011)(30864003)(38100700002)(66556008)(5660300002)(41300700001)(107886003)(478600001)(6506007)(6486002)(6666004)(8676002)(26005)(6512007)(8936002)(4326008)(2906002)(52116002)(66946007)(66476007)(36756003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?yl5VdLlZ0Q66MeSECp5BJC0zDFgz?= =?utf-8?q?3setKtX3HdO4lUb4Mt8mwaI2WLbcmP5umzSrgZWrPXILpDol7d0qqwUGdKRfcan+m?= =?utf-8?q?nquLxIye7u8bKiPECvaNyO1pxq2tdO6KKzuL8xbhApbZ/iajG1sIkYF9ENLQP+VFE?= =?utf-8?q?IqQHTZ4FizEbTQhPZyf6FNoycbC1vG3YawhVos//whBgn6Vk3CNMawP3tEkaaKU6/?= =?utf-8?q?bfkQsaD0YMcZIb77frwSmN4clB4DhoUt4gTQzQwsokaghkS4NYwtnLKwasA/yyvkk?= =?utf-8?q?BvswjCO4I19Q2Sg8bq16q7L+qJfld5tMGGAwaqF/NGMEy4MB1WjXpRTazcEeZCWkG?= =?utf-8?q?bnXF6GQiWQ2sfa9WpBSxeIG4NT/dq24wadnaHB2DS5cFetZFM1OTfEqBGX9Y5Rs4U?= =?utf-8?q?rLt6HcyNJnQaf9+spmorqJ4XsI6h5LXmAp2p2mZAEum8vsaXBoIL+cHj3nntcaDhX?= =?utf-8?q?j7z0pKcDuVXqWs0P7DU7sVPx8OOPHjJMMbti6YXXY1Iuy14Oig1YQBXlHmXeAh0H0?= =?utf-8?q?osz9qaEIjsZJdzcijna1NdQL8CdB6PBbes54n8Eed9CSdh77kqzbJ+N/ZP3psy4df?= =?utf-8?q?Hg9+rftfpxAbg1xiy0zoCklwE+NftQJdRhnmTF2UcEw8fxOiqKTyrZCVjdylgIZnH?= =?utf-8?q?lN2izs8aZsg4psqMCMp3oFKFek0BZ1sjW817nTTGbtlxHvMd3PjBLe+f+O/aRswlH?= =?utf-8?q?SgMca2J3ccEaUoDJFyfNayBKcTZnw+WGspolhUSbrg+CVmTl+AA6SBBNUVukXw3tE?= =?utf-8?q?YYLgCDI26nAaX/azYS4rN41ew6ahs/WEefOPQMW+I0gdKwGHPwms2tvfAF7iAgiNa?= =?utf-8?q?cgpTOeDXRwnbM9u35dncP9nfWTVL/R9jK2jov9rI2IygnYxt4dZHHp2eHyQH8EpdX?= =?utf-8?q?vq9fu9anFPSbo2jTBAyTCKxvEmhBD2KHda+xWWxNvBvLKPycztvRaeLg25VuZl6eZ?= =?utf-8?q?fDF18ON33fAMqo4LYunPNsHa+5HdzINd1BXN3WSKs/Ag3tp+Asxt2BErURgxEeg7e?= =?utf-8?q?MrbeXlrUYTLr+bs46uG5aPDkENGbR3yEzsINf15zXvd5StQGOMr0k6E14msPbud6Q?= =?utf-8?q?bNp9BSd2YZsQ2cppxTGrzOTRp45JNP5hdRCsw3gICIfIAuEhiq0FSjRXzxR54fwZp?= =?utf-8?q?erUtU6odBHUzUzzp2+ERiNWJ4Tka6KmHS8Ffkj0hliT9Jop/xgEHhJEsPsd9CoV2m?= =?utf-8?q?B97GsFibSETwF0lJoGtW8cKdBhQKSLB6C0KS4rqQ7jXyOPUWHYKf/FTRk9pQlfqO6?= =?utf-8?q?04UmGGUobAneOlVZlKhvSmalo9/HePqu5d3PT44wSwwJ9i3634NUJm2oYt/qZW7Ku?= =?utf-8?q?gFBs3qeA4V2Y366QFyw3A3/sCS5fEv5jR5D3b+MV3KvvnUefahIN3r+e8wWrITUfd?= =?utf-8?q?nMW/Erust6nepestZkJlttkeLnR411AahoHwy70kHlW/u74baPUASdgnN3Om9wPgw?= =?utf-8?q?5pm0L81YWF/0DplQv5vrBH0f4d1jbZb5R0gO08Jli+TC4mXp+Xzexl61SLhHSfefA?= =?utf-8?q?JxtlHbOqJn6WjvuhHk6m/kaxf+fWsRxkAg=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 573580ef-a479-4a13-25d1-08dab406e98e X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Oct 2022 08:25:00.8963 (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: Q8FO77A6OcR+e2plm4ZFBdh13Q0/ENy4xfsEU5KKMvkHMr9uHP5k3pBuIY9YR2NhJUxZ9WIG6xLL2mJMZ9Oko/bVgZjoylcL+rPYSfe9zVs= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR13MB5454 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 9ee02b0..c088d24 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) { @@ -406,6 +413,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) { @@ -635,6 +719,9 @@ struct nfp_mask_id_entry { case RTE_FLOW_ACTION_TYPE_COUNT: PMD_DRV_LOG(DEBUG, "RTE_FLOW_ACTION_TYPE_COUNT 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); @@ -786,7 +873,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, @@ -823,7 +911,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, @@ -853,7 +942,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, @@ -914,7 +1004,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, @@ -979,7 +1070,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, @@ -1052,7 +1144,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, @@ -1100,7 +1193,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, @@ -1142,7 +1236,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, @@ -1391,7 +1486,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, @@ -1402,6 +1498,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) { @@ -1437,14 +1534,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); @@ -1458,7 +1555,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) { @@ -1489,7 +1586,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."); @@ -1498,7 +1595,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."); @@ -1873,6 +1970,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) @@ -2090,6 +2240,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[], @@ -2125,6 +2469,9 @@ struct nfp_mask_id_entry { case RTE_FLOW_ACTION_TYPE_COUNT: PMD_DRV_LOG(DEBUG, "Process RTE_FLOW_ACTION_TYPE_COUNT"); 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); @@ -2561,6 +2908,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; @@ -2570,6 +2926,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); @@ -2703,6 +3063,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, @@ -2711,6 +3114,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 @@ -2755,6 +3160,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) { @@ -2835,11 +3249,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: @@ -2863,6 +3293,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 892dbc0..f536da2 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 #include @@ -93,6 +94,7 @@ enum nfp_flower_tun_type { enum nfp_flow_type { NFP_FLOW_COMMON, NFP_FLOW_ENCAP, + NFP_FLOW_DECAP, }; struct nfp_fl_key_ls { @@ -169,6 +171,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. */ @@ -184,6 +194,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 Sat Oct 22 08:24:12 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 118955 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 E8F6BA0032; Sat, 22 Oct 2022 10:25:53 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id C6EE742826; Sat, 22 Oct 2022 10:25:11 +0200 (CEST) Received: from NAM04-MW2-obe.outbound.protection.outlook.com (mail-mw2nam04on2121.outbound.protection.outlook.com [40.107.101.121]) by mails.dpdk.org (Postfix) with ESMTP id CDED04280E for ; Sat, 22 Oct 2022 10:25:04 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=LKRmgoB/RuyzTAZajkP+RZP0b01VHIRqBJZq+SJbLGwWnzBiYvxsW/Agn2vy/tfIWzb9ucg0eoKjHBOs9iN3O6wzSdjfODajYX/yeycv1emg3MfyrlWu3Ifd371OVwcHNPdAx3P7iYn8G9aQRA0mTk4Nq+tzQ+jK7OtOXbXvPLjKqTiuFtUP2reSTQGkpJ+HVFA4EKBgM2M6FvyDeydNiy3IOSy0suxbHKguaj6dyJoPtXYjFm2YCnzAkrD2yLJ+hQIQkuLfISvpcuXI2plDg9VkK7oDhjL3pjTUp+B5bG1sVNLVY+bbQFetqVoDmxm0G/GCezDHAuX/Iq4bdlLzfg== 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=jliCd/nIeGTL/9h591nPJmFwNw8wmS1SEpWrvudXAvg=; b=keDLoFz0UWchbGUXv7hu1dc5i4A2IqosMyrv502DwurvGgl+NRi9qXvK9D/qXTXz39c93eNXARs4NvtpbaXmS+KHIKyHwH5k5eU5YEYd5VNY67UutcpP13evHbRC6WZrp8Jmix6qGtYgdu0crNd6GYPID1QtSBA2uiMyvbNt9NHt2KYEgLbBPAJX0McpxPbjcANtw23Bs+gR4IKUV10eV0+jtF5IuseX/cb1Ivd6IS0XwNycrb6gqwKSsckL3sYG5uUeQInrUv500xIZ/sh4bX6xHDRfODsiT69sp5by6TnZpKLIvW/XgW2F2Td40Z+ToNdJ6TTWk47a5HER97Grfw== 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=jliCd/nIeGTL/9h591nPJmFwNw8wmS1SEpWrvudXAvg=; b=GcSHOphly6oNBmIhHiR5iW/NBApGIsaZ9r2V/DBQ9fZ+mun7ubfCjbUrXVq8fNogDug3IWOHVsfaRGyK+8lwPffJ30TY+yEJD7MnSdXwfv5CJIIX/qZc6NbpZ6IpdsZ+7qESbY8jdlWvUYPBpSio+xeQkFSzAosToRTrG/E7l1I= 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 PH7PR13MB5454.namprd13.prod.outlook.com (2603:10b6:510:130::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5746.8; Sat, 22 Oct 2022 08:25: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; Sat, 22 Oct 2022 08:25:03 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v2 08/25] net/nfp: prepare for IPv6 UDP tunnel decap flow action Date: Sat, 22 Oct 2022 16:24:12 +0800 Message-Id: <1666427069-10553-9-git-send-email-chaoyong.he@corigine.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> References: <1666063359-34283-1-git-send-email-chaoyong.he@corigine.com> <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR02CA0056.apcprd02.prod.outlook.com (2603:1096:4:54::20) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|PH7PR13MB5454:EE_ X-MS-Office365-Filtering-Correlation-Id: 9f520451-c213-48db-3983-08dab406eac4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: dulH9spawytQdEbHg0IBO84Nq+28fUT0z4BmNadupRA3S5TzipXYfs0+0z52FPI81F26fWXf+6fCwmfgx4KJZCSdVslozdkJzc8nNnDLyfyYAhHt6D8RAllxq7dpplPHTzLd7zVn/sIGS4bpIHKsTbiJKfY7IZcQltMgwGD9LFipMgnx7TCQ0kIZu2QY8b4odepXSpNIG1EmOe4WCKTMQgJAN9YrYJ3ch/hyrPNCIRbk/OWlb2bE2dU64m/CTrE4pLUJEhR+Ft6F3fu6NLhI2c1PXI8ZTbgNhx6u9ZZLLJpIpA2V/DLZrScpwjBFeArVNKIKWpVH84L/OlynJFdTAFgm8rQUi76FFcdzaqfT4sSi7NweM2/FLPKVdDYVIRo0otUHKcyWXQcEWvstpMWTZ5rZAJ0NuOVQG6HHSWAUmK8SLBCkBNRruCAzRFDG0R4CDyrOl6R4RTv51ZLPHLkkSWbUoD4FzRL6IPOWqs8uLtaykTTprkJdvW4eHGXSKtiFZse26vin5w4F4x9Xb2HilglutuBvVhXEfKAQ6YNh9VUtWiMMwCweWSVRQSKO1m3opmba5p5/cwQVnLIjx1RcrDWU11jhw99PdCeJcEGmJH5ZOy5LRIa5PneXd3I+PCU2M/x2yXzVR/5zWEUTY31NjH7uvescguzZNIgAieD4Zmkw8kL0ZOu/CjkUCLVVNlR78p/V8Tg0owoChb6rZ7WaTJNcD0iJyDDKMhNnLHzd9mJPtWCKEJ2KkZ5C215quKmz1WQkXaxIduFQ5U+DyfdTrhSGqQBFU/K+BucO8y3culI= 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)(346002)(366004)(396003)(376002)(39840400004)(136003)(451199015)(186003)(6916009)(316002)(66574015)(83380400001)(2616005)(38350700002)(86362001)(44832011)(30864003)(38100700002)(66556008)(5660300002)(41300700001)(107886003)(478600001)(6506007)(6486002)(6666004)(8676002)(26005)(6512007)(8936002)(4326008)(2906002)(52116002)(66946007)(66476007)(36756003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?0cGTgQxGPmfVR7RNZiEHh+UzyIa9?= =?utf-8?q?F/I4tb8lkbVi3z6Fls90dcmf06XqiptpqSARVziQCmAa2hVtF7PNGCguOh3GpBkfp?= =?utf-8?q?a8h3xVBDQ+qvNEC8fo3+3UvizQxURHHQoMOuOq9GNsUyGY1XyiPZMzPSTQJ5Y16vI?= =?utf-8?q?6hjQSKu34L65gN3Ej5zWvT7cx/owy/AxsgYVE3APYkTRtqsRnlDLg5sSbkO1GSZjX?= =?utf-8?q?uRY5obsG5P9MNg6aviZ6FxGC00YADCg1RyHf3Ph4/nYpkAw0ye+eKAjAgkQAeiGz+?= =?utf-8?q?QjQkg5T0yV86Evh9atnZSSTRZEOeRHDqiggr1RRrkSo+VHfbiam0Xne2AmXljcOfk?= =?utf-8?q?4LoLktd2MvRTaCitpm4CdeFgatLMcfwhbA2xxx+0m/mC+LpIQe4N6E+jO6QMqUcAC?= =?utf-8?q?xrfNFJ/lZ7R2gvWiyC1yD0W2Eg0C5AoCv2ig7hSI+lzCws8rNy2B2ELLaO4DDh9z9?= =?utf-8?q?rPrmnYZZHih4e1XOjGEW2Q19Sq2WzGwmYJC8Y0tuiMyxu8PGbmyTL1KOwGErinVI1?= =?utf-8?q?3ArF+zmu7duQHPSOLazUP8Dv4FpJmDYJAZTUvAsAO8iWj0U0Ohs5FQb55D5aB7Tyu?= =?utf-8?q?9ZS53SGV1E7F1kzqQKF6mb8jl0wHPZtSvSuG4qx1BCsRCTy/V3/cB4Y85Ay1mvTt/?= =?utf-8?q?m0h/aI0xQ5sbFmtcH/7wA1GmwOD5WqOmE6LCMDM3X3P8ETf8msk1QQk2YCe9JvSSe?= =?utf-8?q?k9yf8YDqQYxgVfo+HnqaCFtCGyQM5dVBvU0kKfYiXDy0aaKjuAe5+tVhmGNbxwqzp?= =?utf-8?q?bdNnavVr2SsBqneINLIZ4OsndqHViMxFH3pSbdO6CQhJ3L/I2cNlz+uIDhdDMkkSL?= =?utf-8?q?k06P2HlVh7buIEviXuv+Umi4NAC43vV3IQr0QR8WRqMjn7iJvLDEqoJQ8zm+YgUAx?= =?utf-8?q?wW4/oxY0BWhBH8A7MTP9EXt4wAmoO16Wt8A4DnmXlM/on8PvH4CHNfsLF6ILyzOz6?= =?utf-8?q?uVBjigWm+/tRdyJMU5+yQVI2hnp20Jv9DnZ03Lu6Gb/yJ7Ek2CtbWv3cpCFF2ny1W?= =?utf-8?q?CX5jwNX/bNr1CuQUas0ShYxl6zgfTvwi3ulS3NY2fAEZQZWCg21Mf/rVhv35KFbjt?= =?utf-8?q?4dQXt/a6yfh5YlISIa+dQW5L9/LbUh+d8zZO5CjsgBT29hRaqpdqEUUIYAQwGMe1B?= =?utf-8?q?juInexy+qPqVLmAYewR1waTj1RQzr0+zYMaDDcRHqA4bjr5bu61nZrss2u6r2E9zJ?= =?utf-8?q?cpJQhdF6RtrDYrxDC3j3YcxAedm7VipZ5jnzVhHpEiCJr94VFSA9xQ7TV+Ijq1i1i?= =?utf-8?q?arSAJwtfwV8goBDrIVHCJy7DlQIzs1wHSh1x56CWDgetp4MFAwwJ2wTmkGziIoJ37?= =?utf-8?q?D8riu9liHZ4qgNAMYKfNABqjsps3fCnwmECSlvSw6GEM83Gv2JRFLO2wduP1bY0K5?= =?utf-8?q?6ruZMgqRFirZFxe7qHd4qTTmGxWqknPtmG2WvxXdhZzqlmx4MDx5nvVhlXVIibU+j?= =?utf-8?q?mR74Af0TZAuJLw16Pkyfvu/43KUesa0bbCyhj1wdQMlbF1aoZU+C189I9kih7NAWg?= =?utf-8?q?d4ZRbJo3a6NlSwn6B6fXsoYx30/0Ca3TKA=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9f520451-c213-48db-3983-08dab406eac4 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Oct 2022 08:25:02.9128 (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: PkxlogRLtjOqq0yTzgweLw/ZkOPIk9pqEV4hCFbCU2X/CMyYwjgVF9neKBE2RKBMTjy0ZzTPw/VNz/F3eKz0TyP1CLeqx3OwM6Mab55w4y8= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR13MB5454 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 c088d24..ad484b9 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -476,16 +476,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; } @@ -2078,6 +2157,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) @@ -2401,6 +2533,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) { @@ -3263,6 +3398,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 f536da2..a6994e0 100644 --- a/drivers/net/nfp/nfp_flow.h +++ b/drivers/net/nfp/nfp_flow.h @@ -177,6 +177,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 { @@ -201,6 +207,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 Sat Oct 22 08:24:13 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 118956 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 757BFA0032; Sat, 22 Oct 2022 10:26:00 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 9F3A442B6D; Sat, 22 Oct 2022 10:25:12 +0200 (CEST) Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2101.outbound.protection.outlook.com [40.107.244.101]) by mails.dpdk.org (Postfix) with ESMTP id 46EFC41614 for ; Sat, 22 Oct 2022 10:25:09 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=im1hesUWMkWaEY3mkzxPotu02ot60UBrVp1YpaJwiodf25VqyI44qQiLE+XEfrB364++BJWQz6cAUEfobZCyoyS+HzMY5OssN3Y3bJhyt2090pgUNFAKQZD6cWecAF2NnJJOY7+McCc+SZ0HmiOmOKMFxbhT+dEjKbTq08LSXRiH6q20CT5qqjFUeJ+L1j5cX6mO2FLUM2ezm5XQ5adIRHbdHl5UC821gLmdSNT37HPpiLDiPU9DUkMnN8pfXcX63Jgoa16m7I84rfU9mRzb0mEF1i/X9n4fhlPoJmnoJRc9zJOve8VUzcTxmBmbIy7Sz+9usIhHvcdUV2WMuz83ow== 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=e+nQPvgGP+rvYoCSgT6M/1QAlJk3WZllnLaQ7KjytzU=; b=C5tdySx7lxFurK9D1mycwvtfUiA37dIATQMsDvcaXDIFiq9eFc3rCWauRNfdt5rBkFkf22M46txIiQHeF/tE8wBfKUiUCA5N5AuEA97vcPBgFM7J2uAqE4Sme8PuP69vdhGSWceEQoH8/QFEhxBUUawv/8PYwxh2AJguEVMZGjrWmFO35K5zirtxgu67MEz7XeCOora5GmPMLxxRa0TszHkdq8cf9Ey9l72ia87rHEYK0OM5lixapCqeoOAbBhnQZcxylbjZFvmEwXlWhkStJ6Ecg2GPk96s2jJRU9PgKAtGoEjsOIoVdEyBEyCnu8Bt/d48QRg3CL+oJOsYygfeEw== 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=e+nQPvgGP+rvYoCSgT6M/1QAlJk3WZllnLaQ7KjytzU=; b=VM+RS0NJAb4rTXUBscM4IWe6vY2/KuYYaJwtd8x/9+871mUAp/DQztA7vMhWQwaGkI4/8EXGZ6f3bWNzMoZMkj3XrTwn4e61b0uC2i+E6AJ7TrB6KUZmfFEdScVE1bQOO05jOEqF9us2k41mUj+sIkKjwasXmpCKW7chp4hohDs= 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 DM6PR13MB3690.namprd13.prod.outlook.com (2603:10b6:5:24e::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.20; Sat, 22 Oct 2022 08:25: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; Sat, 22 Oct 2022 08:25:05 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v2 09/25] net/nfp: support IPv4 VXLAN decap flow action Date: Sat, 22 Oct 2022 16:24:13 +0800 Message-Id: <1666427069-10553-10-git-send-email-chaoyong.he@corigine.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> References: <1666063359-34283-1-git-send-email-chaoyong.he@corigine.com> <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR02CA0056.apcprd02.prod.outlook.com (2603:1096:4:54::20) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|DM6PR13MB3690:EE_ X-MS-Office365-Filtering-Correlation-Id: dbce8bc5-0b9f-4024-06ef-08dab406ec25 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: XsX9DwJC0BMEAX6HAGpRURiofx/S72gqvdu2YQePc6oZJ0aEv7N2fwiLxJ7GvfCOXBd5Qvw2/m33WLk20DfR/zh83HlscIyedBv81R5sjFvbwRRGm10LSIk4hC3YVw6mllBo4glFPVOyjAlVb6LqvnM8M23ip0aBKE7rw6xWw0zTEw6wnMB4U91NFINZ8TYQrIuIOY2XZ1DkCH6dpbDKAIDbth1tXA0H9hwpHNkTgMK0qoxVrMRqRnv6FpV7Q+YoMH3vyZkYUiqSk6+Tmod02PpEyviY9sLoXZlhd/b6MbVzp7Yt40i3aGll0SpeON1nILjAY76ms2mtLiIv3fBbSlz4YMfdQjPQwtFFhUCc28FXYLtPMqhJ2PXFRrfu3xSd7tbeHRLuXrSiSdJTTQk4a2EZG4E1dpShUD9vpSvthYmzC5IDrjkovh4j0kL7mQuM4nB2i3kFxr5EsEGn+1wWoLPwvR97l8DL5hLphOY9JV+PBOUN8BrVhXWpOjBHDCv7L7LjBXFqAW++lSloTfr0+L6rli25dm5CXVOA+I2wyYiUh8iVABzxGyAFTGPnDZjJX2t4L2ICPpc9lnMWUKJ/WeBuRUs9WW6hZOrf88xlzWTAbQzlfccn9OtdW+HGE9YO6MSANlyRVjvfPYn8yJhpz69n9IFu77AbJB9zwcXDc4yeXxrGaMkHZqkmI0AospOaUlvlh2p0Nhb0lCwGC9CD+UQx17G+OkVNQCNm3LZuJQXj+/nJA4oQFvqtTjc/dltc+jvm0AErT2TXyFear4Wujg== 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)(376002)(396003)(366004)(346002)(136003)(39830400003)(451199015)(6916009)(316002)(6506007)(66946007)(4326008)(6666004)(52116002)(6486002)(8676002)(66556008)(66476007)(107886003)(478600001)(6512007)(2616005)(44832011)(41300700001)(2906002)(8936002)(186003)(26005)(5660300002)(83380400001)(36756003)(38350700002)(86362001)(38100700002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?5BPmNREU1GeskGONFVjv/a3Ec+XR?= =?utf-8?q?cYdsVzkKPQiZbnVk7mS8+JG47qpiISDqxpZX0YGg4gtKH0Ysk//jAQ++DWfkfddbC?= =?utf-8?q?RmAiFiRHZ9eMjAwyrCopBbQshXrZEOfc7nFv+Svrs7IFenZLCbWdF+uJwIWcJ0Nxt?= =?utf-8?q?jMmzYsRZk4h+5a8fgOpSNuo054YkPz6GlLiZkFy6NSS4F9cFrZ16wdtLfxGe0k8fO?= =?utf-8?q?xF2zetok5DT54LS61GM5M6UCD3HSa28YJY0p+Qz9+9E8hN69BmGMJFAHtaJhQYdT3?= =?utf-8?q?7KDj90s1OiAGPz+oqiQAXrMmpxwuoGOzvD6NbQ2BYOyJ6WO7cmRSBGtjhc+yHJs01?= =?utf-8?q?1BVtzzx2KK4mYFXnLxGPTmXHDCm4Vj/IYikeU1VRW+5hqigvHBz/VUpy3dGRMQBml?= =?utf-8?q?J2CEClUJPgKDfDTqaMfcN6K0xyk62vIVPgc/JKQrqHZsGrGRgi+SW/U3NA4KSIZxx?= =?utf-8?q?FxQnKB1d4twxYgfJBtkXhNfr8BglBXX251v11UsMroFVN7V6PUMh9lb4UfW2vrs5e?= =?utf-8?q?7jFOpGdYcAsLEvTrMGws8aarXy/7OGg2RhT/actunK0mTLu5jSj0Vr+fu355e2+ER?= =?utf-8?q?BM1fLrwd3SVtVdjlMIOH7K9LMHX2UatirEgBZNY/IWqwprT2YqMGlYekwlJLw7OpK?= =?utf-8?q?6YYzdkuIfIshnLlHo6NtELKrnPQye8MbG613AlB2ALLdmq3c6ZY6uz+TUS7tgNw5l?= =?utf-8?q?Y1WXce6tMm8AzBKYH79qbKDqRLJDJSxR1OxkNDtotDO7dNnUhGGBz0ciLxq+HEB8s?= =?utf-8?q?eC4rfPRi4KgQY2tWTdZruD8/brRK3ZRi8rHysOyDJB3KfkkbQcgrv+ZSbIq5vTMGb?= =?utf-8?q?VaKrXlzWrqJUE61V5nA+BSOrJrXHsKmgsBIlYMdmb9MULZoTppXiniUz3ieLRjklj?= =?utf-8?q?FU6qQ4dJ/RSdadphFuAlz0L2yzt/U3/+q79oLaqlLsvuysW4zJeYy25lo6Wu1euy4?= =?utf-8?q?+c1KLPfviOs0JxL9x5OpKU4weshmDIUNeCknxUZ6gqXuqNpeqk4SD/5qHMq7RwWcN?= =?utf-8?q?ExpWNPNMWbq0/vRKheN/DWPGjK19bPiGB3jTrOweOrOk0jLxJCsFzTQz8McXxA6zx?= =?utf-8?q?kdvcp6yWxLt+43OOqhuaUQLupZunLzE0e5Hh0YHW6PtLNOUMmvELGFI4HieZDMb42?= =?utf-8?q?YeHhszLV2S5OwJMWc/1g3nNXK+VCSwIyom0XwZFvk7KEs/ar2cwqJAQYIABo4sjd3?= =?utf-8?q?eFHQhA3D4H6ewwQ0ON46e6Vz9vSOrMD8nF7MVZSFi/6bRjlHwOYXChDyreZVXvJdE?= =?utf-8?q?7VEgYaLmk3me5i0FyrwR02l1LN7ZTB6J4AYaclXVed1z3w00tx3gpWWh+kWCMmrKc?= =?utf-8?q?X6DO+oc0fulQzR1UBPhR+3W/wH4qXnJy5UjseI6UcMHcoIMQBy7Rv2wIAIeb2ofQL?= =?utf-8?q?kOdLkCmgY4jM6CcxA9oI0XryP1ivLImy16M7tCLBWzHufEl+YpAbr1ZdO5jIQhJRb?= =?utf-8?q?+bsGkwfvq6VYXDfY7nzoRZ72rtIy0fnZY1zQ76h+wf9VaJcPDh7WOc/TKxGZtJeDe?= =?utf-8?q?Y0YJ70nKo8WaBkb3pdHPV9VQ5vzbikXDkg=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: dbce8bc5-0b9f-4024-06ef-08dab406ec25 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Oct 2022 08:25:05.2093 (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: aXMxplZtCuj8qe1PppLreS3gnkFlgIrCHh9rKbvpbFJ6XIFCq0SMOoE9fWea4OHbD6X+Q86iLOBzx3C03BMMMUKFBlcDK5BRgQRBsvsA+SU= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR13MB3690 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 ff97787..6788520 100644 --- a/doc/guides/nics/features/nfp.ini +++ b/doc/guides/nics/features/nfp.ini @@ -56,4 +56,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 ad484b9..ce61446 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -413,7 +413,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) { @@ -908,6 +908,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; @@ -1315,7 +1318,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, @@ -1323,6 +1326,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; @@ -1351,6 +1355,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: @@ -1360,7 +1366,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 */ @@ -2049,7 +2055,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) { @@ -2427,7 +2433,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) { @@ -2570,6 +2576,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) @@ -2744,6 +2793,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; @@ -3214,6 +3274,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 Sat Oct 22 08:24:14 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 118957 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 5FD22A0032; Sat, 22 Oct 2022 10:26:07 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 6F10542B7A; Sat, 22 Oct 2022 10:25:13 +0200 (CEST) Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2101.outbound.protection.outlook.com [40.107.244.101]) by mails.dpdk.org (Postfix) with ESMTP id ACA0041614 for ; Sat, 22 Oct 2022 10:25:09 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=fnF857eRmGRTkI7qgISC2eayZHrqK+sTB1Int7lH2e/y+KllCh8nf4M97uRvebmaKngH7YOcCe2VshdaVF8sYrTA0j/5dlyYbYJ4Pu0A1iqTkdPF++yuNylv4DJ3a6CHU9cuoNNt0ffgxSz87PiiipWq5gP5Ez8R/1rmznRFcWNtgk1Vr6vlIEfk/hTXnnCQZ36knRr4Ed/SZ2KmOdv2YYCT2FQU9vpAhLX2px+6j8jAiq9FiZH0QvJLGe/CUVkldn3IABj/J5VQdrKwLa9w2Mjl8jcM1cvtR7zpl/+fz6HLe3nAWbzOoGyjDfC3a4jOkUV4UAEEc3JhRhWUvya26g== 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=DpBdcc8um9/lpkn9Hw/KC5JDFsljn8dml9E2QbYh9jQ=; b=Kh43h1eepuNUn916j6ZCCo0Yfx7eLnbf1AeQnYjqwxuIy2BULCNMCgFJqQaW4FMzkbMb+60vd1vqdvP4EYX7sSvgoVfbS6YsaT76l48/ZL24/nuPmqK6PlPwRZXnH0unZ00sHF+49henMxH9I+jREUrXBAykYx+JCh7P8WDcMDxb9kes6ZPl/dDDKeWBThGlN+xEmDTlCJvREcteXS92x4m23VHapL0XJEd6mmkFG39WYPtqjJ3WE0m95Snrs/jSVG/6BTsOnBqdNDTWhkCyUS2fxPSYzdAOqJIQ9ICNCg72eHm2P/JWqcRwjUcGlXm+zF110y2EK7xExskB4fipEQ== 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=DpBdcc8um9/lpkn9Hw/KC5JDFsljn8dml9E2QbYh9jQ=; b=PCWiF2SoA+5zEU8mAS+O07nxJJ1Oxxrl59r9CKZ52ctJ2sf5TE37uIlcgBg+T3joMQyfmj7S+SpckneiKtg2ZxyprSJTlmZVioPLd+zaH5A9rOW3FxKtKh6WE7d+Xy4pCJ4Uv66M4RhwLUXN+pLWzv6z6uiI1BCWF6TYcEj/WsM= 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 DM6PR13MB3690.namprd13.prod.outlook.com (2603:10b6:5:24e::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.20; Sat, 22 Oct 2022 08:25:07 +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; Sat, 22 Oct 2022 08:25:07 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v2 10/25] net/nfp: support IPv6 VXLAN decap flow action Date: Sat, 22 Oct 2022 16:24:14 +0800 Message-Id: <1666427069-10553-11-git-send-email-chaoyong.he@corigine.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> References: <1666063359-34283-1-git-send-email-chaoyong.he@corigine.com> <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR02CA0056.apcprd02.prod.outlook.com (2603:1096:4:54::20) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|DM6PR13MB3690:EE_ X-MS-Office365-Filtering-Correlation-Id: 2fa1ac6c-20cf-4ad6-22a4-08dab406ed5b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Qc1QlEvAZIwZoDCoK5LjKRAydlvcQ+NwBgmNbC0zVFOJQSLlzvZyZOLXV2l0AOSPyQAkX4GM7uQpiOFlggkTD1MgAqhADREo31viCLZBzAa5XQ/2H7xLnjxbwVaszdW4+JjUTo2lPe2TlqKSnIS8e29GXq2P2XQVpZus2MAj6A7dryo3WTcLQNy+o+9YLWAu4EpozPMsJinA/g/xTxK1J1mf5e/buRjb9wtskTiOCvJni0kHL2OhyxUoRolP35WyIpfGTRmppUSLFkeYa9AdZEiU/RhHp+Q+6rcaIS563kRAB4mAF70LEr/pK/8Bi4F04zH6UkEbUrBVFTwe2AUW0urumWsK6ycgnxeaj+jZ5woPmcSzW7qKG/3ziJEjbPLjJhYnH9/a2qAI+xek2x1gWmWoij51CGxQUhDd/gs2VB6fXYvPtgj3W+IVfZWIazm0e4dbZtdeqr3ExWAtAqxXwAyvCZSU4J6mBpeaeFjc6L2KJQl/Zt6yIUXnZaqR6n5IOdKKJeRGxjlOaZFLQ9GMok4Ejingj8PQq9jL+05gj8Vbw6jyxQmivgFVeNl4i4AtutT92BFt+TnEoWFs5JtSZ1KX6JWjuSuMSKjd4rU/y3/PjcxrtmeNMMe9rNjYm5DnOX+XzDml3S0GSLLKB43X7ZCv4x71npyTXcaSpgHPtgLyk3cyycDDSJq5TJ1JvqnHsZFtZHMYQOXQEXv2b7kJo+uijlVUXDDrmDXdf31HHxi9ung7o+enfWzz/UVkvgvqy1nGqX3roTpWiqfQxhshZA== 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)(376002)(396003)(366004)(346002)(136003)(39830400003)(451199015)(6916009)(316002)(6506007)(66946007)(4326008)(6666004)(52116002)(6486002)(8676002)(66556008)(66476007)(107886003)(478600001)(6512007)(2616005)(44832011)(41300700001)(2906002)(8936002)(186003)(26005)(5660300002)(83380400001)(36756003)(38350700002)(86362001)(38100700002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?2ZIaAt3r8WfJBNor7avcHwJGN0MP?= =?utf-8?q?KOTHEF1tV5CoA2bs6G0gwkRjGpZqFI4eBknkyJkUFUW8c3IB3aQysZCrV4jo7S+Tp?= =?utf-8?q?SmoiE48tZnJfs2rwMOcHgFDZCTmrPTKnf1PhN4LPvoNOiCvqT2c8ZCeaWzEKMJtps?= =?utf-8?q?hQGvnkJY3syqidlgqYt8hkS+WSljas2YHfkN8DXMdCTash3FyoheG8i7fW69mnzVP?= =?utf-8?q?KERILnTZZnfs81GJP3po0uJ01DjLcmciFznMH4kryjTc1JaSe+9Hne1NTKPfzEJcW?= =?utf-8?q?9bdsWUbP+oDkseRe/+8735eVeZRXOwIV7UL/QFxst+yqUEXieJWL/7yjyOCNki+Me?= =?utf-8?q?b/UrBh4hELlYxOSL4lz/lrvM3xqOTcsVRuqc6nb2aDZUYeW8u3kAstkd1UB9Vsz/T?= =?utf-8?q?ONcQuWXE31cF4anhGOQcO/39NLZxXcDXbWwp81j7meZOU2yPEeisT4WxnmLOPl6Ab?= =?utf-8?q?8Zxpmmix7dpc0kooogbIFAh25wpOED4YPQl4XSEKIIvoU8j69wZNsptVqcx4BiYcM?= =?utf-8?q?/hoEuJ/btaOe+6Uc7ltV2cftDcOGGDSdWCyiuvp203PmzswfkjeOLqJmm1Co0JFds?= =?utf-8?q?bf3rCoygj22tMzVY5Gr8ZbZe6RIJaNI5fPQnN0d+MYh8fUIDZy1O6BkLyK76jOKeM?= =?utf-8?q?yn59CabxHove+CUyqr3Ows7QTjJTmFxqn+Q+SoKb8cL1Hh5UnIm4RD0ElnJpjYYCC?= =?utf-8?q?hba3MVyUHkMKEZgA333UjNoQtTeBk/wh6NjlvDYaFuFasZQ0haT3SmBbZFi509rOi?= =?utf-8?q?JLiOq8mnRcf9pgn6bLm0urYjRs0J+0kEb+Td24e1HvvLHYs/er2xka62v8K+S4oN/?= =?utf-8?q?+9IO6FRK7Odm1t7rlTfDHMoRi4z3tqHvs7swVFccxqqxXFRmh3jFIqDEq3QlEqhDd?= =?utf-8?q?+oEpBFESv6kgn1Kvi96GeZGndTtMy9A2EpbPScI9f4KMqik2zCeCvI0xaXlEn3THQ?= =?utf-8?q?G5pqpT/7sa2g6LlR0vm4IUeQ4QRXan79K2OYUNqNcaqL/UneQiLNW7dGnGOe7fAaX?= =?utf-8?q?e98ppKDhJoGE1L+8N2i8bH8P03yc+rMe4VU8V5F79r97hwmkEpCpgjbWBJ9qdc3Nz?= =?utf-8?q?/cvpgZM0ILN2f+oXa5xKSGHG0c+FejQtzxgvgL6ejWKqFqOXMjW5EWky7zbM5rocs?= =?utf-8?q?B3UgeDSCnTWHCQZqGmJezRHziPKfo9fbEf3RNKxlP9zy9VGK5dWBou454J+8YZH/7?= =?utf-8?q?bLY7Pl4cd7hCzE3wsI4qOH1VCgR9Uj+zscUiM5Ik3WKCJmEfW34tZl6wKjT3T66gA?= =?utf-8?q?4F+XMdd7cTUd/GCYVP+q63+kq5/zDRlz2bHiLb1QR2bQ9Jl4qiDgGGy9OTPj7HufZ?= =?utf-8?q?AyCQBvApn/W0Mus4ULZ/GMvIOQYuhcXVMtpw/OO2YPPkAp7QL6UnzaE/TGYdiGhMa?= =?utf-8?q?Aba63NAHDS3NmC9SzFttTKYrhMRFkSlsaGrG1ROmIHPP8e4CEqYSqDt/KxWXdT80E?= =?utf-8?q?TCK+aKRYXjmhHGJWlwPt1vPCas6/ZLxlkMpJ5x9lz5T65x8vtAcyojeME7N6hUjEM?= =?utf-8?q?WTjUoMyZS1t3jEkYUkznsh/5Bfo5aXZwnw=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2fa1ac6c-20cf-4ad6-22a4-08dab406ed5b X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Oct 2022 08:25:07.4290 (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: UaiU8aepDvm4EYkXRRyhktO8LEdymquWkEYQpOfbZVUubLyE/8y4hT6U78r0PjANUEwE45s4cfneLcCM5GfFeZ0nM0qFvs2TlXauMQRLAGE= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR13MB3690 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 --- drivers/net/nfp/nfp_flow.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index ce61446..1abb02b 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -476,7 +476,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[]) { @@ -1352,6 +1352,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; @@ -2163,7 +2165,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) { @@ -2577,7 +2579,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) { @@ -2595,6 +2597,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, @@ -2615,7 +2619,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 @@ -2803,6 +2807,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); @@ -3273,6 +3279,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; @@ -3300,6 +3309,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 Sat Oct 22 08:24: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: 118958 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 74027A0032; Sat, 22 Oct 2022 10:26:18 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 1110242B7E; Sat, 22 Oct 2022 10:25:20 +0200 (CEST) Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2099.outbound.protection.outlook.com [40.107.244.99]) by mails.dpdk.org (Postfix) with ESMTP id 1F0B941155 for ; Sat, 22 Oct 2022 10:25:11 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Gp8aZRcPktYyS6+5lQD3J+u+Cy4Q4QLJSOjs72oH3+qE74Q1n4AEBj7K6pFn87UPzI/A4/Z24HszgxD8EClYl9Tt3Bn17H+D5mIB9CO47GC0bSYF3JUfbMxUBil2X6XCwx+9TCfnuS4uHAxPAuWMyHZMhAVkNwB1Je8ZtcSs13W0Rw9qipEKLY4R4KvAM6DKWHTBSLVkNqkwyUh+9fwb1LTZ+Q2Fsw+ePsUk0lcYXdbb32txPT2mts9x+n08mKt0pqi7G64FBUOHVIm0LlN4t8D5h/Qpv9uwHZj21wQgkfv72QrMzo7DNMlqAJGdnY8QMc3DYAdTqZNBMCmqDsEAdg== 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=gmY5lC7C85XMi7o4Pz9YRhSX87xaLpDMnXrydgN+huw=; b=Gjsm9zzkhmHjPqXMcgdEiSs+xwPK2QT+3zMLM862tyhldfXTcaVAIrHVCgUpUbuvWGqwIwM77Q6eaBGxVRrTEwlvv9gc8ZIX6RmKnzXeR5qf0LNcTj6HsQ6dBsowmwTDE/O0DHEMXFcDdDe0aqIwsZ21bXyVnWhUt0uyt0ApOAVM4yYRZmEeFhkvpsHruYDkP/shY2YNq1BZvX1RGGNmczcd1c7ouIvfqY5nFK04ebfpcQyEwWGbcBdEDUjtIWIvYBlYnOd6Tcuk0Vy87ax5zNYNMUniuwV9U5kpIs7ScWcnmOx4mzk7Y16CQj2SVrDcUimgg2qfvu/b8psFCfvp4w== 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=gmY5lC7C85XMi7o4Pz9YRhSX87xaLpDMnXrydgN+huw=; b=EiyKg2zXfWun+XuTy+7RJvOfoAEAemsFJlIwRIitHaZD4yRmovjeThI8MUZTuLItSRgrdplVSMKfTJL/Sbddp6z2VNEmpz/JedsFVbS9aL63glPWM+gIsa3gtAv/3yx1/jT3x+ag0qsmUhVEqTGmjabXX3Zs/qtcul9teO7R3xM= 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 DM6PR13MB3690.namprd13.prod.outlook.com (2603:10b6:5:24e::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.20; Sat, 22 Oct 2022 08:25:09 +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; Sat, 22 Oct 2022 08:25:09 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v2 11/25] net/nfp: support IPv4 GENEVE encap flow action Date: Sat, 22 Oct 2022 16:24:15 +0800 Message-Id: <1666427069-10553-12-git-send-email-chaoyong.he@corigine.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> References: <1666063359-34283-1-git-send-email-chaoyong.he@corigine.com> <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR02CA0056.apcprd02.prod.outlook.com (2603:1096:4:54::20) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|DM6PR13MB3690:EE_ X-MS-Office365-Filtering-Correlation-Id: fb9e28a8-264d-4316-f9da-08dab406eea8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: SbHdZdXnNiVJMhCnlBxCmJslQ+DF+/C/tR2lOVrH5D0zlOMSTmg2IknfiDn+s8A7drP+brdONqgq+e6G/nnYtl7Jk4eWJkU9rKqUNIDL7d0WRfUSfWRVTCyIN1i5k5zzAtdfUKbRoPZ3/PTdiUH0hJTshtCTF2xTAd6nGFMcROcAlspfnVy9xm3Vj1BcmyNtw5w1oxMXqhU+MlxFCKOF0+wCXJ2gv5GdZ2lOC3pEBAtaEhoNUEoB7OifJ7W0LszAwCygLtndlQRIvre5A7S3Fpa0WlmyQNQKnwgOYhUiUqLVzFpmKA3KiwSta5xgPlT2E3ITjbONLijO+8V4/t3JacXWFWIVRvb6Lv9z1OdkpXayIBuOhw9bM4aYDzqgYOr+dBILYlJXysJJvKhySFHgSYREWD//IwIZfCRRKoOM4Ri5yh10kDWiGD3Y1a3Zy+rn7z3OnGhCF/rwYTQH7a1FtDJysdiUHLS+vLl4T+CP8cWZkpfJ7IJfNH+YYGEvsTOA8xyQreia/tX5FkUdsunAVykm4nuSPaB95Gy3O/HYH6vTir2WEQVQMPFvrdVwZtC/6Xs8oX0JZEXd6KCt0aKBRfqni6d6J1CaSYv7Ar4PiY1gDSBRLCR4Xc132YmA5/H5U8hkVKZMPs7wr3iA9UhvASwJhedAYsNHXMpMpkptVHPCHFPyQkzjcf8Y5Okhi9LGbnI/Mp3heLNKhjKOKgdoUupo4xPxI1/oMZpOycs5xdjXsxnU5pX83JBU1NnDHwgjOueGPRlsKFCzyk6Eya+5Mg== 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)(376002)(396003)(366004)(346002)(136003)(39830400003)(451199015)(6916009)(316002)(6506007)(66946007)(4326008)(6666004)(52116002)(6486002)(8676002)(66556008)(66476007)(107886003)(478600001)(6512007)(2616005)(44832011)(41300700001)(2906002)(8936002)(186003)(26005)(5660300002)(83380400001)(36756003)(38350700002)(86362001)(38100700002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?RCGpnbhgBaIATZWQumnSZprv3Lis?= =?utf-8?q?fA01jQLcHZRCim5ev1xYlNI66ScROJBhIWxQe9wQmCuEl5dmlOjPRpzDCKexfBlTq?= =?utf-8?q?CKfOk70Cus6eouivJ6zevGZLStsSG/P9TBSgcZLOMBkfpR2BGBLevM2GDbacEFFhB?= =?utf-8?q?p1hOGXbiFwMMYv9uWSPn+FBtxWzKAY2pNCySRmMlY9tK5YQCkw0LW9Uy6m4uBHzU6?= =?utf-8?q?WVTAcWewCQFS9KxGGdzLFfkCHgAmUPXLozHHqyvu6Az6DKEs22sFwUMj/HvbhytQ9?= =?utf-8?q?kRyDxEBZgN7FOJze2okX/lhrkeWTXanVGGPgME7k7QzTsqVmROoth35mmyrollV+S?= =?utf-8?q?CNt6W8FbXArJQUDXFUmQw9QngmKgQVwpLKOAwiCCFZmW8/Izk5mgG/td6SvVxyMr/?= =?utf-8?q?iVkVZx7kCLUCWSzZKQA7yld/Gbj0mWYb4pRD3RhCDbZn+TV/mti5sD4TXl69Sh5hz?= =?utf-8?q?8ITmqCF829a2SOes6ITyDbq3MY36hLoV9eLAMYkiWPwwhekDB4dhmfXlKrHamTWrj?= =?utf-8?q?rjlYfr9u2KqGo4r2cixKvl+1roG/I+qt4rAyecnOGpz+StYlbEnTSazO5wQfUEerE?= =?utf-8?q?xiJJmbhTpb5QTcle1JlKEz3kqP0RfzaAoTvCrTKghBW3jcXrivrvOfpXC0qQclRK7?= =?utf-8?q?kI3jDlh6kl82dIFu3ygT/bN6ZDHYSczHhmvE67ZiQmPFwhM4xf86CtOo0FfiCeM5Z?= =?utf-8?q?JfJWxWonYpEyIwsCvfYtfDTtITiCaSC5pQoYBx74OdhdRnrZ4CTEHp0YPCnEU80/0?= =?utf-8?q?rxRjcinJCHAo1u67ezpbmXfrCjjM7ufVXFsXRG04WT6NWFkFe3tSnpCxk8bzR2n/e?= =?utf-8?q?bLjJfWLNHmXMMiCevZpx6XfLczcZqv18PtWWzoqZL529Gou8oJPS+6anNbGyPNl0g?= =?utf-8?q?fqm+wP0C4MgfZGWH20DIq4OHQSKBV/ufKlWJdWy802Ibj5K/zgDoh/rdsuzqhLlBQ?= =?utf-8?q?bFmDsxZrHf9OLDZ+DMA81O6e9By8udHBJ3USNEzeibjawos0WU8ouEZAiK6TcuW7T?= =?utf-8?q?lWKqDCD2roqqlzFBODnzGNy3JxjndVmX40IkwK7ELOf6KFN4rEUakwNmh7AcGqXko?= =?utf-8?q?+G0Q7rxkA3fM5ufSzl2EmdF5uF+iCT7eAHtD4Q2hLSDRELdx985N9Gebuhg2qEASz?= =?utf-8?q?YcBFo/KwcEeMZmZBeEi6Xv/Q199P1Uu3pEqOJsRaifjDkL5WqTxJutAMyIE+E/m+V?= =?utf-8?q?56ppdCMqjS627ETqj9ugRhwyIQjV7oaP4Cxnox9NaU8+SLoJ4ZTS7wS8FzQSSdYFV?= =?utf-8?q?eFZ3vMxq0at/cU0DuGOGgJ5EmtWUgoTJP45PnQbKsfJSfNs53NDQws18sEvZ6ZhG+?= =?utf-8?q?WoGcQ2ZoVHyhIRj7F4m8oo1lCRTKuRFtkHAdZbzvXMg3HN8k96+6BRNQWdMqwkV5k?= =?utf-8?q?yEjFa9XDfuC3o/ciuTXmDcmF+HrZNHgY91amuI+cZJKrzm0GgEK/G9UUHM77Tsw/x?= =?utf-8?q?fhGE5NA7VUjIVKV9MvjkAtH7zlEU1o426W6/M+8YeUIyZndkpbfdiru0wdfggVsLn?= =?utf-8?q?uVVaRIPPgy5BsWTzFTUVdOPtq/NhQppfcw=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: fb9e28a8-264d-4316-f9da-08dab406eea8 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Oct 2022 08:25:09.4607 (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: 0m6UNiv3K9J1dnnYbxCJAeeINDnrck5BbvMuCYGAF5xt7W4Slkwit7rUmsSFvmS2Nua2Y5jqOc2ifU5BXfkcVLNn6TxQAnF5InHdYJ76NHM= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR13MB3690 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 6788520..95c97c2 100644 --- a/doc/guides/nics/features/nfp.ini +++ b/doc/guides/nics/features/nfp.ini @@ -44,6 +44,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 1abb02b..faa313e 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. */ @@ -908,6 +914,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; @@ -2623,6 +2634,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) @@ -2797,6 +2890,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 Sat Oct 22 08:24: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: 118959 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 060CFA0032; Sat, 22 Oct 2022 10:26:25 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id C8E2E42B8E; Sat, 22 Oct 2022 10:25:20 +0200 (CEST) Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2105.outbound.protection.outlook.com [40.107.244.105]) by mails.dpdk.org (Postfix) with ESMTP id 5ADF642B73 for ; Sat, 22 Oct 2022 10:25:13 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ba0ErcxMAfTQrqWvk/BU7UhOoNBsj19/8iY1ifQ1lmobptwtC3CxhnFVKHQIUV6c1en9sS5DkBPoJ1EMbBvZuDYdNg4kIYoclRePP/fZwmyuYcGslUaH+XbFLmVUqMHIeNNYJ5e84Cr9TwMvqoxP4+aA+9G8QSRKxM7P1CQqvo69KB/sJW3hqpmK/7EMJIFDoIK+hoDWoN7+jOjG1knSIH6qRyJHllKHjuNALn7QmEW2+TL145q99a0FDwPljumGsa8jgOPSs98lV6R7o7Tg1Tml8zJOjI1okR88e7hmDWv14Ji1L8kpM5qKRwAiDX/VdgWvse6qqA+hm6K7rf8ewg== 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=nSpa1aGc8fUu+JaudOXRrdt1lXF3LRqSJfXhxoWElrU=; b=TK/iaIg8G7GvQ9OfVnss+1AptdyOvrZe7/K+8e5MJfTaRzAJ+w1oGes6NOZqyubZvZpaFmBoInDeDhysCKkPJXNUf6Xmi4WNzBSI7YZ2wz+OnwMnf7V9R+7hgXoPHLDUmIJO0pbJiJF+ln90u0b3jb7f7kQ8Co/UHLqZlA8xkpf+j32ZAiJa53uqHIz9l9E37s+KCYwBEuBWR/0dWkLZcEgB52lZkD8Q9hWUOLmwKCPBHfPe1MvREJKUg9CrYISSF2uLblk5oyH8wx6+pg764hKhhHkmqfsRf+9AcF1eU36HAYKXNDbznpVXR2nIygOdpWjZoFe7T+I5TRHFx+5nTQ== 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=nSpa1aGc8fUu+JaudOXRrdt1lXF3LRqSJfXhxoWElrU=; b=kvFMj1/9gVCgVAlWMvtZ5WtU/AzowoevNs75SjnVs0CGW+4S8EMWVAVG3sQ1rza0/68e7V8dJxYDluwSNhi87XZzZJeGYB6POHHrIqp+MXkHUbn78FMjOGLId9IPoyOWhJrwv9V1TyxeZQInLtPIIT7WZHTzIac64GbV3rSZZ34= 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 DM6PR13MB3690.namprd13.prod.outlook.com (2603:10b6:5:24e::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.20; Sat, 22 Oct 2022 08:25:11 +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; Sat, 22 Oct 2022 08:25:11 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v2 12/25] net/nfp: support IPv6 GENEVE encap flow action Date: Sat, 22 Oct 2022 16:24:16 +0800 Message-Id: <1666427069-10553-13-git-send-email-chaoyong.he@corigine.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> References: <1666063359-34283-1-git-send-email-chaoyong.he@corigine.com> <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR02CA0056.apcprd02.prod.outlook.com (2603:1096:4:54::20) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|DM6PR13MB3690:EE_ X-MS-Office365-Filtering-Correlation-Id: a6462b71-3b51-49be-ad8b-08dab406efdc X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: oXHjXFF8/ZaDr14CU9OyKvZCx+V92bgXPar0McZxIePXhGObVuhISLCrDZD/PyImzEX6P3ffhunmPG/6jPihTX7bQGBfRPsV5LmGYqAYxd4ZQBmLyIgYVQxg1Nvq1MJrN4HEzG/SC0zl/EVApVoIc23ZWS1cndQmG/smoyuQ2kbybSa6BLrMTzALcGrbNR2vFtFDKjU9Ml/0NAr6PbnQvoU4x1FVFvS5q4n9CxmdNQecWc98isCN1GHrTDJZIAwNFUMk3SCQ2bUtgjkbJnHXp9dTQ1SgnidpbVBHZlrvU3vIBLYvFHdGO2upoe7JAa1d35O6BeDtHej+OiYnkJOUqAZA0K0thAO6blo5dne7VbGABf/sGQbswn9Ob7xAgBPi5BCNxAY6xebbB003+vAWKdoacg4CbfPwUX3TsVGFd9hfpvi47odkFxgxOeVV8J/Sdv9Zgc1HJgmVX3S6UWQ1DTj7rFTikIYCTwimkoCstDMpQ1WrlcU1NjVPIc8cpO3bDDAMyd9jyTGGQLR6gKPtUsV5pLFDcV0Fc1BenkNT3F5ophFRvAUIyxBMa8fuAg3nGrj6YO+eicHLrfcZIg+7/M8zrrVbw8Pd3iy9BQggn7iY1IJxcu+3BJM132nWSUrlT2bk94rxfy9WctydOV0yBmPnqRY3nrBoRW1EhTfXTiNXtS98MB1uKiTto58JTHNWWOd6c52xSdEDyVe8b9cgP5+syuVzFCPZwgzD0cFNB7wZYroE6owbO6guevJUdqpa65qJWOCnnLTD9M2lcPMUkg== 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)(376002)(396003)(366004)(346002)(136003)(39830400003)(451199015)(6916009)(316002)(6506007)(66946007)(4326008)(52116002)(6486002)(8676002)(66556008)(66476007)(107886003)(478600001)(6512007)(2616005)(44832011)(41300700001)(2906002)(8936002)(186003)(26005)(5660300002)(83380400001)(36756003)(38350700002)(86362001)(38100700002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?yRAeNHXI8beGvpIdUFVsCrhwWTOv?= =?utf-8?q?7HdBsBNOZ4EtJWLftXRcqxQaYxRgtX26InnCvfbdBHYPIRcc1evuiADK8H9V01U7n?= =?utf-8?q?pLQnobubFAKRDEaK81P9tD2VkU/WNdpSSaZGcDFPQy6do2FTm3hUCkofnPQCcvtHq?= =?utf-8?q?OFr1Tw8CFewq8+UJdNOjnUrbSAP7mRN/PZudGvXeTteaO1kcJrsqI4L9wmJqrsvNp?= =?utf-8?q?qjg1OsiDlpnOLzgvfhMolHsoV7h1tw39NQbgnD3XqS2U37exJYo9zenxeUgrtpU8Y?= =?utf-8?q?G1vcNscamDxEDdu8cW82Oj/YlTVEWdRKb2HXRNcJwpgQG1dXchwWFFt22+XZFg6JW?= =?utf-8?q?odLTN/FBdcHA680zyqgVXQuese9e/ePxcpKbREcw36zKM30A7Teoj08l8aOGNWGw4?= =?utf-8?q?KF1M4b0y2yRF4haDFg2igwRCicWOwGZOUlPuPbIVKPgdnZAByy1B1BpD77czueGWz?= =?utf-8?q?XwzpBo2C/t53bcJ08FMF1D1FaF8M5IQMdzfjuTwfsHTQ4wnt2AA+LigCuUdrv37zM?= =?utf-8?q?NGVmleQpay0X+b4WT18f2P1leZZG1HWHmW5YkHDCek1lLiw8gxLigRJ7AWmMgl+35?= =?utf-8?q?1MSNDej1SqSaaOsAMVY7dW+WLYXc+eDuRRXroSGGKVUXNZqPNZJsIuVj6MQGN53vz?= =?utf-8?q?R52aQAISLx0+iT6E5WWatazK3LUo4bDGfexjyNPQbzE9m/UvovmOHx2UkRmp1BpjD?= =?utf-8?q?RnXVQdYGKH1tys6txvoJzkUcu08dot6q6W+nJWeQlmhcqi9LPCFEkVcw+hZTlo5fF?= =?utf-8?q?zsFN5CsjWZlWSVTFscDq6rEB2H7Xqlm+ZpaUUc8+yvAkyuyCWVbriL0+HMgqza/k7?= =?utf-8?q?OKLmva2gI2aRIvZiKb229VDMI3xPJ/1TZWcA4HL50zgcPPfzFz9xNjpHQz8okAhHD?= =?utf-8?q?FXRH8ogJCimK6gB71yJws9LVsZKPlw52iQkpPC5CInKt66Kb7vCIICpc5vm1vlQo7?= =?utf-8?q?HY+uTbKB6VjtI0ZuAZ+gJK+DyFfJ54xs03EJpretqnrjLK0gP3picAh+g2WuQrsYE?= =?utf-8?q?e1UFeIlmFrPiBEXPW3FXSF6IgYlLZ+7/4v5Q2n2VhL4w1PB/r0AlfSBNY1o/KZnGH?= =?utf-8?q?+4OEryJxk85QP0K+Uwle4uan9GWyiZij3TECyWbecIAAnuFrE2zt0WXI7GEtffWEt?= =?utf-8?q?PvyGAnr5J025ouRkag/yIwgJ+7aU4KlarF+mfO5uwmIBhYNDYQG+TDL/XLr4h3V2l?= =?utf-8?q?+sbYyTRE6MH7Pk2auHXxDTLCCl+YEriIpVsJ8Zz9Yq8+DvAAjx/wldnps42ujutzk?= =?utf-8?q?S38JUJd7zkOhvIL4+JPZLu7dbrVq+C3j9Qh4G5o0l2pp/zBe8HrkY4MHCSvKeJxpN?= =?utf-8?q?4dy0ZVgexo92e4sqZZpJl3T9lyIfaVpxCvnV7+bfTEpgoeMff0ugUTcakz1yBD87L?= =?utf-8?q?PqaugWMTK7pPszQnbRJ/6QSRjYpeQelaoB72GD9BOQ+Lvdw7v4q8siETKJpo6+TtF?= =?utf-8?q?hB90i2AIEXZCx+93EeQ+fFm8Sghp8zh/AIKOH2bGegh5BJLeYz8w1TrfH02m2wZCW?= =?utf-8?q?kiC8riaw9l2nv4h4CuYIG/UrXE3ee6sAtQ=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: a6462b71-3b51-49be-ad8b-08dab406efdc X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Oct 2022 08:25:11.6335 (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: 1VdERNAoG7y88oC+DJSFGduxrs/2z+PI0JSh7yEcXnqURyfeFDceBmIjvJ+RRhnqd4VFgk6YfCCOnlSyVzquYNRFI06U1wT+FmpJdh+aPms= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR13MB3690 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 --- drivers/net/nfp/nfp_flow.c | 49 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index faa313e..ef19231 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 { @@ -2673,6 +2677,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, @@ -2706,6 +2751,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 Sat Oct 22 08:24: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: 118960 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 780D4A0032; Sat, 22 Oct 2022 10:26:30 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id AEBD742B95; Sat, 22 Oct 2022 10:25:21 +0200 (CEST) Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2102.outbound.protection.outlook.com [40.107.244.102]) by mails.dpdk.org (Postfix) with ESMTP id 955654114B for ; Sat, 22 Oct 2022 10:25:15 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=eHgOBHlEHSbadG1EOeNuF3vYQwIGJYtGYWOLzeV4POxNhoUBPDJ1iWt8+lVfYVDAGkUCVJW7u7TziEkUoYtsR3Y23Kz72UXxB/IQh54QgZUXmu4AIzoWxvTcdcctYM8A1RTWGF7FQMyGol1JbRUsFW2URRIBg40bD+Nl5EtWs7JhudxoSxblACJ/Dod11++Gxt2UmgJvBfyuYX+7J4ax5gnsJBp27rcVm71S1NWVsWKOojhcRuWpRhXSuVadKsJLtCepdyfHycFFDocuMlXSTnNORHZKdik3W3mgtHDDeZXCSGJ/kOM+7UPNnhuX8FAvFABS+NvveKYePmSNsyU7ZQ== 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=apHINvhEFdlWYqxiH5+vjIx7Ith5rok4er2UwCTQoPo=; b=ZPmYEGulzIPa+ZbJ+CHzz5E156iklGcPWfcIIz9wuK6bM4e+kUykyac0OBwgJ8olcoIj8OPNSrwFrGQpwXREuuXHJ2nF/F00WW1rIUN7ciWm7UPPBo6I0HA2GhGrqjqle+8k1XMBO1v8fWKdrZq/hNVHvgCGoPbZXfqQvGf9hWb2HUv5S9ZXoo1mGRGsoQCr9axKdGzu9E3g6m/x+iMkJdC/fVRmjBSm3gRcljagIbkrYpd6BZ6F+mCZpa+4zlYmarpzL2eHkBJ/tzJ4RjIxZi6Hw7zxnBlYuj2b8mnWBuNTrdZgLRghxC2HlrOsNu7J7IidBj0jfz5ZX0fSiHslgw== 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=apHINvhEFdlWYqxiH5+vjIx7Ith5rok4er2UwCTQoPo=; b=AkYe0wU9O49VjtyC70aAQL2IY7XyNnhxGhwQMzG5/VwIR0inmeksfqJmarT2nYDzELJGRgUbf03C8e5HLf+xZR8RnxSVs3bf2qmzjgKiwYcpsZ/raw+7gixY58ewwQqN6446RijrI5mKzu0Jtc6xDpDp4EI2hEpwHuC1f+9c3sw= 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 DM6PR13MB3690.namprd13.prod.outlook.com (2603:10b6:5:24e::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.20; Sat, 22 Oct 2022 08:25:14 +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; Sat, 22 Oct 2022 08:25:13 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v2 13/25] net/nfp: support IPv4 GENEVE flow item Date: Sat, 22 Oct 2022 16:24:17 +0800 Message-Id: <1666427069-10553-14-git-send-email-chaoyong.he@corigine.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> References: <1666063359-34283-1-git-send-email-chaoyong.he@corigine.com> <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR02CA0056.apcprd02.prod.outlook.com (2603:1096:4:54::20) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|DM6PR13MB3690:EE_ X-MS-Office365-Filtering-Correlation-Id: e13d9566-32a9-4c78-caf0-08dab406f12c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 6605vzkRwgHC7BPPfW5xzrVFFEb13euRBQrXGfBNniURM37oU25HQwCrdiqWbF/hUqRmyEY/jhSAncKDNzvhxVc0q4jaRGBDa2uSs6vTWu/9Y9L1wuRCfrHyBBHDuTI6vyQK1R/4Rd8vnljh5OuQmpqQZCI9MwxJ8DhIKdQReje7h6wxeYLAuFGtpoknCPnkVGrN8hYewEdGvGns/cfSIn19MJ0pgbQLN0Yl95AUSuCNG6YmQEOX7Jeh47AjGtSLin83NVWrZe9cJzfdQmWYurwCCBUNN1srA8s8JGVxIPrWogj3aKrRcJx0BFWOnMwyKZnc30In1eUE47sqzCZ1BlC7go34xQuqjrguDqDqjLWGgaMkt3k9G9hYxW0weFo2TdVzSsbDkKL0smUXHbQyGEGJmu2/9uUhi8sjrq67L797Xo57Kp5XLvMe4rzvw2v4Y1Qe+5SLb0ySHozduIYS++oU+aTeO87QYhjVcp9jL5SHiIl/NWNTCjr1YI/XN4BDFbCYTcIPGbrXlYU9NOl1EXTcOgN0hRayBE942LxdAmXME3ZaUlWln8O2CMQQSYLRKT5n+BNnPSXeyukS0TMN63IlSsLKhGAp1c0ZFI4wFjnYxPHrmFQ6h289Dk+xZp7AvoPeUMHZ/EQ4CLlEYVHUOjvormjBT8fUnzUV4HCp4IW7fPxrjFLkfk63k1/qdqodBuLJOkwhe9R01AVDEWUYUlg3iVPqs2ZKCeQzW4V6yx4yVT0hDjz/FaZHu2ucvTTFXgS5MCM2hM8BsQuPnbNh8Q== 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)(376002)(396003)(366004)(346002)(136003)(39830400003)(451199015)(6916009)(316002)(6506007)(66946007)(4326008)(52116002)(6486002)(8676002)(66556008)(66476007)(107886003)(478600001)(6512007)(2616005)(44832011)(41300700001)(2906002)(8936002)(186003)(26005)(5660300002)(83380400001)(36756003)(38350700002)(86362001)(38100700002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?FqYTgbY0OFVORzaaSYHO0EbBrROn?= =?utf-8?q?7ZnkwjKiyOVHbtKLh4qE0IRNOidQ3c1l2wj46BEujzHwc1fFjQGgt9h1F0rslFasK?= =?utf-8?q?jlM3shn3gORD0rT44DtubbKPlueiZ+dTJ1BPL8do4U8zy8qgcSg6bnGYrSxOLPhW4?= =?utf-8?q?qnPWtcnsZVflOr6/daAGeM+hQEqio6ZfhdTzb52iZff6MSQpjnoxValbHvWXBRjOk?= =?utf-8?q?rbdkQyhpy8+1g5GwRzKSnrbvSO7GpkrzOWsZMnELBLvrQMOeOJkKwXVW+isNnX0SD?= =?utf-8?q?3RzF8wn1ydRusvFI0SvCcy3cEtSx1zG9vy/c8GN7IV90HJrMrSSTyak5xHWH8usou?= =?utf-8?q?ZBF4ezhRbuZkMjT8ZvH6c7j3ZQoIQPG2zOIUlGRCHAWcAwNulMY0DpyWHx5ZDk4K/?= =?utf-8?q?91jEIDsEMY0KEajQirnIDbRTHclkd2koWZbfpxOPw1NYXq0OP8eNACvBrfXsLbBmU?= =?utf-8?q?s51SpWpjtnHt/9QGDxSb6EQxiBOn5/G0r2e/SbOk64rv510fpGAOquv2ur8SHK5kq?= =?utf-8?q?0cqOQyfL2l58FxZQQi9Dhbs8nvU/qWX0OotltemM6VDoE/DhQy9VGxw7rl2fEfX6N?= =?utf-8?q?kOodzLbD1PHaE5cNumNnW2jwqhWJ4Jx9JMSghnbke4DUno9h79tvRTmda9EQHX1tf?= =?utf-8?q?NagtqVkcXs85/XRAdcHynKFxgLNs0TDH/pVfZqvjXDODnXOBcCdjfUwAcAD+5WOv/?= =?utf-8?q?Y2OVxXqlZH2223ZbqoGgbaIPGMvVQEEUJQcZVTY490w+CXOxrmCLE6VguMv3oj7BC?= =?utf-8?q?oHZuuxpI0vRi5BfnaG6+oCRzreMnuqr3g6Xz2/VWRXtvxOazfh3hTKcUc8JcIDTPv?= =?utf-8?q?4z4Hic72cF41F42UIe1onllkc5qaR77eD8sg0CZCaSeBnlg3lSvihLXSdfIM2iR/E?= =?utf-8?q?smaW3/qqrieIA4ZSVN26zQBRXk3AzzMVP//drnd59CT55/8onh/uryaklD5p4I5QK?= =?utf-8?q?n4lmnt8OJs1yArlmsP8sXzoouGIa1BYs2uYmYZnqvuTxyS6H6Lz+1aRjJpC6uA5Az?= =?utf-8?q?V5dks8bZqUBV+PXq5lLgTlKL9/1Wwc696OvOo3rJSb4nJq3tCfJh9p9Xgok1XYiKj?= =?utf-8?q?EWGkEAebYdJkN+BzTTbb05QSjP9jcVETbuWyeEqYsBZKbq69ysc7P0ixvafYhIwHw?= =?utf-8?q?UmCx3lG6dyt+mywbUIYY0GbBCWxqg8kxxbr7O6Rfm7kDzbuMPmV+vvfampahXPVqu?= =?utf-8?q?3VxzdmtTswvfUG98U4QIGSkt0pXbYOQWFFxTYW5xSrktdQS+kQnDRG0X2NbT4C+AO?= =?utf-8?q?aQammZhsLP/NPaHdZfJUIEJ1tGrMyN9bSZ2g36lDomQlOb3kxs0FyNnC9jykLqLes?= =?utf-8?q?73gFxxGRVZO9u7PWSJ/ge5AN99vSm95KbBCn93tVguK3Hd30YSYIHLM0x0e0XnHgK?= =?utf-8?q?WFbegkBlMJyE+bhiXIDnfDGNqj7ltDHDQsbwWretc7bhTBRY6K3Q6QPbX8VDf8+nh?= =?utf-8?q?/Zl6bC3w/40Hg6LI4O+kCQib57E2nNspAULZB8E/cBg1LRuXJpAM6tR104vlEf62d?= =?utf-8?q?ATzbUEmkbZSc5AWF28A5yvoexJKNKftdyg=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: e13d9566-32a9-4c78-caf0-08dab406f12c X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Oct 2022 08:25:13.8362 (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: p0Q87HxUBvLzwQliSFprE42FaOoqcB1uT84bcv6v0JeXoMEgOkmldI6vckOn77FjkaTM3/5/SvjNeUZH20mmEZyY0f06b37FWXh7fWGuFLU= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR13MB3690 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 95c97c2..14fb6e0 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 port_id = Y diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index ef19231..a6adfa5 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -769,6 +769,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; @@ -960,12 +977,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; } @@ -1386,6 +1413,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] = { @@ -1474,7 +1534,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), @@ -1507,6 +1568,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 @@ -1563,7 +1633,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 Sat Oct 22 08:24: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: 118961 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 AAF1EA0032; Sat, 22 Oct 2022 10:26:35 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 955B242B9C; Sat, 22 Oct 2022 10:25:22 +0200 (CEST) Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2106.outbound.protection.outlook.com [40.107.244.106]) by mails.dpdk.org (Postfix) with ESMTP id 99C984069B for ; Sat, 22 Oct 2022 10:25:17 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=gCwLa8v/tyAFPjXGsgeUf6l9imljzOiop+HEBhXto+nl7zJUgfHv5Y1z0r+8EBHPKruV5PWmstp9on+U6tBqwEnLMNS3qbMhd12SA5rrfod5h8HEKqRWXKRJmZoMXmQioF2roAMJq4SeESsZE8z1qUpld68pgBgI3CUTDNB0CRacvG+OE6wRqrooCCYSeyc+HlhfgSQgRUAmlcxHfVusAcHOYYCcza3Mq70d5GPHxpZknPSqRrQiGdHERtqXU/Hwl17kCea83U8QzHx2v1Sgc1BVmyGj1hmwyfydBW+bSQ2Kpqe2LlPaKMS0pjNYbJLq6319B4oBsTOoIujzoofHrA== 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=8FinYrn6eb3a8qt++UdJskydxg5uQHlCoIOS9hlhclM=; b=PkSLPBLD7u8g+I4+NZ9dgkSCb5ZGc/NMJPXLyeSmm3ZgaO0cnhndKC+erdqul7yLyTcElPkHN1AetdRUCYU184+qeVoTV7iutvj4nI5n2HwuiYsDunb7hnxwKy69U+HAAzhjwIV0asHOWQ3xuzQVh7913mZwor1EWB/UG/HaWlK/58qvDDQim7zpJ7phrgqdwJ+AhZhcl2tTUivHGqJaGFLBgbLHTV1oUDDIeFMraeSrZjLEhFgf+8HF9g1j/oy2iu5toNjS42pN7yl1OIddf05YqAN4yAo7ayA6+Tf3qXaqxWsrNIUsQ8ixVA2n51M/y1iJubcuHkfhCtWemQ8nqA== 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=8FinYrn6eb3a8qt++UdJskydxg5uQHlCoIOS9hlhclM=; b=PylrXydgjn5/yEaJleqv8qnZrto5qd/+TCZQlZUx2MqKlXtjG03oyo+9OO5OD/XU5AtzgwpV7LmHvdEKEgSy1fgvhU55hzxxpsupi9ud+kSP7UePMgo3c3enNAqaQRVRrgQtv70SgzhSawdWkPp8EC61qcKSeVks+et+M6YLKGQ= 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 DM6PR13MB3690.namprd13.prod.outlook.com (2603:10b6:5:24e::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.20; Sat, 22 Oct 2022 08:25: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; Sat, 22 Oct 2022 08:25:16 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v2 14/25] net/nfp: support IPv6 GENEVE flow item Date: Sat, 22 Oct 2022 16:24:18 +0800 Message-Id: <1666427069-10553-15-git-send-email-chaoyong.he@corigine.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> References: <1666063359-34283-1-git-send-email-chaoyong.he@corigine.com> <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR02CA0056.apcprd02.prod.outlook.com (2603:1096:4:54::20) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|DM6PR13MB3690:EE_ X-MS-Office365-Filtering-Correlation-Id: d500291a-53b6-47b7-52b2-08dab406f278 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: tWlMkZIQWhoVJFfZ6MuVAUmChG2Y/JG4dquyOa+QLJqzYoSo2oJDKG7jlkpJXtoojSADHkqRWL9nvT3d0GsmuTi4FwXEoIxvRV6lAU1JpMRrr3qiFaXkRW6hdT1qWSVPql4xmcR71jiF54Y2MfF+a5ILO8Pj98PsTm0qBRm4y8MzCTOD+RIVKf5rxxrHr4TrWSbCQrIgFUXhBnIbc514m6X8zdIVrk918VulZOzht5u1ctVYJktN4TrDpHbmTCnnFBGHEwT4UQ1FCTWSiO8yhvs/3pW5MqGwArj+OctfLvzLySlJ6fv6P/OljO9x/lHh/RXCrotfG7jaVgi+j0NUvgTqb0qoY3dnZQJI0GRZv/qok9L+Q5ltRTH7zSkT5dpjxmTN6z7aaGNQAEZ7hUZx/VHXvgz18j65VpehvA0tYIJaERuU2G4QPb55ogT8GecPdAwCztk7mocZ6N4GL0NBUFOrCexL5TH8uXl9no9zVQHv2N1ONZCt+UgarY/1XmnY31IQftyFse08uXItOqBfRctb+WwMp0K/sSJzy6AQX2Y83/BqUh2Txk7NEb2CsSKn19jb3GTFXRLnwe95flL0SnJ/EfnwFD2KbZw6GTp+B7qupGPdFV56y2hhMO3NIulXHgCSS3c6oYdqaBO3T7V/4WH3thMS5PbJRr/ec4NMvnGVhGD9uBOcaZLLbbknEafprbiUPQDovNCB4AzkgugzlLrlXNz5PauDyouf4JtFRa+fXK85TmbvvbcEEt5WDCr0rGOTnlgwOr8OBygVRO2qBw== 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)(376002)(396003)(366004)(346002)(136003)(39830400003)(451199015)(6916009)(316002)(6506007)(66946007)(4326008)(52116002)(6486002)(8676002)(66556008)(66476007)(107886003)(478600001)(6512007)(2616005)(44832011)(41300700001)(2906002)(8936002)(186003)(26005)(5660300002)(83380400001)(36756003)(38350700002)(86362001)(38100700002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?ye7sIYwxkNVPY5nb21+Ba83HPM0N?= =?utf-8?q?Hz5hDs+eH6AYYET7MhcU6Hscw/fTuKIzkprYb+QlE+i6C2nPvYX9c/F6Ym2veHiiz?= =?utf-8?q?r6buV4dPyCJdvNz7f1emnEw2iyQxp1DQCAzUCrjLwrWa+CPGuMd5/mKEz5Mr812TJ?= =?utf-8?q?ACu+iUN8/Rubm4RSvUex7JrTOPsLHplWOMEmGBYOLL2cFsDJPzFuIa9eBCsh/Uj7x?= =?utf-8?q?URfNtEnXgWzszEhS4x00f7payoj5W05/vIYvSsZxHSHRnDkLUWkaDjd4siKClvq+n?= =?utf-8?q?M/SNiA0Ybkv3JTg8C5ga9yQ2AG8PVxCKUtpst0aEIqvHf5O7/WAUp2+ACjkxPED7U?= =?utf-8?q?Eb7oqztjrx+KtbcrbVUUuH/U8FKDr5RpBZHUoZspK7LKLjhrUy4RuZjBUfCK0B6Fb?= =?utf-8?q?yc2hOEtK804taHOHeqvjNw82mNwP9tHu5BaWncmLhpuWO7iLtfX7BXkTr4bfMRwW/?= =?utf-8?q?uis+DeuwtAFO7u0ay+/daqO+snom78bXeEZWCx7g4iLJ4cwy5gh/2roWvZDDT9YNI?= =?utf-8?q?frOaZdyuz6sGus5LwNLnc/IIoaFzdytVyJ7GKqMI9JlmbgY5Z6imDze32hRdf2OoW?= =?utf-8?q?nsFUtkv9jVMMKpBGsqT31BoybS10ZzuPgWT7GdkBU4wYNn0EVvLwOu3pdkAa0yyCW?= =?utf-8?q?2MDJ4s18OlHausP3MDdiQ48yLSdniUhiYA6HvxFVuKVzTR9mu8JT/m6xlS/lKdXOR?= =?utf-8?q?Tx0jLrO6uqm3TUBi2XKGLcOcqh2jJ6yHpGRzKkzDJr1faUxRVMXDtLxwh5J5sIVgJ?= =?utf-8?q?EEiiKK7YUNOkHLoX+YfcgAJAR5y+efAeV6iB0BugKQkMGShKjMbQKOIi7xjVVUts9?= =?utf-8?q?84g3MQenpH0qYooKINL+6H8p6RSf/rDgaipYHDffoqwoZ3Q2QF8pCMueuVOdAGDTF?= =?utf-8?q?dMGCAiWrjkHy8F/tWBGrtsyFeAUmpED5Fz+Ic57dr0TitgagJ/4Ko+jGitMmiLgti?= =?utf-8?q?QHU3HgEWso4rL5Uxm2aB+HfpMyEiCPgRBROHv32Xbfd4jtO3FN4eR7r+zlvoAIFtL?= =?utf-8?q?fNHAlyyT0lnVooCJnKFOB94+fPKZrOaWbVS57GLyClYNbOgVNtEZ/wcusebTKiCTU?= =?utf-8?q?+lkHLefl0tQrQx4aGGZ0kgc7FFuun8aTkNdMqQFH31iLkCUcMGA8RJINJNfT36f1C?= =?utf-8?q?4P3jnZbcoheg5N3ZM520AiW1tq21AyUvWRbEsbMX2wmfXdoPeiuvAkX7jf0kkSzDE?= =?utf-8?q?wmuVc7Nh/0bX0S0ACA1fIzDvahawLQ2I9m3ZbKqwio3WzY2qGTPMWTiJq48xbj7eR?= =?utf-8?q?eEZrzJPHZth/WiWWJlBya0nF5vA2/+M+g+Zah8KcYEpZ95fcK9zi4ANC0snuzYkqE?= =?utf-8?q?9fHr0DEc7FXuaBXzIXEDVe91e9tTLXGkgsjtNWV4gzd5jDVNOLbpn6omT9bDUgrL8?= =?utf-8?q?v9gQroNzXEsBJBmmfy1Evm79m8IR9Uh81ue6xwrWzPmV1XjR401h3fyUfCuaUN1fe?= =?utf-8?q?TP5ivKS474Gy0vIfZYeysUO3O5bRUz1ZG6n3WHUoUG3USpz3DvICJbOcw8IvnKPWa?= =?utf-8?q?6JOAQkxqlDmIjsBRpjp31Hl5HIx/qzvAkQ=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: d500291a-53b6-47b7-52b2-08dab406f278 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Oct 2022 08:25:16.0259 (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: AQk1lT0LogH7aQjOzU2s9Ms5AkVFrljwMpVrDRNKYWZeTTRi/Al9GP5HfytHH6mFfQxCRcS3kX6Y117JpfVDb90F1WKP92UDvmAiQAJtX2Q= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR13MB3690 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 a6adfa5..48a47a6 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -771,8 +771,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; @@ -784,6 +785,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: @@ -1415,7 +1427,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, @@ -1423,9 +1435,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) { @@ -1436,12 +1455,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 Sat Oct 22 08:24: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: 118962 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 1A7A9A0032; Sat, 22 Oct 2022 10:26:42 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id CCF0C4282F; Sat, 22 Oct 2022 10:25:28 +0200 (CEST) Received: from NAM04-MW2-obe.outbound.protection.outlook.com (mail-mw2nam04on2126.outbound.protection.outlook.com [40.107.101.126]) by mails.dpdk.org (Postfix) with ESMTP id B42B84069B for ; Sat, 22 Oct 2022 10:25:19 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=QQITGxLUB2ZuvZVXqff1B/XONbmAx2YYWIRks8bCFJorCfb1QpeMTJYSdGwUnmL361RL4z1I43uD4F3G2ixq+TVO96ICdJKqlRPEI1SlYyPYpHBJ3WpefChEXI+ImOBlHm8c0+ZngRhuif4FIeRKI1RIKqFsZ/41g6UxKcMjDHzUCcvoEwcxL3t99lA8iNwFKsAouuxlaF2z62WkrdhyC2B4M+MyGVlOTgakokGCWaOA/z2fyKEuv3P+NdY1XxijXxcRlNijrVlGPdO8AW6zEVsxakhQ5Ji55TtWr50YcGZ6SP3yexYJUFJF97/nwF9fFUgN/hNS8UStiBXHYdGq2A== 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=+FzZbW8ip5OIs0Eb4IxC3m0SDFoC8SMssC4S5BQ0dto=; b=a0KBQaT2/bBCHm0TsoYmbV3sG0x9Qwi8W730TlNs2gSo1wJxS878gVN3fO5747BooChONC9CR3AblKDlM23rYiG+6l12fdX8N+yooqlukCS96v6TJazFVuDTmAxlA3UrzKAjCU9UQnJ4ECEYH4y1ClzEqN7Ela4xJyffhOF4K/QOcQx7tzKMQ00DKy0F6j6rO/0xCsvzw766aPaSH2KYLjuHzJotwKnFqRW03/YudTCpwVLndO+swwdLwav6/dfjIWFR1NCngRpXLHu5p/muem4rSRPtcb+FYv1lq9fylbK9cOtkWjTuTPBu9tvwTdhPPLzvX6gqW9UkaOkyR5jGvQ== 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=+FzZbW8ip5OIs0Eb4IxC3m0SDFoC8SMssC4S5BQ0dto=; b=QYK/8/CBQAlXjpcqItceMdzejiUPzZ3nPsPljE8Or9na4KxFSPuuBmyx09rSAccAaj6oZ3Pdlwb0UBOpg1KGMzja631DNdhgcpcBs1n9Cc2wFcxj1/1UMTGvIHzYhfJweVQ78DA5+v6AB5zwd8jUUQbWky3hVtATaghohblA7cQ= 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 PH7PR13MB5454.namprd13.prod.outlook.com (2603:10b6:510:130::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5746.8; Sat, 22 Oct 2022 08:25: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; Sat, 22 Oct 2022 08:25:18 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v2 15/25] net/nfp: support IPv4 GENEVE decap flow action Date: Sat, 22 Oct 2022 16:24:19 +0800 Message-Id: <1666427069-10553-16-git-send-email-chaoyong.he@corigine.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> References: <1666063359-34283-1-git-send-email-chaoyong.he@corigine.com> <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR02CA0056.apcprd02.prod.outlook.com (2603:1096:4:54::20) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|PH7PR13MB5454:EE_ X-MS-Office365-Filtering-Correlation-Id: 0558bb32-1496-4f7a-0533-08dab406f3cd X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 2Jmzb7vINQr7FV9/ZDbnoilcWjQJw9myf0bw9msFHB8LXvivFHk9+8RhBlUSF4VsWnANfaAgD9NnRGEV/LOCrdOyOSb4cidabGVzajRJfyLB8nUb1ju41pMX8lGTv6xUaqHymn7XAA7SflCVZRLSK5NeONC8ydLHo+0Uu+IeQythE0uE227F/zf8Ucq0xP9mBKcz8QMquYFI7LjfxlTZNep3TRDuV0FNmkErn7KhBcUNuie3kya00k0eXKX+fGZTiiy7N0v/djTQSWMnATv10Btw+61K8APS4J8RNUbD3QnFO/6JY8m59CwCEOVum0A0GDmPRivrLqo99tgM3xRC1XAGRiXkPP4pQF0aGkFSuL6CinQ04vLJnykTnL/ysoojLGXDK9UEp5I2VP8R86rqTZasA+GumItYJcG/nc15kyHpvBmGlnXQW671b0HN6ExzRVds8A0TrJa+c0Mz/HVPBMzyxLfa/7eYcHESWSE50Ak0h++5ao+9/qU2hsEwwELMVt7CXbjhhxQewl8wPxYh1f9Qce4bNIXzhFC43zlHOC6x3AxwpLatsKcgZNjidWzw7JQAPDc0J7ySC/zUcerwPTCCSOG42yHiLjxdlHxgRajVa2rZFJCoOj9T5tC5BDQvM7eD+XpaBVasIZptvSp8OyOZfygz8y3ql1MPgz3DnMhZzTwi+qjtoSMFwzLPugoQ6IoAl3w48lF9swf22tHEBOh0rpv91x5gcrTDAj3OHSQBZtWti8scYZliaMCOwKvh1J6X14mctUkHcG2Jf/7xHStcE77X3i1QSjuOT13errzZYKoWFafIfL9GnA2DJCwA 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)(346002)(366004)(396003)(376002)(39840400004)(136003)(451199015)(186003)(6916009)(316002)(83380400001)(2616005)(38350700002)(86362001)(44832011)(38100700002)(66556008)(5660300002)(41300700001)(107886003)(478600001)(6506007)(6486002)(8676002)(26005)(6512007)(8936002)(4326008)(2906002)(52116002)(66946007)(66476007)(36756003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?l9qwXedcDAWLFH4dNY7ZsOVynKub?= =?utf-8?q?NX9tM9foXYo3HRpNengQfxFKqy/O/0pqcEiYDuht+rMky6/gPEqqhJWMs0jDSQ9VJ?= =?utf-8?q?JW3k4JWpJMiJGZFDdhnYEG0DEO6q+mFqOPC8eeFWIRsQtFDxwFxe/cGw217gzj0M3?= =?utf-8?q?uCY/4gbTdelE90Z4srsULnGVmg+D0Vx/tSg3MoxZ7+ZhleDPOWtodD1Y4K5+7BmKw?= =?utf-8?q?uC1UeW1R3N/0IlXNKZnVEYRhJLd6EApm4Y5PH+Gf+9/f/rAaPDQFlbGkU+t+IKDpy?= =?utf-8?q?dqC4BY3l+eq+WVnqvtInqsEHYMVcBw/MhOgwULXDHj2oR5N9fOHB34x2RVa2EWiyZ?= =?utf-8?q?Z8koPUrzfpB5X1BvrCwXHOCVTLS6yqE0Dlc/VvoD6SoRd2e7vSBID86o7M9O4Ac1M?= =?utf-8?q?FESIhudU2OCn07x0p+pcwsFnuVVbtWTPvzL3UdP2i2tbsS6+mxyYaVf1TkGOOKK6A?= =?utf-8?q?xHDXei9WAEmkdujcPFWzBNSl/ynrhbMoPzcSme2SwLzKdfzyO3KchmivD3Aj9vwgH?= =?utf-8?q?PvcaaL+cbfEkJbLFg7vwyggBSxvvxdgSdfXNc4Lr7ZD9bIYztdHO0BaByy29aQwj5?= =?utf-8?q?jM9ehk0+4t6g+hPaI/cDfGsuHPFkUk/5p8UW0dS4v9wWE6TqI/wgAOl3puz6h7eaV?= =?utf-8?q?WAEZPoNk72Cf0la6fyeD7/DyZtoxmZap0+SxjgIFd+TrHahv91Kbdl0PrOEDS7fQy?= =?utf-8?q?KXmCM4ALqdUYj8HWGYBS6jsPtCKgI7qE+CqvHCspY1ybayHoga6HI5UCCDCAGz2XZ?= =?utf-8?q?mGfUTbfhy72UiCmKknAWcf3IacsN+fbYA5Y+6HsUWCLjJS5s3vC8/AhvsfNFZJD8g?= =?utf-8?q?aIqG2WyhbpxTb6x1VcT5rNEh7PRP666AToUDr2YU0xGX/A6jGlbJ24tJHlBq+cpcJ?= =?utf-8?q?Ad/0RNWHeyUYlmmEeyepxTcd/rfuVHsUTdOa+8y96Wm8Y6YSO4bVWifddNSF9c27U?= =?utf-8?q?+gxouOxJbmIQJIJ4kqqD5FwS3atqoLx+LNa8vdhThW03W7lvrpQOuc39GrJ2d6WTG?= =?utf-8?q?vlRIQ9HD8+Ye3sijLDfeXyaKV26vCGInCe5St3xQSVRIT7GmqsuHufhOqNNiId1ZW?= =?utf-8?q?GWgNzS7ivA1aKKkLftz2Hn4jUMcvnThKIjJ+8cs+0JC1fTLkJ7pYaryV4ktrvz2q5?= =?utf-8?q?GPdPTIPS3hhuSniDp+ofD2XhOAmSmQ0EsFRyHOkOdc2U+Mpr7PUgOK8cP8z0kaIpm?= =?utf-8?q?qwP+rMxtycLmWuFXZcfAVAA218PXcP7nKj+1C9QI/cqqDO7UxZeO19SwsWJDhz+dN?= =?utf-8?q?bDkkvP7BJQpMTyCZ0+wIV9xuSkCuwc1SQSPjkZEoj/Lj/F8vXODM8xgMOKE/0ga33?= =?utf-8?q?n+ERJlrCjy2ssDfe4n1GZ6Oz0R7FGX9qalF3FsszCVMHozB5LtdvYfTDfZggzwUK4?= =?utf-8?q?ADwInu8fV+AM0iu+MGJbBN7s1lwznAn8kIcY3fDd21AUr258CrqCpSkMxjqo4p/km?= =?utf-8?q?/uphE/PWZCY9khuX0ePmk3YHBud3PR3gX124t6P7io0GtgwdwQNupCJ5wE7V6u7y0?= =?utf-8?q?E4PAP4vjrGETP27BwJG3CdzklexSeahtpg=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0558bb32-1496-4f7a-0533-08dab406f3cd X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Oct 2022 08:25:18.1978 (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: O/sliOg9zCxFAs2ruVvJaTwEeHWzDzZfaLXKfn907xRvzHufqEPwg3+CwlBtFLgxcp4Ur6+z+twdI02YmK2fw+N7jzFj6m8WghGEhTuX668= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR13MB5454 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 14fb6e0..c017be1 100644 --- a/doc/guides/nics/features/nfp.ini +++ b/doc/guides/nics/features/nfp.ini @@ -45,6 +45,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 48a47a6..223f2e7 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -955,6 +955,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; @@ -1426,7 +1429,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, @@ -1434,6 +1437,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; @@ -1464,6 +1468,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: @@ -1474,7 +1480,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 */ @@ -3056,6 +3062,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); @@ -3546,6 +3553,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 Sat Oct 22 08:24: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: 118963 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 C027BA0032; Sat, 22 Oct 2022 10:26:46 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id C55AB42BAD; Sat, 22 Oct 2022 10:25:29 +0200 (CEST) Received: from NAM10-DM6-obe.outbound.protection.outlook.com (mail-dm6nam10on2115.outbound.protection.outlook.com [40.107.93.115]) by mails.dpdk.org (Postfix) with ESMTP id 21C9042686 for ; Sat, 22 Oct 2022 10:25:24 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=huPKTe+l1S36WdeBlrWsPjnT2QLhY9VEJTMwdLe2A+yWFpaFVrGqn1yyMPUtE+xisQhfkP7GzjTwseo9hNaz5KU7tu8m042c4/0xYer84i4JhNcpQB99rTWXn8OdYy6qi5f1GkbGcfrbStSrqiMBm82ME/56bIhgQTwfSuDK4JLAO5wxwHqLaBAwuXVsXbB05yXLp7ZstpOqXF0ZqyVHu8Bao4ZhP5UQRkHHwpTUK0/1AScG3vhNdUwJQeynnLqxSWlTkQ3pYocIZCNkmwdrtyedwjSwCxyZLUVg3gtR0aj8O2o4WCjDwbsRWjo54/UZmppa3q0DiZ+r1zqnsGSfCA== 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=T8ub/62Q1PMPL3uzSHMgtYp1lOxWHAwrlu7wRGaaEVg=; b=Rt9RH8RIUwwUh7/wtVE5CmFrMOiQM7U2yM8LmcnUZWn9kRNv3OnQ9Aqtp+IxQKGizvAJH0JiVPDpEgJXRjzTSnkETNtdxBpY/X5QTP8BFEs1kNKqQ1wNDFTiPwAJNqA38JJLIzd6KjO98aZxayMB8s7aOaxMyImFNjS4BRfDSxbkS7XwX5gDCXmL0Qr3Duym0WpqWVb4bllxna7etqaaB+IXRTTp2kdcvIPgDmSG2xYUkRZkC9ttgrFuJ+IwfzvBnLE25DDV/Oa2VMGJMHth12EVHDaBp8k/zcJHk5mAzyWJJ787yvNJQAOXeiXEaRW0dgysHqfrelO5oWpXJI75Bg== 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=T8ub/62Q1PMPL3uzSHMgtYp1lOxWHAwrlu7wRGaaEVg=; b=WCL659ieKWvngDw89GytgKRoyOW5cprjeEA7QYX/c2g009RooKf3N18nwJu6gE6T1p+ga9qgr7Yd1XIKTYda7/3jzzvE3EZo8r5JjpJM9/oxUU7/awQ6+l6jTozrPOJJdkp8j/6pXDJ+qJDhDfUBRoo08pZYQEpsJpElG5BVGA8= 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 PH7PR13MB5454.namprd13.prod.outlook.com (2603:10b6:510:130::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5746.8; Sat, 22 Oct 2022 08:25: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; Sat, 22 Oct 2022 08:25:20 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v2 16/25] net/nfp: support IPv6 GENEVE decap flow action Date: Sat, 22 Oct 2022 16:24:20 +0800 Message-Id: <1666427069-10553-17-git-send-email-chaoyong.he@corigine.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> References: <1666063359-34283-1-git-send-email-chaoyong.he@corigine.com> <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR02CA0056.apcprd02.prod.outlook.com (2603:1096:4:54::20) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|PH7PR13MB5454:EE_ X-MS-Office365-Filtering-Correlation-Id: c12ac3b3-70b0-4b20-4299-08dab406f514 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: rXGH72BNCqfje/p3Ge7FsQ4LFqXXOZGE4XdmSm5Ic3xaCvPp9STd/fhfkJouABQsn/BEQhWKzrhBQJ1aA/3aK+srfsbQ9jqqW7j0/AMYfD/Lndo7RjJvWi2cQ9URgcGOaN5/RPNocaTXQkU2N4bzsi9LNSGAUDxYIWSNixtWDSdPaESyuLpMZnuporoQbZZeSLPJbUF5eMir1iIbEWLoNoKrx0/SdHKXZQ7RbgC9ImWBzYpq4OuSufz7CnEVEsABjCUIXiGhyvh/IW7MlKdjuTfFdW6iKSx2EYO64fNRs9WBWgz1pmjzvMR/1AztuWJPdmyt0YFUgn5y0KBdh91viH63JpVLSsnP59klzVs0jNyNVd89No5TdESFRbKJC+f1aZoAELk3Gcc+CJgGlITwbSiOK7PkyRSoBSfTyKljThq1RCTBZnUvyV2C5IGIwenRqs07+Dn2GGhE2hCOBeBUHRgwF7FSyF2CirBX0BiIMVKb1IS3F0C4gP5EMAPS6VrfHr7yv27rw4bJ02GBPCN6y4cguevDnuAdia3pS7rLAyNoTkUrozPlPF2wXoBzsq956DG8WtzrZJz+iLLKJf5ZLU02CB/0SjPzz6V9GvGT5Z6sHmNFbTDgwhsKZt4SqPF0OXcuI3qCPIRzlC1bRS3gx6uRa2c4w9L7lhLOy4eH18iRNxWATknkbQoq9wRio6O4PciQP80yrlsVYykNdrhril1OdjC7sEIdM10oARi8ZL2FotJJd9O2mECNPSnnpeYEYkx6paFsnZAmEZY63oU2Ngx/WR+b/5MP6d8Wl4xCYWBQl8/LdmyOH//AEpU6wRU+ 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)(346002)(366004)(396003)(376002)(39840400004)(136003)(451199015)(186003)(6916009)(316002)(2616005)(4744005)(38350700002)(86362001)(44832011)(38100700002)(66556008)(5660300002)(41300700001)(107886003)(478600001)(6506007)(6486002)(8676002)(26005)(6512007)(8936002)(4326008)(2906002)(52116002)(66946007)(66476007)(36756003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?lVtUO8xb53xgWRaww8ggcsyjlW/a?= =?utf-8?q?Q8h/jaUoR7+O1S2QPp+bY7kWvQwjOvEXmOMOaf+Pm/ft9eY4jjWCihnsXLXx54Qpo?= =?utf-8?q?ISjQiGmYa027ro7mh3g0PAsnxjh/5nS1P6Mfs1S42M2CWt970MO49mw7xPxNNyYhe?= =?utf-8?q?p9cFXZ5mftoq9RTxVbmF6HEhmXF/n8s4tyvbdkvaD0AMesf3P/Fg05qdMdPDk2uMP?= =?utf-8?q?pD0rT36Y7iM2+ZfNu2iPYYLW5g9mdRNM9ZpHwYXXF5BOAu8jz8217zEoVwaOfNl+q?= =?utf-8?q?XaF9HUyTIuui1Uson8NgfrrdGTYU4/Nh82NsztyFZxIFPhkCxL/PF27U9RtuUkGrV?= =?utf-8?q?MY/bHraSdSOt8UftBAzZEWSH5N/6SOw+LjI1Di63ppl+uRcWNXYunQODrDU5LTQNK?= =?utf-8?q?Bc3fDL2cBcFBETgC/CcHn221uSH/eg2iY8DP+3O9P+z/N1TaH5lzxOtXI9rjlRJbV?= =?utf-8?q?UtV76vF5F4aPIif5AHP94f2xj5JE3MQjArou2WYyLLXX9AOS1tzSlp8lbegekuuWI?= =?utf-8?q?x34ZWUIdZvSQ9YZFV1t9n/HoOUxdqAa8Q3KIqFtYVkoSWf/+VaWQYIfP05vH3BBlm?= =?utf-8?q?I60zep6rFUgGZOAh8+18+qG6qV7sqYKtbj2aGrnquQ/n6w47Qncekm15kEwo8/x1c?= =?utf-8?q?KDCJRZUDJdJF+4hq31QzHrkP/2OKZrCch0c5vTiOaMx1Pb0WMYm3TheZ7x7mG/VZk?= =?utf-8?q?K3NNiF6pRu24KqY5kA1L+TWt3jv8BQc98aDf79FdolRg1E7xsO0fUNuLgtZlA2vEj?= =?utf-8?q?5LMe7R+YhUycTR9IAkMLDu1CXmV+1JnrpBVtCgMC/DwkRfo+IGI3EQbd6uDvmOiy3?= =?utf-8?q?uOxxIq2ZiWSXpaayW56WXCxub/ApVg7sxl3eWuInQEfMUHPQhpKiK71SC3zk2VCxg?= =?utf-8?q?BvJLhEun50het+nP2BHWb1lsEH8QXAVYC1Qc14EE71Z6xmlDgbf6snXXTssxkb52k?= =?utf-8?q?j6Z0QeLOhpDiDAOMBCNbMRTt0scCm9QqW7Hyq8DsK7moTeyU0f9Amcl4dnvjgDj9V?= =?utf-8?q?sNtrip2nIi5w5cOzb3RSlJp0ZdyuFCTN8PcfmoQZiU5Ns8dbPYlmIrCL8jV+a1Rj9?= =?utf-8?q?gtokhD5HiInVS5yvv5EB/U7W/uJuV+E9feqCqg+X2BSZfPum+jo5FE/JV/ZyRFQVi?= =?utf-8?q?4JTzKXUDzqCcvsp5lJiHSQVUqyRPQee6wqZlYHopdJwbmPhMyQsIa8EoAsZ3qq6t4?= =?utf-8?q?QtOnnBKO8mZgDHjsRa0loy2cnK3WLSDJtNlYcl3ocXcfqq9UjA6yf7Dxt50lwzRpn?= =?utf-8?q?BkbxgG2fq27i0m0890xyG5vC5QrERwVcBE/aFBspR/NdFdkuBObVCAwpBuqW9Nwpe?= =?utf-8?q?EiStRsEHjLKtns2OlOLlp4CfrqjgVB7Y42hPJTeo1ZBLan1mXGnd81XLVKLSnUF2U?= =?utf-8?q?iy4Mudf0Rp+aFn1hsj7eLKfteIAREFmQ3zQSpymVLeRkLSOkACSrSzm8ViRkvlO50?= =?utf-8?q?LPlIe+iFGGjPvodfmc67I0dUrFWi52dFfpZCeKgEggF/020LWA3QtPJ+QnBY4H11l?= =?utf-8?q?jXQSqmixY2wHGk+GQXLw1XOCO+M6lBKBhQ=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: c12ac3b3-70b0-4b20-4299-08dab406f514 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Oct 2022 08:25:20.6519 (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: JGsy8IxJRs97gvjQ2LTDQsiqHWJBtQX6KRPl+WDr76/qSCDiGUU5UR4iIFmGuUwHjOnnRuW8wiYQ8HI6AGiiYMTtvyU7O114GzvoZpztCvs= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR13MB5454 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 --- drivers/net/nfp/nfp_flow.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index 223f2e7..c7daa14 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -1464,6 +1464,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 Sat Oct 22 08:24: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: 118964 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 3A219A0032; Sat, 22 Oct 2022 10:26:51 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 9484A42BAF; Sat, 22 Oct 2022 10:25:30 +0200 (CEST) Received: from NAM10-DM6-obe.outbound.protection.outlook.com (mail-dm6nam10on2115.outbound.protection.outlook.com [40.107.93.115]) by mails.dpdk.org (Postfix) with ESMTP id 946514282F for ; Sat, 22 Oct 2022 10:25:24 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=BrQOPK+RWuW6mMxPNMu02+jf0m8fwW0whKpgZCVsZgMGJhstn2UG0/XAXlh+X69lkKoNJqKZ/J/nrGON9K/sOkmNLsVzSppTSqXm3S56R9oj3Rt57xuJp2YDhyD5Hby38pVdQhhyZE4EKbyIOyxUbn4IDYadO0tZp6EDePbtRwHinMUp7HC2CYPFGyW6trpV9xZnyttqjKkfRwsJQxndHVSt8feH3SkE9WkJZoRGHFeBYI8/gZebfTp5IvsENcatmN4GRR7bazHWIQ+MMZ+/kpyySLSm3tu1ZuqeQzPxB66/vXcOJ45S7RAUdW11pKlBDpECq1leI8OWOWZmbRRHcA== 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=M8h4mfglUw7AvbHR/APNWwrqPOaqYZs0Vow8sH1psGA=; b=EsW0PD5SPEnS9PBT0yPOzBnT4QIKchdDSs28UI0Vi08+lvk18Kp39zn5ZTJMfPt7EPb3bJEQGKLMdVXGzVEFMjBpf2mlvYPBEsiEbGnT/EsI3EeXiVkhr70o0xsngidiMQ9mh0jutReYA/9tm46CYe9K1JBGRWCkUmvdOSwvEA3UTb98FO/aN/HzwZHghp3xqSSd2pfWFknE1y6eYpZsuTq0iW+QvjS7W2nDLobtxK0extYg48w6gogrY2hnF1h/6BKQ4TDTBd67J2iF0YUYcAUJKcltEonf34qRLnitm/irAZ5zbr5ZS0qrNkygJ/mp04Pn1gJnUqp3/7Pk8f7+yg== 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=M8h4mfglUw7AvbHR/APNWwrqPOaqYZs0Vow8sH1psGA=; b=dB7SU+RIJTjBKiNY2ID+PKpC9BJokhxk1U//S/d1BUidzSSCPD9wK+/aFezttl+xdo5D57+mKrmUYOaLUPgKJz6zq4JV6j6HQTs03ks/Z2Irq/3e/Jh1/GboMOQC0+2NK9lPlGfzz6dCU1o29s4LALPZhJ1gFxALz4DoqI4X3/w= 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 PH7PR13MB5454.namprd13.prod.outlook.com (2603:10b6:510:130::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5746.8; Sat, 22 Oct 2022 08:25:23 +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; Sat, 22 Oct 2022 08:25:23 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v2 17/25] net/nfp: support IPv4 NVGRE encap flow action Date: Sat, 22 Oct 2022 16:24:21 +0800 Message-Id: <1666427069-10553-18-git-send-email-chaoyong.he@corigine.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> References: <1666063359-34283-1-git-send-email-chaoyong.he@corigine.com> <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR02CA0056.apcprd02.prod.outlook.com (2603:1096:4:54::20) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|PH7PR13MB5454:EE_ X-MS-Office365-Filtering-Correlation-Id: 9bbc30ec-c24f-40bd-67db-08dab406f6d9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: XEXo9hANhuRkkxK2r9CK0IKU9zgAYYbbZZo71pLa6C4CWdSVq8n2igK3qFOhOH0621Ua3Wm01OlQ2mQxXF5LFUQddXTOBeSOqrlwfkhrNxRsvp6QrykBTu/5NyFBu9L54V25TNm9/VPtjUv4X5DYUaHMU4VUuOC0Homh3jO/srXjBEg3pGFcMuSWzmX2pIHOzSqKz45n6ve9GmBBxr9l5FX3OnuExyqUVDuGIsP9W+Ig5GUOjK+CevyeI9Tcs09j9WeqFJERpUgepQL/hi+Hl5/F3w2E0aOahHrDWCFvsZTLB56dMXzPJzRFMcQWTGF+EWoxHPDQudW5r7x57YlDRG711k9Cv5xWZOjsg/DqE0dVJmd9mWqT6Ak/pcm7mpmHU/9tIXgdW255YpBmwoQvilluaIob7ZTy4Q+yhZB+5nqrgtgYCmbLxkkhi0wOaSuWL5UGWFtbKD3qAW84q3K7yGTQqo8nBbQdlmzqEupqlTr0ZTpZyLZisqppPTy/r7Wa024hVWddOb9Op608FnEG5bAhbMKWNYMWfnEKIvqjLfLnritqkG9fkYhMpZgwgS0PHX5mGGkvH4UsHZPNjL//1+4Cc4B7N+kKJ9Fqkfm4xwGfGIxUo8p/EY3uLgAFxoGLOPsxsvyt++x+b/AEuyeiYd+1y4orvIj+adPFJTOjv8hIR1OX5jkk5R+iod9rfS9tuY1k0A2yXsooh6iOs/SWxYyyVzriTPmL7CzdhXbb5UXKXK1917nMiKsqdGa2cZ6/tOovUNaaA0zzSDayr5CfI+QtOnrG6Tc9rxillMHH74anMtpl6XsVF5NjBeDXTTba 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)(346002)(366004)(396003)(376002)(39840400004)(136003)(451199015)(186003)(6916009)(316002)(2616005)(38350700002)(86362001)(44832011)(38100700002)(66556008)(5660300002)(41300700001)(107886003)(478600001)(6506007)(6486002)(8676002)(26005)(6512007)(8936002)(4326008)(2906002)(52116002)(66946007)(66476007)(36756003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?DhLeZrBTcDw83RpmLrhyfvCk2iQx?= =?utf-8?q?aVQNYyRFipEuPuuGHySYB+k1/+pAAaccRRiQKLWYeckjTL05hAwikiNIpGES/ubVy?= =?utf-8?q?Nb8k+sS1eoKqjMyf7iI4jGQ80wRHZAaqmIf+aPzhOm4lMdm4DeyrQVI/iOp5M3vCb?= =?utf-8?q?IYVYrTC3L+Q7LCquebCmqMjopRM8n2WKfCpXdVGnUWObY5xRuxNF+dM708LQrneXQ?= =?utf-8?q?SMWp9dHvzSmeSP10YOjT7X8EArsIXGFUa3gjab+8FRriOt9b15juwrvy12bQOi6Kp?= =?utf-8?q?KbB6+j10AZlWkCchTHSEcViwWQWrpNz/ecaN6in335UsIicccK0F+Kyieykr8X3Lc?= =?utf-8?q?5vdp0dVE3KVzVQ9CO2XvgIzhl2ugSOnF4AHHBjybmayF4TRMoWCwQs+sYrXmfUl4h?= =?utf-8?q?B3OarUGQgp+HXrXN+D8lpvsyXcR62rlMF0kFKd+YXVecwjIrPpHtvhBkuJHHQsQwB?= =?utf-8?q?Y7g41ZVthX3JXSuq0//sGWpHxbQIcMgv/KdK235igJgTy1Ttlh/eFz0z3CJp8YjLQ?= =?utf-8?q?eqYBTHfay6o67U+/a/ipKk/jOyxFnGI0T3twotwSuOSlsQGZIlgENnR3DnehyVbo2?= =?utf-8?q?sTxFRJt0TiLay2LG2bJJZCbE2LStkMKBwk4HZUls/2Tj+bz7oAbKERKP/bNduBMkc?= =?utf-8?q?Ggc0zlmdqV+TEWi8tmpq8gCrZAPt4QDA1hAfknsAXLIgkcPIKu5se1kQwU2Gljr7t?= =?utf-8?q?bsx5gf9/Mc7nncO1P5p4h6g90Zp8NkqqBWKgokWUQbqj+X/qvS4t1vphk/naxBaLI?= =?utf-8?q?ZIIFWWPGPYJ8vKfOwlnj04gbgovprswT11f8k3cfoDPRzrz6Z7EvX0WrTDBoQJykD?= =?utf-8?q?iCdu14Jomt6SgmiZVy1nmPoCrcwVhYYhn5its2eQ0y4ydN8Uxq3Ya4oIgjb2P7TwH?= =?utf-8?q?5N9PsXArJ8LJR0VM6xgGnYpLAt17aMIHSLaAclc94jHw6witVccP7Ahv461jyrHk8?= =?utf-8?q?4oNIsHzEzgomOx69ldq/0ikhoazuaLq0VzhN//HVD/djEFfBSxSU9qMPeNiaXuwC9?= =?utf-8?q?9RjP9sO/Rxe6BgEWqaVJw8z11aBeLh4eM1BZ1h4PsaG8VOPzIV0jvg9KsQxaa6Mvn?= =?utf-8?q?Ljgb5hlwMkYLfMKmtCBqJQKfbPvY1IqE/3efV8OXqBCzFCar+pRNayEhCKE1VjLtd?= =?utf-8?q?j5Q67OyZhHa+gHttmTUljrfLD/taEeUBW1Ht9Sr6qi1BsKnspzAt7oGTxG7nOFcVG?= =?utf-8?q?/6cB3NALtrlvwr6zvl1YQTbk1UgZjqRKhLYhw+A4hMDj42TVEJK0THvcUwAivn2Pk?= =?utf-8?q?+8aSv0TqRdSbFpgjfSjMB4oO6VbEEPGOIDiRsA+vm0mb8bUwqVI5krQRlFTbHE55f?= =?utf-8?q?yq6X3xoyYOzpztem0JF010mvWMIZhY0dPRwjhDR5n08sJL1X6FRxfwTiWTNUXVE6x?= =?utf-8?q?Uj3s55xhGLFL+5XSS4wlyWrbZRxUBU6h+EuX6/H4oqULAN1gXD78s1g8CQoyX0285?= =?utf-8?q?BETEvwN9i6F6s9IO76XMcKGwAwf6qx8WYVySWp8aLWVRwtMGNfMQctGfvWCGnjt4T?= =?utf-8?q?DES03qIGqiABAiQ0RUBjPwepEr0Cy94i/A=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9bbc30ec-c24f-40bd-67db-08dab406f6d9 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Oct 2022 08:25:23.3418 (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: DbMgR+A43DIJb2tIMZiKYZ8WPWABPUvazoU/9eL2RkEXKCCciQ4DynfdX+mzMfp/HKPZgKvuvvSuRVbHnF59fTv2aBb483DDKY0C5C+4sic= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR13MB5454 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 c017be1..f6b658b 100644 --- a/doc/guides/nics/features/nfp.ini +++ b/doc/guides/nics/features/nfp.ini @@ -41,6 +41,7 @@ vxlan = Y [rte_flow actions] count = 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 c7daa14..00b4c6d 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 { @@ -2828,6 +2832,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, @@ -2865,6 +2904,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 Sat Oct 22 08:24: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: 118965 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 5BAF4A0032; Sat, 22 Oct 2022 10:26:56 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id DA96042B91; Sat, 22 Oct 2022 10:25:31 +0200 (CEST) Received: from NAM02-DM3-obe.outbound.protection.outlook.com (mail-dm3nam02on2124.outbound.protection.outlook.com [40.107.95.124]) by mails.dpdk.org (Postfix) with ESMTP id 5B1F442686 for ; Sat, 22 Oct 2022 10:25:27 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=lC/Ux0sI7UT+Uix4b1bYuNVPw15KB5MWRBcIwxgj1BCi3a1yktY+c68dMP1luUVFJIxNwSq7AK/miexSDVKRW48pblosxMH5yT5C+DJyzBzaAtFlExywrbzbgzsopg1NyW0pZI3IGKijgi/r3V8IuiOu/YezWzcq3rljJ3bTTgsmZW9bTCzYNhy4/rNwLtu+DPRj2n3ynBR52HhAXVW4IJS2Cp/cjXCLqRFE5kftw0TLgkuzgAuboA2P/JD36a7zKbd37oCV2T+mRzLr0Z7kRKAAH6IcpXvqpYlhCFcdeuy8SmWkJHZvwmpUmvWJIdll5xU3nUhbwJ7t6oNUhDZK1g== 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=2bEZraHnJd1fnqaK6FpASssHMl+YMDZpKO/GdXe8zmw=; b=nmf2sPzQnkbP611SNhW/oDQJHXI2lrt2j0Px3f0dYrZvFH+woI0tUot+0Msz2eSTFy+4HXJ4mLHwbsrtukiMVVAXzCghQTVyUQRzUajIdrgoxK2HaVTWscOHM8CEXsZag6MBPImyOxtABZJIW0Q/p86vS1rI00nwRuNZUCJbEqylEA1I3n6OnJ7RyIQFhqyrMKOAt0FBYksmL4jwX/bFuYo3uHRMNJGEm7Z/KtnIc799DrDDzHdhHz3EQ2TKwThBgZ/8O0z79TKhSs4WSZUAoD7qEtNZs73Ch98k+XMPZcRynGoKtctOvcou12rtLEyNR6YBkw/I5oSTgcJSsXEbZw== 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=2bEZraHnJd1fnqaK6FpASssHMl+YMDZpKO/GdXe8zmw=; b=OGWvw8VmdtcYHBHcVX5UnfFqsV21h9umldGN+3J+ffIB8LhU2PA9iaFQcMfmVIgcVg5Rz92HQork1X6Awwyckk5LOEivi0qHMu5U0Y6/88KsUSgu5JszydGLb3URGR4keAK5PPkiYe9W/ZSyz7ErYyXRMAzkEES4qNeifwqxKK4= 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 CH2PR13MB3848.namprd13.prod.outlook.com (2603:10b6:610:9d::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.20; Sat, 22 Oct 2022 08:25:26 +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; Sat, 22 Oct 2022 08:25:25 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v2 18/25] net/nfp: support IPv6 NVGRE encap flow action Date: Sat, 22 Oct 2022 16:24:22 +0800 Message-Id: <1666427069-10553-19-git-send-email-chaoyong.he@corigine.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> References: <1666063359-34283-1-git-send-email-chaoyong.he@corigine.com> <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR02CA0056.apcprd02.prod.outlook.com (2603:1096:4:54::20) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|CH2PR13MB3848:EE_ X-MS-Office365-Filtering-Correlation-Id: 71f753bb-778d-4c37-0c2a-08dab406f850 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: x5IEIO4Pwv2TAWMv8A5PY98i+4KpwEmgrmmPuR69TP9qYHIBL9XqPij7ZS/xrmy/xLrmSdktnePr6oNig5cLivczAgQjcPgp2K9WSjP5cYTtKyCjB4NqONnWsFq+m7FmNQs+HhmGDyZZLBaCM9rUICzYfWvhbhTCVFdIPRYARUJCSypiMmwpmZuNv2ShGRlcGcHtwM/EitXfMjNCgftFVjqCcU9stRSmEXzz5vKg5/h11jzdexJ4vWwW+M/tBAaX3lFg8ZFFiYlQv4FZiomyrE8De1N562kbvHbHDH12cILf5bygc+NFZTUFRThxM6aLn/Yse8XY2Yfj3cdtC5Hz5sC4fuXJ+DKJOGifZgW6uLK9iGaqwSGQhhu8BH1bVHr1IaHnbd6D70GMF1jPTulKAmy+j1uwu+J3Ev7+PxREVeaj/xS+NUDGuj37P4q6GDK9dOAP6yQDCxaMIl8Ru7oVQiXqHF1Z+/61KAR/mzc3CtFw0VNwVtVv4rDeUKNxcNbSDUa8XQT7gANVXmfoM7b521fLdHNLkDzPeI7rv3TGcR9FtEeqYkjn18oLO6tuhc7hb5Sb35Vt/FyoLMicgaZ4zcNR3mYLyZ9zpWqSt9H7mLZSeVsj2sZ/Quo+aQGIyeEUJ6WwE6hGq7LmIAuCRuXENPaYc8FomrufGnFFRfZUEtkqqY6YK5jEiWF3bK52rCsnAfUeuPeYn+6LKV+zsAXk2s7OdquqPgUmekR3C9TgqKtZVqFE6cjxaE7OT6/IGbZ/gxrpGysOiO4HGm29OSWWlA== 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)(396003)(39830400003)(346002)(376002)(451199015)(4326008)(107886003)(36756003)(38100700002)(66946007)(66556008)(316002)(6512007)(83380400001)(52116002)(66476007)(8676002)(44832011)(6666004)(6506007)(38350700002)(5660300002)(8936002)(6916009)(2616005)(478600001)(186003)(41300700001)(26005)(6486002)(86362001)(2906002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?aCmfV3TtsTAnwpV6g99XCFY7/K+r?= =?utf-8?q?4mUp91lP7FBtqzahpMIxzVZxkGVWjtWYIWNDaouJNB/FJnGKJCWf888dk33Mk+0VC?= =?utf-8?q?+AQ/2NVdxzm+NM/M4mnPVfJ+Em0ZZ45AEdeBcjhq04Vf5Su9TUyxzXGvodm488mTz?= =?utf-8?q?E2/mPwrlGblzkhXGViJ9iDmbpRHKTuj/EZsi/z4vl15T90gmjY+sp5YWE/oF3Pc9L?= =?utf-8?q?xyq2dMQ6yqe6hVV8CUE8P+0JN3Llc7E+6v0iPgBRlO4wIR+g2LAZk94Yw5a4qCN4q?= =?utf-8?q?mJcwpi2BLyzI1rnyrSIyLsAROMjrsqThjCJw8bnZi8rii0llBARk8HO74vT49HKsB?= =?utf-8?q?iF06xh5UaXtv8C8B1X4+clVRYQQbAMm8Ww77fZwXdMJ9r5dsA0EPv/8Q6E8/u0WRN?= =?utf-8?q?b3HCFFFaB/f6wymOpwhx61DcbTtUUbTabiETWGeGNvyPdtwSSF096etZdVe9VtKrh?= =?utf-8?q?AG9qMBYTZIqgESUbdm6M4071AI7j04+caZ4OrFNlHAlYwbLBN8EYcsbReRIajqx0K?= =?utf-8?q?P138zpQQ0uiqeNmpuP5R6bft9NA+wuBTgxL89P9tGZNx06cvZI4NBE22nPPn+nSv+?= =?utf-8?q?CrH4B87U7XissHFqPLRHzja0iYytXHedbz/P4nQXURs4p/70mkSskqZGFgtPJFThZ?= =?utf-8?q?txVxwJszlewt0i7Bkl1U1Upi9cHMSvzES08uLcZ0yHaEiKrzMoA3BtnMQxvR18tNk?= =?utf-8?q?8PfPYoDxw7115AiWdsBRbi5A2AomBycMdVgFlaZVbvfxS2R/YUzH8eVfhKGlPs1Xz?= =?utf-8?q?4DwSSDi01Ldaf5PYfhxR8YuxUvSlbovGXofE9QkgEfuUAZBc2UOQSw1LBpVpax2Mr?= =?utf-8?q?anZRIGtVKlduD1TPcER4ic3Tt+i9v7eUng1YSRaWaOycPjCoz7WMUwxIcCGmBuhMj?= =?utf-8?q?6QyRnhwnnt0XEut8ZiNZPGviW74SsHPG3EPQfVBb2BYWU5vODO51aorJS4HkRmIE3?= =?utf-8?q?TVohHalpu6yk52mZ7jnC4SMMR7tlc/4KZhfVXsXBzPdAdW61rTm7Id43tV8KSKDG0?= =?utf-8?q?4z/Qobrpy3ALj9dz7NMw2edSnbIPs1X5SQ/H4TQJJYrbYc9SyNvkGgLQUqDeynjYK?= =?utf-8?q?u7GoWH4iwVtxDNQuSVFxbC596OZUwhT0vSh3tYwio0llg7XTkUloPykTkxUIzaKW8?= =?utf-8?q?Ee0OwAeN9eDYukat2adlgIuVPkuPBZ/3D6z0ko/XmQq/CbXZ/ivzL1jViHvOS7lMc?= =?utf-8?q?QkVExDYwyV9Y0fN1erIzl9Gxifc9pp1ncLGaY7CEfYy2SW5jlt749loaSUNGnLkbQ?= =?utf-8?q?85oKUfQCWWfC13gEJaKQtvbeHYRg0iVnY7p2K5zm+kjiEVlpkF31c46PqGH0la/Uc?= =?utf-8?q?TVqRQZagfteJaomOQpeGKND0L0dYmy+4g5lQoHx2my23i6AfxOlYRefvs7Lfz+utA?= =?utf-8?q?oF/Q+2MPQZnokcqFd3uo5fiN6jU5S6aB1dU2MtrjR07w5n3ISsoIjJgq1Cdq1hZkA?= =?utf-8?q?ZbWVPO9IR/v8d7iI03aeTBC/js62aoKsPF52159H7mwPenJiIom337YWdDlwOviMM?= =?utf-8?q?nAZmO+KYCmaHyQwrx1j35qxnuMR6bUgCAA=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 71f753bb-778d-4c37-0c2a-08dab406f850 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Oct 2022 08:25:25.8738 (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: XsCsHffAbBm4AqjbEtZPferoUnL7m892IdYZwVYnv+gzmGgMsy/69WDPBmdLf7dyHGtVix5yZAcGG2C36W+sVx2PFuSiX0biMKyFjYGnk9E= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH2PR13MB3848 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 --- drivers/net/nfp/nfp_flow.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index 00b4c6d..fd64da8 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 { @@ -2867,6 +2871,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, @@ -2908,6 +2949,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 Sat Oct 22 08:24: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: 118966 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 C5545A0032; Sat, 22 Oct 2022 10:27:04 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 9EACC4281A; Sat, 22 Oct 2022 10:25:38 +0200 (CEST) Received: from NAM02-DM3-obe.outbound.protection.outlook.com (mail-dm3nam02on2135.outbound.protection.outlook.com [40.107.95.135]) by mails.dpdk.org (Postfix) with ESMTP id A30C442BA0 for ; Sat, 22 Oct 2022 10:25:29 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=No/+y2VcEblxwJtFT02ykmJzEztBKl2rJggciihqTJsmUz0bdA+hODGnvY1qm3W9XgwIB+eHLRtQzqy08yLWgmn+R263gteFfdw7HOwX/ODK0vIobp6WBOuctnJzJ+Eyr7VGJjNJJcNdQDQbC+8jtrbJvCf1mcXgPz1n64ML3g37Fp57xrL4w0LnOsA9QUzltepIJiUndsSqQ7ET22+RHoSxF8zSwHbi/wjOJHkPi5ySxf4JG0hXB/1WAtlEnjRwil6J787UZCV9P+VmfWQgpwDm78Krgf47F7FI0xtyEnMApDohwIlSjfNfZHHey/AuXCFbWaJmvSXpekRdO0to2g== 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=f7tto17zYnUx2aIQHM4gxpr30fLJhY/vlCv6kH6kd1g=; b=B7BQAUZXuNocgKchwDnptRS3g7YMZ3Lp3hWeGQ8jRx9eEspPy0ziUKtDTaOhdtAto0Z1tNvapYA1rB+ySW8CU8XBPbmACWxN7S3KcLA7e/5U/BI+buXrvXTLG8ffbMSjzILPjfRawvBOfCq+ksHbEGJTYhL0M7F0LMikBxG94Gaz7ESIh4K14w3y/xuJCETKPHodkYbtb8JYB0QdIjNNubMPUrPnNBYeYs1LHZjRNcA/UPvqhGK2C3RjoaDIxHYwwOKvAcMEp7tD6nC03rN2aGacKqxdRUAZ4qJpMu1axJVFC9jtfhmYrKhnc/Ik6JqGg8f3bWxEESLnH0pIDHhdBw== 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=f7tto17zYnUx2aIQHM4gxpr30fLJhY/vlCv6kH6kd1g=; b=l9Rteq7cPJlAzxPra3zASP4oOIrbiz7xouSCTzK74atBpyP5XHOpjGdYRCNH++ZcCS9l5pGLHRg69ocKlUzwNQxEkFm82Dn6rSGvdCs1tWZtCr+lR5IALd2iDYz8XvzGg3zfIi5x/gp7jeEY75B/UYD+vqD7h9zVja9Zz1696F4= 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 CH2PR13MB3848.namprd13.prod.outlook.com (2603:10b6:610:9d::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.20; Sat, 22 Oct 2022 08:25:28 +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; Sat, 22 Oct 2022 08:25:28 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v2 19/25] net/nfp: prepare for IPv4 GRE tunnel decap flow action Date: Sat, 22 Oct 2022 16:24:23 +0800 Message-Id: <1666427069-10553-20-git-send-email-chaoyong.he@corigine.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> References: <1666063359-34283-1-git-send-email-chaoyong.he@corigine.com> <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR02CA0056.apcprd02.prod.outlook.com (2603:1096:4:54::20) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|CH2PR13MB3848:EE_ X-MS-Office365-Filtering-Correlation-Id: 76388122-bd31-4f12-4429-08dab406f9ac X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 91TkPsCxMhe5TEETeHC9izwEPMQ4W9Xvt74Xmr4QxUHSYSX7mmE5SWV0/ik3MySl4p1qe3Bvd+NgK21cNFg1N+Na8HODQZRFb7N+Od3M9tmpjgj9SBRazyeOkph4LS58s3Yb+BWkX7dWE/tT+rUwoIdXjL6ZjzFymsomVyeF8gmhT3OmtjKA5wsBbLFNIWKnwrbB9uHW9xTYZhhopoc3oMjEzT02KsJDcz7Yx2aNDGTt0zkbT0ycWfGlLWzxSg1bIIVOzpqobeH6X5VLj1pc4q0r5Wt0201tISFxHGX0hgXs1JEe2craOBxyvdoFtBszYDsPwcLPbEIpwTaf7HS5CU5Psdwdt2/GvxNObUEKXuY+8IFk8rCKkmxPM5VhpPTG8bqOUtamRdX8fZB2+2qRqxZedlB5fL1FABmOvKpn3akSCv+hglZ6IABKMvX5vJNBsvBwYvMxz3X6OFAa+HMLWVoQxH8mlvNCaq3AcSaO5PXqQ4PwHpOtEK24LsT38aHQ4P9OK2hObndRrJwmvNbv8KNQbZ1hpW9+qYwbknj4IKhsAwpKLklQHu3B99BNdPkVLNvlRVHI8ZjFXp6W/9uc8tWLyV65Seevo1xkbxZNWWja6O5m0ANSupEV9r1th+0oOskwGR0sWcC50oYWOc3CH7D0QtGKw+I6FtBUtzRFQGFX9OXeNqS+cMsYp1FwrALEFXurOHEM08itqPB6AOFO0I/zCW03PLF5/c036v3umFPcK04Jo33nBTtdyijA8buielDcqYHfvb2oiWjMnABOUQ== 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)(396003)(39830400003)(346002)(376002)(451199015)(4326008)(107886003)(36756003)(38100700002)(66946007)(66556008)(316002)(6512007)(83380400001)(52116002)(66476007)(8676002)(44832011)(6666004)(6506007)(38350700002)(5660300002)(8936002)(6916009)(2616005)(478600001)(186003)(41300700001)(26005)(6486002)(86362001)(2906002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?dNGfODxjOWMj144sfo43Gh2IzPTE?= =?utf-8?q?55sq3JNDgcotjMEdhU89xMc9ergTJY3j1uKUYSL6bb3OjKuw+6d/08IQ17WfnCAtd?= =?utf-8?q?WPMQGxOEIzzTrKSSV8iJQaX87AYJrKDNtxcqYqLzkJ2HqWYZQvfH5ttUq223fdAZq?= =?utf-8?q?TQLdfXmZLRU/TS3LFNiB90p2xQYFsOreKGnhSl6CGYtS1cqcWzXco3dJRdxodwy8O?= =?utf-8?q?k7x9Lu6YGhMp2zh/c38KDjuOrpFU5kDu4tcqlu7fBoXREICT3K6EI09sNDD8ZyNU4?= =?utf-8?q?asN3PN/XH6RNV2RwozfgooCoUmDCKj4r4EWxEZR2o0fNoO5+1HgIT0tOCs1RI9XtR?= =?utf-8?q?hszZ0l7q814e7FoIy8/g6DUkReLbwBraX4q4jjZpC0q5OOg87XO9lx9Crf2SvR0Am?= =?utf-8?q?pJVdvDLvyUn1fDvoAB1aPss4BTj7QWo6Lchb+Wc5N6mF9uqjs6fUZddyQ3U9NySTK?= =?utf-8?q?bwc+pQ/rIbw4pxVRCNFj+uJ5htk3Bh2S02Bn1JErPHS4Gjx2cwi8ss+z1jnVvoe2f?= =?utf-8?q?8HYrl4xD1lKj+f6dA/K3rzuRAe+QOAg8WDUJ6uDItqfkdhQ9x6AbU5oZRZdFfS6Sp?= =?utf-8?q?mQn1SJ2PBdsX1J7eAdb7K5Cq3FBqjBh25SVeKWdf6id/bcH+jIlQMBDxuEnlRK/c5?= =?utf-8?q?IKfbW1zflmcrlXUDzFUDkJJAiLZ0q6ajNDM5CjJZFIfFxECoU7yQgq7c55g8Qer7r?= =?utf-8?q?xOZT9txG9an5nlKM3HDbLLNNzBh0QNQrocBBbiPYQGbxeFG8Tit+XIkYJk0V0hW+L?= =?utf-8?q?vHRn9KUc5luT3Igt7+ZFTegdnWBA0rdmJOnPFguFGVZnAOG/+L5jiBVNsZ9polSEy?= =?utf-8?q?h9Yiqh9qWBcIYUSzhsIdfezb6qad3+Tqh9YIUYKTYfBcKAqlqqRiO9m9Ep1EQ31u4?= =?utf-8?q?QimWQ+Efx4uFj+CB8waGD6ES2pVyUzj6dtomyGTNiBluyD/666bsLk9IHEz85kFCr?= =?utf-8?q?aATm0Q8dmbbfMoztq4ga0B3O908UVQV74f7nSZaYuQcWLaGR58rPR2lSrzHQtQIOk?= =?utf-8?q?7izoKreEWJBJcFb31vUlSQR0WncFaEywwV8BfnVkSbFMzL8AqitMor3/WuBPur/nj?= =?utf-8?q?k2on6/GTS8GFdAsuTjT+fHQ7bywActENfZYxukiv60e99PhQArjj4vTmGCq7w8Nse?= =?utf-8?q?87BrZqpXBlM5WpmiqsCzTjnsK6MJKDeKeOw9MULaK8pgGQDrs1JUlChzBNq3xGW/q?= =?utf-8?q?US6eUCtu9VTA7U40Fyo1u9It7S7kXImS3IWhYTz2M6uvWv1NxoHrsV3OgeWAt9WuN?= =?utf-8?q?DFCf/jG2iYDT1x+sm87i1n2odn4Yjazy7zIUgyQWtBhRdg4Rsy+mYsmZkd+JBdG5+?= =?utf-8?q?cWtBfyh79BIzdwvs1s0bjhP8u6bYg8l2YNUSeoMGmEUwjirteRNeRYrZyaciIGEyP?= =?utf-8?q?zDX7vEMgYLN2lRAEQsdV5IYlDhvz/Gnv7+/JfLzcdny/GEbbWVr6JIeiLSVp7Ukd9?= =?utf-8?q?ngD7x065I3zpTfGvujLIqC53lDGok++MbexDVh7s+/q3XM5JzEGDLoSbmCHqPzZPV?= =?utf-8?q?lWSBoHzTZyj5BBRiD377Qv/lK8kCSjN/bA=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 76388122-bd31-4f12-4429-08dab406f9ac X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Oct 2022 08:25:28.0640 (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: Jl3et5f/nO94I3m+a5GTT2z65z86FRj04+ucA2uDoHO9FpFRu4DDNBEbLxnQhwjJtkY2YKAOBwq1MPM+m4w5xxI8Hujj1P+3t5UnIrvCj5Q= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH2PR13MB3848 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 fd64da8..01c6e9a 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -564,6 +564,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; @@ -579,9 +580,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; @@ -1013,7 +1020,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; @@ -1102,11 +1109,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) { @@ -1115,12 +1126,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 a6994e0..b0c2aaf 100644 --- a/drivers/net/nfp/nfp_flow.h +++ b/drivers/net/nfp/nfp_flow.h @@ -49,6 +49,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 Sat Oct 22 08:24: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: 118967 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 EED43A0032; Sat, 22 Oct 2022 10:27:10 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id AEBB342BB4; Sat, 22 Oct 2022 10:25:39 +0200 (CEST) Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2138.outbound.protection.outlook.com [40.107.223.138]) by mails.dpdk.org (Postfix) with ESMTP id D997E42BB7 for ; Sat, 22 Oct 2022 10:25:32 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=DlOsom44xmW/YqZwBb47lypUEONrOpxE7Kt8n2LQifjPHQJakqwT2upm4a0rXpz1XkHR57lB0nM2RgKuCeS7GQgvOwLZjAuTAEyacISh/n0jp4mHXb0FZC//6J7zAIpYIbpTSSbVIwj5N/TulxAHPRrLwLkLO/z5UT4I2zFph2Y6i2U99Iy/JIe8peZmeXTcNde7j7z/uzqch+yQe5Vn+Nx4vyPGZhEA5fnTtPWMol1CxzUAaTCgLcsDKEb+zmSKkmJuU4GtdjLVyGAmzQNoywTKTtdYcdWvobX9VSSp+/Nncn9HFwFRfMG+CwjuxoiartKYMs1yuqyOOQphuOso5w== 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=8xwzoQu2xoK/HMe1RMuGKafDtzGFC1SAFSTFZQj/A7w=; b=Od0HSjpWVrNDhhnO3BpXsQxJXnmJwIyCxZXVD6evCMTRL+HCHLGZ/FpmYJ0sxHkxVlhZ3bbqxp+GJBmZEgmLkFQIrHpiXbsXmSzbxpGd2LGSWTfT+uHjLeF+ORy49ijqllN3iOJw8DOq6xrRFJFNnbJ79nhPB2SvXyxe098nQ+DIH9nO6Wac9t6ZgtUidKCexul6uLBiEZSSirS+uxkk6GBEog67E1JCyPUgRq45v/5ohZJ9ZdVWni6NXZZYoHiYigghoeiSD99nkw8iEQB++4x0uucD4G/7Qy2hLMB8B1YsY7g3Ztc4AXna0bmk0eLr4p+ETL8g11g1zaG7hWVjeg== 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=8xwzoQu2xoK/HMe1RMuGKafDtzGFC1SAFSTFZQj/A7w=; b=tVsR+UxRU9zyvTH4et7JtnQbxT0WIS4wC9j7oNntdZB6sS4d4HetyqXHwQi/p4cdgRM/s3cdPCn78WZZwz86+myqyGUuYkNP+uxxDba8luLZ0iAlXPCkqQ9iZXjC/2+mrXsY+DSwVEqxQmQPzIjftf+RdjOtqFiwA5mGquJFLJQ= 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 PH7PR13MB5454.namprd13.prod.outlook.com (2603:10b6:510:130::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5746.8; Sat, 22 Oct 2022 08:25:30 +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; Sat, 22 Oct 2022 08:25:30 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v2 20/25] net/nfp: prepare for IPv6 GRE tunnel decap flow action Date: Sat, 22 Oct 2022 16:24:24 +0800 Message-Id: <1666427069-10553-21-git-send-email-chaoyong.he@corigine.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> References: <1666063359-34283-1-git-send-email-chaoyong.he@corigine.com> <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR02CA0056.apcprd02.prod.outlook.com (2603:1096:4:54::20) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|PH7PR13MB5454:EE_ X-MS-Office365-Filtering-Correlation-Id: 8d37ab3a-61e4-47a5-9b45-08dab406fb20 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: VH/gydqhSwEEQdw2qYfoO8MkorHFnlDNOc7HQlAz8+lMOWDlyWtDJaotnhR8mwYC3QEE8IiOIa4Fo2WTz3I49gSaSp3o9ZpslSFSP5kGokvph1GrktU0Be69lQrQfTKFu+LHZ8D9/38nGlL2crtq1/2Ybmh67+LlsgSgxa2QlEEZn1wiTa2oRUqpT2UFJRrZj46oc1WF/xfr4R/PUe0d3u4AsiqtY/EEA1PJhYqUKFRf2PnWUuIAKtqweGa+CQciOoT5sUzIcGLjVA/zzmMr4EGpSzuX8g0x0Xde9w/A8UXCmSqYztz8HLDUoRkXksuw4f9+srSIKXEuyP0lN9bbEIt0woL/YIHcJrGY0EjOT4V8oikv1JnPXX+U+HFxliYFWLCYm0UunIv+oae3MNadYcytDQG27JC0+86Tl8YKYvcj/MlTYJr+PxQ003L+mhIrLlQdCfp+LNHmxxMSgmi010xalS65CtRRgyVf/hvv9ifLmUv4UZBW1b5tfsfUhn11yjjTczK8Nw0/aDiw/NirZtPkEUbNMBxa1Tnvt4ehu6Lt7HSCL42lkkqIAfl2XG1IBg+1WEORKNRIgptBbNCsG8ZebUntTRdzKE9pufK0EmZUS69V6PLgUf/ZouXN2bOjv02BF6AX9c5Q1gXsehKhI3f87qMrDKbE41ACjjMoWvoZDtoQLqHlYF9RMLey1ybNe474SeVV5H7IPtDoNS/ejoH6x5StHwHgHTsRWDDgCrXtZx/eFW12Xm1uMm1T6FTSrPSScIidgpsKjyTLVLzroR1qLHWlyUbIiUB4rx3FhUbwEx3CRVik090SlkabLWXL 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)(346002)(366004)(396003)(376002)(39840400004)(136003)(451199015)(186003)(6916009)(316002)(83380400001)(2616005)(38350700002)(86362001)(44832011)(38100700002)(66556008)(5660300002)(41300700001)(107886003)(478600001)(6506007)(6486002)(6666004)(8676002)(26005)(6512007)(8936002)(4326008)(2906002)(52116002)(66946007)(66476007)(36756003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?3cmg1lI40fJCiJFKviGcmZdz2uI4?= =?utf-8?q?CbLvR9PfJq8EFcNCmeZ4Wb4VWulIdzax1rwLi42t8bO8XIJxDYnbHL8KJd5Gh0GVF?= =?utf-8?q?4mhHjzvkqLINnlrZ6AGLwhPQlOJTu3maWqmeeC7YqvS0SQt9IqH16yZow5zZTw6HA?= =?utf-8?q?9yvTPH4KWTt3qouqb6vKGXg2GGAy0u0cmyLMRbNF+cSWnnIbR3+AfC20ibGG+CzL/?= =?utf-8?q?NVQXho8UIJkTKHNWk4v6fkFI9nb/jIKrp1fc1f4O+9GM7kbIK/cAkh3SW0EsLAwWK?= =?utf-8?q?Cd9CjyeOnIgomwwIklot0kt+Bu7hw9ZPujOQC/DKygVaOMcETapHPEvKMnJ8e9IkO?= =?utf-8?q?Bb7vEjdETbWjW1f0Jt8D3MmDiVrd9ttBuYFITzdCiLRtFh5TQHAT2Z/g2Y+T+QxzO?= =?utf-8?q?tupnrdQ9aobst8VWzzbaUrEFM7jF7wTdN2ifBCvbXsLbdqih8bD4aPkAILFLY5ChP?= =?utf-8?q?pC/GsMNcAFU6bPBECp80v38dMw/Je4X4b8OZTlzvA/Mxoh2n4EL2RFHFFiCUCEzzO?= =?utf-8?q?CADaALsww/8cz1hiFi1kNCV2mz55UWcHsV8mAG0fNRL+gHeklgDs0tXbFmLv1R3tV?= =?utf-8?q?pW0yn7nTGnliwdYErQR9//iXjx7M4qktE6zao1MHaWSHibYrelIpBDRC8RIwYxRUl?= =?utf-8?q?Zl7LNxEys2qvxIYojQ74Az8fb4Mxh0pwIznCejh3Da8mynaCX/RqLEZ35U8VzviMI?= =?utf-8?q?xK4WCtbITXS0c2Q+ZeEvC7vaRMVDWm+gLr3j5BuGsgD2R20h9q1vM+9FUG16CJqUB?= =?utf-8?q?Hwfb+LaGM9s4UrHBOUcohwiz6NA5pvQRTMoRG7ism8dhTJFVgbAGHJpPvc/UIE6n0?= =?utf-8?q?SEtAPsyx1fgpjWwCUtKLApyIKV4w7QUYNRH8fJ+2EZ7ayLfhE/qDKhu5Ru7FbBN+8?= =?utf-8?q?TNjakSheKfulrqcZT1C5whhdXFsMVpaUnvH0gL0gkKDExMDDuziKDdxwl8Onw4QuX?= =?utf-8?q?VsvxVFbpU/jRBDF6QKMbOxQzrRym0rQShgx06SMqs6SXTGw7gou17aT4adKI/XuGX?= =?utf-8?q?C/TZrl37oe5HqFUH4scbSJCCcGABIVibNw2ylvDWlOkT4QdpLxipAhzC79vGmXRhz?= =?utf-8?q?TNnKgYn1hpk1lxfaiK49k+C+mA2SX6gJTe5dYkNO6xsS2NDXHt0qgtNkZR47y2VU2?= =?utf-8?q?MmwVd6/6aH1pXhz6N908Zto5NsFA1oZt3smcPq3/Ez++9sEmgABnla8mfPrc275Nn?= =?utf-8?q?WfnfEJX5ZNcCh+vK68S/EjbHExkV1AUQavqIz5R3vWR+Pp7OCskwU4sEzMHylndFd?= =?utf-8?q?kSbXFw2MDa9frG//VXKrU1/7W3zMs3MKgRIo7B+EkxKFp3JyxWnxclo8tvt3V17MH?= =?utf-8?q?TxbJi47s06Hzt+K1Ajuc1lZ0RgzgPl95EatWY/wj/wQGbddO+0PcOIgPhl8gbqSIB?= =?utf-8?q?FybSsF1MgsnnstWKCFAaUWjxyyViw/cBq3SmoCJ7J4Mtr6Gc+OXwcWmSqx19iB2sG?= =?utf-8?q?m4ryY/o5kyD8OYmg+W8cxgpo6cZoUVhu6/OieQ4s3gGr37jFR7NAmT2iYRVVo3ywK?= =?utf-8?q?/9ZTQHRxigKji1KpJ66FHd0tvP9caAmoJw=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8d37ab3a-61e4-47a5-9b45-08dab406fb20 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Oct 2022 08:25:30.7523 (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: H3utF3s0q8PhnL0O7J1Yp+DmgA1Zz7p211+mvDTcr6n48/FDPwwfQ/Ip1R8JnzZcFFiXAi0qndVLk06o8goYr7P7T5OoaMW3rLHC4YCY3yw= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR13MB5454 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 01c6e9a..26d3854 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -565,6 +565,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; @@ -576,9 +577,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 - @@ -1186,11 +1193,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) { @@ -1199,15 +1210,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 Sat Oct 22 08:24: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: 118968 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 10204A0032; Sat, 22 Oct 2022 10:27:17 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A8BA9415D7; Sat, 22 Oct 2022 10:25:40 +0200 (CEST) Received: from NAM02-DM3-obe.outbound.protection.outlook.com (mail-dm3nam02on2114.outbound.protection.outlook.com [40.107.95.114]) by mails.dpdk.org (Postfix) with ESMTP id C608C42BC1 for ; Sat, 22 Oct 2022 10:25:34 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Hxy2i60zHDzXjIw3k2A6sf4gT/Q+xPjfTJVpnzEITOKNYyWF22Rv32t6rIxQdi0MpdE5Yq8jD7o7rs0P9a3pF4H8Z9a3JLXW2lUxuRntRJ6YMK55Y7J2h3Tz9hxIhT7lpkyq1nwA5Ntxldb4ESWxYrLc/XDybmin13mh8OPKe6uKFGciIfA+xu7FzIEqiPT0pr3KvdHc9zOmHBRB20/wssOmFYn+497xPG+6ItNuVhK3NPoBJxuARVHQId4d7DKciKZnaCml4HRZgIDhdz48dPltqEfqxdCPwKYTxgYGX/wE6py30qJ5SqxLZd+OI+dbXGXx4bZdm52/o4gVHe6rbg== 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=k3jluhVp7ZYGWqGy5QXnikSGwOipQSy75/tgeorU1T0=; b=XRk4b+160GCAwrkqm62nJJGTkDZKu36ZYgloSdhrGzJ8lKjb/Ss4dlXbCZ4fhSy9UWo3UNG/yi2hP6GUs9zczqoWLr7TYbAlzuy7oMZORufnnOr3uT/e0KuLosO2xbYtDOVEb5xq00/JG6Xlqpo75VEs0CPqeCTOr5EfzjodFLAF8/VnXM/glGkzrYTJUEtq3GGf47+U5cdHL1Lck/OAKr38e38aSj97XtmiPhOl5zqmBCp59ocynFTdkObkMA/nqqTfZa1t8oCJWJasfuEJMr2/C0TdWZl3+J31zFuISlmcZn3HGAEY7axalngVG7aTmVzgb1OzOjnMilwlDutTfw== 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=k3jluhVp7ZYGWqGy5QXnikSGwOipQSy75/tgeorU1T0=; b=VzFpuTDFQlMCM7eou+7btUGrL038O8jDlKcBg1tL08z4PzDKq4UPLzl4rhqqJpBcrNR8YChueNYQx4dIS/T6FiZ/4db0IPj38j452swtdAwozXMExcOBkZ0LehWepUrFj55rB4oU05RDNrhj/3rs4x4I9WAK3Bi2bsIOl2sEUxU= 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 CH2PR13MB3848.namprd13.prod.outlook.com (2603:10b6:610:9d::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.20; Sat, 22 Oct 2022 08:25: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; Sat, 22 Oct 2022 08:25:33 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v2 21/25] net/nfp: support IPv4 NVGRE flow item Date: Sat, 22 Oct 2022 16:24:25 +0800 Message-Id: <1666427069-10553-22-git-send-email-chaoyong.he@corigine.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> References: <1666063359-34283-1-git-send-email-chaoyong.he@corigine.com> <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR02CA0056.apcprd02.prod.outlook.com (2603:1096:4:54::20) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|CH2PR13MB3848:EE_ X-MS-Office365-Filtering-Correlation-Id: 013e8f7c-67be-4de9-8f60-08dab406fcc6 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: LVpSYao9wGDs4+BtIw2RsPbssw0GJBMK/zzNO/kwbHdMaDYfkRuRHfThQIpBj8w2ItAK7fwR6KBslqB3vsKkqGc5Wt36jvkTWtZF5Ltw17Wng7MiYu/jcISSk0s8m8Iy9TML0bCdXyTViFuO87HpgCO8pVg7BwrkpVllG0MtIQYHxrEBwTHU17dSvoGo965yLz1OO6T+JlV4Zt8s8Dmm2PKqiuQX9TryF9cseJIyMQDeHPQEnwhaVkpkuXGeQaaHBBHPQXxZ5u1PmzxJQ7XS4jD3xziApOeIEpeRNQpYNqafK/f/5SxlhTM1AIuSv/wNQ8bIpK3xK9oYHCf6svy6qqK8zZ9+VJqswQ42IFeenK9HQ0yeRLmvgu10okChjbqjuGk1P+PLk0hJcJDl2u0KrH5Glck3dZfQxfzV9uVJ+cjTPzd33gVGl6b7OhyulWnrTBwR7I9Wbq+LXF7Y/mmpI+dgVli4i1BjL6vS6VJjDc1ZoPkiMG3zjdVXuGOGZCX3jEP3GBgCSbt28sVYC/ZHQONPUZu0e5De8WOC+Go0XXlRdkfvGxvqoWJi8OjajITxR868qH01X//KCvkknK4oG+wpv+aadjlt47BcrrpUAtZ0w09Q45J5Ug7JrCtx8HU4XM6m6S5XHujUsxTYZaRdJnwtqBr90MKnZbGGdNNgdgj5qd2nZwBYxyNrhvn0MhYvbAQKEBWvNEwZZ6lnJJrMgmSzMFNuekpjClQvSUOS9thdt+R/y6ga27Toeyn1Ew923P443wnvLI5na6JUpdpT9Q== 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)(396003)(39830400003)(346002)(376002)(451199015)(4326008)(107886003)(36756003)(38100700002)(66946007)(66556008)(316002)(6512007)(83380400001)(52116002)(66476007)(8676002)(44832011)(6666004)(6506007)(38350700002)(5660300002)(8936002)(6916009)(2616005)(478600001)(186003)(41300700001)(26005)(6486002)(86362001)(2906002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?ihQStJJ1QpobEX/XEu/SnPeaYZf/?= =?utf-8?q?Md8lghKUAERSShKy+TCZerSmy9j7tW7pQZMumnzLXWHKNNzWgaZn3aJBupbjRbIxs?= =?utf-8?q?LE/QKcLt7me/3UIF9QkwKdWs7iljU2pQaAdUUEEOvUtRdQojJYX7ukSd6LWGhcQzH?= =?utf-8?q?HfLGgI3QCb5vjm9N5odm64ImvE0gMFu7UL43azEmucvNFJtQW6208RLn3TWgyKrye?= =?utf-8?q?Qrf//nrOUU6ZrLL+KItezgoOhvqx7dV3RzqnpxlTu/3L4zP14OZab0XZImMtT5p2b?= =?utf-8?q?1ulA7LBTYiDWZMFMLY1g2RQ7w9B5i9p3YwHwmIAd7HDccEy6OoAku2h0Wfj1160Zi?= =?utf-8?q?Y3bcR6Vxn9ejHlp1NPXBLr5JwSO0BTGC9Bt3bZwdQspHMgtym6+g5a0oJZC+Ecmrb?= =?utf-8?q?Jm+nyACT+TuX7XNwBok4RuwGPau+QCp3JkCu8sfUKoaaQRmOtD/3ExPGfn0nL3knS?= =?utf-8?q?VAlYzKULbp2iLdiwBMoijVhUcQSlJBmJaR9kJ63qg3f2oa6TM3ZyYTgv7j2MoeRKf?= =?utf-8?q?YbIkIakeFyceRmAopzlxqqL6ZArvfbGay0bu5t1q5QNT4J/eB/QMQzQL2u7D/2T//?= =?utf-8?q?vXv24Ni/bguTPJGZrWlyBw+qFtc9ChBJVblm7liGCVehHUjaP2HVp6ybYFUmLe9nk?= =?utf-8?q?bFnfwNrLoxKKsD5JX0wfqo8dW1kFgJrdG8RPCT1krmMmfJC3lifqCs1dnJh2NQJFP?= =?utf-8?q?HdKxtFW6WKXm3LFcxyGGCbMVs8O+czzMy7oP2QOe50n0WrKIP/H43xefBnA5FzYSx?= =?utf-8?q?Ac/N/Y5qwmkOS1Gqx5VzJeNc+zc5llNef6X4r8xAUIvR9IKfndujAqAftBmWMdwQl?= =?utf-8?q?FmLueZlHzTnkHg+F3TiG5mwIPvuqwVPmAJ5iWjaKaiggHnjeEYUa0WIAtgA51eh5l?= =?utf-8?q?UB7OV5/5YW863Z/W8FLqLE0KoCBtJD3dyVe4ICeN1A0Sd9fUJGmgcZmKMlC3twwUe?= =?utf-8?q?eehLBFeoCuo1pMMsNbhTH0UNXSu0k/F3rol+H27ip/VLtz1v+46kE4fxoGNow6tl3?= =?utf-8?q?4sA+DZVjcQeHhCsIIlbvkiVncYelANvLbM9qmAzMKZyLSDJSzBY2Ocd6QIW97qUYp?= =?utf-8?q?pvJUelC5ltv/25chNvVzJlZ4ADefAjf1OgO1ANFK4zwnH53dlRtBd7Op5NJ353sGT?= =?utf-8?q?OEx8nnX+VGvI5/z+LL8ejbkBpjs0opw70zp5gVXI5W93dizgCPrEM5RhDsODL21RE?= =?utf-8?q?lfpqwPICIhCTe9+qU8dasXhOKJPgWv2bJH4v0mIgM5VgbFZUMDIYtital8m5liuLJ?= =?utf-8?q?0L3crt5uE+7dhhFj/b5NzgXdTNVSQfBOeX97Pnw3Bk3RaYFVATpSE6YKWJaRXrd4s?= =?utf-8?q?tBG9fiH9te4hm9U0F1XqSlwHNxBGubNUyHwMWrrsaQqOjqehKqEzw+49dkWSx9ihl?= =?utf-8?q?NJ+OyZP4XC+vsAC1Nm1h88Xtn+Y5KsXRpAzBGC5KrS+UbuahWdmJKXtIvlPgLzRdG?= =?utf-8?q?M9U6wITlECstJip3I4zHmSspDirry7mlxc56AhN7RGifTC0KX8ETOY6Ep8F4EniId?= =?utf-8?q?c23zWKw2M9kF/xvpWVHuScUm/Cc452QIWA=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 013e8f7c-67be-4de9-8f60-08dab406fcc6 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Oct 2022 08:25:33.1114 (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: E3L2OJr1x515gWKycsZUGc2kipASEorQ8CT3tSo6cwupbXRxafHPJcgHUBe/IFbWYB4U97csKIg5IZ0SJROyYQr/eZk3E8WZU9ge7sAazIY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH2PR13MB3848 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 f6b658b..2acc809 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 port_id = Y diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index 26d3854..0a43bf3 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -820,6 +820,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; @@ -1540,6 +1560,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] = { @@ -1580,7 +1656,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, @@ -1671,6 +1748,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 @@ -1728,7 +1822,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 Sat Oct 22 08:24: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: 118970 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 5B567A0032; Sat, 22 Oct 2022 10:27:30 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 11DF442BC3; Sat, 22 Oct 2022 10:25:47 +0200 (CEST) Received: from NAM10-DM6-obe.outbound.protection.outlook.com (mail-dm6nam10on2090.outbound.protection.outlook.com [40.107.93.90]) by mails.dpdk.org (Postfix) with ESMTP id B9F2942B93 for ; Sat, 22 Oct 2022 10:25:38 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=WmCCAta/iNQmQjtO+0XMsQoJDIBDruVQfQW1YLHVQo/pk/H0WzX9iZ6NBjkrKbNLy+9f+gcqSwCl7BTnB8HpnPIWIxcSrhEwe1M5DMqWsoSLzSnP/EYkZxb1vN/yCDkp9UpbuHFpTjfbbMETSclgTynFgqjaqlpeVP3GeaZsAP5KCeBmvawzUupef0t0DD2FCyzCeHEO2B8Yx4imz5ielhJbps25ehVSp+dTus6HNqIxSwwHPypbsONA4axDfmXqKQnyyuHDQrvYq9lUY7M2XjMdusjeuo++IYb2fkHT518ZAUlMfL4RW89RTtVjWPqOl838yTTYnyzKfG3Y577Xww== 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=nMtqURS0lMg/8oLT76o776zRa9NoNMKfLetH2x537Ps=; b=Z5zXEArbVObr9wfwYZPGm/8uYad+87O4GQL57gs+G2+2xfrN+IkLEX85Wmof+Mq/1a0+LVEgTYUtsX8kkzhKOHsfqCXk+YcPPvPQlviIjOOsP4rYwNfEYVMdmXby+DLUt1GKqdkT0b8OinlNnsd7br3QmRa9r7yLwGEQE6Fcdzej7HAAHveBkzanCtIqxHa9NzCxhOcTwUlwejj/IqU5fBU3NzhGj0gVeU0yHHxCi3yABMgNsdxVLVK1H2WMqryv85aU/lSJZkKmJcUD4DsWeopQ0iay2ouOlaeXeMQDR/4XhKZUG5peFnmRWAVAsminV90UlCzAs9FM9tpuf+4yjA== 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=nMtqURS0lMg/8oLT76o776zRa9NoNMKfLetH2x537Ps=; b=hgTYJD+vvwZITETo6pBH8WOazhScAsytjpDdBPGoBH81N0Kx+GsQE+Y41c2hj2yMDkm4f8/kakXQnkH2ThJepPDkbEqd/NVCp4Bug63biwYw6mAlupMSTjRU/yQLHWeyCSlm3T1+N8XsLRHJQsZnqDba8LhT1pXCdIk2DgE9qTw= 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 MW5PR13MB5535.namprd13.prod.outlook.com (2603:10b6:303:196::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.20; Sat, 22 Oct 2022 08:25: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; Sat, 22 Oct 2022 08:25:35 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v2 22/25] net/nfp: support IPv6 NVGRE flow item Date: Sat, 22 Oct 2022 16:24:26 +0800 Message-Id: <1666427069-10553-23-git-send-email-chaoyong.he@corigine.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> References: <1666063359-34283-1-git-send-email-chaoyong.he@corigine.com> <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR02CA0056.apcprd02.prod.outlook.com (2603:1096:4:54::20) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|MW5PR13MB5535:EE_ X-MS-Office365-Filtering-Correlation-Id: fbf7d4a9-6837-4a62-40cf-08dab406fdfa X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: xPM7DQKoFqUdZBBYe3+a2Ri3OrRheXgw8TAYkeGwnH/ZQUDD26lAKEvMRQjNCwguBAUT7KSAE84p3RBA/6wd3z35sdtcppRvSdZkFAMKH/RWz09MjXBr90lSsA44V1EFZHRD0bH7eX/AXoL5COgoTbtyvMd8Hl5+6gcLWn0+MDUve+J7MRxEiycprsQP+dtPRGOFnFRo9N7+QPJZr1MWyUvD11NfFmB2wTgBNaoPHhhP5ljrusBEUPkMSnHdik2W4rDGNZIoWg0yxk3r8mB0HfItbAxsmCaFXePfksZLCQhHXwu0ww4VcBsG7YbRs++ifni/6n+iCT1PrE9Bw6sYe1p+O1tNMfxIsbTEReng3hzNOhBdLbBkLqfSadawBIDm5BcW13p0h9H+cORLir9fwLqShZWGAF3KNO+cSGFyS0ue1QQ/OPYaaOhuU5wxutRogGogFb+6XIdHRWWIf7jjsP+eLWWd4+dHVVj0/KnbokGo7t+c7Q/TPsJx/p5+IJsi6z4Zkz1FU9mGwvsaKmjrhkqJyAPTK0MqqdNFX+ujVYAiA/oNfWHug1nWfpoHVsl7koGi0G5LqwWbDUJ/jDUj9BdRnSGktVjHEz2pWBlJ38ZiLNrNkX1KSGKXtsrPkp7AE6W6YQILONp3iSAwtXG0DgAtAiZNSVrAYsZS3SmdHUL7ypE/S1pre0+u/3e+ZQ6IBPLtoNa56LYLaTUsA4vwzftE8KUU00zx/nMKQl/nJtaxtu9CGbI7zScrDIUnPVvFUIc+1sza9HJpIgVPos0uHQ== 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)(346002)(366004)(396003)(136003)(376002)(39840400004)(451199015)(66946007)(316002)(66556008)(66476007)(6916009)(38100700002)(38350700002)(2906002)(36756003)(8936002)(41300700001)(44832011)(6666004)(4326008)(107886003)(52116002)(6506007)(8676002)(186003)(5660300002)(6512007)(26005)(478600001)(6486002)(2616005)(83380400001)(86362001); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?EGP4IkLCC9WyW2iTXzERqxrgPH55?= =?utf-8?q?yjQoXNb2oSnkYcgwFi0W9Pfl3SRR14bQXu5VvTTaB5FnC44EKJhWPGU1zIjElAGyg?= =?utf-8?q?yNMdwG9SEMAr8sS/vK5cjdIV62LeS5dLf0If3tEeCweOKltezACPqy0mf/BF18Xjy?= =?utf-8?q?FMUHiLe4FKQZLIOBw2Ni4r/mC543NmsRiNWBaYG6QvJ7AUbii+X/DTo0gBfOFuOxA?= =?utf-8?q?Y38JozzegAuRkoGYt4eedjYgba98dFKC/F8+VbqzWgUBK2Yc5wxi3LUuwM+vDnf6F?= =?utf-8?q?o9N3eIliWjxlpsaMojfpuWsjegKY1kkXj0unmtColzSY37N9cVX/l5Zj2tc5W9s2q?= =?utf-8?q?9YHqb3fJUo/0f0FSsTcGH49SghscIaPCBh1fEouwVd+6WxGQDoEta99rcTGA1wU2T?= =?utf-8?q?vD/ncUvGj1/NRQqEEWeS3D07x1ijrgSX0IDjRWq3TTzUkeLJ+CZq+AsU+qe4C9Xc8?= =?utf-8?q?hnBHG8ekQicBmZ5rAd6W5aKhEGUtYo4DuIajOBothZK+6Gbw13rkg4VpZkmX/uVnH?= =?utf-8?q?OFdcyVYbMBluobUT2m58nmJy0DJhguUE60b7HFBow1qGrGXidVlmTKrRu1oQ6UUIl?= =?utf-8?q?1LyUsG9SgOj+KIsHebi5rIZSCr7L4+nR9kpMQnSc/14kvF+0/bIYjdvseyqikpjOg?= =?utf-8?q?tbbjkGsYxIEkJ1keHUK78UtiXlV5i9qnmQcbec1y4e6y5cRReeSV2hSbL2tC5fHKu?= =?utf-8?q?PkebqFm/16DvOXNhEsJMPVszOLlc6cbEFq40kFpCmQcvAjcIekuuVud6xJCL64qFN?= =?utf-8?q?ncff9s732uoqDW5v6jSUV4UkKcgMxo0+ywGebI6I6LqnB75zLqUAW21/0XwUpFYKL?= =?utf-8?q?IlN7Dm8+sVn05a4MQe9o8Y8HvgIRa7Aea8Q0UZjI3Irv4CiBumI6Rt2VXpG1JfCa6?= =?utf-8?q?JT6ShguKWVIm5X8x8owjIoc2alYujS3t2rAPffT3hW+ewtQLNBVNaC8cwFPI8u3qk?= =?utf-8?q?fi1f5RNDYSW0arhx14ypd1cBcnGVyjzBm6QxKmYZa8MnyBCFhYlzGS7N9bugSsviz?= =?utf-8?q?oEJcUzLU0lXabuOWa3FBb2PCVv6uehU6USZP0M+oNU6iD+Nro3orRqXn2dO0OLXqD?= =?utf-8?q?alQyN9/QhOFGEQsel5aQE+3da4x/qQeFqi8I3uCVeWLggPUeNAialCjlNZHuYIBuH?= =?utf-8?q?5WnZShx5F4lU4tizsVg5PLdj94uHhQnT+NGDD0lD7tnw7deFNdJk+wu2m18GegqEW?= =?utf-8?q?81YX6FWIHbj1jTqVS7KSmUU0dnOSW1hLXG4md5n0U0FsufjXnZtudsm6g/91jgtoR?= =?utf-8?q?5DF4gLZWba3M8ZP9bMc8GvMWldiA9y7BoK4iHcKRZtfHbkYZFviDjRQpUI9Cm67rw?= =?utf-8?q?WWsajTxUwfnb3Igr76d9kdiJJaHYiQauHIdRVOY55c0Ykx4QLrhOekBfBxv4ht98P?= =?utf-8?q?/zA/nFzO72YnR7t0L3G1dmEEbIOq3JI8cVh6kzyFQFPEzGNTA4KiMTldOdpRIBw3S?= =?utf-8?q?PJqOhQLVHmM+DmWCs93lKvXUfuPSIVSfWOxaKDLrr6xaofS4vb/tO3p8tPl3K2IUu?= =?utf-8?q?hs8HrlDewpYpR94ElbkKCmcsB1gmbqZsVg=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: fbf7d4a9-6837-4a62-40cf-08dab406fdfa X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Oct 2022 08:25:35.1279 (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: rWyqKSKwcnS/UypSG8DovH1z0Gl9kz8oI5h3thvjMrH0Ir9vPtbAWo8ziGXGHqLvdY8TCFEDj8XM6lmWKZcNfl86tEuAEGKhqhy8V/Ptqcg= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW5PR13MB5535 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 0a43bf3..6f21c86 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -822,8 +822,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; @@ -835,6 +836,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: @@ -1562,38 +1574,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) { @@ -1604,12 +1637,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; } @@ -1675,7 +1719,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 Sat Oct 22 08:24: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: 118969 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 02AD3A0032; Sat, 22 Oct 2022 10:27:25 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 4D9CD42BB6; Sat, 22 Oct 2022 10:25:46 +0200 (CEST) Received: from NAM02-DM3-obe.outbound.protection.outlook.com (mail-dm3nam02on2107.outbound.protection.outlook.com [40.107.95.107]) by mails.dpdk.org (Postfix) with ESMTP id ADC3042B8A for ; Sat, 22 Oct 2022 10:25:38 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Mq34IYTnCUmxYGD19oEOQeGSupLYilfseEqhnSmUDFsrJg4ESUJhD9QB6BKyp9S2gHeskCmDB3/eGfjxVipxwuF1C+OpK0rvUAIbZ/tUOLNuRE5NkRPd1U4dzwOE0w4yUq/+9odycDeXUVep2GaTs96yE5yBO09CMfzOwK36VgjK4OXD44CHTNIFA5B66iM5pFodDy82lH9bab5F4FEexcVmRlry868vdRivwDSRbqDB1S1+Pn8hJdw3H/EcNgQrPBYlABIWTrIL/3lkhXEITu9a+YttCkfu5uG+t2mVbIcGJO7lvM7mDJr/zqmkaqYiQ5M7vCPZnJtT5D19DzHR4Q== 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=Dae+4/ViEfT3KPrUVhkKbMClYgiMtLPhNdwa41bvVtY=; b=YTE323h5OWN35WcEff9H0APM02s20UJj0sbfdvljAUdQCPMEAiLdsiuR7vauW9i+BY0vDHlr9CjHjnXk239j3k2iJancfzNiutM1uRAdDaBDrw2xgLiQG6jGYdsPS+cuugXNYEi4HxSZ1a9wnVFsW3wArkmx7WV3KPW91qCRCg93TPn1jtN20O8CQnr4CqHmJ+TQsFOL3vW/F0xt/8/i8Hwt2kzMgE3Aa5LyBoJTWRctSIIdumDaFQfVN9IFIQEmXOldqBTMLvj9ulAJzV0lQwpChALlqqie9xMuusRejsahfyA7hz24UmffHbgFwpmtibFWC6KRLyKiEGAWZCOgKQ== 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=Dae+4/ViEfT3KPrUVhkKbMClYgiMtLPhNdwa41bvVtY=; b=Ci8Zs0TKyymmMVngw0rbdA9U4wGqtb5fhKy1kJCltKsO5L3XrAc+b+Qxw6tk6FSroxfcmvDFd0NhdxIrwUni02SM/N3ZT50vos/iKVW9a7JJz81+274XzFZcffmel940c6axqWpfJs2q9QmiJ8HUWW+/MXM2cRd1wny7VGgl+xY= 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 CH2PR13MB3848.namprd13.prod.outlook.com (2603:10b6:610:9d::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.20; Sat, 22 Oct 2022 08:25: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; Sat, 22 Oct 2022 08:25:37 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v2 23/25] net/nfp: support IPv4 NVGRE decap flow action Date: Sat, 22 Oct 2022 16:24:27 +0800 Message-Id: <1666427069-10553-24-git-send-email-chaoyong.he@corigine.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> References: <1666063359-34283-1-git-send-email-chaoyong.he@corigine.com> <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR02CA0056.apcprd02.prod.outlook.com (2603:1096:4:54::20) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|CH2PR13MB3848:EE_ X-MS-Office365-Filtering-Correlation-Id: 8ab98755-044d-413b-32a1-08dab406ff29 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: LUXKq5s18fUoz5PcFLueEDpmVejEYPNH446Szrhdn17PWBkGdz84vYmkgHJCosNfaQ2YQTmWqF5YK+ni23veZDY+mDxTDSFLE/J7cW/0OGDO4u/chFna2DXiSIih1LnqE+yde0rkGJfGtPgoFnJJMnWA9MmL0zNCq6Erk/PuF6G0ADsqhGynuzGqzV2D4nYWmbtAjD4DdFvBwH/Sopq498G5rhqn1PfL5IHFFJrCW1XKGjmygGuMj/DftgjC55EjAaiPO8LPFYvgcRccldN6x8bQ5EOcTMInEz0z25WkaPMqTYdhcrg5qNFx0xdVOIv4AOCYqZTDaFC4QeGl5oJX+zRmjQFTO8GRvQPYD63UG1q7oAgZJoSHPnmsCSZx/vvEWVEBfzOT3g/zzOSpr1ELi0j0MgagYkiPtHS2J2LfRqEHUAJZuS4MvGCt9v33Z8OBrigbTLEMbifb1lY3ABxKTYIkRefVAwoFCWSqMfRO3T2q+voMR11/53JCftpvlcZ7ORqKRrniKY9islNPL6qofnOD7hROecdlSqvFBfG3T/gcFJJ/ik+OnG2JWWhrTQUoIPVJ91HqzogwZ4LrHwTqZ9rdGiSAeGaSIw1GwHal/afnh4V1UmGHAwEZQl7nMMPWWqJa0xe6gvwTYL2RuT1x6O8f4Qlw9bJfDmrAkDZkSRqfad3IUZIi6ukYkTpp1Ca5vqCgyVrK3Xr+ijIFUg0y1qiOZw8WRdM8Vm7GfonWYVcZIMuA6AqVzDl/WhP7eIGhfhy4NIKBwYqJ1DiPzIhuag== 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)(396003)(39830400003)(346002)(376002)(451199015)(4326008)(107886003)(36756003)(38100700002)(66946007)(66556008)(316002)(6512007)(83380400001)(52116002)(66476007)(8676002)(44832011)(6666004)(6506007)(38350700002)(5660300002)(8936002)(6916009)(2616005)(478600001)(186003)(41300700001)(26005)(6486002)(86362001)(2906002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?ipGHns5nzN78N/Ad346SD/puhcsU?= =?utf-8?q?whjouRJQOYneaNsa6KrdZOjiwINtzLqR72u57tErq7pV5SKYhAGd9rLJ8Hek8Io8d?= =?utf-8?q?zFCe5zzWa4nwXKGtXUaWVQfCY4FeuosVV48a3Bv32cVl3qJAcXjZmj/fg6iJ/HmbQ?= =?utf-8?q?gA7JH4E3J41ePkfsxRZLzCdN3cEpwinCQ5K0SymDxyseRizegV8ZjWgSTXhq4Hfz5?= =?utf-8?q?g1vlxK8OcPZvLyYS6PMrtWvwt2mJAmpkYyRles5yAW0Jneq4GsEYTG29IoLuJYzAw?= =?utf-8?q?uwbipPJIgPudsZ8IxTPu2T17aDhMi6ltEtkwcctbef1SH902UWkti0GkKVUk2nES1?= =?utf-8?q?gHSyqt5OjCGKBHBXVYqrd7n7XJkdm0QLxvxVmlEU6jq5tqYJK0KqfLYaKOzSkh3Lf?= =?utf-8?q?Lbo8HyDZoiaxbY1aTjnM/x2wQDMI5jCeD8VoLC/88p0tlszUo3oAQmjzjPFm2mwxk?= =?utf-8?q?YUSCMb+17Pn/UyK+xypTTq0KAuI17FHHyozhljqQ1ZECO8JwSPYVV98izZ1UqKOZi?= =?utf-8?q?m2J/CEBiXhqxNjDuXgAueE6StexZtvpVjhhfTHMFbs07nPoyUzkVa1ZwXB4MDxNGG?= =?utf-8?q?xK63uff38RK1Cn/wouPrbkV0mDZH8QlhQ9vyJVETDmP7uNB8o5frs7iZK8Zuo99BU?= =?utf-8?q?G76FtZWNkUNsFr7PLuJ9T/Dgl3/btcPrnwXxUVn7A/w8sYPeMBtevIVt/bG5DJFBv?= =?utf-8?q?H71Ud7xpIFa6zLLv5s+f6x+ztbPtUcVIfcU+QKGQRgTpjoULQp2h755qPR6DreJkN?= =?utf-8?q?4b89zE3zDtfIYb3W8YCkqFzFhwdNHv3kjPPWP4uo23XmBpmSShi1ClWh3GgyebF6a?= =?utf-8?q?S7ls7OXX1A5HR4Axktxlhj/QhApcQSSEzgkWRjq9qxGAtLc8rSnGkNBeeTmFrv4Y0?= =?utf-8?q?T/A/PCr+XR5IDMfqGJsnNuG8sXWKaOqsXBHpptTSldFhcqSaOTIVwMhHo9ZW3A7GP?= =?utf-8?q?hQ8BGCTlxQrawkgQdQgmPUqFBdmIAe7a7pzujtf5mLlqdLcU9bulm0csZKxEJmLzf?= =?utf-8?q?7csxsVCE0rreGI3lq6rdtgUNIszC0bVNZIBua/sSDj3tRyMGOCvMVsx7HJUGVMp4e?= =?utf-8?q?h06LBv0f75J2yU4CMxHtIDNZ5Xe0pdopYSNQi00fYQroFxSeXTAxMQhetypgRy7u4?= =?utf-8?q?ChOycOtAiTIubulrT3V6iRzjLWe8aHdyAGmnr4mrq/SmNP0AbX+0K6VokvKG07eOQ?= =?utf-8?q?+M978F5WV8lhJ0LFspoiZ5U9eA/iKH/7k3VuZAVfUYJRjc4RSe2L7e4Lmd5OfSBl7?= =?utf-8?q?/bnGc+ZVWhwkn7S9I8w9pdb5JnI43ZKfst8oxf6+vAI2/IYbcGPhkA1DcWMUaD9GI?= =?utf-8?q?ZGWJ7HB3/rwI7E4BCMjYN82NMJ+nBtkVrn2ZlN9POKveaERt83ze5ndkYb5rUHlN4?= =?utf-8?q?tuo6MVE+/lVEV5xsLLo+GHeLy/WJLqyUKar94AJ0qnvbpyfZY5d/qiDzxIJNfXrIS?= =?utf-8?q?O2uSfcdbNLWOM2svRUqAQvXaBwV6rQ1l3ighCo5s1JgmIa3pufNJxYpZazJ3mcwPN?= =?utf-8?q?ZdP8Q5ea0W2sgD1s13ERp15BKpTE2DdiDA=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8ab98755-044d-413b-32a1-08dab406ff29 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Oct 2022 08:25:37.2851 (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: gta7gmaDdpLQ2fPIAJzax5HXVZ1B2G3Gur4IwQfi4etQynLoIxLv3jhNxYBv2irYl78GO1n0C2q9wCNugQswLIur7v3EilokxbNTQprCwCM= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH2PR13MB3848 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 2acc809..6400a7c 100644 --- a/doc/guides/nics/features/nfp.ini +++ b/doc/guides/nics/features/nfp.ini @@ -43,6 +43,7 @@ vxlan = Y [rte_flow actions] count = 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 6f21c86..c577278 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -1609,7 +1609,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, @@ -1617,6 +1617,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; @@ -1646,6 +1647,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: @@ -1655,7 +1658,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; @@ -3831,6 +3834,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 Sat Oct 22 08:24: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: 118971 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 77F18A0032; Sat, 22 Oct 2022 10:27:35 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 0B74142BCF; Sat, 22 Oct 2022 10:25:48 +0200 (CEST) Received: from NAM02-DM3-obe.outbound.protection.outlook.com (mail-dm3nam02on2139.outbound.protection.outlook.com [40.107.95.139]) by mails.dpdk.org (Postfix) with ESMTP id C782C42BBB for ; Sat, 22 Oct 2022 10:25:40 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=e0hcPFujtxIfPLXBNo+dPm5M0fHUb8LvwW7N4Fy/eGrt70SHiFeogpf0mNsf+puxTDBwv8CrKqckSofuM6KnRzpeoVNXHXgW6hDtzf/yuq3GLvrltdDUBlGxSZfDiOBT/4UBTLaw9c7NttIV2a2eo9AjqNkcEtxujvourpQIP5P1ywO2DAhf/U1ZT9yCHNyDOEHb1ELLeTEne4SmV4lvTF4dPGJ+0JTIXw0UFn8ADlasaR3tb9xOOj+lFzcb5kpJ1zOJ9XTc87xRp/nTc/fQIv253mXA0aqmvAglTyNFj76c8azyD/HJPzgPm5EYmooIsqTiYeA6ZykavtYWKZQAxw== 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=YJko2Gg/r873WKtqc7pq9o54YkWOt2o4y6zD+tDwFYg=; b=nVrsMBHk9lAUMkts0UHrch8PRPxHlqXE8rECWE7NW0rP/15v7kx4C6oK6h3C16qv1pwJD3vd+H9RoN62/SLxpZgL4pDery0GHkQZgW5lROPMcRFhm21UIebWrwsgGAnVS8clfSf9pyf3LDgkcgknoqjxW7kDiOPEy378eUbdt0EbgfV2ub9xLjwHmlDu02HjbpdEPTXDnUEU0/9VB7VAPMwrFQBHXqfKhuN5gym+Dc9pUWjv4ENGXiSIjeLtWX6PqOmKIOcyiv3e2D/R5wY/v5dLU4A7Qie0HS5u58ADG5EeltzNqgI6ESGxSh87AHMdMbwUAmEqYXt2rDR8qwyiYg== 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=YJko2Gg/r873WKtqc7pq9o54YkWOt2o4y6zD+tDwFYg=; b=toRZFQEYBwG7uXNVV2MeeYSfrxJoHDWOHPCJVcAA1pYNV4EuX70gF5wNYsO2Gt+xlZrxY9JyLk2ay/7Hg5QHraD34HDKzLkQ8A7/S/8vsaFYp4wF+U7Qd7umWhSr9IMSNZPBDf5KAjEM1oWg6Nh+rHSUTCQ5ekjsAoLPAE8BJoI= 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 CH2PR13MB3848.namprd13.prod.outlook.com (2603:10b6:610:9d::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.20; Sat, 22 Oct 2022 08:25: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; Sat, 22 Oct 2022 08:25:39 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v2 24/25] net/nfp: support IPv6 NVGRE decap flow action Date: Sat, 22 Oct 2022 16:24:28 +0800 Message-Id: <1666427069-10553-25-git-send-email-chaoyong.he@corigine.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> References: <1666063359-34283-1-git-send-email-chaoyong.he@corigine.com> <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR02CA0056.apcprd02.prod.outlook.com (2603:1096:4:54::20) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|CH2PR13MB3848:EE_ X-MS-Office365-Filtering-Correlation-Id: b7ba264a-9c5d-4e3d-f482-08dab4070076 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: F3V2pg9mYhGxeb885jYiYASJafCHK0w3wNnHVNi+Onx2O1KlVuQs2XtPIo20zC28erP3Nt0gzQwfAwNZ8zGMeVlQdeerZ2GF4C6O5Z3X7/pQvs2XpEMzaJgsciGBccS9O+u9jH3UlIHH+LMT1chCTRNMuv63PFDgvAD5BeCP10kgLOAwEhJGCeh3ha/qgHVF0mnmra0rZn5nvmtnFX0Ybcqg6EfjrTiTSWKM1nxrb4WLyrQmqC47nCiMCsek5XOeCs30pKj7uijEQv5mOD+64wBEKUEGUKejoVr5rrHwbIzXMRWIL8Y9C8XxwOBeTOVjt5z+IWdU/cblEODn15JlGDcImTQfHqhYY3IuzAcmwYFf3iC4WFDsMeGzs9JPHpTaZ8/QGqf7v/e9BZhZVqURX5uhAXegeCzLddPLqxBfa/2sHgF7ZTn4vfELZqpHOumbp3zIliOD+NFdSvSWWfq2ncEr3zhc5QEqe1CqNk3g2JcuiU/dMw2orjrCWZ3+ScrEuZes7NmrOzVSoPlZyB+yScQOZanSh0s/QW6o6aaULCB+BX0Cneu6qJqPzNAdlYp+maPKqzM7VFEjnE0LszxUA0nC7uVFJQd5Gt7acScFxatUzufOvgxrIPFzkArsI7lENFo3nSUipA9IHzRvIz52/E4EqvJhIWbi4+qPYxSEwQPkvXp7i1I6FOp1bgj498tWoagMaGoGqq9OxUM9FJlsN1iLYHaeUtXtwiS+QoUXBEx59w5Ft1dfRd0uN5N97ci1VunPI6yjDIVx7LOb/TC+Gg== 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)(396003)(39830400003)(346002)(376002)(451199015)(4326008)(107886003)(36756003)(38100700002)(66946007)(66556008)(316002)(6512007)(52116002)(66476007)(8676002)(44832011)(4744005)(6666004)(6506007)(38350700002)(5660300002)(8936002)(6916009)(2616005)(478600001)(186003)(41300700001)(26005)(6486002)(86362001)(2906002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?XbYP8SwnFLGxY20BQ4HEkrV10WZD?= =?utf-8?q?rfasVq9DTFqyOrOMAMn2rwzc0iD1n+KCl6RY1OO1728PiV9ybwl7JKeEVobQxhk1u?= =?utf-8?q?ZexYh1lBCT+IRY3DNVoLlh8G3PbDuBXSbvZsQB9j1h6I7w1//b1qpT9jnRaF7VfQw?= =?utf-8?q?oBsNiP7xVLYhkSpbjATFw8mHm1QAMEizXBaQY5vqFNaS9/8mPvPG/swAZ1tYaymSX?= =?utf-8?q?nAYVmWjSNJvxtqtW4Efx35QQ0DhVnifjv9KQlam9ky3hd0T4qhkIZGPWlL1qCQkdQ?= =?utf-8?q?NEYD7PZhE6OqbswAmHY1Opc5SYcKaCedM0b3SfRdzEGMQg52UvOObRcNNiwHN515L?= =?utf-8?q?E7oSmAmxGZPKecl8OsYqIsJUPPtfv3pm5opfUQsbCKc5O+hUhjncq9rHRjjXdeFSv?= =?utf-8?q?mksnJRPb0D9hSw+FN1TFPSpSHeKvCY1m6rwprrTmgNNsbIe2Q/duQIYaWlOFaeVmH?= =?utf-8?q?otOoQRtEbBf7614fK9//FTv/kP3gDQ+yYqHU6tgDruFzSQUdH0uzvqsPJduIoiEjz?= =?utf-8?q?m8bE77nufhfP/WnZMYDaLeXI/RIfEOPiyR81pkluAbHgRZe+h8dpZWx7sZJ0BoSVT?= =?utf-8?q?yfQFhmWnZluGJrulrzyGJDyYDJaYfiPmcywWh4U1Or1n+sITuefHo63bin0GCVzfk?= =?utf-8?q?NLXPcPD1OvzvOOwptaWVd+BeIPiH1SMABfBiAsNC6jQLv0kEhtNnSEOcVOYLDH3oH?= =?utf-8?q?N3VH5+Zj/ujCXXeu0K2umP1ZF5rhVsPjEGAmLNKKWocQjent5Q50js+aEXTAOiEm/?= =?utf-8?q?BGaT6YJMx6QGN5IvAH5zOY3LmqEG15VUam0A7Jfc/NFf5oLZB3/ck2aEs1cnaw7v0?= =?utf-8?q?YrIzV/Znp2KRScEjy73FJ28Dtf4Yr2u1cxzVek5bYBySXtzI3m7/0vlxfOi0cB6mT?= =?utf-8?q?XUa5tCYJXYvNsqmxnWiDJxk5w8edUneT21W+INdUgwi+tawh+VI4nt5DSuMgIBqXU?= =?utf-8?q?eyKufiDBHibh/mekvPcC49IVyb72VZjQBRbtJWEj6Q+z9UbRWuJhgeqDEX7lKYubS?= =?utf-8?q?Y/Sbg6LjXh3sdthYMmWcrfKCV7Z6S5UsBTpYPyWz1nXt4wD2MbaAme+ikaVJtF1U/?= =?utf-8?q?1VTJJNwl2TIheK9IAcRbVmJI4e2V3fa1ip2rA2jbQBPUI+A8uguAidM08+KKKEP/E?= =?utf-8?q?u5TqhBjr0MceDg77ZwpCs4jb5hs17lnFsfi45pif2+SbJQfGe+FfwMq8RiuU7r+al?= =?utf-8?q?VuAu6YMlxKAlxYf8e9ArTOIs8UR52xVSHgO9fZu8edEhQ9ykiWjsMORO0GHqG0tJ8?= =?utf-8?q?5DaAuaADqWv6p3F6aaAambCCQORwHUA8k+HC9YxLOuQI9ClJ7UDRy2HGDJyS7JrgB?= =?utf-8?q?yteOk/SpDSOlVvrQA9YkcnRLLyJ6OGEv85ZFtAsv9NTsc67DSBosVNbD3wTQqviHT?= =?utf-8?q?5G2LRSIaXa2q9D1PefzWjPCDN7uGqh9C9Y3NXixocqz+T+yZmmLK1DPntJDafLLrQ?= =?utf-8?q?5I61LtNaFfXEN4X6MGiwVhRgp/ImQgQHr9NSph/aTPzczxW8uw1wMUWQS6A0ApKPs?= =?utf-8?q?qM0R6a1aLekrKphEB5x3qaPRFe/7sjSmmQ=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: b7ba264a-9c5d-4e3d-f482-08dab4070076 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Oct 2022 08:25:39.4568 (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: RhnCLH6SPs5qdvNcrmQnjGXMU/yBgS85PKHuOKsXDdtkOqEka/g6LRN5Iapd+PgjydD6h8W72Dx65OtI8cotR5fsU7DhvQa28F+OAkzE/kU= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH2PR13MB3848 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 --- drivers/net/nfp/nfp_flow.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/net/nfp/nfp_flow.c b/drivers/net/nfp/nfp_flow.c index c577278..4c6cfe4 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -1643,6 +1643,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 Sat Oct 22 08:24: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: 118972 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 69900A0032; Sat, 22 Oct 2022 10:27:40 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id E4F0242BD1; Sat, 22 Oct 2022 10:25:48 +0200 (CEST) Received: from NAM02-DM3-obe.outbound.protection.outlook.com (mail-dm3nam02on2105.outbound.protection.outlook.com [40.107.95.105]) by mails.dpdk.org (Postfix) with ESMTP id 5D15742B9B for ; Sat, 22 Oct 2022 10:25:43 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=R3w1j0/yNPlzysk+jICZpW/Cgy1aQ9nJzfcNqM0+W4krCs1u7qksY/PZzR/nAIfAKl7fj9vZeqlCus28IIYbDrP0jw4H+squdRQ/SMsxuprjC4MeY7RFzDio/N+UbA/rti5J7OX04gB51O3Cbo2LKpdUcknXOwGKF/hr53uVIfMuCQMiKpPX9UfrkC0VTAZWA1VVP0uGs+fzMI8nRGuwJ/kOLuVkQIrplayY4tzzourn9KHYGb6kJDZT6S0FOeVyEXAmaMx3ZQ1j7Z6mPZpNmqkgw3HPqJsgqXRYrl630JsXWPYYDgVAyOZvMC3JQtChwd9QTJd5mNxQXVpXoKoy+A== 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=IcApbIvcqYAMW4t3PdmKQq5sapMOjnsmcxxevrUL1mw=; b=Hjj9CoCndhr8wUbOvNTfuYl767znvLxZ2U9WuPGu2Hduh/ngbZBhMj41Ub5aVLsgpBvR6EZeC9+7cSi8EJ706uCv8UOkZf05IX38KR+JfEZyD9klx6/0JQEqWnuhID48lGCK3ONxo0lnRW7YBzq2gyS+HyNHmzEsJL/mFCuYFFzpepysAz7UcsBMHZPFokzFik4QywakpXApQ0YahNl9xzyKVImCEKE9CTgYsfrYCF55aNvtJsFwrjxVisKwirRuYiJDkzuOR7fBuow/HecM06KLnH72GtyRkoM0z+fAVIbGEQv5RSNRpjlq5O1PxvRHksw45lZ7dax5+TC5tGGKcw== 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=IcApbIvcqYAMW4t3PdmKQq5sapMOjnsmcxxevrUL1mw=; b=dt+1IQL4Q46ysXwbGtqdFN76NQW3pcRaiHDg5YbnSwFIcEqqcE0Z3ArouryCxF4PGOq6bBv7b/vTRTzxIUmG8aFulfq1FzMvlojiihxERX6a2LaQUSlcyXwN9sKigQUfGuR/9RcQN2bdNQey+TcnAjj+dzJ/cShdWcj0GzXNM6w= 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 CH2PR13MB3848.namprd13.prod.outlook.com (2603:10b6:610:9d::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5723.20; Sat, 22 Oct 2022 08:25: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; Sat, 22 Oct 2022 08:25:41 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH v2 25/25] net/nfp: support new tunnel solution Date: Sat, 22 Oct 2022 16:24:29 +0800 Message-Id: <1666427069-10553-26-git-send-email-chaoyong.he@corigine.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> References: <1666063359-34283-1-git-send-email-chaoyong.he@corigine.com> <1666427069-10553-1-git-send-email-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR02CA0056.apcprd02.prod.outlook.com (2603:1096:4:54::20) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|CH2PR13MB3848:EE_ X-MS-Office365-Filtering-Correlation-Id: b8b12573-099f-46ce-171c-08dab40701c0 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: NkKuvX7cVUnKhh4qaZAQF+2XHZeiq+nsxg8TR2x89OReBxa3ChU5beNSxMsxtzAszVhXIFpT+ewxJbIwSKYOJ/EhoMXlpF/vILinRpQc8u3PfJCaMh/sFSRQmy/H++r1qmLgv26euHspYqW9tb4QXBVOvSIVkTd5nfzCJ9mw7azHTCDhZ022xfCj7xF/gmQO2ScqJLhu1e/fg17QY1xA+5kBF9pixgFNFVflvV7pYUopRMAdNDM7EOLwmb4Scsc0Sy+7jZp/EvVgKiMPIS5R6fjFnioVtAco/2a2KRMM65Rhj/jf+zD/o4akSHtoSr+8AImnvUiqGigk/8ZHsKTWdpg2kscFLe+xfSIDrSizzzRfIvzhrrG/tLM85LV1+aU6NOTx2+jaOnl3xGh0Rve/19rxg+vqyTOGJmgdja5eK4O3PORw6UunyE4kn7KhtLobMT4u/lZ4MBP97eLUwarcJFPrFeXlN/cZlIqsDHHInflrZHPMmT+CI5nWxl82LVPRgNQvjsxxayVz2pFg52St5pzU9/lyECkz/md2F+E+0NnuRa9Y1GAuqtafUxXAOYkk1ETnuOBicknaKj73MZVYLwGTNPcRtI48rJfbwJIlAFvERoFm42K4SIo2cESCgVl1hM3c5qOcUE7xGxdieOXnVjin1FgIErtWk2D+JoZFbdYeG8PFRs0LX2Kppq41hGPEi6sfZLMEW+ZQGIuD6oEkcvJocXA6wOY5m+iI9aLa6gzv7S8+2pdu5jRwPrjwYbu3KOa3+hBJTT92u6ljwheptg== 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)(396003)(39830400003)(346002)(376002)(451199015)(4326008)(107886003)(36756003)(38100700002)(66946007)(66556008)(316002)(6512007)(83380400001)(52116002)(66476007)(8676002)(44832011)(66574015)(6666004)(6506007)(30864003)(38350700002)(5660300002)(8936002)(6916009)(2616005)(478600001)(186003)(41300700001)(26005)(6486002)(86362001)(2906002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?gVciGrKFr+kLMPdT3V2eW6o4+SOY?= =?utf-8?q?ojui6r2ORUfugvh9i4k4UaJi7ONrCZDSzsLHkcwWPDtalu15qasiS+NGlJEsIsHOS?= =?utf-8?q?dY7PtjJi6mHHc2llQUlynIJPWX6iLA9kp5BDVn8RGxlP0OPPOLm1YP0XIhf4yIMyc?= =?utf-8?q?VMKnaPLPIau3LSTb4SZR+p+AjO2kbIu9XfQeRmQdZjJ0bLRWGIGvhte752c2XsYHV?= =?utf-8?q?eFpOgWJvCllZBCw8yGPrJIl6AMfK3MiLLabpf+Lx3vhMJfzcSvM2gXvn2IjcNmbuA?= =?utf-8?q?xxfC2Qk4R9Mb4YyofYGab9uZneSVFXsX35TAiavHrha+NVWgP6Kg/jLIgyTQsK0mp?= =?utf-8?q?xuZvrU033CMm3+4hlMkI2weJUbMJGcyva+H/h2DSXN1JqsW9g60IFW0i72n8AZH3o?= =?utf-8?q?Ys+nErmHMilZPuSE2MSPpAajTlTI3FOsNd/KiG+Um+qb5PT7zbKuxXGZV0DPBRZ81?= =?utf-8?q?a7cP3vUP57RE/CKAYdyep4x3vlGAW74baxixZ9kTDeaRfeJ6prxLSZz6oKA50oGCY?= =?utf-8?q?/V/Tk0jxbuSFgxsE5UvrgwAh0g7WfGyf0Kwf++rI3VSIPqrlD9jIetN2Wy4a7y64N?= =?utf-8?q?CtVizkaazHynjwCVlW2X+vwGbPeSTtwszFSgnKPYT+IZ2uxpX4hkL7xcuGiVp6sif?= =?utf-8?q?uOQyo+2ApeuYopWmRtvbWE+m5ftf/Fy4WEwcWuQsixOS08u95c0wG4/Fnk5hlAnRS?= =?utf-8?q?yt6zaH9wE8oTM+WbFAsM5HiyH6xgwgtsI0Pwg+4hJvXbaAb9ACaCvHCIE80eFC4vg?= =?utf-8?q?CDrYOasyGwEt/lJZ6W/ymlTUB+ehhgP19MHGjUGX7PPpkCdkG96ZJVmBeUUTLFSEz?= =?utf-8?q?ToXrUqMwCVZyumMI1TxCh5u5+/Z8X9YmIoTc4v8T16d7P3DVaKzISVAEnQ/bgO8T8?= =?utf-8?q?WXWa3hijZjLmcS4FFQ568TH7RPPRDpOFCyvdd+doJEpFYdj/geSlHjSSFayGjmujJ?= =?utf-8?q?g7OK82lLa+t4ZAIMJ6gCyLeLmlrosmm51usO4uW9Yjc5lmqy3u/AHg6OvphnZHFE4?= =?utf-8?q?9ZuU+yesy9r6FcjR/DEBBt1RWT+UTqvSuFt3JQd9y6l5heAOIXoOpFzoQ/rVAL42i?= =?utf-8?q?Nd5UGXOsyWMU7p6m9AI4UfaKQLOk0e0a6Lvmdpk09+mFUoMX2U8loagQMFztQImfN?= =?utf-8?q?svt46s3LW59rCHfL20kHamfms+SD6OGTB16QMFiR/A0hM9S28F+iOMiEHkItu/6Nk?= =?utf-8?q?Vwatyt33xXrS1N6BwtuK4Q8vBcv0w7O+6amX2ve9Sg6UcKsMvIoFjhnb5MvOY44qm?= =?utf-8?q?iqq0V2hdOZaUxYtZGTSDkqQTHMKGvt2uhQfyn5aSQAEP+qKibjWm4o0fwFylJ2KBb?= =?utf-8?q?ng5wIjXgtZuKVYyJiD2Em4jdHBdNL/ZbERSflz+NcrphQkm590vcOsy1hftXiPTgF?= =?utf-8?q?ORj/FiihjBqDgGlXCRcorDfXkphaga9XWGsJen76sfjkRy/gNvq1PMYJaicLjTHEw?= =?utf-8?q?8SIfUbfuQ4pMOhuBZl/x9bk+Tp4UQDVaCMeH5fzsajgEf0BOpFpxhgbZavonB1EuV?= =?utf-8?q?wKao5NNtdei+VKROkpfFVyedgZGxmvwk6A=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: b8b12573-099f-46ce-171c-08dab40701c0 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Oct 2022 08:25:41.6451 (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: 0NucwA8jHsNLYJGkJ235pSXA7RHh74B9ODHIMMmqq27CzWppUNfh3TPQ4N7LNDapQy+RnN5ueX3qTsFoyYpQ/0giGin2dcZS4W32D6QBtGo= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH2PR13MB3848 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 41b0fe2..aa8199d 100644 --- a/drivers/net/nfp/flower/nfp_flower.c +++ b/drivers/net/nfp/flower/nfp_flower.c @@ -1074,6 +1074,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; @@ -1115,6 +1117,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 12a0fb5..ab8876d 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 @@ -55,9 +70,18 @@ struct nfp_app_fw_flower { /* service id of ctrl vnic service */ uint32_t ctrl_vnic_id; + /* 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 4c6cfe4..01494e7 100644 --- a/drivers/net/nfp/nfp_flow.c +++ b/drivers/net/nfp/nfp_flow.c @@ -2384,8 +2384,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; @@ -2419,11 +2421,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; @@ -2432,6 +2440,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); } @@ -2492,8 +2511,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; @@ -2527,11 +2548,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)); @@ -2540,6 +2567,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); } @@ -2557,12 +2595,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) { @@ -2590,6 +2630,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; } @@ -2877,12 +2951,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; @@ -2933,18 +3009,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 @@ -3654,11 +3732,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;