[v8,1/3] ethdev: add actions to modify TCP header fields
Checks
Commit Message
Add actions:
- INC_TCP_SEQ - Increase sequence number in the outermost TCP header.
- DEC_TCP_SEQ - Decrease sequence number in the outermost TCP header.
- INC_TCP_ACK - Increase acknowledgment number in the outermost TCP
header.
- DEC_TCP_ACK - Decrease acknowledgment number in the outermost TCP
header.
Original work by Xiaoyu Min.
This patch introduces a new approach, using a simple integer instead
of using an action-specific structure for each of these actions.
This approach can be later applied to modify existing actions which
require only a single integer.
Signed-off-by: Dekel Peled <dekelp@mellanox.com>
Acked-by: Andrew Rybchenko <arybchenko@solarflare.com>
---
doc/guides/prog_guide/rte_flow.rst | 35 ++++++++++++++++++++++++++++++++++-
lib/librte_ethdev/rte_flow.c | 4 ++++
lib/librte_ethdev/rte_flow.h | 34 +++++++++++++++++++++++++++++++++-
3 files changed, 71 insertions(+), 2 deletions(-)
Comments
On Sun, Jun 30, 2019 at 10:59:08AM +0300, Dekel Peled wrote:
> Add actions:
> - INC_TCP_SEQ - Increase sequence number in the outermost TCP header.
> - DEC_TCP_SEQ - Decrease sequence number in the outermost TCP header.
> - INC_TCP_ACK - Increase acknowledgment number in the outermost TCP
> header.
> - DEC_TCP_ACK - Decrease acknowledgment number in the outermost TCP
> header.
>
> Original work by Xiaoyu Min.
>
> This patch introduces a new approach, using a simple integer instead
> of using an action-specific structure for each of these actions.
> This approach can be later applied to modify existing actions which
> require only a single integer.
>
> Signed-off-by: Dekel Peled <dekelp@mellanox.com>
> Acked-by: Andrew Rybchenko <arybchenko@solarflare.com>
You didn't take Andrew's comment [1] into account, this patch must be
split. I'll highlight what needs to be moved to a pre-patch below.
[1] https://mails.dpdk.org/archives/dev/2019-June/136101.html
[...]
> diff --git a/doc/guides/prog_guide/rte_flow.rst b/doc/guides/prog_guide/rte_flow.rst
> index a34d012..783a904 100644
> --- a/doc/guides/prog_guide/rte_flow.rst
> +++ b/doc/guides/prog_guide/rte_flow.rst
> @@ -1214,7 +1214,8 @@ Actions
> ~~~~~~~
>
> Each possible action is represented by a type. Some have associated
> -configuration structures. Several actions combined in a list can be assigned
> +configuration structures, some others use a simple integer.
> +Several actions combined in a list can be assigned
> to a flow rule and are performed in order.
^^^^ This must be moved to a separate patch ^^^^
BTW, how about "configuration structure" -> "configuration object"
encompassing all kinds of objects once and for all instead? Such a generic
term will be handy when actions start using floats or function pointers.
[...]
> /**
> @@ -2140,7 +2172,7 @@ struct rte_flow_action_set_mac {
> */
> struct rte_flow_action {
> enum rte_flow_action_type type; /**< Action type. */
> - const void *conf; /**< Pointer to action configuration structure. */
> + const void *conf; /**< Pointer to action configuration. */
> };
^^^^ This must be moved to a separate patch ^^^^
Same comment regarding "configuration object".
Accepted, will send separate patch and v9 later today.
> -----Original Message-----
> From: Adrien Mazarguil <adrien.mazarguil@6wind.com>
> Sent: Monday, July 1, 2019 11:55 AM
> To: Dekel Peled <dekelp@mellanox.com>
> Cc: wenzhuo.lu@intel.com; jingjing.wu@intel.com;
> bernard.iremonger@intel.com; Yongseok Koh <yskoh@mellanox.com>;
> Shahaf Shuler <shahafs@mellanox.com>; Slava Ovsiienko
> <viacheslavo@mellanox.com>; arybchenko@solarflare.com; dev@dpdk.org;
> Ori Kam <orika@mellanox.com>
> Subject: Re: [PATCH v8 1/3] ethdev: add actions to modify TCP header fields
>
> On Sun, Jun 30, 2019 at 10:59:08AM +0300, Dekel Peled wrote:
> > Add actions:
> > - INC_TCP_SEQ - Increase sequence number in the outermost TCP header.
> > - DEC_TCP_SEQ - Decrease sequence number in the outermost TCP
> header.
> > - INC_TCP_ACK - Increase acknowledgment number in the outermost TCP
> > header.
> > - DEC_TCP_ACK - Decrease acknowledgment number in the outermost TCP
> > header.
> >
> > Original work by Xiaoyu Min.
> >
> > This patch introduces a new approach, using a simple integer instead
> > of using an action-specific structure for each of these actions.
> > This approach can be later applied to modify existing actions which
> > require only a single integer.
> >
> > Signed-off-by: Dekel Peled <dekelp@mellanox.com>
> > Acked-by: Andrew Rybchenko <arybchenko@solarflare.com>
>
> You didn't take Andrew's comment [1] into account, this patch must be split.
> I'll highlight what needs to be moved to a pre-patch below.
>
> [1]
> https://eur03.safelinks.protection.outlook.com/?url=https%3A%2F%2Fmails.
> dpdk.org%2Farchives%2Fdev%2F2019-
> June%2F136101.html&data=02%7C01%7Cdekelp%40mellanox.com%7C0
> 353d4fafe004b4434a608d6fe01d04c%7Ca652971c7d2e4d9ba6a4d149256f461b
> %7C0%7C0%7C636975681078705620&sdata=wrMFZOMT65S6X6d4vTnsF
> AAyRF%2F2dTnonX4Ozy7S930%3D&reserved=0
>
> [...]
> > diff --git a/doc/guides/prog_guide/rte_flow.rst
> > b/doc/guides/prog_guide/rte_flow.rst
> > index a34d012..783a904 100644
> > --- a/doc/guides/prog_guide/rte_flow.rst
> > +++ b/doc/guides/prog_guide/rte_flow.rst
> > @@ -1214,7 +1214,8 @@ Actions
> > ~~~~~~~
> >
> > Each possible action is represented by a type. Some have associated
> > -configuration structures. Several actions combined in a list can be
> > assigned
> > +configuration structures, some others use a simple integer.
> > +Several actions combined in a list can be assigned
> > to a flow rule and are performed in order.
>
> ^^^^ This must be moved to a separate patch ^^^^
>
> BTW, how about "configuration structure" -> "configuration object"
> encompassing all kinds of objects once and for all instead? Such a generic
> term will be handy when actions start using floats or function pointers.
>
> [...]
> > /**
> > @@ -2140,7 +2172,7 @@ struct rte_flow_action_set_mac {
> > */
> > struct rte_flow_action {
> > enum rte_flow_action_type type; /**< Action type. */
> > - const void *conf; /**< Pointer to action configuration structure. */
> > + const void *conf; /**< Pointer to action configuration. */
> > };
>
> ^^^^ This must be moved to a separate patch ^^^^
>
> Same comment regarding "configuration object".
>
> --
> Adrien Mazarguil
> 6WIND
@@ -1214,7 +1214,8 @@ Actions
~~~~~~~
Each possible action is represented by a type. Some have associated
-configuration structures. Several actions combined in a list can be assigned
+configuration structures, some others use a simple integer.
+Several actions combined in a list can be assigned
to a flow rule and are performed in order.
They fall in three categories:
@@ -2345,6 +2346,38 @@ Otherwise, RTE_FLOW_ERROR_TYPE_ACTION error will be returned.
| ``mac_addr`` | MAC address |
+--------------+---------------+
+Action: ``INC_TCP_SEQ``
+^^^^^^^^^^^^^^^^^^^^^^^
+
+Increase sequence number in the outermost TCP header.
+Value to increase TCP sequence number by is a big-endian 32 bit integer.
+
+Using this action on non-matching traffic will result in undefined behavior.
+
+Action: ``DEC_TCP_SEQ``
+^^^^^^^^^^^^^^^^^^^^^^^
+
+Decrease sequence number in the outermost TCP header.
+Value to decrease TCP sequence number by is a big-endian 32 bit integer.
+
+Using this action on non-matching traffic will result in undefined behavior.
+
+Action: ``INC_TCP_ACK``
+^^^^^^^^^^^^^^^^^^^^^^^
+
+Increase acknowledgment number in the outermost TCP header.
+Value to increase TCP acknowledgment number by is a big-endian 32 bit integer.
+
+Using this action on non-matching traffic will result in undefined behavior.
+
+Action: ``DEC_TCP_ACK``
+^^^^^^^^^^^^^^^^^^^^^^^
+
+Decrease acknowledgment number in the outermost TCP header.
+Value to decrease TCP acknowledgment number by is a big-endian 32 bit integer.
+
+Using this action on non-matching traffic will result in undefined behavior.
+
Negative types
~~~~~~~~~~~~~~
@@ -143,6 +143,10 @@ struct rte_flow_desc_data {
MK_FLOW_ACTION(SET_TTL, sizeof(struct rte_flow_action_set_ttl)),
MK_FLOW_ACTION(SET_MAC_SRC, sizeof(struct rte_flow_action_set_mac)),
MK_FLOW_ACTION(SET_MAC_DST, sizeof(struct rte_flow_action_set_mac)),
+ MK_FLOW_ACTION(INC_TCP_SEQ, sizeof(rte_be32_t)),
+ MK_FLOW_ACTION(DEC_TCP_SEQ, sizeof(rte_be32_t)),
+ MK_FLOW_ACTION(INC_TCP_ACK, sizeof(rte_be32_t)),
+ MK_FLOW_ACTION(DEC_TCP_ACK, sizeof(rte_be32_t)),
};
static int
@@ -1650,6 +1650,38 @@ enum rte_flow_action_type {
* See struct rte_flow_action_set_mac.
*/
RTE_FLOW_ACTION_TYPE_SET_MAC_DST,
+
+ /**
+ * Increase sequence number in the outermost TCP header.
+ *
+ * Using this action on non-matching traffic will result in
+ * undefined behavior.
+ */
+ RTE_FLOW_ACTION_TYPE_INC_TCP_SEQ,
+
+ /**
+ * Decrease sequence number in the outermost TCP header.
+ *
+ * Using this action on non-matching traffic will result in
+ * undefined behavior.
+ */
+ RTE_FLOW_ACTION_TYPE_DEC_TCP_SEQ,
+
+ /**
+ * Increase acknowledgment number in the outermost TCP header.
+ *
+ * Using this action on non-matching traffic will result in
+ * undefined behavior.
+ */
+ RTE_FLOW_ACTION_TYPE_INC_TCP_ACK,
+
+ /**
+ * Decrease acknowledgment number in the outermost TCP header.
+ *
+ * Using this action on non-matching traffic will result in
+ * undefined behavior.
+ */
+ RTE_FLOW_ACTION_TYPE_DEC_TCP_ACK,
};
/**
@@ -2140,7 +2172,7 @@ struct rte_flow_action_set_mac {
*/
struct rte_flow_action {
enum rte_flow_action_type type; /**< Action type. */
- const void *conf; /**< Pointer to action configuration structure. */
+ const void *conf; /**< Pointer to action configuration. */
};
/**