[dpdk-dev] [PATCH v3 11/12] net/octeontx2: support port representor flow action
Ivan Malov
ivan.malov at oktetlabs.ru
Sun Oct 10 16:39:29 CEST 2021
From: Andrew Rybchenko <andrew.rybchenko at oktetlabs.ru>
Action PORT_ID implementation assumes ingress only. Its semantics
suggests that support for equal action PORT_REPRESENTOR be added.
Signed-off-by: Andrew Rybchenko <andrew.rybchenko at oktetlabs.ru>
---
doc/guides/nics/octeontx2.rst | 5 ++++-
drivers/net/octeontx2/otx2_flow_parse.c | 16 ++++++++++++----
2 files changed, 16 insertions(+), 5 deletions(-)
diff --git a/doc/guides/nics/octeontx2.rst b/doc/guides/nics/octeontx2.rst
index e35c8116f7..eae32f0afe 100644
--- a/doc/guides/nics/octeontx2.rst
+++ b/doc/guides/nics/octeontx2.rst
@@ -403,10 +403,13 @@ Actions:
+----+-----------------------------------------+
| 12 | RTE_FLOW_ACTION_TYPE_PORT_ID |
+----+-----------------------------------------+
+ | 13 | RTE_FLOW_ACTION_TYPE_PORT_REPRESENTOR |
+ +----+-----------------------------------------+
.. note::
- ``RTE_FLOW_ACTION_TYPE_PORT_ID`` is only supported between PF and its VFs.
+ ``RTE_FLOW_ACTION_TYPE_PORT_ID``, ``RTE_FLOW_ACTION_TYPE_PORT_REPRESENTOR``
+ are only supported between PF and its VFs.
.. _table_octeontx2_supported_egress_action_types:
diff --git a/drivers/net/octeontx2/otx2_flow_parse.c b/drivers/net/octeontx2/otx2_flow_parse.c
index 63a33142a5..890c6d0719 100644
--- a/drivers/net/octeontx2/otx2_flow_parse.c
+++ b/drivers/net/octeontx2/otx2_flow_parse.c
@@ -900,7 +900,6 @@ otx2_flow_parse_actions(struct rte_eth_dev *dev,
{
struct otx2_eth_dev *hw = dev->data->dev_private;
struct otx2_npc_flow_info *npc = &hw->npc_flow;
- const struct rte_flow_action_port_id *port_act;
const struct rte_flow_action_count *act_count;
const struct rte_flow_action_mark *act_mark;
const struct rte_flow_action_queue *act_q;
@@ -987,9 +986,18 @@ otx2_flow_parse_actions(struct rte_eth_dev *dev,
break;
case RTE_FLOW_ACTION_TYPE_PORT_ID:
- port_act = (const struct rte_flow_action_port_id *)
- actions->conf;
- port_id = port_act->id;
+ case RTE_FLOW_ACTION_TYPE_PORT_REPRESENTOR:
+ if (actions->type == RTE_FLOW_ACTION_TYPE_PORT_ID) {
+ const struct rte_flow_action_port_id *port_act;
+
+ port_act = actions->conf;
+ port_id = port_act->id;
+ } else {
+ const struct rte_flow_action_ethdev *ethdev_act;
+
+ ethdev_act = actions->conf;
+ port_id = ethdev_act->port_id;
+ }
if (rte_eth_dev_get_name_by_port(port_id, if_name)) {
errmsg = "Name not found for output port id";
errcode = EINVAL;
--
2.20.1
More information about the dev
mailing list