According to DPDK documentation, not specifying a fate action in a flow rule results in undefined behaviour. Define right behaviour in the driver.
Fixes: 0839236d0391 ("net/sfc: support flow action drop in transfer rules") Cc: sta...@dpdk.org Signed-off-by: Ivan Malov <ivan.ma...@arknetworks.am> Reviewed-by: Viacheslav Galaktionov <viacheslav.galaktio...@arknetworks.am> Reviewed-by: Andy Moreton <amore...@xilinx.com> --- drivers/net/sfc/sfc_mae.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/drivers/net/sfc/sfc_mae.c b/drivers/net/sfc/sfc_mae.c index c254562696..3daeed81b9 100644 --- a/drivers/net/sfc/sfc_mae.c +++ b/drivers/net/sfc/sfc_mae.c @@ -3910,6 +3910,21 @@ sfc_mae_rule_parse_actions(struct sfc_adapter *sa, SFC_ASSERT(B_FALSE); } + /* + * A DPDK flow entry must specify a fate action, which the parser + * converts into a DELIVER action in a libefx action set. An + * attempt to replace the action in the action set should + * fail. If it succeeds then report an error, as the + * parsed flow entry did not contain a fate action. + */ + rc = efx_mae_action_set_populate_drop(ctx.spec); + if (rc == 0) { + rc = rte_flow_error_set(error, EINVAL, + RTE_FLOW_ERROR_TYPE_ACTION, NULL, + "no fate action found"); + goto fail_check_fate_action; + } + spec_mae->action_set = sfc_mae_action_set_attach(sa, &ctx); if (spec_mae->action_set != NULL) { sfc_mae_mac_addr_del(sa, ctx.src_mac); @@ -3926,6 +3941,7 @@ sfc_mae_rule_parse_actions(struct sfc_adapter *sa, return 0; fail_action_set_add: +fail_check_fate_action: fail_workaround_tunnel_delivery: fail_nb_count: sfc_mae_encap_header_del(sa, ctx.encap_header); -- 2.17.1