From: Ivan Malov <ivan.ma...@oktetlabs.ru>

Client drivers may need to request that matching traffic be dropped.
Add a dedicated API to support this. The API relies on action
DELIVER with properly constructed NULL MPORT argument.

Signed-off-by: Ivan Malov <ivan.ma...@oktetlabs.ru>
Signed-off-by: Andrew Rybchenko <arybche...@solarflare.com>
Reviewed-by: Andy Moreton <amore...@xilinx.com>
---
 drivers/common/sfc_efx/base/efx.h             |  5 +++++
 drivers/common/sfc_efx/base/efx_mae.c         | 19 +++++++++++++++++++
 .../sfc_efx/rte_common_sfc_efx_version.map    |  1 +
 3 files changed, 25 insertions(+)

diff --git a/drivers/common/sfc_efx/base/efx.h 
b/drivers/common/sfc_efx/base/efx.h
index 96ea93f75a..4a4dc8ba4d 100644
--- a/drivers/common/sfc_efx/base/efx.h
+++ b/drivers/common/sfc_efx/base/efx.h
@@ -4211,6 +4211,11 @@ efx_mae_action_set_populate_deliver(
        __in                            efx_mae_actions_t *spec,
        __in                            const efx_mport_sel_t *mportp);
 
+LIBEFX_API
+extern __checkReturn                   efx_rc_t
+efx_mae_action_set_populate_drop(
+       __in                            efx_mae_actions_t *spec);
+
 LIBEFX_API
 extern __checkReturn                   boolean_t
 efx_mae_action_set_specs_equal(
diff --git a/drivers/common/sfc_efx/base/efx_mae.c 
b/drivers/common/sfc_efx/base/efx_mae.c
index ee51f19e5e..0cfa3f6c06 100644
--- a/drivers/common/sfc_efx/base/efx_mae.c
+++ b/drivers/common/sfc_efx/base/efx_mae.c
@@ -1028,6 +1028,25 @@ efx_mae_action_set_populate_deliver(
        return (rc);
 }
 
+       __checkReturn                   efx_rc_t
+efx_mae_action_set_populate_drop(
+       __in                            efx_mae_actions_t *spec)
+{
+       efx_mport_sel_t mport;
+       const uint8_t *arg;
+       efx_dword_t dword;
+
+       EFX_POPULATE_DWORD_1(dword,
+           MAE_MPORT_SELECTOR_FLAT, MAE_MPORT_SELECTOR_NULL);
+
+       mport.sel = dword.ed_u32[0];
+
+       arg = (const uint8_t *)&mport.sel;
+
+       return (efx_mae_action_set_spec_populate(spec,
+           EFX_MAE_ACTION_DELIVER, sizeof (mport.sel), arg));
+}
+
        __checkReturn                   boolean_t
 efx_mae_action_set_specs_equal(
        __in                            const efx_mae_actions_t *left,
diff --git a/drivers/common/sfc_efx/rte_common_sfc_efx_version.map 
b/drivers/common/sfc_efx/rte_common_sfc_efx_version.map
index cb92955a64..7cc692db3f 100644
--- a/drivers/common/sfc_efx/rte_common_sfc_efx_version.map
+++ b/drivers/common/sfc_efx/rte_common_sfc_efx_version.map
@@ -90,6 +90,7 @@ INTERNAL {
        efx_mae_action_set_alloc;
        efx_mae_action_set_free;
        efx_mae_action_set_populate_deliver;
+       efx_mae_action_set_populate_drop;
        efx_mae_action_set_populate_flag;
        efx_mae_action_set_populate_mark;
        efx_mae_action_set_populate_vlan_pop;
-- 
2.17.1

Reply via email to