[dpdk-dev,v2,07/13] app/testpmd: fix lack of flow action configuration

Message ID 20180404144805.11966-8-adrien.mazarguil@6wind.com (mailing list archive)
State Superseded, archived
Headers

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation fail apply issues

Commit Message

Adrien Mazarguil April 4, 2018, 2:57 p.m. UTC
  Configuration structure is not optional with flow rule actions that expect
one; this pointer is not supposed to be NULL and PMDs should not have to
verify it.

Like pattern item spec/last/mask fields, it is currently set when at least
one configuration parameter is provided on the command line. This patch
sets it as soon as an action is created instead.

Fixes: 7a91969ad35e ("app/testpmd: add various actions to flow command")
Cc: stable@dpdk.org

Signed-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
Cc: Wenzhuo Lu <wenzhuo.lu@intel.com>
Cc: Jingjing Wu <jingjing.wu@intel.com>
---
 app/test-pmd/cmdline_flow.c | 7 +------
 1 file changed, 1 insertion(+), 6 deletions(-)
  

Comments

Nélio Laranjeiro April 5, 2018, 6:59 a.m. UTC | #1
On Wed, Apr 04, 2018 at 04:57:58PM +0200, Adrien Mazarguil wrote:
> Configuration structure is not optional with flow rule actions that expect
> one; this pointer is not supposed to be NULL and PMDs should not have to
> verify it.
> 
> Like pattern item spec/last/mask fields, it is currently set when at least
> one configuration parameter is provided on the command line. This patch
> sets it as soon as an action is created instead.
> 
> Fixes: 7a91969ad35e ("app/testpmd: add various actions to flow command")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
> Cc: Wenzhuo Lu <wenzhuo.lu@intel.com>
> Cc: Jingjing Wu <jingjing.wu@intel.com>

Acked-by: Nelio Laranjeiro <nelio.laranjeiro@6wind.com>

> ---
>  app/test-pmd/cmdline_flow.c | 7 +------
>  1 file changed, 1 insertion(+), 6 deletions(-)
> 
> diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c
> index 9cac8e9bf..c2cf415ef 100644
> --- a/app/test-pmd/cmdline_flow.c
> +++ b/app/test-pmd/cmdline_flow.c
> @@ -1909,6 +1909,7 @@ parse_vc(struct context *ctx, const struct token *token,
>  			return -1;
>  		*action = (struct rte_flow_action){
>  			.type = priv->type,
> +			.conf = data_size ? data : NULL,
>  		};
>  		++out->args.vc.actions_n;
>  		ctx->object = action;
> @@ -1989,7 +1990,6 @@ parse_vc_conf(struct context *ctx, const struct token *token,
>  	      void *buf, unsigned int size)
>  {
>  	struct buffer *out = buf;
> -	struct rte_flow_action *action;
>  
>  	(void)size;
>  	/* Token name must match. */
> @@ -1998,14 +1998,9 @@ parse_vc_conf(struct context *ctx, const struct token *token,
>  	/* Nothing else to do if there is no buffer. */
>  	if (!out)
>  		return len;
> -	if (!out->args.vc.actions_n)
> -		return -1;
> -	action = &out->args.vc.actions[out->args.vc.actions_n - 1];
>  	/* Point to selected object. */
>  	ctx->object = out->args.vc.data;
>  	ctx->objmask = NULL;
> -	/* Update configuration pointer. */
> -	action->conf = ctx->object;
>  	return len;
>  }
>  
> -- 
> 2.11.0
  

Patch

diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c
index 9cac8e9bf..c2cf415ef 100644
--- a/app/test-pmd/cmdline_flow.c
+++ b/app/test-pmd/cmdline_flow.c
@@ -1909,6 +1909,7 @@  parse_vc(struct context *ctx, const struct token *token,
 			return -1;
 		*action = (struct rte_flow_action){
 			.type = priv->type,
+			.conf = data_size ? data : NULL,
 		};
 		++out->args.vc.actions_n;
 		ctx->object = action;
@@ -1989,7 +1990,6 @@  parse_vc_conf(struct context *ctx, const struct token *token,
 	      void *buf, unsigned int size)
 {
 	struct buffer *out = buf;
-	struct rte_flow_action *action;
 
 	(void)size;
 	/* Token name must match. */
@@ -1998,14 +1998,9 @@  parse_vc_conf(struct context *ctx, const struct token *token,
 	/* Nothing else to do if there is no buffer. */
 	if (!out)
 		return len;
-	if (!out->args.vc.actions_n)
-		return -1;
-	action = &out->args.vc.actions[out->args.vc.actions_n - 1];
 	/* Point to selected object. */
 	ctx->object = out->args.vc.data;
 	ctx->objmask = NULL;
-	/* Update configuration pointer. */
-	action->conf = ctx->object;
 	return len;
 }