common/sfc_efx/base: support recirculation ID in outer rules
When an outer rule is hit, it can pass recirculation ID down to action rule lookup, and action rules can match on this ID instead of matching on the outer rule allocation handle. By default, recirculation ID is assumed to be zero. Add an API to set recirculation ID in outer rules. Signed-off-by: Ivan Malov <ivan.malov@oktetlabs.ru> Reviewed-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru> Acked-by: Ray Kinsella <mdr@ashroe.eu>
This commit is contained in:
parent
53a8051264
commit
5cf153e79c
@ -4507,6 +4507,15 @@ typedef struct efx_mae_rule_id_s {
|
||||
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(
|
||||
|
@ -1733,6 +1733,7 @@ struct efx_mae_match_spec_s {
|
||||
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 {
|
||||
|
@ -2111,6 +2111,27 @@ efx_mae_match_specs_class_cmp(
|
||||
|
||||
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);
|
||||
@ -2189,6 +2210,9 @@ efx_mae_outer_rule_insert(
|
||||
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) {
|
||||
|
@ -132,6 +132,7 @@ INTERNAL {
|
||||
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;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user