uint32_t id;
} efx_mae_rule_id_t;
+/*
+ * Set the initial recirculation ID. It goes to action rule (AR) lookup.
+ */
+LIBEFX_API
+extern __checkReturn efx_rc_t
+efx_mae_outer_rule_recirc_id_set(
+ __in efx_mae_match_spec_t *spec,
+ __in uint8_t recirc_id);
+
LIBEFX_API
extern __checkReturn efx_rc_t
efx_mae_outer_rule_insert(
MAE_FIELD_MASK_VALUE_PAIRS_V2_LEN];
uint8_t outer[MAE_ENC_FIELD_PAIRS_LEN];
} emms_mask_value_pairs;
+ uint8_t emms_outer_rule_recirc_id;
};
typedef enum efx_mae_action_e {
fail2:
EFSYS_PROBE(fail2);
+fail1:
+ EFSYS_PROBE1(fail1, efx_rc_t, rc);
+ return (rc);
+}
+
+ __checkReturn efx_rc_t
+efx_mae_outer_rule_recirc_id_set(
+ __in efx_mae_match_spec_t *spec,
+ __in uint8_t recirc_id)
+{
+ efx_rc_t rc;
+
+ if (spec->emms_type != EFX_MAE_RULE_OUTER) {
+ rc = EINVAL;
+ goto fail1;
+ }
+
+ spec->emms_outer_rule_recirc_id = recirc_id;
+
+ return (0);
+
fail1:
EFSYS_PROBE1(fail1, efx_rc_t, rc);
return (rc);
memcpy(payload + offset, spec->emms_mask_value_pairs.outer,
MAE_ENC_FIELD_PAIRS_LEN);
+ MCDI_IN_SET_BYTE(req, MAE_OUTER_RULE_INSERT_IN_RECIRC_ID,
+ spec->emms_outer_rule_recirc_id);
+
efx_mcdi_execute(enp, &req);
if (req.emr_rc != 0) {
efx_mae_mport_id_by_selector;
efx_mae_mport_invalid;
efx_mae_outer_rule_insert;
+ efx_mae_outer_rule_recirc_id_set;
efx_mae_outer_rule_remove;
efx_mae_read_mport_journal;