[1/8] librte_ethdev: add new flow types and action
Checks
Commit Message
In rte_flow.h:
add RTE_FLOW_ITEM_TYPE_PCTYPE
add RTE_FLOW_ITEM_TYPE_FLOWTYPE
add RTE_FLOW_ACTION_TYPE_MAP
add structs and masks for new flow types
In rte_flow.rst:
add items for pctype and flowtype
add action for map
Signed-off-by: Bernard Iremonger <bernard.iremonger@intel.com>
---
doc/guides/prog_guide/rte_flow.rst | 55 +++++++++++++++++++++++++++
lib/librte_ethdev/rte_flow.h | 78 ++++++++++++++++++++++++++++++++++++++
2 files changed, 133 insertions(+)
@@ -1362,6 +1362,44 @@ Matches a PFCP Header.
- ``seid``: session endpoint identifier.
- Default ``mask`` matches s_field and seid.
+Item: ``PCTYPE``
+^^^^^^^^^^^^^^^^
+
+Matches a PCTYPE
+
+.. _table_rte_flow_item_pctype:
+
+.. table:: PCTYPE
+
+ +----------+----------+---------------------------------------+
+ | Field | Subfield | Value |
+ +==========+==========+=======================================+
+ | ``spec`` | ``data`` | 64 bit pctype value |
+ +----------+----------+---------------------------------------+
+ | ``last`` | ``data`` | upper range value |
+ +----------+----------+---------------------------------------+
+ | ``mask`` | ``data`` | bit-mask applies to "spec" and "last" |
+ +----------+----------+---------------------------------------+
+
+Item: ``FLOWTYPE``
+^^^^^^^^^^^^^^^^^^
+
+Matches a FLOWTYPE
+
+.. _table_rte_flow_item_flowtype:
+
+.. table:: FLOWTYPE
+
+ +----------+----------+---------------------------------------+
+ | Field | Subfield | Value |
+ +==========+==========+=======================================+
+ | ``spec`` | ``data`` | 16 bit flowtype value |
+ +----------+----------+---------------------------------------+
+ | ``last`` | ``data`` | upper range value |
+ +----------+----------+---------------------------------------+
+ | ``mask`` | ``data`` | bit-mask applies to "spec" and "last" |
+ +----------+----------+---------------------------------------+
+
Actions
~~~~~~~
@@ -2645,6 +2683,23 @@ timeout passed without any matching on the flow.
| ``context`` | user input flow context |
+--------------+---------------------------------+
+Action: ``MAP``
+^^^^^^^^^^^^^^^
+
+Map pctype to flowtype.
+
+.. _table_rte_flow_action_map:
+
+.. table:: MAP
+
+ +--------------+---------------------------------+
+ | Field | Value |
+ +==============+=================================+
+ | ``pctype`` | 64 bit pctype value |
+ +--------------+---------------------------------+
+ | ``flowtype`` | 16 bit flowtype value |
+ +--------------+---------------------------------+
+
Negative types
~~~~~~~~~~~~~~
@@ -527,6 +527,20 @@ enum rte_flow_item_type {
*/
RTE_FLOW_ITEM_TYPE_PFCP,
+ /**
+ * Matches Packet Classification type (PCTYPE).
+ * See struct rte_flow_item_pctype.
+ *
+ */
+ RTE_FLOW_ITEM_TYPE_PCTYPE,
+
+ /**
+ * Matches flow type.
+ * See struct rte_flow_item_flowtype.
+ *
+ */
+ RTE_FLOW_ITEM_TYPE_FLOWTYPE,
+
};
/**
@@ -1547,6 +1561,46 @@ static const struct rte_flow_item_pfcp rte_flow_item_pfcp_mask = {
#endif
/**
+ * @warning
+ * @b EXPERIMENTAL: this structure may change without prior notice
+ *
+ * RTE_FLOW_ITEM_TYPE_PCTYPE
+ *
+ * Match Packet Classification type (PCTYPE)
+ *
+ */
+struct rte_flow_item_pctype {
+ uint64_t pctype;
+};
+
+/** Default mask for RTE_FLOW_ITEM_TYPE_PCTYPE. */
+#ifndef __cplusplus
+static const struct rte_flow_item_pctype rte_flow_item_pctype_mask = {
+ .pctype = 0xffffffffffffffff,
+};
+#endif
+
+/**
+ * @warning
+ * @b EXPERIMENTAL: this structure may change without prior notice
+ *
+ * RTE_FLOW_ITEM_TYPE_FLOWTYPE
+ *
+ * Match flow type
+ *
+ */
+struct rte_flow_item_flowtype {
+ uint16_t flowtype;
+};
+
+/** Default mask for RTE_FLOW_ITEM_TYPE_FLOWTYPE. */
+#ifndef __cplusplus
+static const struct rte_flow_item_flowtype rte_flow_item_flowtype_mask = {
+ .flowtype = 0xffff,
+};
+#endif
+
+/**
* Matching pattern item definition.
*
* A pattern is formed by stacking items starting from the lowest protocol
@@ -2099,6 +2153,17 @@ enum rte_flow_action_type {
* see enum RTE_ETH_EVENT_FLOW_AGED
*/
RTE_FLOW_ACTION_TYPE_AGE,
+
+ /**
+ * Map Packet Classification type to flow type.
+ *
+ * If flow pattern does not define a valid RTE_FLOW_ITEM_TYPE_PCTYPE,
+ * and a valid RTE_FLOW_ITEM_FLOWTYPE the PMD should return a
+ * RTE_FLOW_ERROR_TYPE_ACTION error.
+ *
+ * See struct rte_flow_action_map.
+ */
+ RTE_FLOW_ACTION_TYPE_MAP,
};
/**
@@ -2660,6 +2725,19 @@ struct rte_flow_action_set_dscp {
uint8_t dscp;
};
+/**
+ * @warning
+ * @b EXPERIMENTAL: this structure may change without prior notice
+ *
+ * RTE_FLOW_ACTION_TYPE_MAP
+ *
+ * Map a packet classification type to a flow type.
+ */
+struct rte_flow_action_map {
+ uint16_t flowtype;
+ uint64_t pctype;
+};
+
/* Mbuf dynamic field offset for metadata. */
extern int32_t rte_flow_dynf_metadata_offs;