Some configuration options can not be tested properly with testpmd because it automatically starts all ports. This makes it harder to test driver handling of configuration options: (for example rx_deferred_start).
Add new command line flag --disable-device-start which skips the device start. The port can then be started manually later. Signed-off-by: Stephen Hemminger <[email protected]> --- v2 -- add new option to guide in doc app/test-pmd/parameters.c | 4 ++++ app/test-pmd/testpmd.c | 7 ++++++- app/test-pmd/testpmd.h | 1 + doc/guides/testpmd_app_ug/run_app.rst | 6 ++++++ 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c index 16358ea00c9f..5244872c4aa8 100644 --- a/app/test-pmd/parameters.c +++ b/app/test-pmd/parameters.c @@ -174,6 +174,7 @@ usage(char* progname) printf(" --txonly-multi-flow: generate multiple flows in txonly mode\n"); printf(" --disable-link-check: disable check on link status when " "starting/stopping ports.\n"); + printf(" --disable-device-start: do not automatically start port\n"); printf(" --no-lsc-interrupt: disable link status change interrupt.\n"); printf(" --no-rmv-interrupt: disable device removal interrupt.\n"); printf(" --bitrate-stats=N: set the logical core N to perform " @@ -634,6 +635,7 @@ launch_args_parse(int argc, char** argv) { "txpkts", 1, 0, 0 }, { "txonly-multi-flow", 0, 0, 0 }, { "disable-link-check", 0, 0, 0 }, + { "disable-device-start", 0, 0, 0 }, { "no-lsc-interrupt", 0, 0, 0 }, { "no-rmv-interrupt", 0, 0, 0 }, { "print-event", 1, 0, 0 }, @@ -1196,6 +1198,8 @@ launch_args_parse(int argc, char** argv) no_flush_rx = 1; if (!strcmp(lgopts[opt_idx].name, "disable-link-check")) no_link_check = 1; + if (!strcmp(lgopts[opt_idx].name, "disable-device-start")) + no_device_start = 1; if (!strcmp(lgopts[opt_idx].name, "no-lsc-interrupt")) lsc_interrupt = 0; if (!strcmp(lgopts[opt_idx].name, "no-rmv-interrupt")) diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index 3ed3523b791e..807ee0c823b8 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -339,6 +339,11 @@ uint8_t flow_isolate_all; */ uint8_t no_link_check = 0; /* check by default */ +/* + * Don't automatically start all ports in interactive mode. + */ +uint8_t no_device_start = 0; + /* * Enable link status change notification */ @@ -3288,7 +3293,7 @@ main(int argc, char** argv) } } - if (start_port(RTE_PORT_ALL) != 0) + if (!no_device_start && start_port(RTE_PORT_ALL) != 0) rte_exit(EXIT_FAILURE, "Start ports failed\n"); /* set all ports to promiscuous mode by default */ diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h index e3a6f7c7178c..fd8dccdf08f1 100644 --- a/app/test-pmd/testpmd.h +++ b/app/test-pmd/testpmd.h @@ -321,6 +321,7 @@ extern uint8_t flow_isolate_all; /**< set by "--flow-isolate-all */ extern uint8_t mp_alloc_type; /**< set by "--mp-anon" or "--mp-alloc" parameter */ extern uint8_t no_link_check; /**<set by "--disable-link-check" parameter */ +extern uint8_t no_device_start; /**<set by "--disable-device-start" parameter */ extern volatile int test_done; /* stop packet forwarding when set to 1. */ extern uint8_t lsc_interrupt; /**< disabled by "--no-lsc-interrupt" parameter */ extern uint8_t rmv_interrupt; /**< disabled by "--no-rmv-interrupt" parameter */ diff --git a/doc/guides/testpmd_app_ug/run_app.rst b/doc/guides/testpmd_app_ug/run_app.rst index e7db52068623..d0d89b3a30db 100644 --- a/doc/guides/testpmd_app_ug/run_app.rst +++ b/doc/guides/testpmd_app_ug/run_app.rst @@ -344,6 +344,12 @@ The command line options are: Disable check on link status when starting/stopping ports. +* ``--disable-device-start`` + + Do not automatically start all ports. This allows testing + configuration of rx and tx queues before device is started + for the first time. + * ``--no-lsc-interrupt`` Disable LSC interrupts for all ports, even those supporting it. -- 2.20.1

