[dpdk-dev] [PATCH 1/6] test-pmd: add support for single port loopback topology

Cyril Chemparathy cchemparathy at tilera.com
Thu Apr 3 19:30:11 CEST 2014


This commits adds a new "loop" option to the --port-topology argument.  With
the loop option specified, ingress traffic is simply transmitted back on the
same interface.

Signed-off-by: Cyril Chemparathy <cchemparathy at tilera.com>
---
 app/test-pmd/config.c     | 16 ++++++++++++++--
 app/test-pmd/parameters.c |  2 ++
 app/test-pmd/testpmd.h    |  3 ++-
 3 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c
index 0816227..1d3cdba 100644
--- a/app/test-pmd/config.c
+++ b/app/test-pmd/config.c
@@ -733,7 +733,8 @@ simple_fwd_config_setup(void)
 	portid_t j;
 	portid_t inc = 2;
 
-	if (port_topology == PORT_TOPOLOGY_CHAINED) {
+	if (port_topology == PORT_TOPOLOGY_CHAINED ||
+	    port_topology == PORT_TOPOLOGY_LOOP) {
 		inc = 1;
 	} else if (nb_fwd_ports % 2) {
 		printf("\nWarning! Cannot handle an odd number of ports "
@@ -761,7 +762,10 @@ simple_fwd_config_setup(void)
 	setup_fwd_config_of_each_lcore(&cur_fwd_config);
 
 	for (i = 0; i < cur_fwd_config.nb_fwd_ports; i = (portid_t) (i + inc)) {
-		j = (portid_t) ((i + 1) % cur_fwd_config.nb_fwd_ports);
+		if (port_topology != PORT_TOPOLOGY_LOOP)
+			j = (portid_t) ((i + 1) % cur_fwd_config.nb_fwd_ports);
+		else
+			j = i;
 		fwd_streams[i]->rx_port   = fwd_ports_ids[i];
 		fwd_streams[i]->rx_queue  = 0;
 		fwd_streams[i]->tx_port   = fwd_ports_ids[j];
@@ -825,10 +829,18 @@ rss_fwd_config_setup(void)
 		struct fwd_stream *fs;
 
 		fs = fwd_streams[lc_id];
+
 		if ((rxp & 0x1) == 0)
 			txp = (portid_t) (rxp + 1);
 		else
 			txp = (portid_t) (rxp - 1);
+		/*
+		 * if we are in loopback, simply send stuff out through the
+		 * ingress port
+		 */
+		if (port_topology == PORT_TOPOLOGY_LOOP)
+			txp = rxp;
+
 		fs->rx_port = fwd_ports_ids[rxp];
 		fs->rx_queue = rxq;
 		fs->tx_port = fwd_ports_ids[txp];
diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c
index f537e49..d47d020 100644
--- a/app/test-pmd/parameters.c
+++ b/app/test-pmd/parameters.c
@@ -756,6 +756,8 @@ launch_args_parse(int argc, char** argv)
 					port_topology = PORT_TOPOLOGY_PAIRED;
 				else if (!strcmp(optarg, "chained"))
 					port_topology = PORT_TOPOLOGY_CHAINED;
+				else if (!strcmp(optarg, "loop"))
+					port_topology = PORT_TOPOLOGY_LOOP;
 				else
 					rte_exit(EXIT_FAILURE, "port-topology %s invalid -"
 						 " must be: paired or chained \n",
diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h
index 5b4ee6f..a4842ec 100644
--- a/app/test-pmd/testpmd.h
+++ b/app/test-pmd/testpmd.h
@@ -80,7 +80,8 @@ typedef uint16_t streamid_t;
 
 enum {
 	PORT_TOPOLOGY_PAIRED,
-	PORT_TOPOLOGY_CHAINED
+	PORT_TOPOLOGY_CHAINED,
+	PORT_TOPOLOGY_LOOP,
 };
 
 #ifdef RTE_TEST_PMD_RECORD_BURST_STATS
-- 
1.8.3.1



More information about the dev mailing list