Such can be initiated when a packet hits an outer rule.
Signed-off-by: Ivan Malov <ivan.malov@arknetworks.am>
Reviewed-by: Andy Moreton <amoreton@xilinx.com>
---
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(+)
@@ -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(
@@ -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 {
@@ -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) {
@@ -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;