From patchwork Sun Jun 13 00:06:48 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ajit Khaparde X-Patchwork-Id: 94141 X-Patchwork-Delegate: ajit.khaparde@broadcom.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 C5BECA0C41; Sun, 13 Jun 2021 02:14:24 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 7ED1A4120B; Sun, 13 Jun 2021 02:09:23 +0200 (CEST) Received: from mail-pg1-f180.google.com (mail-pg1-f180.google.com [209.85.215.180]) by mails.dpdk.org (Postfix) with ESMTP id 4EAE6411AC for ; Sun, 13 Jun 2021 02:09:21 +0200 (CEST) Received: by mail-pg1-f180.google.com with SMTP id e22so5604622pgv.10 for ; Sat, 12 Jun 2021 17:09:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version; bh=Vp1bPwQzO041fEjmtXku154Y0wskw1TmIyBfIpksXbU=; b=MlVNyvu893OEKiq2RPTobnbgZyMfqmzR5til/1wz/ZmemHDHwn6T1hdBOgjf3Bt9ke zVwDNM1P8DUAztM6kcfRHinGF3L0lEu3vOLcbiohSD5ONj3H4wPOijvdXGISMOdnZYMK UqNtEq1AC9oYAmHTjeSkYNmsYDpkBRVXUPU5E= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version; bh=Vp1bPwQzO041fEjmtXku154Y0wskw1TmIyBfIpksXbU=; b=k0nI7xFMd1AKCLzt7tOTlWnczQTqDeR79W8HH0NPxOmBtAEu/Mu+AFtTsMMp5CudYA CdAlXZDRKmm2OFkRgZsxdbtQJCZn1iH7waySFMxv0W4dTrSYfTx/dwY7UPqm+gPbN09x MFLjETmOL/T0hT8XsmfVe63ewyDt6wCA2+u81XLWZGyiEeV7cXv6aV6MxZM+/zw9hx7C 11VSWY8xoE4YCtD+G80SM0so2I19nsa3jryXHfK+QiAZqHAkGk5MShqTXARAWMY66xTI fy9LyxIiR2OSkmVZ/tyeyX4ePUPh1Fh9qUySRZfufrRemqSHcNxkdlId+iOJ+x25SczD Wasw== X-Gm-Message-State: AOAM533ww/bhlXTjRDwk8DyOWnubftZckode0nhGE6YNBWe9NQgYmEKC wCv6p40hxx+LS7qdJr64sBiYcQYciXHdlLwbacKUsV9HAj+EhadtH/ofEdw6wNnkF79CbumHtmV k8ihjlIOSdSCR0OMg5mXrEv4BajjEJrIA6T8XA2YVAYY+GWCYPryYXpgrENKwWxQ= X-Google-Smtp-Source: ABdhPJzYEeOcLOGrnv3gFv7S5zWNB5LdNagIeyc3XHYRCybBi6s1uq+/bZiexG8uQ7Q9xnsENA2OBg== X-Received: by 2002:a63:5064:: with SMTP id q36mr6207701pgl.196.1623542960101; Sat, 12 Jun 2021 17:09:20 -0700 (PDT) Received: from localhost.localdomain ([192.19.223.252]) by smtp.gmail.com with ESMTPSA id gg22sm12774609pjb.17.2021.06.12.17.09.19 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sat, 12 Jun 2021 17:09:19 -0700 (PDT) From: Ajit Khaparde To: dev@dpdk.org Cc: Kishore Padmanabha , Venkat Duvvuru , Randy Schacher Date: Sat, 12 Jun 2021 17:06:48 -0700 Message-Id: <20210613000652.28191-55-ajit.khaparde@broadcom.com> X-Mailer: git-send-email 2.21.1 (Apple Git-122.3) In-Reply-To: <20210613000652.28191-1-ajit.khaparde@broadcom.com> References: <20210530085929.29695-1-venkatkumar.duvvuru@broadcom.com> <20210613000652.28191-1-ajit.khaparde@broadcom.com> MIME-Version: 1.0 X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: [dpdk-dev] [PATCH v2 54/58] net/bnxt: add ICMPv6 parser to ULP 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 Sender: "dev" From: Kishore Padmanabha This patch adds support for parsing rte_flow items for ICMPv6 flows. Signed-off-by: Kishore Padmanabha Signed-off-by: Venkat Duvvuru Reviewed-by: Randy Schacher Reviewed-by: Ajit Khaparde --- drivers/net/bnxt/tf_ulp/ulp_rte_handler_tbl.c | 4 +- drivers/net/bnxt/tf_ulp/ulp_rte_parser.c | 48 +++++++++++++++++++ drivers/net/bnxt/tf_ulp/ulp_rte_parser.h | 5 ++ 3 files changed, 55 insertions(+), 2 deletions(-) diff --git a/drivers/net/bnxt/tf_ulp/ulp_rte_handler_tbl.c b/drivers/net/bnxt/tf_ulp/ulp_rte_handler_tbl.c index 7bd499faa6..35e9858727 100644 --- a/drivers/net/bnxt/tf_ulp/ulp_rte_handler_tbl.c +++ b/drivers/net/bnxt/tf_ulp/ulp_rte_handler_tbl.c @@ -346,8 +346,8 @@ struct bnxt_ulp_rte_hdr_info ulp_hdr_info[] = { .proto_hdr_func = NULL }, [RTE_FLOW_ITEM_TYPE_ICMP6] = { - .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED, - .proto_hdr_func = NULL + .hdr_type = BNXT_ULP_HDR_TYPE_SUPPORTED, + .proto_hdr_func = ulp_rte_icmp6_hdr_handler }, [RTE_FLOW_ITEM_TYPE_ICMP6_ND_NS] = { .hdr_type = BNXT_ULP_HDR_TYPE_NOT_SUPPORTED, diff --git a/drivers/net/bnxt/tf_ulp/ulp_rte_parser.c b/drivers/net/bnxt/tf_ulp/ulp_rte_parser.c index b1a6b3de36..b8e69ffd1e 100644 --- a/drivers/net/bnxt/tf_ulp/ulp_rte_parser.c +++ b/drivers/net/bnxt/tf_ulp/ulp_rte_parser.c @@ -1599,6 +1599,54 @@ ulp_rte_icmp_hdr_handler(const struct rte_flow_item *item, return BNXT_TF_RC_SUCCESS; } +/* Function to handle the parsing of RTE Flow item ICMP6 Header. */ +int32_t +ulp_rte_icmp6_hdr_handler(const struct rte_flow_item *item, + struct ulp_rte_parser_params *params) +{ + const struct rte_flow_item_icmp6 *icmp_spec = item->spec; + const struct rte_flow_item_icmp6 *icmp_mask = item->mask; + struct ulp_rte_hdr_bitmap *hdr_bitmap = ¶ms->hdr_bitmap; + uint32_t idx = 0; + uint32_t size; + + if (ulp_rte_prsr_fld_size_validate(params, &idx, + BNXT_ULP_PROTO_HDR_ICMP_NUM)) { + BNXT_TF_DBG(ERR, "Error parsing protocol header\n"); + return BNXT_TF_RC_ERROR; + } + + size = sizeof(((struct rte_flow_item_icmp6 *)NULL)->type); + ulp_rte_prsr_fld_mask(params, &idx, size, + ulp_deference_struct(icmp_spec, type), + ulp_deference_struct(icmp_mask, type), + ULP_PRSR_ACT_DEFAULT); + + size = sizeof(((struct rte_flow_item_icmp6 *)NULL)->code); + ulp_rte_prsr_fld_mask(params, &idx, size, + ulp_deference_struct(icmp_spec, code), + ulp_deference_struct(icmp_mask, code), + ULP_PRSR_ACT_DEFAULT); + + size = sizeof(((struct rte_flow_item_icmp6 *)NULL)->checksum); + ulp_rte_prsr_fld_mask(params, &idx, size, + ulp_deference_struct(icmp_spec, checksum), + ulp_deference_struct(icmp_mask, checksum), + ULP_PRSR_ACT_DEFAULT); + + if (ULP_BITMAP_ISSET(hdr_bitmap->bits, BNXT_ULP_HDR_BIT_O_IPV4)) { + BNXT_TF_DBG(ERR, "Error: incorrect icmp version\n"); + return BNXT_TF_RC_ERROR; + } + + /* Update the hdr_bitmap with ICMP */ + if (ULP_COMP_FLD_IDX_RD(params, BNXT_ULP_CF_IDX_L3_TUN)) + ULP_BITMAP_SET(hdr_bitmap->bits, BNXT_ULP_HDR_BIT_I_ICMP); + else + ULP_BITMAP_SET(hdr_bitmap->bits, BNXT_ULP_HDR_BIT_O_ICMP); + return BNXT_TF_RC_SUCCESS; +} + /* Function to handle the parsing of RTE Flow item void Header */ int32_t ulp_rte_void_hdr_handler(const struct rte_flow_item *item __rte_unused, diff --git a/drivers/net/bnxt/tf_ulp/ulp_rte_parser.h b/drivers/net/bnxt/tf_ulp/ulp_rte_parser.h index 66abe8e656..bbba10108c 100644 --- a/drivers/net/bnxt/tf_ulp/ulp_rte_parser.h +++ b/drivers/net/bnxt/tf_ulp/ulp_rte_parser.h @@ -147,6 +147,11 @@ int32_t ulp_rte_icmp_hdr_handler(const struct rte_flow_item *item, struct ulp_rte_parser_params *params); +/* Function to handle the parsing of RTE Flow item ICMP6 Header. */ +int32_t +ulp_rte_icmp6_hdr_handler(const struct rte_flow_item *item, + struct ulp_rte_parser_params *params); + /* Function to handle the parsing of RTE Flow item void Header. */ int32_t ulp_rte_void_hdr_handler(const struct rte_flow_item *item,