[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