[dpdk-dev] [PATCH v3 2/4] ethdev: add packet field set aciton in flow API
Qi Zhang
qi.z.zhang at intel.com
Mon Apr 16 07:16:37 CEST 2018
Add new action RTE_FLOW_ACTION_TYPE_FIELD_SET, it is used to
modify fields of specific protocol layer of the packet, for
packet that does not include the specific protocal layer, the
action is skipped.
Signed-off-by: Qi Zhang <qi.z.zhang at intel.com>
---
doc/guides/prog_guide/rte_flow.rst | 30 +++++++++++++++++++++++++++
lib/librte_ether/rte_flow.h | 42 +++++++++++++++++++++++++++++++++++++-
2 files changed, 71 insertions(+), 1 deletion(-)
diff --git a/doc/guides/prog_guide/rte_flow.rst b/doc/guides/prog_guide/rte_flow.rst
index 9c9ddcbd2..ea0e40a52 100644
--- a/doc/guides/prog_guide/rte_flow.rst
+++ b/doc/guides/prog_guide/rte_flow.rst
@@ -1558,6 +1558,36 @@ fields in the pattern items.
| 1 | END |
+-------+----------+
+Action: ``FILED_SET``
+^^^^^^^^^^^^^^^^^^^^^
+
+Modify the value of fields in a protocol layer, only applies to packets that
+contain respective protocol layer.
+
+.. _table_rte_flow_action_field_set:
+
+.. table:: FIELD_SET
+
+ +---------------+-------------------------------------------------------------------+
+ | Field | Value |
+ +===============+===================================================================+
+ | ``type`` | Specify the type of a protocol layer. (see RTE_FLOW_ITEM_TYPE_*) |
+ +---------------+-------------------------------------------------------------------+
+ | ``dir_level`` | Specify the level of matched protocol layer. |
+ | | direction (1b) |
+ | | 0: match start from outermost. |
+ | | 1: match start from innermost. |
+ | | level: (31b) |
+ | | 0: outermost or innermost protocol layer that matched @type |
+ | | 1: next to outmost or innermost protocol layer that matched @type |
+ | | 2: and so on ... |
+ +---------------+-------------------------------------------------------------------+
+ | ``new_val`` | Pointer to specific data structure according to protocol type, |
+ | | the content is the new value to updtae. |
+ +---------------+-------------------------------------------------------------------+
+ | ``mask`` | Bit-mask applied to new_val |
+ +---------------+-------------------------------------------------------------------+
+
Negative types
~~~~~~~~~~~~~~
diff --git a/lib/librte_ether/rte_flow.h b/lib/librte_ether/rte_flow.h
index 2efbfb3c4..80cf75ff0 100644
--- a/lib/librte_ether/rte_flow.h
+++ b/lib/librte_ether/rte_flow.h
@@ -1241,7 +1241,15 @@ enum rte_flow_action_type {
*
* See struct rte_flow_action_security.
*/
- RTE_FLOW_ACTION_TYPE_SECURITY
+ RTE_FLOW_ACTION_TYPE_SECURITY,
+
+ /**
+ * Modify the value of fields in a protocol layer, only applies to
+ * packets that contain respective protocol layer.
+ *
+ * See struct rte_flow_action_field_set.
+ */
+ RTE_FLOW_ACTION_TYPE_FIELD_SET,
};
/**
@@ -1380,6 +1388,38 @@ struct rte_flow_action_security {
};
/**
+ * RTE_FLOW_ACTION_TYPE_FIELD_SET
+ *
+ * Modify the value of fields in a protocol layer, only applies to
+ * packets that contain respective protocol layer.
+ */
+struct rte_flow_action_field_set {
+ /**
+ * Specify the type of a protocol layer.
+ */
+ enum rte_flow_item_type type;
+ /**
+ * Specify the level of matched protocol layer.
+ *
+ * direction (1b)
+ * 0: match start from outermost.
+ * 1: match start from innermost.
+ *
+ * level (31b)
+ * 0: outermost|innermost protocol layer that matched @type.
+ * 1: next to outermost|innermost protocol layer that matched @type.
+ * 2: and so on ...
+ */
+ uint32_t dir_level;
+ /**
+ * Pointer to specific data structure according to protocol type,
+ * the content is the new value to update.
+ */
+ const void *new_val;
+ const void *mask; /**< Bit-mask applied to new_val. */
+};
+
+/**
* Definition of a single action.
*
* A list of actions is terminated by a END action.
--
2.13.6
More information about the dev
mailing list