[dpdk-dev,v5,4/4] app/testpmd: add isolated mode parameter

Message ID 14badd6d6cb1db131832f3e406ed86e34c7938e9.1498658407.git.vasilyf@mellanox.com (mailing list archive)
State Changes Requested, archived
Delegated to: Ferruh Yigit
Headers

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK

Commit Message

Vasily Philipov June 28, 2017, 2:03 p.m. UTC
  In case if --isolated-mode parameter was added to the command line
the rte flow isolate action will be applied on each port before
the device configuring.

Signed-off-by: Vasily Philipov <vasilyf@mellanox.com>
---
 app/test-pmd/parameters.c |  3 +++
 app/test-pmd/testpmd.c    | 14 ++++++++++++++
 app/test-pmd/testpmd.h    |  1 +
 3 files changed, 18 insertions(+)
  

Comments

Adrien Mazarguil June 29, 2017, 4:53 p.m. UTC | #1
On Wed, Jun 28, 2017 at 05:03:57PM +0300, Vasily Philipov wrote:
> In case if --isolated-mode parameter was added to the command line
> the rte flow isolate action will be applied on each port before
> the device configuring.
> 
> Signed-off-by: Vasily Philipov <vasilyf@mellanox.com>

The patch itself looks OK but I think the commit log needs some
clarification, here's another suggestion:

 app/testpmd: add isolated mode parameter

 Providing this parameter requests flow API isolated mode on all ports at
 initialization time. It ensures all traffic is received through the
 configured flow rules only (see flow command).

 Ports that do not support this mode are automatically discarded.
  

Patch

diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c
index fbe6284..e313871 100644
--- a/app/test-pmd/parameters.c
+++ b/app/test-pmd/parameters.c
@@ -623,6 +623,7 @@ 
 		{ "tx-queue-stats-mapping",	1, 0, 0 },
 		{ "rx-queue-stats-mapping",	1, 0, 0 },
 		{ "no-flush-rx",	0, 0, 0 },
+		{ "isolated-mode",	        0, 0, 0 },
 		{ "txpkts",			1, 0, 0 },
 		{ "disable-link-check",		0, 0, 0 },
 		{ "no-lsc-interrupt",		0, 0, 0 },
@@ -1081,6 +1082,8 @@ 
 				lsc_interrupt = 0;
 			if (!strcmp(lgopts[opt_idx].name, "no-rmv-interrupt"))
 				rmv_interrupt = 0;
+			if (!strcmp(lgopts[opt_idx].name, "isolated-mode"))
+				isolated_mode = 1;
 			if (!strcmp(lgopts[opt_idx].name, "print-event"))
 				if (parse_event_printing_config(optarg, 1)) {
 					rte_exit(EXIT_FAILURE,
diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c
index d1041af..610e675 100644
--- a/app/test-pmd/testpmd.c
+++ b/app/test-pmd/testpmd.c
@@ -267,6 +267,11 @@  struct fwd_engine * fwd_engines[] = {
 uint8_t no_flush_rx = 0; /* flush by default */
 
 /*
+ * Flow API isolated mode.
+ */
+uint8_t isolated_mode;
+
+/*
  * Avoids to check link status when starting/stopping a port.
  */
 uint8_t no_link_check = 0; /* check by default */
@@ -1422,6 +1427,15 @@  static void eth_event_callback(uint8_t port_id,
 		if (port->need_reconfig > 0) {
 			port->need_reconfig = 0;
 
+			if (isolated_mode) {
+				int ret = port_flow_isolate(pi, 1);
+				if (ret) {
+					printf("Failed to apply isolated"
+					       " mode on port %d\n", pi);
+					return -1;
+				}
+			}
+
 			printf("Configuring Port %d (socket %u)\n", pi,
 					port->socket_id);
 			/* configure port */
diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h
index e6c43ba..dbe9898 100644
--- a/app/test-pmd/testpmd.h
+++ b/app/test-pmd/testpmd.h
@@ -303,6 +303,7 @@  struct queue_stats_mappings {
 extern uint8_t  numa_support; /**< set by "--numa" parameter */
 extern uint16_t port_topology; /**< set by "--port-topology" parameter */
 extern uint8_t no_flush_rx; /**<set by "--no-flush-rx" parameter */
+extern uint8_t isolated_mode; /**<set by "--isolated-mode */
 extern uint8_t  mp_anon; /**< set by "--mp-anon" parameter */
 extern uint8_t no_link_check; /**<set by "--disable-link-check" parameter */
 extern volatile int test_done; /* stop packet forwarding when set to 1. */