On 11/19/2019 7:18 PM, Pallavi Kadam wrote: > > On 11/18/2019 8:18 AM, Ferruh Yigit wrote: >> On 11/18/2019 3:37 PM, David Marchand wrote: >>> We currently do not check that a non option string has been passed to >>> testpmd. >>> >>> Example: >>> $ ./master/app/testpmd --no-huge -m 512 --vdev net_null0 \ >>> --vdev net_null1 -- -i nb-cores=2 --total-num-mbuf 2048 >>> [...] >>> testpmd> show config fwd >>> io packet forwarding - ports=2 - cores=1 - streams=2 - NUMA support >>> enabled, MP allocation mode: native >>> Logical Core 1 (socket 0) forwards packets on 2 streams: >>> RX P=0/Q=0 (socket 0) -> TX P=1/Q=0 (socket 0) peer=02:00:00:00:00:01 >>> RX P=1/Q=0 (socket 0) -> TX P=0/Q=0 (socket 0) peer=02:00:00:00:00:00 >>> >>> Here nb-cores=2 is just ignored, while the (probably sleepy) user did not >>> notice this. >>> >>> Validate that all strings passed to testpmd are part of a known option. >>> >>> After this patch: >>> $ ./master/app/testpmd --no-huge -m 512 --vdev net_null0 \ >>> --vdev net_null1 -- -i nb-cores=2 --total-num-mbuf 2048 >>> [...] >>> Invalid parameter: nb-cores=2 >>> EAL: Error - exiting with code: 1 >>> Cause: Command line incorrect >>> >>> While at it, when passing an unknown option, print the string that gets >>> refused by getopt_long to help the user. >>> >>> Fixes: af75078fece3 ("first public release") >>> Cc: sta...@dpdk.org >>> >>> Signed-off-by: David Marchand <david.march...@redhat.com> >>> Reviewed-by: Ferruh Yigit <ferruh.yi...@intel.com> >>> --- >>> This seems a bit dangerous to take this kind of change this late. >>> Some "working fine" scripts might now report failures from testpmd because >>> of garbage in the command line. >>> >>> Sending the patch anyway to see what others think about it. >>> >>> Changelog since v1: >>> - fixed example in commitlog, >>> >>> --- >>> app/test-pmd/parameters.c | 7 +++++++ >>> 1 file changed, 7 insertions(+) >>> >>> diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c >>> index deca7a6828..2e7a504415 100644 >>> --- a/app/test-pmd/parameters.c >>> +++ b/app/test-pmd/parameters.c >>> @@ -1363,12 +1363,19 @@ launch_args_parse(int argc, char** argv) >>> break; >>> default: >>> usage(argv[0]); >>> + printf("Invalid option: %s\n", argv[optind]); >>> rte_exit(EXIT_FAILURE, >>> "Command line is incomplete or incorrect\n"); >>> break; >>> } >>> } >>> >>> + if (optind != argc) { >> I hope 'optind' works as expected [1] in Windows too (Anatoly verified the >> FreeBSD one). >> >> @Pallavi, @Ranjit, Can you please confirm it? >> >> [1] >> https://linux.die.net/man/3/optind >> " >> If there are no more option characters, getopt() returns -1. Then optind is >> the >> index in argv of the first argv-element that is not an option. >> " > > Verified on Windows. So far this change does not affect Windows code. > Also, Windows does not support testpmd app yet. >
Applied to dpdk-next-net/master, thanks.