From patchwork Wed Jun 7 13:02:35 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ivan Malov X-Patchwork-Id: 128313 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 6167642C4D; Wed, 7 Jun 2023 15:06:34 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B80D042FE8; Wed, 7 Jun 2023 15:03:19 +0200 (CEST) Received: from agw.arknetworks.am (agw.arknetworks.am [79.141.165.80]) by mails.dpdk.org (Postfix) with ESMTP id 832F042D63 for ; Wed, 7 Jun 2023 15:03:00 +0200 (CEST) Received: from localhost.localdomain (unknown [78.109.69.83]) (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 agw.arknetworks.am (Postfix) with ESMTPSA id 0CAA7E12CA; Wed, 7 Jun 2023 17:02:59 +0400 (+04) From: Ivan Malov To: dev@dpdk.org Cc: Andrew Rybchenko , Ferruh Yigit , Andy Moreton Subject: [PATCH v4 24/34] common/sfc_efx/base: add API to request MAE conntrack lookup Date: Wed, 7 Jun 2023 17:02:35 +0400 Message-Id: <20230607130245.8048-25-ivan.malov@arknetworks.am> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230607130245.8048-1-ivan.malov@arknetworks.am> References: <20230601195538.8265-1-ivan.malov@arknetworks.am> <20230607130245.8048-1-ivan.malov@arknetworks.am> MIME-Version: 1.0 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 Such can be initiated when a packet hits an outer rule. Signed-off-by: Ivan Malov Reviewed-by: Andy Moreton --- drivers/common/sfc_efx/base/efx.h | 9 +++++++++ drivers/common/sfc_efx/base/efx_impl.h | 1 + drivers/common/sfc_efx/base/efx_mae.c | 26 ++++++++++++++++++++++++++ drivers/common/sfc_efx/version.map | 1 + 4 files changed, 37 insertions(+) diff --git a/drivers/common/sfc_efx/base/efx.h b/drivers/common/sfc_efx/base/efx.h index f8c5d7a3bc..5e3718050d 100644 --- a/drivers/common/sfc_efx/base/efx.h +++ b/drivers/common/sfc_efx/base/efx.h @@ -4679,6 +4679,15 @@ efx_mae_outer_rule_recirc_id_set( __in efx_mae_match_spec_t *spec, __in uint8_t recirc_id); +/* + * Request that packets hitting this rule be submitted + * for a lookup in the conntrack assistance table. + */ +LIBEFX_API +extern __checkReturn efx_rc_t +efx_mae_outer_rule_do_ct_set( + __in efx_mae_match_spec_t *spec); + LIBEFX_API extern __checkReturn efx_rc_t efx_mae_outer_rule_insert( diff --git a/drivers/common/sfc_efx/base/efx_impl.h b/drivers/common/sfc_efx/base/efx_impl.h index 9a5d465fa0..0a6a489d2c 100644 --- a/drivers/common/sfc_efx/base/efx_impl.h +++ b/drivers/common/sfc_efx/base/efx_impl.h @@ -1761,6 +1761,7 @@ struct efx_mae_match_spec_s { uint8_t outer[MAE_ENC_FIELD_PAIRS_LEN]; } emms_mask_value_pairs; uint8_t emms_outer_rule_recirc_id; + boolean_t emms_outer_rule_do_ct; }; typedef enum efx_mae_action_e { diff --git a/drivers/common/sfc_efx/base/efx_mae.c b/drivers/common/sfc_efx/base/efx_mae.c index b00ed2ec7a..546c743a02 100644 --- a/drivers/common/sfc_efx/base/efx_mae.c +++ b/drivers/common/sfc_efx/base/efx_mae.c @@ -2369,6 +2369,26 @@ efx_mae_outer_rule_recirc_id_set( return (0); +fail1: + EFSYS_PROBE1(fail1, efx_rc_t, rc); + return (rc); +} + + __checkReturn efx_rc_t +efx_mae_outer_rule_do_ct_set( + __in efx_mae_match_spec_t *spec) +{ + efx_rc_t rc; + + if (spec->emms_type != EFX_MAE_RULE_OUTER) { + rc = EINVAL; + goto fail1; + } + + spec->emms_outer_rule_do_ct = B_TRUE; + + return (0); + fail1: EFSYS_PROBE1(fail1, efx_rc_t, rc); return (rc); @@ -2389,6 +2409,7 @@ efx_mae_outer_rule_insert( uint32_t encap_type_mcdi; efx_mae_rule_id_t or_id; size_t offset; + uint8_t do_ct; efx_rc_t rc; EFX_STATIC_ASSERT(sizeof (or_idp->id) == @@ -2451,6 +2472,11 @@ efx_mae_outer_rule_insert( MAE_OUTER_RULE_INSERT_IN_RECIRC_ID, spec->emms_outer_rule_recirc_id); + do_ct = (spec->emms_outer_rule_do_ct == B_FALSE) ? 0 : 1; + + MCDI_IN_SET_DWORD_FIELD(req, MAE_OUTER_RULE_INSERT_IN_LOOKUP_CONTROL, + MAE_OUTER_RULE_INSERT_IN_DO_CT, do_ct); + efx_mcdi_execute(enp, &req); if (req.emr_rc != 0) { diff --git a/drivers/common/sfc_efx/version.map b/drivers/common/sfc_efx/version.map index d972896210..28a2be0a95 100644 --- a/drivers/common/sfc_efx/version.map +++ b/drivers/common/sfc_efx/version.map @@ -143,6 +143,7 @@ INTERNAL { efx_mae_mport_free; efx_mae_mport_id_by_selector; efx_mae_mport_invalid; + efx_mae_outer_rule_do_ct_set; efx_mae_outer_rule_insert; efx_mae_outer_rule_recirc_id_set; efx_mae_outer_rule_remove;