[v8,1/3] ethdev: add actions to modify TCP header fields

Message ID 8b43b7e77d467429b45cb86eb09e218d721dd0de.1561872899.git.dekelp@mellanox.com (mailing list archive)
State Superseded, archived
Delegated to: Ferruh Yigit
Headers
Series add actions to modify header fields |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/mellanox-Performance-Testing success Performance Testing PASS
ci/intel-Performance-Testing success Performance Testing PASS
ci/Intel-compilation success Compilation OK

Commit Message

Dekel Peled June 30, 2019, 7:59 a.m. UTC
  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

Adrien Mazarguil July 1, 2019, 8:55 a.m. UTC | #1
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".
  
Dekel Peled July 1, 2019, 9:58 a.m. UTC | #2
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&amp;data=02%7C01%7Cdekelp%40mellanox.com%7C0
> 353d4fafe004b4434a608d6fe01d04c%7Ca652971c7d2e4d9ba6a4d149256f461b
> %7C0%7C0%7C636975681078705620&amp;sdata=wrMFZOMT65S6X6d4vTnsF
> AAyRF%2F2dTnonX4Ozy7S930%3D&amp;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
  

Patch

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.
 
 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
 ~~~~~~~~~~~~~~
 
diff --git a/lib/librte_ethdev/rte_flow.c b/lib/librte_ethdev/rte_flow.c
index 3277be1..0c9f6c6 100644
--- a/lib/librte_ethdev/rte_flow.c
+++ b/lib/librte_ethdev/rte_flow.c
@@ -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
diff --git a/lib/librte_ethdev/rte_flow.h b/lib/librte_ethdev/rte_flow.h
index f3a8fb1..f5db6b6 100644
--- a/lib/librte_ethdev/rte_flow.h
+++ b/lib/librte_ethdev/rte_flow.h
@@ -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. */
 };
 
 /**