From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 02976A0C4D; Wed, 13 Oct 2021 02:24:52 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 80E344113D; Wed, 13 Oct 2021 02:24:34 +0200 (CEST) Received: from shelob.oktetlabs.ru (shelob.oktetlabs.ru [91.220.146.113]) by mails.dpdk.org (Postfix) with ESMTP id B5E914067C for ; Wed, 13 Oct 2021 02:24:29 +0200 (CEST) Received: from localhost.localdomain (unknown [5.144.120.72]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by shelob.oktetlabs.ru (Postfix) with ESMTPSA id 7A8147F6F8; Wed, 13 Oct 2021 03:24:29 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 shelob.oktetlabs.ru 7A8147F6F8 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=oktetlabs.ru; s=default; t=1634084669; bh=DvO25a3MB00hIGTIv5UM8BkpKUJhXitKGLqzZUKCbcw=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=wkN0pkr64TStp77ydUUAWpp49kI9TZw8sqtlfsu/LTVtQBFcWshWACH2wSpCv3mG6 KBfM39wmHxqfq6dODsP9ZcfC6/TbXZl4wPlkq6DMqXuIE5xBPPXMQh4leOO1/NDHHi vs2d5CuTONBj9XvPRYeglCkaoZl+cehw9Maqv/iY= From: Ivan Malov To: dev@dpdk.org Cc: Ferruh Yigit , Andrew Rybchenko , Ray Kinsella Date: Wed, 13 Oct 2021 03:24:09 +0300 Message-Id: <20211013002415.24453-5-ivan.malov@oktetlabs.ru> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20211013002415.24453-1-ivan.malov@oktetlabs.ru> References: <20210929205730.775-1-ivan.malov@oktetlabs.ru> <20211013002415.24453-1-ivan.malov@oktetlabs.ru> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [dpdk-dev] [PATCH v3 04/10] common/sfc_efx/base: add RECIRC ID match in action rules API 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" Currently, there is an API for setting recirculation ID in outer rules. Add an API to let action rules match on it. Signed-off-by: Ivan Malov Reviewed-by: Andrew Rybchenko --- drivers/common/sfc_efx/base/efx.h | 13 ++++++++++ drivers/common/sfc_efx/base/efx_mae.c | 36 ++++++++++++++++++++++++--- drivers/common/sfc_efx/version.map | 1 + 3 files changed, 46 insertions(+), 4 deletions(-) diff --git a/drivers/common/sfc_efx/base/efx.h b/drivers/common/sfc_efx/base/efx.h index c835b6749c..8975c6e747 100644 --- a/drivers/common/sfc_efx/base/efx.h +++ b/drivers/common/sfc_efx/base/efx.h @@ -4203,6 +4203,11 @@ typedef enum efx_mae_field_id_e { EFX_MAE_FIELD_ENC_HAS_OVLAN, EFX_MAE_FIELD_ENC_HAS_IVLAN, + /* + * Fields which can be set by efx_mae_match_spec_field_set() + * or by using dedicated field-specific helper APIs. + */ + EFX_MAE_FIELD_RECIRC_ID, EFX_MAE_FIELD_NIDS } efx_mae_field_id_t; @@ -4373,6 +4378,12 @@ efx_mae_match_spec_mport_set( __in const efx_mport_sel_t *valuep, __in_opt const efx_mport_sel_t *maskp); +LIBEFX_API +extern __checkReturn efx_rc_t +efx_mae_match_spec_recirc_id_set( + __in efx_mae_match_spec_t *spec, + __in uint8_t recirc_id); + LIBEFX_API extern __checkReturn boolean_t efx_mae_match_specs_equal( @@ -4509,6 +4520,8 @@ typedef struct efx_mae_rule_id_s { /* * Set the initial recirculation ID. It goes to action rule (AR) lookup. + * + * To match on this ID in an AR, use efx_mae_match_spec_recirc_id_set(). */ LIBEFX_API extern __checkReturn efx_rc_t diff --git a/drivers/common/sfc_efx/base/efx_mae.c b/drivers/common/sfc_efx/base/efx_mae.c index d87949a6c5..154b6e1cdd 100644 --- a/drivers/common/sfc_efx/base/efx_mae.c +++ b/drivers/common/sfc_efx/base/efx_mae.c @@ -473,6 +473,7 @@ typedef enum efx_mae_field_cap_id_e { EFX_MAE_FIELD_ID_HAS_IVLAN = MAE_FIELD_HAS_IVLAN, EFX_MAE_FIELD_ID_ENC_HAS_OVLAN = MAE_FIELD_ENC_HAS_OVLAN, EFX_MAE_FIELD_ID_ENC_HAS_IVLAN = MAE_FIELD_ENC_HAS_IVLAN, + EFX_MAE_FIELD_ID_RECIRC_ID = MAE_FIELD_RECIRC_ID, EFX_MAE_FIELD_CAP_NIDS } efx_mae_field_cap_id_t; @@ -519,10 +520,10 @@ static const efx_mae_mv_desc_t __efx_mae_action_rule_mv_desc_set[] = { [EFX_MAE_FIELD_##_name] = \ { \ EFX_MAE_FIELD_ID_##_name, \ - MAE_FIELD_MASK_VALUE_PAIRS_##_name##_LEN, \ - MAE_FIELD_MASK_VALUE_PAIRS_##_name##_OFST, \ - MAE_FIELD_MASK_VALUE_PAIRS_##_name##_MASK_LEN, \ - MAE_FIELD_MASK_VALUE_PAIRS_##_name##_MASK_OFST, \ + MAE_FIELD_MASK_VALUE_PAIRS_V2_##_name##_LEN, \ + MAE_FIELD_MASK_VALUE_PAIRS_V2_##_name##_OFST, \ + MAE_FIELD_MASK_VALUE_PAIRS_V2_##_name##_MASK_LEN, \ + MAE_FIELD_MASK_VALUE_PAIRS_V2_##_name##_MASK_OFST, \ 0, 0 /* no alternative field */, \ _endianness \ } @@ -547,6 +548,7 @@ static const efx_mae_mv_desc_t __efx_mae_action_rule_mv_desc_set[] = { EFX_MAE_MV_DESC(TCP_FLAGS_BE, EFX_MAE_FIELD_BE), EFX_MAE_MV_DESC(ENC_VNET_ID_BE, EFX_MAE_FIELD_BE), EFX_MAE_MV_DESC(OUTER_RULE_ID, EFX_MAE_FIELD_LE), + EFX_MAE_MV_DESC(RECIRC_ID, EFX_MAE_FIELD_LE), #undef EFX_MAE_MV_DESC }; @@ -882,6 +884,32 @@ efx_mae_mport_id_by_selector( fail2: EFSYS_PROBE(fail2); +fail1: + EFSYS_PROBE1(fail1, efx_rc_t, rc); + return (rc); +} + + __checkReturn efx_rc_t +efx_mae_match_spec_recirc_id_set( + __in efx_mae_match_spec_t *spec, + __in uint8_t recirc_id) +{ + uint8_t full_mask = UINT8_MAX; + const uint8_t *vp; + const uint8_t *mp; + efx_rc_t rc; + + vp = (const uint8_t *)&recirc_id; + mp = (const uint8_t *)&full_mask; + + rc = efx_mae_match_spec_field_set(spec, EFX_MAE_FIELD_RECIRC_ID, + sizeof (recirc_id), vp, + sizeof (full_mask), mp); + if (rc != 0) + goto fail1; + + return (0); + fail1: EFSYS_PROBE1(fail1, efx_rc_t, rc); return (rc); diff --git a/drivers/common/sfc_efx/version.map b/drivers/common/sfc_efx/version.map index e728ea3e02..642a62e9b3 100644 --- a/drivers/common/sfc_efx/version.map +++ b/drivers/common/sfc_efx/version.map @@ -122,6 +122,7 @@ INTERNAL { efx_mae_match_spec_is_valid; efx_mae_match_spec_mport_set; efx_mae_match_spec_outer_rule_id_set; + efx_mae_match_spec_recirc_id_set; efx_mae_match_specs_class_cmp; efx_mae_match_specs_equal; efx_mae_mport_by_pcie_function; -- 2.20.1