[dpdk-dev] ip_pipeline: Fix for action flow bulk command error

Message ID 1468863178-22458-1-git-send-email-sankarx.chokkalingam@intel.com (mailing list archive)
State Accepted, archived
Headers

Commit Message

Chokkalingam, SankarX July 18, 2016, 5:32 p.m. UTC
  Error while executing action flow bulk command
pipeline> p 1 action flow bulk ./config/action.txt
Command "action flow bulk" failed
pipeline>

The flow action entries are added successfully.
But the return value is not computed correctly.
Due to this, the error message appears on CLI.

The return value is computed with rsp->n_flows after rsp pointer is freed.
This fix computes the return value before rsp pointer is freed.

Signed-off-by: Chokkalingam, SankarX <sankarx.chokkalingam@intel.com>
Acked-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
---
 examples/ip_pipeline/pipeline/pipeline_flow_actions.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
  

Comments

Thomas Monjalon July 22, 2016, 10:15 a.m. UTC | #1
2016-07-18 10:32, Chokkalingam, SankarX:
> Error while executing action flow bulk command
> pipeline> p 1 action flow bulk ./config/action.txt
> Command "action flow bulk" failed
> pipeline>
> 
> The flow action entries are added successfully.
> But the return value is not computed correctly.
> Due to this, the error message appears on CLI.
> 
> The return value is computed with rsp->n_flows after rsp pointer is freed.
> This fix computes the return value before rsp pointer is freed.
> 
> Signed-off-by: Chokkalingam, SankarX <sankarx.chokkalingam@intel.com>
> Acked-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>

Applied, thanks
  

Patch

diff --git a/examples/ip_pipeline/pipeline/pipeline_flow_actions.c b/examples/ip_pipeline/pipeline/pipeline_flow_actions.c
index bf12fd7..349db6b 100644
--- a/examples/ip_pipeline/pipeline/pipeline_flow_actions.c
+++ b/examples/ip_pipeline/pipeline/pipeline_flow_actions.c
@@ -290,6 +290,7 @@  app_pipeline_fa_flow_config_bulk(struct app_params *app,
 	void **req_entry_ptr;
 	uint32_t *req_flow_id;
 	uint32_t i;
+	int status;
 
 	/* Check input arguments */
 	if ((app == NULL) ||
@@ -368,6 +369,7 @@  app_pipeline_fa_flow_config_bulk(struct app_params *app,
 	}
 
 	/* Read response */
+	status = (rsp->n_flows == n_flows) ? 0 : -1;
 
 	/* Commit flows */
 	for (i = 0; i < rsp->n_flows; i++) {
@@ -408,7 +410,7 @@  app_pipeline_fa_flow_config_bulk(struct app_params *app,
 	rte_free(req_flow_id);
 	rte_free(req_entry_ptr);
 
-	return (rsp->n_flows == n_flows) ? 0 : -1;
+	return status;
 }
 
 int