This is a cleanup similar to previous ones in EAL and examples.
Instead of using strcmp for every long options while getopt_long already
did such parsing, rely on getopt_long return value.

Note for reviewers: this patch is best reviewed once applied locally and
displayed with git show -w.

Signed-off-by: David Marchand <david.march...@redhat.com>
---
Changes since v1:
- removed useless comments in options enum definitions,
- constified long_options,
- added macros to shorten long options array definitions,
- removed unneeded argvopt,

---
 app/test-pmd/parameters.c | 1924 +++++++++++++++++++++----------------
 1 file changed, 1083 insertions(+), 841 deletions(-)

diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c
index a69639b6fb..c13f7564bf 100644
--- a/app/test-pmd/parameters.c
+++ b/app/test-pmd/parameters.c
@@ -40,6 +40,344 @@
 
 #include "testpmd.h"
 
+enum {
+#define TESTPMD_OPT_AUTO_START "auto-start"
+       TESTPMD_OPT_AUTO_START_NUM = 'a',
+#define TESTPMD_OPT_HELP "help"
+       TESTPMD_OPT_HELP_NUM = 'h',
+#define TESTPMD_OPT_INTERACTIVE "interactive"
+       TESTPMD_OPT_INTERACTIVE_NUM = 'i',
+
+       TESTPMD_OPT_LONG_MIN_NUM = 256,
+#define TESTPMD_OPT_CMDLINE_FILE "cmdline-file"
+       TESTPMD_OPT_CMDLINE_FILE_NUM,
+#define TESTPMD_OPT_ETH_PEERS_CONFIGFILE "eth-peers-configfile"
+       TESTPMD_OPT_ETH_PEERS_CONFIGFILE_NUM,
+#define TESTPMD_OPT_ETH_PEER "eth-peer"
+       TESTPMD_OPT_ETH_PEER_NUM,
+#define TESTPMD_OPT_TX_FIRST "tx-first"
+       TESTPMD_OPT_TX_FIRST_NUM,
+#define TESTPMD_OPT_STATS_PERIOD "stats-period"
+       TESTPMD_OPT_STATS_PERIOD_NUM,
+#define TESTPMD_OPT_DISPLAY_XSTATS "display-xstats"
+       TESTPMD_OPT_DISPLAY_XSTATS_NUM,
+#define TESTPMD_OPT_NB_CORES "nb-cores"
+       TESTPMD_OPT_NB_CORES_NUM,
+#define TESTPMD_OPT_NB_PORTS "nb-ports"
+       TESTPMD_OPT_NB_PORTS_NUM,
+#define TESTPMD_OPT_COREMASK "coremask"
+       TESTPMD_OPT_COREMASK_NUM,
+#define TESTPMD_OPT_PORTMASK "portmask"
+       TESTPMD_OPT_PORTMASK_NUM,
+#define TESTPMD_OPT_PORTLIST "portlist"
+       TESTPMD_OPT_PORTLIST_NUM,
+#define TESTPMD_OPT_NUMA "numa"
+       TESTPMD_OPT_NUMA_NUM,
+#define TESTPMD_OPT_NO_NUMA "no-numa"
+       TESTPMD_OPT_NO_NUMA_NUM,
+#define TESTPMD_OPT_MP_ANON "mp-anon"
+       TESTPMD_OPT_MP_ANON_NUM,
+#define TESTPMD_OPT_PORT_NUMA_CONFIG "port-numa-config"
+       TESTPMD_OPT_PORT_NUMA_CONFIG_NUM,
+#define TESTPMD_OPT_RING_NUMA_CONFIG "ring-numa-config"
+       TESTPMD_OPT_RING_NUMA_CONFIG_NUM,
+#define TESTPMD_OPT_SOCKET_NUM "socket-num"
+       TESTPMD_OPT_SOCKET_NUM_NUM,
+#define TESTPMD_OPT_MBUF_SIZE "mbuf-size"
+       TESTPMD_OPT_MBUF_SIZE_NUM,
+#define TESTPMD_OPT_TOTAL_NUM_MBUFS "total-num-mbufs"
+       TESTPMD_OPT_TOTAL_NUM_MBUFS_NUM,
+#define TESTPMD_OPT_MAX_PKT_LEN "max-pkt-len"
+       TESTPMD_OPT_MAX_PKT_LEN_NUM,
+#define TESTPMD_OPT_MAX_LRO_PKT_SIZE "max-lro-pkt-size"
+       TESTPMD_OPT_MAX_LRO_PKT_SIZE_NUM,
+#define TESTPMD_OPT_LATENCYSTATS "latencystats"
+       TESTPMD_OPT_LATENCYSTATS_NUM,
+#define TESTPMD_OPT_BITRATE_STATS "bitrate-stats"
+       TESTPMD_OPT_BITRATE_STATS_NUM,
+#define TESTPMD_OPT_DISABLE_CRC_STRIP "disable-crc-strip"
+       TESTPMD_OPT_DISABLE_CRC_STRIP_NUM,
+#define TESTPMD_OPT_ENABLE_LRO "enable-lro"
+       TESTPMD_OPT_ENABLE_LRO_NUM,
+#define TESTPMD_OPT_ENABLE_RX_CKSUM "enable-rx-cksum"
+       TESTPMD_OPT_ENABLE_RX_CKSUM_NUM,
+#define TESTPMD_OPT_ENABLE_RX_TIMESTAMP "enable-rx-timestamp"
+       TESTPMD_OPT_ENABLE_RX_TIMESTAMP_NUM,
+#define TESTPMD_OPT_ENABLE_SCATTER "enable-scatter"
+       TESTPMD_OPT_ENABLE_SCATTER_NUM,
+#define TESTPMD_OPT_ENABLE_HW_VLAN "enable-hw-vlan"
+       TESTPMD_OPT_ENABLE_HW_VLAN_NUM,
+#define TESTPMD_OPT_ENABLE_HW_VLAN_FILTER "enable-hw-vlan-filter"
+       TESTPMD_OPT_ENABLE_HW_VLAN_FILTER_NUM,
+#define TESTPMD_OPT_ENABLE_HW_VLAN_STRIP "enable-hw-vlan-strip"
+       TESTPMD_OPT_ENABLE_HW_VLAN_STRIP_NUM,
+#define TESTPMD_OPT_ENABLE_HW_VLAN_EXTEND "enable-hw-vlan-extend"
+       TESTPMD_OPT_ENABLE_HW_VLAN_EXTEND_NUM,
+#define TESTPMD_OPT_ENABLE_HW_QINQ_STRIP "enable-hw-qinq-strip"
+       TESTPMD_OPT_ENABLE_HW_QINQ_STRIP_NUM,
+#define TESTPMD_OPT_ENABLE_DROP_EN "enable-drop-en"
+       TESTPMD_OPT_ENABLE_DROP_EN_NUM,
+#define TESTPMD_OPT_DISABLE_RSS "disable-rss"
+       TESTPMD_OPT_DISABLE_RSS_NUM,
+#define TESTPMD_OPT_PORT_TOPOLOGY "port-topology"
+       TESTPMD_OPT_PORT_TOPOLOGY_NUM,
+#define TESTPMD_OPT_FORWARD_MODE "forward-mode"
+       TESTPMD_OPT_FORWARD_MODE_NUM,
+#define TESTPMD_OPT_RSS_IP "rss-ip"
+       TESTPMD_OPT_RSS_IP_NUM,
+#define TESTPMD_OPT_RSS_UDP "rss-udp"
+       TESTPMD_OPT_RSS_UDP_NUM,
+#define TESTPMD_OPT_RSS_LEVEL_OUTER "rss-level-outer"
+       TESTPMD_OPT_RSS_LEVEL_OUTER_NUM,
+#define TESTPMD_OPT_RSS_LEVEL_INNER "rss-level-inner"
+       TESTPMD_OPT_RSS_LEVEL_INNER_NUM,
+#define TESTPMD_OPT_RXQ "rxq"
+       TESTPMD_OPT_RXQ_NUM,
+#define TESTPMD_OPT_TXQ "txq"
+       TESTPMD_OPT_TXQ_NUM,
+#define TESTPMD_OPT_RXD "rxd"
+       TESTPMD_OPT_RXD_NUM,
+#define TESTPMD_OPT_TXD "txd"
+       TESTPMD_OPT_TXD_NUM,
+#define TESTPMD_OPT_HAIRPINQ "hairpinq"
+       TESTPMD_OPT_HAIRPINQ_NUM,
+#define TESTPMD_OPT_HAIRPIN_MODE "hairpin-mode"
+       TESTPMD_OPT_HAIRPIN_MODE_NUM,
+#define TESTPMD_OPT_BURST "burst"
+       TESTPMD_OPT_BURST_NUM,
+#define TESTPMD_OPT_FLOWGEN_CLONES "flowgen-clones"
+       TESTPMD_OPT_FLOWGEN_CLONES_NUM,
+#define TESTPMD_OPT_FLOWGEN_FLOWS "flowgen-flows"
+       TESTPMD_OPT_FLOWGEN_FLOWS_NUM,
+#define TESTPMD_OPT_MBCACHE "mbcache"
+       TESTPMD_OPT_MBCACHE_NUM,
+#define TESTPMD_OPT_TXPT "txpt"
+       TESTPMD_OPT_TXPT_NUM,
+#define TESTPMD_OPT_TXHT "txht"
+       TESTPMD_OPT_TXHT_NUM,
+#define TESTPMD_OPT_TXWT "txwt"
+       TESTPMD_OPT_TXWT_NUM,
+#define TESTPMD_OPT_TXFREET "txfreet"
+       TESTPMD_OPT_TXFREET_NUM,
+#define TESTPMD_OPT_TXRST "txrst"
+       TESTPMD_OPT_TXRST_NUM,
+#define TESTPMD_OPT_RXPT "rxpt"
+       TESTPMD_OPT_RXPT_NUM,
+#define TESTPMD_OPT_RXHT "rxht"
+       TESTPMD_OPT_RXHT_NUM,
+#define TESTPMD_OPT_RXWT "rxwt"
+       TESTPMD_OPT_RXWT_NUM,
+#define TESTPMD_OPT_RXFREET "rxfreet"
+       TESTPMD_OPT_RXFREET_NUM,
+#define TESTPMD_OPT_NO_FLUSH_RX "no-flush-rx"
+       TESTPMD_OPT_NO_FLUSH_RX_NUM,
+#define TESTPMD_OPT_FLOW_ISOLATE_ALL "flow-isolate-all"
+       TESTPMD_OPT_FLOW_ISOLATE_ALL_NUM,
+#define TESTPMD_OPT_DISABLE_FLOW_FLUSH "disable-flow-flush"
+       TESTPMD_OPT_DISABLE_FLOW_FLUSH_NUM,
+#define TESTPMD_OPT_RXOFFS "rxoffs"
+       TESTPMD_OPT_RXOFFS_NUM,
+#define TESTPMD_OPT_RXPKTS "rxpkts"
+       TESTPMD_OPT_RXPKTS_NUM,
+#define TESTPMD_OPT_RXHDRS "rxhdrs"
+       TESTPMD_OPT_RXHDRS_NUM,
+#define TESTPMD_OPT_TXPKTS "txpkts"
+       TESTPMD_OPT_TXPKTS_NUM,
+#define TESTPMD_OPT_MULTI_RX_MEMPOOL "multi-rx-mempool"
+       TESTPMD_OPT_MULTI_RX_MEMPOOL_NUM,
+#define TESTPMD_OPT_TXONLY_MULTI_FLOW "txonly-multi-flow"
+       TESTPMD_OPT_TXONLY_MULTI_FLOW_NUM,
+#define TESTPMD_OPT_RXQ_SHARE "rxq-share"
+       TESTPMD_OPT_RXQ_SHARE_NUM,
+#define TESTPMD_OPT_ETH_LINK_SPEED "eth-link-speed"
+       TESTPMD_OPT_ETH_LINK_SPEED_NUM,
+#define TESTPMD_OPT_DISABLE_LINK_CHECK "disable-link-check"
+       TESTPMD_OPT_DISABLE_LINK_CHECK_NUM,
+#define TESTPMD_OPT_DISABLE_DEVICE_START "disable-device-start"
+       TESTPMD_OPT_DISABLE_DEVICE_START_NUM,
+#define TESTPMD_OPT_NO_LSC_INTERRUPT "no-lsc-interrupt"
+       TESTPMD_OPT_NO_LSC_INTERRUPT_NUM,
+#define TESTPMD_OPT_NO_RMV_INTERRUPT "no-rmv-interrupt"
+       TESTPMD_OPT_NO_RMV_INTERRUPT_NUM,
+#define TESTPMD_OPT_PRINT_EVENT "print-event"
+       TESTPMD_OPT_PRINT_EVENT_NUM,
+#define TESTPMD_OPT_MASK_EVENT "mask-event"
+       TESTPMD_OPT_MASK_EVENT_NUM,
+#define TESTPMD_OPT_TX_OFFLOADS "tx-offloads"
+       TESTPMD_OPT_TX_OFFLOADS_NUM,
+#define TESTPMD_OPT_RX_OFFLOADS "rx-offloads"
+       TESTPMD_OPT_RX_OFFLOADS_NUM,
+#define TESTPMD_OPT_HOT_PLUG "hot-plug"
+       TESTPMD_OPT_HOT_PLUG_NUM,
+#define TESTPMD_OPT_VXLAN_GPE_PORT "vxlan-gpe-port"
+       TESTPMD_OPT_VXLAN_GPE_PORT_NUM,
+#define TESTPMD_OPT_GENEVE_PARSED_PORT "geneve-parsed-port"
+       TESTPMD_OPT_GENEVE_PARSED_PORT_NUM,
+#define TESTPMD_OPT_MLOCKALL "mlockall"
+       TESTPMD_OPT_MLOCKALL_NUM,
+#define TESTPMD_OPT_NO_MLOCKALL "no-mlockall"
+       TESTPMD_OPT_NO_MLOCKALL_NUM,
+#define TESTPMD_OPT_MP_ALLOC "mp-alloc"
+       TESTPMD_OPT_MP_ALLOC_NUM,
+#define TESTPMD_OPT_TX_IP "tx-ip"
+       TESTPMD_OPT_TX_IP_NUM,
+#define TESTPMD_OPT_TX_UDP "tx-udp"
+       TESTPMD_OPT_TX_UDP_NUM,
+#define TESTPMD_OPT_NOISY_TX_SW_BUFFER_SIZE "noisy-tx-sw-buffer-size"
+       TESTPMD_OPT_NOISY_TX_SW_BUFFER_SIZE_NUM,
+#define TESTPMD_OPT_NOISY_TX_SW_BUFFER_FLUSHTIME "noisy-tx-sw-buffer-flushtime"
+       TESTPMD_OPT_NOISY_TX_SW_BUFFER_FLUSHTIME_NUM,
+#define TESTPMD_OPT_NOISY_LKUP_MEMORY "noisy-lkup-memory"
+       TESTPMD_OPT_NOISY_LKUP_MEMORY_NUM,
+#define TESTPMD_OPT_NOISY_LKUP_NUM_WRITES "noisy-lkup-num-writes"
+       TESTPMD_OPT_NOISY_LKUP_NUM_WRITES_NUM,
+#define TESTPMD_OPT_NOISY_LKUP_NUM_READS "noisy-lkup-num-reads"
+       TESTPMD_OPT_NOISY_LKUP_NUM_READS_NUM,
+#define TESTPMD_OPT_NOISY_LKUP_NUM_READS_WRITES "noisy-lkup-num-reads-writes"
+       TESTPMD_OPT_NOISY_LKUP_NUM_READS_WRITES_NUM,
+#define TESTPMD_OPT_NOISY_FORWARD_MODE "noisy-forward-mode"
+       TESTPMD_OPT_NOISY_FORWARD_MODE_NUM,
+#define TESTPMD_OPT_NO_IOVA_CONTIG "no-iova-contig"
+       TESTPMD_OPT_NO_IOVA_CONTIG_NUM,
+#define TESTPMD_OPT_RX_MQ_MODE "rx-mq-mode"
+       TESTPMD_OPT_RX_MQ_MODE_NUM,
+#define TESTPMD_OPT_RECORD_CORE_CYCLES "record-core-cycles"
+       TESTPMD_OPT_RECORD_CORE_CYCLES_NUM,
+#define TESTPMD_OPT_RECORD_BURST_STATS "record-burst-stats"
+       TESTPMD_OPT_RECORD_BURST_STATS_NUM,
+#define TESTPMD_OPT_NUM_PROCS "num-procs"
+       TESTPMD_OPT_NUM_PROCS_NUM,
+#define TESTPMD_OPT_PROC_ID "proc-id"
+       TESTPMD_OPT_PROC_ID_NUM,
+
+       TESTPMD_OPT_LONG_MAX_NUM
+};
+
+static const char short_options[] = {
+       "a" /* auto-start */
+       "h" /* help */
+       "i" /* interactive */
+};
+
+#define NO_ARG(opt) { opt, no_argument, NULL, opt ## _NUM }
+#define REQUIRED_ARG(opt) { opt, required_argument, NULL, opt ## _NUM }
+#define OPTIONAL_ARG(opt) { opt, optional_argument, NULL, opt ## _NUM }
+static const struct option long_options[] = {
+       NO_ARG(TESTPMD_OPT_AUTO_START),
+       NO_ARG(TESTPMD_OPT_HELP),
+       NO_ARG(TESTPMD_OPT_INTERACTIVE),
+       REQUIRED_ARG(TESTPMD_OPT_CMDLINE_FILE),
+       REQUIRED_ARG(TESTPMD_OPT_ETH_PEERS_CONFIGFILE),
+       REQUIRED_ARG(TESTPMD_OPT_ETH_PEER),
+       NO_ARG(TESTPMD_OPT_TX_FIRST),
+       REQUIRED_ARG(TESTPMD_OPT_STATS_PERIOD),
+       REQUIRED_ARG(TESTPMD_OPT_DISPLAY_XSTATS),
+       REQUIRED_ARG(TESTPMD_OPT_NB_CORES),
+       REQUIRED_ARG(TESTPMD_OPT_NB_PORTS),
+       REQUIRED_ARG(TESTPMD_OPT_COREMASK),
+       REQUIRED_ARG(TESTPMD_OPT_PORTMASK),
+       REQUIRED_ARG(TESTPMD_OPT_PORTLIST),
+       NO_ARG(TESTPMD_OPT_NUMA),
+       NO_ARG(TESTPMD_OPT_NO_NUMA),
+       NO_ARG(TESTPMD_OPT_MP_ANON), /* deprecated */
+       REQUIRED_ARG(TESTPMD_OPT_PORT_NUMA_CONFIG),
+       REQUIRED_ARG(TESTPMD_OPT_RING_NUMA_CONFIG),
+       REQUIRED_ARG(TESTPMD_OPT_SOCKET_NUM),
+       REQUIRED_ARG(TESTPMD_OPT_MBUF_SIZE),
+       REQUIRED_ARG(TESTPMD_OPT_TOTAL_NUM_MBUFS),
+       REQUIRED_ARG(TESTPMD_OPT_MAX_PKT_LEN),
+       REQUIRED_ARG(TESTPMD_OPT_MAX_LRO_PKT_SIZE),
+#ifdef RTE_LIB_LATENCYSTATS
+       REQUIRED_ARG(TESTPMD_OPT_LATENCYSTATS),
+#endif
+#ifdef RTE_LIB_BITRATESTATS
+       REQUIRED_ARG(TESTPMD_OPT_BITRATE_STATS),
+#endif
+       NO_ARG(TESTPMD_OPT_DISABLE_CRC_STRIP),
+       NO_ARG(TESTPMD_OPT_ENABLE_LRO),
+       NO_ARG(TESTPMD_OPT_ENABLE_RX_CKSUM),
+       NO_ARG(TESTPMD_OPT_ENABLE_RX_TIMESTAMP),
+       NO_ARG(TESTPMD_OPT_ENABLE_SCATTER),
+       NO_ARG(TESTPMD_OPT_ENABLE_HW_VLAN),
+       NO_ARG(TESTPMD_OPT_ENABLE_HW_VLAN_FILTER),
+       NO_ARG(TESTPMD_OPT_ENABLE_HW_VLAN_STRIP),
+       NO_ARG(TESTPMD_OPT_ENABLE_HW_VLAN_EXTEND),
+       NO_ARG(TESTPMD_OPT_ENABLE_HW_QINQ_STRIP),
+       NO_ARG(TESTPMD_OPT_ENABLE_DROP_EN),
+       NO_ARG(TESTPMD_OPT_DISABLE_RSS),
+       REQUIRED_ARG(TESTPMD_OPT_PORT_TOPOLOGY),
+       REQUIRED_ARG(TESTPMD_OPT_FORWARD_MODE),
+       NO_ARG(TESTPMD_OPT_RSS_IP),
+       NO_ARG(TESTPMD_OPT_RSS_UDP),
+       NO_ARG(TESTPMD_OPT_RSS_LEVEL_OUTER),
+       NO_ARG(TESTPMD_OPT_RSS_LEVEL_INNER),
+       REQUIRED_ARG(TESTPMD_OPT_RXQ),
+       REQUIRED_ARG(TESTPMD_OPT_TXQ),
+       REQUIRED_ARG(TESTPMD_OPT_RXD),
+       REQUIRED_ARG(TESTPMD_OPT_TXD),
+       REQUIRED_ARG(TESTPMD_OPT_HAIRPINQ),
+       REQUIRED_ARG(TESTPMD_OPT_HAIRPIN_MODE),
+       REQUIRED_ARG(TESTPMD_OPT_BURST),
+       REQUIRED_ARG(TESTPMD_OPT_FLOWGEN_CLONES),
+       REQUIRED_ARG(TESTPMD_OPT_FLOWGEN_FLOWS),
+       REQUIRED_ARG(TESTPMD_OPT_MBCACHE),
+       REQUIRED_ARG(TESTPMD_OPT_TXPT),
+       REQUIRED_ARG(TESTPMD_OPT_TXHT),
+       REQUIRED_ARG(TESTPMD_OPT_TXWT),
+       REQUIRED_ARG(TESTPMD_OPT_TXFREET),
+       REQUIRED_ARG(TESTPMD_OPT_TXRST),
+       REQUIRED_ARG(TESTPMD_OPT_RXPT),
+       REQUIRED_ARG(TESTPMD_OPT_RXHT),
+       REQUIRED_ARG(TESTPMD_OPT_RXWT),
+       REQUIRED_ARG(TESTPMD_OPT_RXFREET),
+       NO_ARG(TESTPMD_OPT_NO_FLUSH_RX),
+       NO_ARG(TESTPMD_OPT_FLOW_ISOLATE_ALL),
+       NO_ARG(TESTPMD_OPT_DISABLE_FLOW_FLUSH),
+       REQUIRED_ARG(TESTPMD_OPT_RXOFFS),
+       REQUIRED_ARG(TESTPMD_OPT_RXPKTS),
+       REQUIRED_ARG(TESTPMD_OPT_RXHDRS),
+       REQUIRED_ARG(TESTPMD_OPT_TXPKTS),
+       NO_ARG(TESTPMD_OPT_MULTI_RX_MEMPOOL),
+       NO_ARG(TESTPMD_OPT_TXONLY_MULTI_FLOW),
+       OPTIONAL_ARG(TESTPMD_OPT_RXQ_SHARE),
+       REQUIRED_ARG(TESTPMD_OPT_ETH_LINK_SPEED),
+       NO_ARG(TESTPMD_OPT_DISABLE_LINK_CHECK),
+       NO_ARG(TESTPMD_OPT_DISABLE_DEVICE_START),
+       NO_ARG(TESTPMD_OPT_NO_LSC_INTERRUPT),
+       NO_ARG(TESTPMD_OPT_NO_RMV_INTERRUPT),
+       REQUIRED_ARG(TESTPMD_OPT_PRINT_EVENT),
+       REQUIRED_ARG(TESTPMD_OPT_MASK_EVENT),
+       REQUIRED_ARG(TESTPMD_OPT_TX_OFFLOADS),
+       REQUIRED_ARG(TESTPMD_OPT_RX_OFFLOADS),
+       NO_ARG(TESTPMD_OPT_HOT_PLUG),
+       REQUIRED_ARG(TESTPMD_OPT_VXLAN_GPE_PORT),
+       REQUIRED_ARG(TESTPMD_OPT_GENEVE_PARSED_PORT),
+#ifndef RTE_EXEC_ENV_WINDOWS
+       NO_ARG(TESTPMD_OPT_MLOCKALL),
+       NO_ARG(TESTPMD_OPT_NO_MLOCKALL),
+#endif
+       REQUIRED_ARG(TESTPMD_OPT_MP_ALLOC),
+       REQUIRED_ARG(TESTPMD_OPT_TX_IP),
+       REQUIRED_ARG(TESTPMD_OPT_TX_UDP),
+       REQUIRED_ARG(TESTPMD_OPT_NOISY_TX_SW_BUFFER_SIZE),
+       REQUIRED_ARG(TESTPMD_OPT_NOISY_TX_SW_BUFFER_FLUSHTIME),
+       REQUIRED_ARG(TESTPMD_OPT_NOISY_LKUP_MEMORY),
+       REQUIRED_ARG(TESTPMD_OPT_NOISY_LKUP_NUM_WRITES),
+       REQUIRED_ARG(TESTPMD_OPT_NOISY_LKUP_NUM_READS),
+       REQUIRED_ARG(TESTPMD_OPT_NOISY_LKUP_NUM_READS_WRITES),
+       REQUIRED_ARG(TESTPMD_OPT_NOISY_FORWARD_MODE),
+       NO_ARG(TESTPMD_OPT_NO_IOVA_CONTIG),
+       REQUIRED_ARG(TESTPMD_OPT_RX_MQ_MODE),
+       NO_ARG(TESTPMD_OPT_RECORD_CORE_CYCLES),
+       NO_ARG(TESTPMD_OPT_RECORD_BURST_STATS),
+       REQUIRED_ARG(TESTPMD_OPT_NUM_PROCS),
+       REQUIRED_ARG(TESTPMD_OPT_PROC_ID),
+       { 0, 0, NULL, 0 }
+};
+#undef NO_ARG
+#undef REQUIRED_ARG
+#undef OPTIONAL_ARG
+
 static void
 usage(char* progname)
 {
@@ -587,11 +925,7 @@ parse_link_speed(int n)
 void
 launch_args_parse(int argc, char** argv)
 {
-#define PARAM_PROC_ID "proc-id"
-#define PARAM_NUM_PROCS "num-procs"
-
        int n, opt;
-       char **argvopt;
        int opt_idx;
        portid_t pid;
        enum { TX, RX };
@@ -602,123 +936,8 @@ launch_args_parse(int argc, char** argv)
        uint16_t rec_nb_pkts;
        int ret;
 
-       static struct option lgopts[] = {
-               { "help",                       0, 0, 0 },
-               { "interactive",                0, 0, 0 },
-               { "cmdline-file",               1, 0, 0 },
-               { "auto-start",                 0, 0, 0 },
-               { "eth-peers-configfile",       1, 0, 0 },
-               { "eth-peer",                   1, 0, 0 },
-               { "tx-first",                   0, 0, 0 },
-               { "stats-period",               1, 0, 0 },
-               { "display-xstats",             1, 0, 0 },
-               { "nb-cores",                   1, 0, 0 },
-               { "nb-ports",                   1, 0, 0 },
-               { "coremask",                   1, 0, 0 },
-               { "portmask",                   1, 0, 0 },
-               { "portlist",                   1, 0, 0 },
-               { "numa",                       0, 0, 0 },
-               { "no-numa",                    0, 0, 0 },
-               { "mp-anon",                    0, 0, 0 }, /* deprecated */
-               { "port-numa-config",           1, 0, 0 },
-               { "ring-numa-config",           1, 0, 0 },
-               { "socket-num",                 1, 0, 0 },
-               { "mbuf-size",                  1, 0, 0 },
-               { "total-num-mbufs",            1, 0, 0 },
-               { "max-pkt-len",                1, 0, 0 },
-               { "max-lro-pkt-size",           1, 0, 0 },
-#ifdef RTE_LIB_LATENCYSTATS
-               { "latencystats",               1, 0, 0 },
-#endif
-#ifdef RTE_LIB_BITRATESTATS
-               { "bitrate-stats",              1, 0, 0 },
-#endif
-               { "disable-crc-strip",          0, 0, 0 },
-               { "enable-lro",                 0, 0, 0 },
-               { "enable-rx-cksum",            0, 0, 0 },
-               { "enable-rx-timestamp",        0, 0, 0 },
-               { "enable-scatter",             0, 0, 0 },
-               { "enable-hw-vlan",             0, 0, 0 },
-               { "enable-hw-vlan-filter",      0, 0, 0 },
-               { "enable-hw-vlan-strip",       0, 0, 0 },
-               { "enable-hw-vlan-extend",      0, 0, 0 },
-               { "enable-hw-qinq-strip",       0, 0, 0 },
-               { "enable-drop-en",            0, 0, 0 },
-               { "disable-rss",                0, 0, 0 },
-               { "port-topology",              1, 0, 0 },
-               { "forward-mode",               1, 0, 0 },
-               { "rss-ip",                     0, 0, 0 },
-               { "rss-udp",                    0, 0, 0 },
-               { "rss-level-outer",            0, 0, 0 },
-               { "rss-level-inner",            0, 0, 0 },
-               { "rxq",                        1, 0, 0 },
-               { "txq",                        1, 0, 0 },
-               { "rxd",                        1, 0, 0 },
-               { "txd",                        1, 0, 0 },
-               { "hairpinq",                   1, 0, 0 },
-               { "hairpin-mode",               1, 0, 0 },
-               { "burst",                      1, 0, 0 },
-               { "flowgen-clones",             1, 0, 0 },
-               { "flowgen-flows",              1, 0, 0 },
-               { "mbcache",                    1, 0, 0 },
-               { "txpt",                       1, 0, 0 },
-               { "txht",                       1, 0, 0 },
-               { "txwt",                       1, 0, 0 },
-               { "txfreet",                    1, 0, 0 },
-               { "txrst",                      1, 0, 0 },
-               { "rxpt",                       1, 0, 0 },
-               { "rxht",                       1, 0, 0 },
-               { "rxwt",                       1, 0, 0 },
-               { "rxfreet",                    1, 0, 0 },
-               { "no-flush-rx",        0, 0, 0 },
-               { "flow-isolate-all",           0, 0, 0 },
-               { "disable-flow-flush",         0, 0, 0 },
-               { "rxoffs",                     1, 0, 0 },
-               { "rxpkts",                     1, 0, 0 },
-               { "rxhdrs",                     1, 0, 0 },
-               { "txpkts",                     1, 0, 0 },
-               { "multi-rx-mempool",           0, 0, 0 },
-               { "txonly-multi-flow",          0, 0, 0 },
-               { "rxq-share",                  2, 0, 0 },
-               { "eth-link-speed",             1, 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 },
-               { "mask-event",                 1, 0, 0 },
-               { "tx-offloads",                1, 0, 0 },
-               { "rx-offloads",                1, 0, 0 },
-               { "hot-plug",                   0, 0, 0 },
-               { "vxlan-gpe-port",             1, 0, 0 },
-               { "geneve-parsed-port",         1, 0, 0 },
-#ifndef RTE_EXEC_ENV_WINDOWS
-               { "mlockall",                   0, 0, 0 },
-               { "no-mlockall",                0, 0, 0 },
-#endif
-               { "mp-alloc",                   1, 0, 0 },
-               { "tx-ip",                      1, 0, 0 },
-               { "tx-udp",                     1, 0, 0 },
-               { "noisy-forward-mode",         1, 0, 0 },
-               { "noisy-tx-sw-buffer-size",    1, 0, 0 },
-               { "noisy-tx-sw-buffer-flushtime", 1, 0, 0 },
-               { "noisy-lkup-memory",          1, 0, 0 },
-               { "noisy-lkup-num-writes",      1, 0, 0 },
-               { "noisy-lkup-num-reads",       1, 0, 0 },
-               { "noisy-lkup-num-reads-writes", 1, 0, 0 },
-               { "no-iova-contig",             0, 0, 0 },
-               { "rx-mq-mode",                 1, 0, 0 },
-               { "record-core-cycles",         0, 0, 0 },
-               { "record-burst-stats",         0, 0, 0 },
-               { PARAM_NUM_PROCS,              1, 0, 0 },
-               { PARAM_PROC_ID,                1, 0, 0 },
-               { 0, 0, 0, 0 },
-       };
-
-       argvopt = argv;
-
-       while ((opt = getopt_long(argc, argvopt, "iah",
-                                lgopts, &opt_idx)) != EOF) {
+       while ((opt = getopt_long(argc, argv, short_options, long_options,
+                       &opt_idx)) != EOF) {
                switch (opt) {
                case 'i':
                        printf("Interactive-mode selected\n");
@@ -728,751 +947,774 @@ launch_args_parse(int argc, char** argv)
                        printf("Auto-start selected\n");
                        auto_start = 1;
                        break;
+               case 'h':
+                       usage(argv[0]);
+                       exit(EXIT_SUCCESS);
+                       break;
+               case TESTPMD_OPT_CMDLINE_FILE_NUM:
+                       printf("CLI commands to be read from %s\n",
+                               optarg);
+                       strlcpy(cmdline_filename, optarg,
+                               sizeof(cmdline_filename));
+                       break;
+               case TESTPMD_OPT_TX_FIRST_NUM:
+                       printf("Ports to start sending a burst of "
+                               "packets first\n");
+                       tx_first = 1;
+                       break;
+               case TESTPMD_OPT_STATS_PERIOD_NUM: {
+                       char *end = NULL;
+                       unsigned int n;
 
-               case 0: /*long options */
-                       if (!strcmp(lgopts[opt_idx].name, "help")) {
-                               usage(argv[0]);
-                               exit(EXIT_SUCCESS);
-                       }
-                       if (!strcmp(lgopts[opt_idx].name, "interactive")) {
-                               printf("Interactive-mode selected\n");
-                               interactive = 1;
-                       }
-                       if (!strcmp(lgopts[opt_idx].name, "cmdline-file")) {
-                               printf("CLI commands to be read from %s\n",
-                                      optarg);
-                               strlcpy(cmdline_filename, optarg,
-                                       sizeof(cmdline_filename));
-                       }
-                       if (!strcmp(lgopts[opt_idx].name, "auto-start")) {
-                               printf("Auto-start selected\n");
-                               auto_start = 1;
-                       }
-                       if (!strcmp(lgopts[opt_idx].name, "tx-first")) {
-                               printf("Ports to start sending a burst of "
-                                               "packets first\n");
-                               tx_first = 1;
-                       }
-                       if (!strcmp(lgopts[opt_idx].name, "stats-period")) {
-                               char *end = NULL;
-                               unsigned int n;
-
-                               n = strtoul(optarg, &end, 10);
-                               if ((optarg[0] == '\0') || (end == NULL) ||
-                                               (*end != '\0'))
-                                       rte_exit(EXIT_FAILURE, "Invalid 
stats-period value\n");
-
-                               stats_period = n;
-                               break;
-                       }
-                       if (!strcmp(lgopts[opt_idx].name, "display-xstats")) {
-                               char rc;
-
-                               rc = parse_xstats_list(optarg, &xstats_display,
-                                                      &xstats_display_num);
-                               if (rc != 0)
-                                       rte_exit(EXIT_FAILURE,
-                                                "Failed to parse 
display-xstats argument: %d\n",
-                                                rc);
-                       }
-                       if (!strcmp(lgopts[opt_idx].name,
-                                   "eth-peers-configfile")) {
-                               if (init_peer_eth_addrs(optarg) != 0)
-                                       rte_exit(EXIT_FAILURE,
-                                                "Cannot open logfile\n");
-                       }
-                       if (!strcmp(lgopts[opt_idx].name, "eth-peer")) {
-                               char *port_end;
-
-                               errno = 0;
-                               n = strtoul(optarg, &port_end, 10);
-                               if (errno != 0 || port_end == optarg || 
*port_end++ != ',')
-                                       rte_exit(EXIT_FAILURE,
-                                                "Invalid eth-peer: %s", 
optarg);
-                               if (n >= RTE_MAX_ETHPORTS)
-                                       rte_exit(EXIT_FAILURE,
-                                                "eth-peer: port %d >= 
RTE_MAX_ETHPORTS(%d)\n",
-                                                n, RTE_MAX_ETHPORTS);
-
-                               if (rte_ether_unformat_addr(port_end,
-                                               &peer_eth_addrs[n]) < 0)
-                                       rte_exit(EXIT_FAILURE,
-                                                "Invalid ethernet address: 
%s\n",
-                                                port_end);
-                               nb_peer_eth_addrs++;
-                       }
-                       if (!strcmp(lgopts[opt_idx].name, "tx-ip")) {
-                               struct in_addr in;
-                               char *end;
-
-                               end = strchr(optarg, ',');
-                               if (end == optarg || !end)
-                                       rte_exit(EXIT_FAILURE,
-                                                "Invalid tx-ip: %s", optarg);
+                       n = strtoul(optarg, &end, 10);
+                       if ((optarg[0] == '\0') || (end == NULL) ||
+                                       (*end != '\0'))
+                               rte_exit(EXIT_FAILURE, "Invalid stats-period 
value\n");
 
-                               *end++ = 0;
-                               if (inet_pton(AF_INET, optarg, &in) == 0)
-                                       rte_exit(EXIT_FAILURE,
-                                                "Invalid source IP address: 
%s\n",
-                                                optarg);
-                               tx_ip_src_addr = rte_be_to_cpu_32(in.s_addr);
+                       stats_period = n;
+                       break;
+               }
+               case TESTPMD_OPT_DISPLAY_XSTATS_NUM: {
+                       char rc;
+
+                       rc = parse_xstats_list(optarg, &xstats_display,
+                               &xstats_display_num);
+                       if (rc != 0)
+                               rte_exit(EXIT_FAILURE,
+                                       "Failed to parse display-xstats 
argument: %d\n",
+                                       rc);
+                       break;
+               }
+               case TESTPMD_OPT_ETH_PEERS_CONFIGFILE_NUM:
+                       if (init_peer_eth_addrs(optarg) != 0)
+                               rte_exit(EXIT_FAILURE,
+                                       "Cannot open logfile\n");
+                       break;
+               case TESTPMD_OPT_ETH_PEER_NUM: {
+                       char *port_end;
 
-                               if (inet_pton(AF_INET, end, &in) == 0)
-                                       rte_exit(EXIT_FAILURE,
-                                                "Invalid destination IP 
address: %s\n",
-                                                optarg);
-                               tx_ip_dst_addr = rte_be_to_cpu_32(in.s_addr);
-                       }
-                       if (!strcmp(lgopts[opt_idx].name, "tx-udp")) {
-                               char *end = NULL;
-
-                               errno = 0;
-                               n = strtoul(optarg, &end, 10);
-                               if (errno != 0 || end == optarg ||
-                                   n > UINT16_MAX ||
-                                   !(*end == '\0' || *end == ','))
-                                       rte_exit(EXIT_FAILURE,
-                                                "Invalid UDP port: %s\n",
-                                                optarg);
-                               tx_udp_src_port = n;
-                               if (*end == ',') {
-                                       char *dst = end + 1;
-
-                                       n = strtoul(dst, &end, 10);
-                                       if (errno != 0 || end == dst ||
-                                           n > UINT16_MAX || *end)
-                                               rte_exit(EXIT_FAILURE,
-                                                        "Invalid destination 
UDP port: %s\n",
-                                                        dst);
-                                       tx_udp_dst_port = n;
-                               } else {
-                                       tx_udp_dst_port = n;
-                               }
+                       errno = 0;
+                       n = strtoul(optarg, &port_end, 10);
+                       if (errno != 0 || port_end == optarg || *port_end++ != 
',')
+                               rte_exit(EXIT_FAILURE,
+                                       "Invalid eth-peer: %s", optarg);
+                       if (n >= RTE_MAX_ETHPORTS)
+                               rte_exit(EXIT_FAILURE,
+                                       "eth-peer: port %d >= 
RTE_MAX_ETHPORTS(%d)\n",
+                                       n, RTE_MAX_ETHPORTS);
+
+                       if (rte_ether_unformat_addr(port_end,
+                                       &peer_eth_addrs[n]) < 0)
+                               rte_exit(EXIT_FAILURE,
+                                       "Invalid ethernet address: %s\n",
+                                       port_end);
+                       nb_peer_eth_addrs++;
+                       break;
+               }
+               case TESTPMD_OPT_TX_IP_NUM: {
+                       struct in_addr in;
+                       char *end;
+
+                       end = strchr(optarg, ',');
+                       if (end == optarg || !end)
+                               rte_exit(EXIT_FAILURE,
+                                       "Invalid tx-ip: %s", optarg);
+
+                       *end++ = 0;
+                       if (inet_pton(AF_INET, optarg, &in) == 0)
+                               rte_exit(EXIT_FAILURE,
+                                       "Invalid source IP address: %s\n",
+                                       optarg);
+                       tx_ip_src_addr = rte_be_to_cpu_32(in.s_addr);
+
+                       if (inet_pton(AF_INET, end, &in) == 0)
+                               rte_exit(EXIT_FAILURE,
+                                       "Invalid destination IP address: %s\n",
+                                       optarg);
+                       tx_ip_dst_addr = rte_be_to_cpu_32(in.s_addr);
+                       break;
+               }
+               case TESTPMD_OPT_TX_UDP_NUM: {
+                       char *end = NULL;
 
-                       }
-                       if (!strcmp(lgopts[opt_idx].name, "nb-ports")) {
-                               n = atoi(optarg);
-                               if (n > 0 && n <= nb_ports)
-                                       nb_fwd_ports = n;
-                               else
-                                       rte_exit(EXIT_FAILURE,
-                                                "Invalid port %d\n", n);
-                       }
-                       if (!strcmp(lgopts[opt_idx].name, "nb-cores")) {
-                               n = atoi(optarg);
-                               if (n > 0 && n <= nb_lcores)
-                                       nb_fwd_lcores = (uint8_t) n;
-                               else
+                       errno = 0;
+                       n = strtoul(optarg, &end, 10);
+                       if (errno != 0 || end == optarg ||
+                                       n > UINT16_MAX ||
+                                       !(*end == '\0' || *end == ','))
+                               rte_exit(EXIT_FAILURE,
+                                       "Invalid UDP port: %s\n",
+                                       optarg);
+                       tx_udp_src_port = n;
+                       if (*end == ',') {
+                               char *dst = end + 1;
+
+                               n = strtoul(dst, &end, 10);
+                               if (errno != 0 || end == dst ||
+                                               n > UINT16_MAX || *end)
                                        rte_exit(EXIT_FAILURE,
-                                                "nb-cores should be > 0 and <= 
%d\n",
-                                                nb_lcores);
+                                               "Invalid destination UDP port: 
%s\n",
+                                               dst);
+                               tx_udp_dst_port = n;
+                       } else {
+                               tx_udp_dst_port = n;
                        }
-                       if (!strcmp(lgopts[opt_idx].name, "coremask"))
-                               parse_fwd_coremask(optarg);
-                       if (!strcmp(lgopts[opt_idx].name, "portmask"))
-                               parse_fwd_portmask(optarg);
-                       if (!strcmp(lgopts[opt_idx].name, "portlist"))
-                               parse_fwd_portlist(optarg);
-                       if (!strcmp(lgopts[opt_idx].name, "no-numa"))
-                               numa_support = 0;
-                       if (!strcmp(lgopts[opt_idx].name, "numa"))
-                               numa_support = 1;
-                       if (!strcmp(lgopts[opt_idx].name, "mp-anon")) {
+                       break;
+               }
+               case TESTPMD_OPT_NB_PORTS_NUM:
+                       n = atoi(optarg);
+                       if (n > 0 && n <= nb_ports)
+                               nb_fwd_ports = n;
+                       else
+                               rte_exit(EXIT_FAILURE,
+                                       "Invalid port %d\n", n);
+                       break;
+               case TESTPMD_OPT_NB_CORES_NUM:
+                       n = atoi(optarg);
+                       if (n > 0 && n <= nb_lcores)
+                               nb_fwd_lcores = (uint8_t) n;
+                       else
+                               rte_exit(EXIT_FAILURE,
+                                       "nb-cores should be > 0 and <= %d\n",
+                                       nb_lcores);
+                       break;
+               case TESTPMD_OPT_COREMASK_NUM:
+                       parse_fwd_coremask(optarg);
+                       break;
+               case TESTPMD_OPT_PORTMASK_NUM:
+                       parse_fwd_portmask(optarg);
+                       break;
+               case TESTPMD_OPT_PORTLIST_NUM:
+                       parse_fwd_portlist(optarg);
+                       break;
+               case TESTPMD_OPT_NO_NUMA_NUM:
+                       numa_support = 0;
+                       break;
+               case TESTPMD_OPT_NUMA_NUM:
+                       numa_support = 1;
+                       break;
+               case TESTPMD_OPT_MP_ANON_NUM:
+                       mp_alloc_type = MP_ALLOC_ANON;
+                       break;
+               case TESTPMD_OPT_MP_ALLOC_NUM:
+                       if (!strcmp(optarg, "native"))
+                               mp_alloc_type = MP_ALLOC_NATIVE;
+                       else if (!strcmp(optarg, "anon"))
                                mp_alloc_type = MP_ALLOC_ANON;
+                       else if (!strcmp(optarg, "xmem"))
+                               mp_alloc_type = MP_ALLOC_XMEM;
+                       else if (!strcmp(optarg, "xmemhuge"))
+                               mp_alloc_type = MP_ALLOC_XMEM_HUGE;
+                       else if (!strcmp(optarg, "xbuf"))
+                               mp_alloc_type = MP_ALLOC_XBUF;
+                       else
+                               rte_exit(EXIT_FAILURE,
+                                       "mp-alloc %s invalid - must be: "
+                                       "native, anon, xmem or xmemhuge\n",
+                                       optarg);
+                       break;
+               case TESTPMD_OPT_PORT_NUMA_CONFIG_NUM:
+                       if (parse_portnuma_config(optarg))
+                               rte_exit(EXIT_FAILURE,
+                                       "invalid port-numa configuration\n");
+                       break;
+               case TESTPMD_OPT_RING_NUMA_CONFIG_NUM:
+                       if (parse_ringnuma_config(optarg))
+                               rte_exit(EXIT_FAILURE,
+                                       "invalid ring-numa configuration\n");
+                       break;
+               case TESTPMD_OPT_SOCKET_NUM_NUM:
+                       n = atoi(optarg);
+                       if (!new_socket_id((uint8_t)n)) {
+                               socket_num = (uint8_t)n;
+                       } else {
+                               print_invalid_socket_id_error();
+                               rte_exit(EXIT_FAILURE,
+                                       "Invalid socket id");
                        }
-                       if (!strcmp(lgopts[opt_idx].name, "mp-alloc")) {
-                               if (!strcmp(optarg, "native"))
-                                       mp_alloc_type = MP_ALLOC_NATIVE;
-                               else if (!strcmp(optarg, "anon"))
-                                       mp_alloc_type = MP_ALLOC_ANON;
-                               else if (!strcmp(optarg, "xmem"))
-                                       mp_alloc_type = MP_ALLOC_XMEM;
-                               else if (!strcmp(optarg, "xmemhuge"))
-                                       mp_alloc_type = MP_ALLOC_XMEM_HUGE;
-                               else if (!strcmp(optarg, "xbuf"))
-                                       mp_alloc_type = MP_ALLOC_XBUF;
-                               else
-                                       rte_exit(EXIT_FAILURE,
-                                               "mp-alloc %s invalid - must be: 
"
-                                               "native, anon, xmem or 
xmemhuge\n",
-                                                optarg);
-                       }
-                       if (!strcmp(lgopts[opt_idx].name, "port-numa-config")) {
-                               if (parse_portnuma_config(optarg))
-                                       rte_exit(EXIT_FAILURE,
-                                          "invalid port-numa configuration\n");
-                       }
-                       if (!strcmp(lgopts[opt_idx].name, "ring-numa-config"))
-                               if (parse_ringnuma_config(optarg))
-                                       rte_exit(EXIT_FAILURE,
-                                          "invalid ring-numa configuration\n");
-                       if (!strcmp(lgopts[opt_idx].name, "socket-num")) {
-                               n = atoi(optarg);
-                               if (!new_socket_id((uint8_t)n)) {
-                                       socket_num = (uint8_t)n;
-                               } else {
-                                       print_invalid_socket_id_error();
-                                       rte_exit(EXIT_FAILURE,
-                                               "Invalid socket id");
-                               }
-                       }
-                       if (!strcmp(lgopts[opt_idx].name, "mbuf-size")) {
-                               unsigned int mb_sz[MAX_SEGS_BUFFER_SPLIT];
-                               unsigned int nb_segs, i;
-
-                               nb_segs = parse_item_list(optarg, "mbuf-size",
-                                       MAX_SEGS_BUFFER_SPLIT, mb_sz, 0);
-                               if (nb_segs <= 0)
-                                       rte_exit(EXIT_FAILURE,
-                                                "bad mbuf-size\n");
-                               for (i = 0; i < nb_segs; i++) {
-                                       if (mb_sz[i] <= 0 || mb_sz[i] > 0xFFFF)
-                                               rte_exit(EXIT_FAILURE,
-                                                        "mbuf-size should be "
-                                                        "> 0 and < 65536\n");
-                                       mbuf_data_size[i] = (uint16_t) mb_sz[i];
-                               }
-                               mbuf_data_size_n = nb_segs;
-                       }
-                       if (!strcmp(lgopts[opt_idx].name, "total-num-mbufs")) {
-                               n = atoi(optarg);
-                               if (n > MIN_TOTAL_NUM_MBUFS)
-                                       param_total_num_mbufs = (unsigned)n;
-                               else
-                                       rte_exit(EXIT_FAILURE,
-                                                "total-num-mbufs should be > 
%d\n",
-                                                MIN_TOTAL_NUM_MBUFS);
-                       }
-                       if (!strcmp(lgopts[opt_idx].name, "max-pkt-len")) {
-                               n = atoi(optarg);
-                               if (n >= RTE_ETHER_MIN_LEN)
-                                       max_rx_pkt_len = n;
-                               else
+                       break;
+               case TESTPMD_OPT_MBUF_SIZE_NUM: {
+                       unsigned int mb_sz[MAX_SEGS_BUFFER_SPLIT];
+                       unsigned int nb_segs, i;
+
+                       nb_segs = parse_item_list(optarg, "mbuf-size",
+                               MAX_SEGS_BUFFER_SPLIT, mb_sz, 0);
+                       if (nb_segs <= 0)
+                               rte_exit(EXIT_FAILURE,
+                                       "bad mbuf-size\n");
+                       for (i = 0; i < nb_segs; i++) {
+                               if (mb_sz[i] <= 0 || mb_sz[i] > 0xFFFF)
                                        rte_exit(EXIT_FAILURE,
-                                                "Invalid max-pkt-len=%d - 
should be > %d\n",
-                                                n, RTE_ETHER_MIN_LEN);
-                       }
-                       if (!strcmp(lgopts[opt_idx].name, "max-lro-pkt-size")) {
-                               n = atoi(optarg);
-                               rx_mode.max_lro_pkt_size = (uint32_t) n;
+                                               "mbuf-size should be "
+                                               "> 0 and < 65536\n");
+                               mbuf_data_size[i] = (uint16_t) mb_sz[i];
                        }
+                       mbuf_data_size_n = nb_segs;
+                       break;
+               }
+               case TESTPMD_OPT_TOTAL_NUM_MBUFS_NUM:
+                       n = atoi(optarg);
+                       if (n > MIN_TOTAL_NUM_MBUFS)
+                               param_total_num_mbufs = (unsigned int)n;
+                       else
+                               rte_exit(EXIT_FAILURE,
+                                       "total-num-mbufs should be > %d\n",
+                                       MIN_TOTAL_NUM_MBUFS);
+                       break;
+               case TESTPMD_OPT_MAX_PKT_LEN_NUM:
+                       n = atoi(optarg);
+                       if (n >= RTE_ETHER_MIN_LEN)
+                               max_rx_pkt_len = n;
+                       else
+                               rte_exit(EXIT_FAILURE,
+                                       "Invalid max-pkt-len=%d - should be > 
%d\n",
+                                       n, RTE_ETHER_MIN_LEN);
+                       break;
+               case TESTPMD_OPT_MAX_LRO_PKT_SIZE_NUM:
+                       n = atoi(optarg);
+                       rx_mode.max_lro_pkt_size = (uint32_t) n;
+                       break;
 #ifdef RTE_LIB_LATENCYSTATS
-                       if (!strcmp(lgopts[opt_idx].name,
-                                   "latencystats")) {
-                               n = atoi(optarg);
-                               if (n >= 0) {
-                                       latencystats_lcore_id = (lcoreid_t) n;
-                                       latencystats_enabled = 1;
-                               } else
-                                       rte_exit(EXIT_FAILURE,
-                                                "invalid lcore id %d for 
latencystats"
-                                                " must be >= 0\n", n);
-                       }
+               case TESTPMD_OPT_LATENCYSTATS_NUM:
+                       n = atoi(optarg);
+                       if (n >= 0) {
+                               latencystats_lcore_id = (lcoreid_t) n;
+                               latencystats_enabled = 1;
+                       } else
+                               rte_exit(EXIT_FAILURE,
+                                       "invalid lcore id %d for latencystats"
+                                       " must be >= 0\n", n);
+
+                       break;
 #endif
 #ifdef RTE_LIB_BITRATESTATS
-                       if (!strcmp(lgopts[opt_idx].name, "bitrate-stats")) {
-                               n = atoi(optarg);
-                               if (n >= 0) {
-                                       bitrate_lcore_id = (lcoreid_t) n;
-                                       bitrate_enabled = 1;
-                               } else
-                                       rte_exit(EXIT_FAILURE,
-                                                "invalid lcore id %d for 
bitrate stats"
-                                                " must be >= 0\n", n);
-                       }
+               case TESTPMD_OPT_BITRATE_STATS_NUM:
+                       n = atoi(optarg);
+                       if (n >= 0) {
+                               bitrate_lcore_id = (lcoreid_t) n;
+                               bitrate_enabled = 1;
+                       } else
+                               rte_exit(EXIT_FAILURE,
+                                       "invalid lcore id %d for bitrate stats"
+                                       " must be >= 0\n", n);
+                       break;
 #endif
-                       if (!strcmp(lgopts[opt_idx].name, "disable-crc-strip"))
-                               rx_offloads |= RTE_ETH_RX_OFFLOAD_KEEP_CRC;
-                       if (!strcmp(lgopts[opt_idx].name, "enable-lro"))
-                               rx_offloads |= RTE_ETH_RX_OFFLOAD_TCP_LRO;
-                       if (!strcmp(lgopts[opt_idx].name, "enable-scatter"))
-                               rx_offloads |= RTE_ETH_RX_OFFLOAD_SCATTER;
-                       if (!strcmp(lgopts[opt_idx].name, "enable-rx-cksum"))
-                               rx_offloads |= RTE_ETH_RX_OFFLOAD_CHECKSUM;
-                       if (!strcmp(lgopts[opt_idx].name,
-                                       "enable-rx-timestamp"))
-                               rx_offloads |= RTE_ETH_RX_OFFLOAD_TIMESTAMP;
-                       if (!strcmp(lgopts[opt_idx].name, "enable-hw-vlan"))
-                               rx_offloads |= RTE_ETH_RX_OFFLOAD_VLAN;
-
-                       if (!strcmp(lgopts[opt_idx].name,
-                                       "enable-hw-vlan-filter"))
-                               rx_offloads |= RTE_ETH_RX_OFFLOAD_VLAN_FILTER;
-
-                       if (!strcmp(lgopts[opt_idx].name,
-                                       "enable-hw-vlan-strip"))
-                               rx_offloads |= RTE_ETH_RX_OFFLOAD_VLAN_STRIP;
-
-                       if (!strcmp(lgopts[opt_idx].name,
-                                       "enable-hw-vlan-extend"))
-                               rx_offloads |= RTE_ETH_RX_OFFLOAD_VLAN_EXTEND;
-
-                       if (!strcmp(lgopts[opt_idx].name,
-                                       "enable-hw-qinq-strip"))
-                               rx_offloads |= RTE_ETH_RX_OFFLOAD_QINQ_STRIP;
-
-                       if (!strcmp(lgopts[opt_idx].name, "enable-drop-en"))
-                               rx_drop_en = 1;
-
-                       if (!strcmp(lgopts[opt_idx].name, "disable-rss"))
-                               rss_hf = 0;
-                       if (!strcmp(lgopts[opt_idx].name, "port-topology")) {
-                               if (!strcmp(optarg, "paired"))
-                                       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, chained or 
loop\n",
-                                                optarg);
-                       }
-                       if (!strcmp(lgopts[opt_idx].name, "forward-mode"))
-                               set_pkt_forwarding_mode(optarg);
-                       if (!strcmp(lgopts[opt_idx].name, "rss-ip"))
-                               rss_hf = RTE_ETH_RSS_IP;
-                       if (!strcmp(lgopts[opt_idx].name, "rss-udp"))
-                               rss_hf = RTE_ETH_RSS_UDP;
-                       if (!strcmp(lgopts[opt_idx].name, "rss-level-inner"))
-                               rss_hf |= RTE_ETH_RSS_LEVEL_INNERMOST;
-                       if (!strcmp(lgopts[opt_idx].name, "rss-level-outer"))
-                               rss_hf |= RTE_ETH_RSS_LEVEL_OUTERMOST;
-                       if (!strcmp(lgopts[opt_idx].name, "rxq")) {
-                               n = atoi(optarg);
-                               if (n >= 0 && check_nb_rxq((queueid_t)n) == 0)
-                                       nb_rxq = (queueid_t) n;
-                               else
-                                       rte_exit(EXIT_FAILURE, "rxq %d invalid 
- must be"
-                                                 " >= 0 && <= %u\n", n,
-                                                 get_allowed_max_nb_rxq(&pid));
-                       }
-                       if (!strcmp(lgopts[opt_idx].name, "txq")) {
-                               n = atoi(optarg);
-                               if (n >= 0 && check_nb_txq((queueid_t)n) == 0)
-                                       nb_txq = (queueid_t) n;
-                               else
-                                       rte_exit(EXIT_FAILURE, "txq %d invalid 
- must be"
-                                                 " >= 0 && <= %u\n", n,
-                                                 get_allowed_max_nb_txq(&pid));
-                       }
-                       if (!strcmp(lgopts[opt_idx].name, "hairpinq")) {
-                               n = atoi(optarg);
-                               if (n >= 0 &&
-                                   check_nb_hairpinq((queueid_t)n) == 0)
-                                       nb_hairpinq = (queueid_t) n;
-                               else
-                                       rte_exit(EXIT_FAILURE, "txq %d invalid 
- must be"
-                                                 " >= 0 && <= %u\n", n,
-                                                 get_allowed_max_nb_hairpinq
-                                                 (&pid));
-                               if ((n + nb_txq) < 0 ||
-                                   check_nb_txq((queueid_t)(n + nb_txq)) != 0)
-                                       rte_exit(EXIT_FAILURE, "txq + hairpinq "
-                                                "%d invalid - must be"
-                                                 " >= 0 && <= %u\n",
-                                                 n + nb_txq,
-                                                 get_allowed_max_nb_txq(&pid));
-                               if ((n + nb_rxq) < 0 ||
-                                   check_nb_rxq((queueid_t)(n + nb_rxq)) != 0)
-                                       rte_exit(EXIT_FAILURE, "rxq + hairpinq "
-                                                "%d invalid - must be"
-                                                 " >= 0 && <= %u\n",
-                                                 n + nb_rxq,
-                                                 get_allowed_max_nb_rxq(&pid));
-                       }
-                       if (!strcmp(lgopts[opt_idx].name, "hairpin-mode")) {
-                               char *end = NULL;
-                               unsigned int n;
-
-                               errno = 0;
-                               n = strtoul(optarg, &end, 0);
-                               if (errno != 0 || end == optarg)
-                                       rte_exit(EXIT_FAILURE, "hairpin mode 
invalid\n");
-                               else
-                                       hairpin_mode = (uint32_t)n;
-                       }
-                       if (!strcmp(lgopts[opt_idx].name, "burst")) {
-                               n = atoi(optarg);
-                               if (n == 0) {
-                                       /* A burst size of zero means that the
-                                        * PMD should be queried for
-                                        * recommended Rx burst size. Since
-                                        * testpmd uses a single size for all
-                                        * ports, port 0 is queried for the
-                                        * value, on the assumption that all
-                                        * ports are of the same NIC model.
-                                        */
-                                       ret = eth_dev_info_get_print_err(
-                                                               0,
-                                                               &dev_info);
-                                       if (ret != 0)
-                                               rte_exit(EXIT_FAILURE, "Failed 
to get driver "
-                                                       "recommended burst 
size, please provide a "
-                                                       "value between 1 and 
%d\n", MAX_PKT_BURST);
-
-                                       rec_nb_pkts = dev_info
-                                               .default_rxportconf.burst_size;
-
-                                       if (rec_nb_pkts == 0)
-                                               rte_exit(EXIT_FAILURE,
-                                                       "PMD does not recommend 
a burst size. "
-                                                       "Provided value must be 
between "
-                                                       "1 and %d\n", 
MAX_PKT_BURST);
-                                       else if (rec_nb_pkts > MAX_PKT_BURST)
-                                               rte_exit(EXIT_FAILURE,
-                                                       "PMD recommended burst 
size of %d"
-                                                       " exceeds maximum value 
of %d\n",
-                                                       rec_nb_pkts, 
MAX_PKT_BURST);
-                                       printf("Using PMD-provided burst value 
of %d\n",
-                                               rec_nb_pkts);
-                                       nb_pkt_per_burst = rec_nb_pkts;
-                               } else if (n > MAX_PKT_BURST)
-                                       rte_exit(EXIT_FAILURE,
-                                               "burst must be between1 and 
%d\n",
-                                               MAX_PKT_BURST);
-                               else
-                                       nb_pkt_per_burst = (uint16_t) n;
-                       }
-                       if (!strcmp(lgopts[opt_idx].name, "flowgen-clones")) {
-                               n = atoi(optarg);
-                               if (n >= 0)
-                                       nb_pkt_flowgen_clones = (uint16_t) n;
-                               else
+               case TESTPMD_OPT_DISABLE_CRC_STRIP_NUM:
+                       rx_offloads |= RTE_ETH_RX_OFFLOAD_KEEP_CRC;
+                       break;
+               case TESTPMD_OPT_ENABLE_LRO_NUM:
+                       rx_offloads |= RTE_ETH_RX_OFFLOAD_TCP_LRO;
+                       break;
+               case TESTPMD_OPT_ENABLE_SCATTER_NUM:
+                       rx_offloads |= RTE_ETH_RX_OFFLOAD_SCATTER;
+                       break;
+               case TESTPMD_OPT_ENABLE_RX_CKSUM_NUM:
+                       rx_offloads |= RTE_ETH_RX_OFFLOAD_CHECKSUM;
+                       break;
+               case TESTPMD_OPT_ENABLE_RX_TIMESTAMP_NUM:
+                       rx_offloads |= RTE_ETH_RX_OFFLOAD_TIMESTAMP;
+                       break;
+               case TESTPMD_OPT_ENABLE_HW_VLAN_NUM:
+                       rx_offloads |= RTE_ETH_RX_OFFLOAD_VLAN;
+                       break;
+               case TESTPMD_OPT_ENABLE_HW_VLAN_FILTER_NUM:
+                       rx_offloads |= RTE_ETH_RX_OFFLOAD_VLAN_FILTER;
+                       break;
+               case TESTPMD_OPT_ENABLE_HW_VLAN_STRIP_NUM:
+                       rx_offloads |= RTE_ETH_RX_OFFLOAD_VLAN_STRIP;
+                       break;
+               case TESTPMD_OPT_ENABLE_HW_VLAN_EXTEND_NUM:
+                       rx_offloads |= RTE_ETH_RX_OFFLOAD_VLAN_EXTEND;
+                       break;
+               case TESTPMD_OPT_ENABLE_HW_QINQ_STRIP_NUM:
+                       rx_offloads |= RTE_ETH_RX_OFFLOAD_QINQ_STRIP;
+                       break;
+               case TESTPMD_OPT_ENABLE_DROP_EN_NUM:
+                       rx_drop_en = 1;
+                       break;
+               case TESTPMD_OPT_DISABLE_RSS_NUM:
+                       rss_hf = 0;
+                       break;
+               case TESTPMD_OPT_PORT_TOPOLOGY_NUM:
+                       if (!strcmp(optarg, "paired"))
+                               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, chained or loop\n",
+                                       optarg);
+                       break;
+               case TESTPMD_OPT_FORWARD_MODE_NUM:
+                       set_pkt_forwarding_mode(optarg);
+                       break;
+               case TESTPMD_OPT_RSS_IP_NUM:
+                       rss_hf = RTE_ETH_RSS_IP;
+                       break;
+               case TESTPMD_OPT_RSS_UDP_NUM:
+                       rss_hf = RTE_ETH_RSS_UDP;
+                       break;
+               case TESTPMD_OPT_RSS_LEVEL_INNER_NUM:
+                       rss_hf |= RTE_ETH_RSS_LEVEL_INNERMOST;
+                       break;
+               case TESTPMD_OPT_RSS_LEVEL_OUTER_NUM:
+                       rss_hf |= RTE_ETH_RSS_LEVEL_OUTERMOST;
+                       break;
+               case TESTPMD_OPT_RXQ_NUM:
+                       n = atoi(optarg);
+                       if (n >= 0 && check_nb_rxq((queueid_t)n) == 0)
+                               nb_rxq = (queueid_t) n;
+                       else
+                               rte_exit(EXIT_FAILURE, "rxq %d invalid - must 
be"
+                                       " >= 0 && <= %u\n", n,
+                                       get_allowed_max_nb_rxq(&pid));
+                       break;
+               case TESTPMD_OPT_TXQ_NUM:
+                       n = atoi(optarg);
+                       if (n >= 0 && check_nb_txq((queueid_t)n) == 0)
+                               nb_txq = (queueid_t) n;
+                       else
+                               rte_exit(EXIT_FAILURE, "txq %d invalid - must 
be"
+                                       " >= 0 && <= %u\n", n,
+                                       get_allowed_max_nb_txq(&pid));
+                       break;
+               case TESTPMD_OPT_HAIRPINQ_NUM:
+                       n = atoi(optarg);
+                       if (n >= 0 &&
+                                       check_nb_hairpinq((queueid_t)n) == 0)
+                               nb_hairpinq = (queueid_t) n;
+                       else
+                               rte_exit(EXIT_FAILURE, "txq %d invalid - must 
be"
+                                       " >= 0 && <= %u\n", n,
+                                       get_allowed_max_nb_hairpinq
+                                       (&pid));
+                       if ((n + nb_txq) < 0 ||
+                                       check_nb_txq((queueid_t)(n + nb_txq)) 
!= 0)
+                               rte_exit(EXIT_FAILURE, "txq + hairpinq "
+                                       "%d invalid - must be"
+                                       " >= 0 && <= %u\n",
+                                       n + nb_txq,
+                                       get_allowed_max_nb_txq(&pid));
+                       if ((n + nb_rxq) < 0 ||
+                                       check_nb_rxq((queueid_t)(n + nb_rxq)) 
!= 0)
+                               rte_exit(EXIT_FAILURE, "rxq + hairpinq "
+                                       "%d invalid - must be"
+                                       " >= 0 && <= %u\n",
+                                       n + nb_rxq,
+                                       get_allowed_max_nb_rxq(&pid));
+                       break;
+               case TESTPMD_OPT_HAIRPIN_MODE_NUM: {
+                       char *end = NULL;
+                       unsigned int n;
+
+                       errno = 0;
+                       n = strtoul(optarg, &end, 0);
+                       if (errno != 0 || end == optarg)
+                               rte_exit(EXIT_FAILURE, "hairpin mode 
invalid\n");
+                       else
+                               hairpin_mode = (uint32_t)n;
+                       break;
+               }
+               case TESTPMD_OPT_BURST_NUM:
+                       n = atoi(optarg);
+                       if (n == 0) {
+                               /* A burst size of zero means that the
+                                * PMD should be queried for
+                                * recommended Rx burst size. Since
+                                * testpmd uses a single size for all
+                                * ports, port 0 is queried for the
+                                * value, on the assumption that all
+                                * ports are of the same NIC model.
+                                */
+                               ret = eth_dev_info_get_print_err(
+                                       0,
+                                       &dev_info);
+                               if (ret != 0)
+                                       rte_exit(EXIT_FAILURE, "Failed to get 
driver "
+                                               "recommended burst size, please 
provide a "
+                                               "value between 1 and %d\n", 
MAX_PKT_BURST);
+
+                               rec_nb_pkts = dev_info
+                                       .default_rxportconf.burst_size;
+
+                               if (rec_nb_pkts == 0)
                                        rte_exit(EXIT_FAILURE,
-                                                "clones must be >= 0 and <= 
current burst\n");
-                       }
-                       if (!strcmp(lgopts[opt_idx].name, "flowgen-flows")) {
-                               n = atoi(optarg);
-                               if (n > 0)
-                                       nb_flows_flowgen = (int) n;
-                               else
+                                               "PMD does not recommend a burst 
size. "
+                                               "Provided value must be between 
"
+                                               "1 and %d\n", MAX_PKT_BURST);
+                               else if (rec_nb_pkts > MAX_PKT_BURST)
                                        rte_exit(EXIT_FAILURE,
-                                                "flows must be >= 1\n");
-                       }
-                       if (!strcmp(lgopts[opt_idx].name, "mbcache")) {
-                               n = atoi(optarg);
-                               if ((n >= 0) &&
-                                   (n <= RTE_MEMPOOL_CACHE_MAX_SIZE))
-                                       mb_mempool_cache = (uint16_t) n;
-                               else
-                                       rte_exit(EXIT_FAILURE,
-                                                "mbcache must be >= 0 and <= 
%d\n",
-                                                RTE_MEMPOOL_CACHE_MAX_SIZE);
-                       }
-                       if (!strcmp(lgopts[opt_idx].name, "txfreet")) {
-                               n = atoi(optarg);
-                               if (n >= 0)
-                                       tx_free_thresh = (int16_t)n;
-                               else
-                                       rte_exit(EXIT_FAILURE, "txfreet must be 
>= 0\n");
-                       }
-                       if (!strcmp(lgopts[opt_idx].name, "txrst")) {
-                               n = atoi(optarg);
-                               if (n >= 0)
-                                       tx_rs_thresh = (int16_t)n;
-                               else
-                                       rte_exit(EXIT_FAILURE, "txrst must be 
>= 0\n");
-                       }
-                       if (!strcmp(lgopts[opt_idx].name, "rxd")) {
-                               n = atoi(optarg);
-                               if (n > 0) {
-                                       if (rx_free_thresh >= n)
-                                               rte_exit(EXIT_FAILURE,
-                                                        "rxd must be > "
-                                                        "rx_free_thresh(%d)\n",
-                                                        (int)rx_free_thresh);
-                                       else
-                                               nb_rxd = (uint16_t) n;
-                               } else
+                                               "PMD recommended burst size of 
%d"
+                                               " exceeds maximum value of 
%d\n",
+                                               rec_nb_pkts, MAX_PKT_BURST);
+                               printf("Using PMD-provided burst value of %d\n",
+                                       rec_nb_pkts);
+                               nb_pkt_per_burst = rec_nb_pkts;
+                       } else if (n > MAX_PKT_BURST)
+                               rte_exit(EXIT_FAILURE,
+                                       "burst must be between1 and %d\n",
+                                       MAX_PKT_BURST);
+                       else
+                               nb_pkt_per_burst = (uint16_t) n;
+                       break;
+               case TESTPMD_OPT_FLOWGEN_CLONES_NUM:
+                       n = atoi(optarg);
+                       if (n >= 0)
+                               nb_pkt_flowgen_clones = (uint16_t) n;
+                       else
+                               rte_exit(EXIT_FAILURE,
+                                       "clones must be >= 0 and <= current 
burst\n");
+                       break;
+               case TESTPMD_OPT_FLOWGEN_FLOWS_NUM:
+                       n = atoi(optarg);
+                       if (n > 0)
+                               nb_flows_flowgen = (int) n;
+                       else
+                               rte_exit(EXIT_FAILURE,
+                                       "flows must be >= 1\n");
+                       break;
+               case TESTPMD_OPT_MBCACHE_NUM:
+                       n = atoi(optarg);
+                       if ((n >= 0) &&
+                                       (n <= RTE_MEMPOOL_CACHE_MAX_SIZE))
+                               mb_mempool_cache = (uint16_t) n;
+                       else
+                               rte_exit(EXIT_FAILURE,
+                                       "mbcache must be >= 0 and <= %d\n",
+                                       RTE_MEMPOOL_CACHE_MAX_SIZE);
+                       break;
+               case TESTPMD_OPT_TXFREET_NUM:
+                       n = atoi(optarg);
+                       if (n >= 0)
+                               tx_free_thresh = (int16_t)n;
+                       else
+                               rte_exit(EXIT_FAILURE, "txfreet must be >= 
0\n");
+                       break;
+               case TESTPMD_OPT_TXRST_NUM:
+                       n = atoi(optarg);
+                       if (n >= 0)
+                               tx_rs_thresh = (int16_t)n;
+                       else
+                               rte_exit(EXIT_FAILURE, "txrst must be >= 0\n");
+                       break;
+               case TESTPMD_OPT_RXD_NUM:
+                       n = atoi(optarg);
+                       if (n > 0) {
+                               if (rx_free_thresh >= n)
                                        rte_exit(EXIT_FAILURE,
-                                                "rxd(%d) invalid - must be > 
0\n",
-                                                n);
-                       }
-                       if (!strcmp(lgopts[opt_idx].name, "txd")) {
-                               n = atoi(optarg);
-                               if (n > 0)
-                                       nb_txd = (uint16_t) n;
+                                               "rxd must be > "
+                                               "rx_free_thresh(%d)\n",
+                                               (int)rx_free_thresh);
                                else
-                                       rte_exit(EXIT_FAILURE, "txd must be in 
> 0\n");
-                       }
-                       if (!strcmp(lgopts[opt_idx].name, "txpt")) {
-                               n = atoi(optarg);
-                               if (n >= 0)
-                                       tx_pthresh = (int8_t)n;
-                               else
-                                       rte_exit(EXIT_FAILURE, "txpt must be >= 
0\n");
-                       }
-                       if (!strcmp(lgopts[opt_idx].name, "txht")) {
-                               n = atoi(optarg);
-                               if (n >= 0)
-                                       tx_hthresh = (int8_t)n;
-                               else
-                                       rte_exit(EXIT_FAILURE, "txht must be >= 
0\n");
-                       }
-                       if (!strcmp(lgopts[opt_idx].name, "txwt")) {
-                               n = atoi(optarg);
-                               if (n >= 0)
-                                       tx_wthresh = (int8_t)n;
-                               else
-                                       rte_exit(EXIT_FAILURE, "txwt must be >= 
0\n");
-                       }
-                       if (!strcmp(lgopts[opt_idx].name, "rxpt")) {
-                               n = atoi(optarg);
-                               if (n >= 0)
-                                       rx_pthresh = (int8_t)n;
-                               else
-                                       rte_exit(EXIT_FAILURE, "rxpt must be >= 
0\n");
-                       }
-                       if (!strcmp(lgopts[opt_idx].name, "rxht")) {
-                               n = atoi(optarg);
-                               if (n >= 0)
-                                       rx_hthresh = (int8_t)n;
-                               else
-                                       rte_exit(EXIT_FAILURE, "rxht must be >= 
0\n");
-                       }
-                       if (!strcmp(lgopts[opt_idx].name, "rxwt")) {
-                               n = atoi(optarg);
-                               if (n >= 0)
-                                       rx_wthresh = (int8_t)n;
-                               else
-                                       rte_exit(EXIT_FAILURE, "rxwt must be >= 
0\n");
-                       }
-                       if (!strcmp(lgopts[opt_idx].name, "rxfreet")) {
+                                       nb_rxd = (uint16_t) n;
+                       } else
+                               rte_exit(EXIT_FAILURE,
+                                       "rxd(%d) invalid - must be > 0\n",
+                                       n);
+                       break;
+               case TESTPMD_OPT_TXD_NUM:
+                       n = atoi(optarg);
+                       if (n > 0)
+                               nb_txd = (uint16_t) n;
+                       else
+                               rte_exit(EXIT_FAILURE, "txd must be in > 0\n");
+                       break;
+               case TESTPMD_OPT_TXPT_NUM:
+                       n = atoi(optarg);
+                       if (n >= 0)
+                               tx_pthresh = (int8_t)n;
+                       else
+                               rte_exit(EXIT_FAILURE, "txpt must be >= 0\n");
+                       break;
+               case TESTPMD_OPT_TXHT_NUM:
+                       n = atoi(optarg);
+                       if (n >= 0)
+                               tx_hthresh = (int8_t)n;
+                       else
+                               rte_exit(EXIT_FAILURE, "txht must be >= 0\n");
+                       break;
+               case TESTPMD_OPT_TXWT_NUM:
+                       n = atoi(optarg);
+                       if (n >= 0)
+                               tx_wthresh = (int8_t)n;
+                       else
+                               rte_exit(EXIT_FAILURE, "txwt must be >= 0\n");
+                       break;
+               case TESTPMD_OPT_RXPT_NUM:
+                       n = atoi(optarg);
+                       if (n >= 0)
+                               rx_pthresh = (int8_t)n;
+                       else
+                               rte_exit(EXIT_FAILURE, "rxpt must be >= 0\n");
+                       break;
+               case TESTPMD_OPT_RXHT_NUM:
+                       n = atoi(optarg);
+                       if (n >= 0)
+                               rx_hthresh = (int8_t)n;
+                       else
+                               rte_exit(EXIT_FAILURE, "rxht must be >= 0\n");
+                       break;
+               case TESTPMD_OPT_RXWT_NUM:
+                       n = atoi(optarg);
+                       if (n >= 0)
+                               rx_wthresh = (int8_t)n;
+                       else
+                               rte_exit(EXIT_FAILURE, "rxwt must be >= 0\n");
+                       break;
+               case TESTPMD_OPT_RXFREET_NUM:
+                       n = atoi(optarg);
+                       if (n >= 0)
+                               rx_free_thresh = (int16_t)n;
+                       else
+                               rte_exit(EXIT_FAILURE, "rxfreet must be >= 
0\n");
+                       break;
+               case TESTPMD_OPT_RXOFFS_NUM: {
+                       unsigned int seg_off[MAX_SEGS_BUFFER_SPLIT];
+                       unsigned int nb_offs;
+
+                       nb_offs = parse_item_list
+                               (optarg, "rxpkt offsets",
+                               MAX_SEGS_BUFFER_SPLIT,
+                               seg_off, 0);
+                       if (nb_offs > 0)
+                               set_rx_pkt_offsets(seg_off, nb_offs);
+                       else
+                               rte_exit(EXIT_FAILURE, "bad rxoffs\n");
+                       break;
+               }
+               case TESTPMD_OPT_RXPKTS_NUM: {
+                       unsigned int seg_len[MAX_SEGS_BUFFER_SPLIT];
+                       unsigned int nb_segs;
+
+                       nb_segs = parse_item_list
+                               (optarg, "rxpkt segments",
+                               MAX_SEGS_BUFFER_SPLIT,
+                               seg_len, 0);
+                       if (nb_segs > 0)
+                               set_rx_pkt_segments(seg_len, nb_segs);
+                       else
+                               rte_exit(EXIT_FAILURE, "bad rxpkts\n");
+                       break;
+               }
+               case TESTPMD_OPT_RXHDRS_NUM: {
+                       unsigned int seg_hdrs[MAX_SEGS_BUFFER_SPLIT];
+                       unsigned int nb_segs;
+
+                       nb_segs = parse_hdrs_list
+                               (optarg, "rxpkt segments",
+                               MAX_SEGS_BUFFER_SPLIT,
+                               seg_hdrs);
+                       if (nb_segs > 0)
+                               set_rx_pkt_hdrs(seg_hdrs, nb_segs);
+                       else
+                               rte_exit(EXIT_FAILURE, "bad rxpkts\n");
+                       break;
+               }
+               case TESTPMD_OPT_TXPKTS_NUM: {
+                       unsigned int seg_lengths[RTE_MAX_SEGS_PER_PKT];
+                       unsigned int nb_segs;
+
+                       nb_segs = parse_item_list(optarg, "txpkt segments",
+                               RTE_MAX_SEGS_PER_PKT, seg_lengths, 0);
+                       if (nb_segs > 0)
+                               set_tx_pkt_segments(seg_lengths, nb_segs);
+                       else
+                               rte_exit(EXIT_FAILURE, "bad txpkts\n");
+                       break;
+               }
+               case TESTPMD_OPT_MULTI_RX_MEMPOOL_NUM:
+                       multi_rx_mempool = 1;
+                       break;
+               case TESTPMD_OPT_TXONLY_MULTI_FLOW_NUM:
+                       txonly_multi_flow = 1;
+                       break;
+               case TESTPMD_OPT_RXQ_SHARE_NUM:
+                       if (optarg == NULL) {
+                               rxq_share = UINT32_MAX;
+                       } else {
                                n = atoi(optarg);
                                if (n >= 0)
-                                       rx_free_thresh = (int16_t)n;
-                               else
-                                       rte_exit(EXIT_FAILURE, "rxfreet must be 
>= 0\n");
-                       }
-                       if (!strcmp(lgopts[opt_idx].name, "rxoffs")) {
-                               unsigned int seg_off[MAX_SEGS_BUFFER_SPLIT];
-                               unsigned int nb_offs;
-
-                               nb_offs = parse_item_list
-                                               (optarg, "rxpkt offsets",
-                                                MAX_SEGS_BUFFER_SPLIT,
-                                                seg_off, 0);
-                               if (nb_offs > 0)
-                                       set_rx_pkt_offsets(seg_off, nb_offs);
-                               else
-                                       rte_exit(EXIT_FAILURE, "bad rxoffs\n");
-                       }
-                       if (!strcmp(lgopts[opt_idx].name, "rxpkts")) {
-                               unsigned int seg_len[MAX_SEGS_BUFFER_SPLIT];
-                               unsigned int nb_segs;
-                               nb_segs = parse_item_list
-                                               (optarg, "rxpkt segments",
-                                                MAX_SEGS_BUFFER_SPLIT,
-                                                seg_len, 0);
-                               if (nb_segs > 0)
-                                       set_rx_pkt_segments(seg_len, nb_segs);
-                               else
-                                       rte_exit(EXIT_FAILURE, "bad rxpkts\n");
-                       }
-                       if (!strcmp(lgopts[opt_idx].name, "rxhdrs")) {
-                               unsigned int seg_hdrs[MAX_SEGS_BUFFER_SPLIT];
-                               unsigned int nb_segs;
-
-                               nb_segs = parse_hdrs_list
-                                               (optarg, "rxpkt segments",
-                                               MAX_SEGS_BUFFER_SPLIT,
-                                               seg_hdrs);
-                               if (nb_segs > 0)
-                                       set_rx_pkt_hdrs(seg_hdrs, nb_segs);
-                               else
-                                       rte_exit(EXIT_FAILURE, "bad rxpkts\n");
-                       }
-                       if (!strcmp(lgopts[opt_idx].name, "txpkts")) {
-                               unsigned seg_lengths[RTE_MAX_SEGS_PER_PKT];
-                               unsigned int nb_segs;
-
-                               nb_segs = parse_item_list(optarg, "txpkt 
segments",
-                                               RTE_MAX_SEGS_PER_PKT, 
seg_lengths, 0);
-                               if (nb_segs > 0)
-                                       set_tx_pkt_segments(seg_lengths, 
nb_segs);
+                                       rxq_share = (uint32_t)n;
                                else
-                                       rte_exit(EXIT_FAILURE, "bad txpkts\n");
+                                       rte_exit(EXIT_FAILURE, "rxq-share must 
be >= 0\n");
                        }
-                       if (!strcmp(lgopts[opt_idx].name, "multi-rx-mempool"))
-                               multi_rx_mempool = 1;
-                       if (!strcmp(lgopts[opt_idx].name, "txonly-multi-flow"))
-                               txonly_multi_flow = 1;
-                       if (!strcmp(lgopts[opt_idx].name, "rxq-share")) {
-                               if (optarg == NULL) {
-                                       rxq_share = UINT32_MAX;
-                               } else {
-                                       n = atoi(optarg);
-                                       if (n >= 0)
-                                               rxq_share = (uint32_t)n;
-                                       else
-                                               rte_exit(EXIT_FAILURE, 
"rxq-share must be >= 0\n");
-                               }
-                       }
-                       if (!strcmp(lgopts[opt_idx].name, "no-flush-rx"))
-                               no_flush_rx = 1;
-                       if (!strcmp(lgopts[opt_idx].name, "eth-link-speed")) {
-                               n = atoi(optarg);
-                               if (n >= 0 && parse_link_speed(n) > 0)
-                                       eth_link_speed = parse_link_speed(n);
-                       }
-                       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"))
-                               rmv_interrupt = 0;
-                       if (!strcmp(lgopts[opt_idx].name, "flow-isolate-all"))
-                               flow_isolate_all = 1;
-                       if (!strcmp(lgopts[opt_idx].name, "disable-flow-flush"))
-                               no_flow_flush = 1;
-                       if (!strcmp(lgopts[opt_idx].name, "tx-offloads")) {
-                               char *end = NULL;
-                               n = strtoull(optarg, &end, 16);
-                               if (n >= 0)
-                                       tx_offloads = (uint64_t)n;
-                               else
-                                       rte_exit(EXIT_FAILURE,
-                                                "tx-offloads must be >= 0\n");
+                       break;
+               case TESTPMD_OPT_NO_FLUSH_RX_NUM:
+                       no_flush_rx = 1;
+                       break;
+               case TESTPMD_OPT_ETH_LINK_SPEED_NUM:
+                       n = atoi(optarg);
+                       if (n >= 0 && parse_link_speed(n) > 0)
+                               eth_link_speed = parse_link_speed(n);
+                       break;
+               case TESTPMD_OPT_DISABLE_LINK_CHECK_NUM:
+                       no_link_check = 1;
+                       break;
+               case TESTPMD_OPT_DISABLE_DEVICE_START_NUM:
+                       no_device_start = 1;
+                       break;
+               case TESTPMD_OPT_NO_LSC_INTERRUPT_NUM:
+                       lsc_interrupt = 0;
+                       break;
+               case TESTPMD_OPT_NO_RMV_INTERRUPT_NUM:
+                       rmv_interrupt = 0;
+                       break;
+               case TESTPMD_OPT_FLOW_ISOLATE_ALL_NUM:
+                       flow_isolate_all = 1;
+                       break;
+               case TESTPMD_OPT_DISABLE_FLOW_FLUSH_NUM:
+                       no_flow_flush = 1;
+                       break;
+               case TESTPMD_OPT_TX_OFFLOADS_NUM: {
+                       char *end = NULL;
+
+                       n = strtoull(optarg, &end, 16);
+                       if (n >= 0)
+                               tx_offloads = (uint64_t)n;
+                       else
+                               rte_exit(EXIT_FAILURE,
+                                       "tx-offloads must be >= 0\n");
+                       break;
+               }
+               case TESTPMD_OPT_RX_OFFLOADS_NUM: {
+                       char *end = NULL;
+
+                       n = strtoull(optarg, &end, 16);
+                       if (n >= 0)
+                               rx_offloads = (uint64_t)n;
+                       else
+                               rte_exit(EXIT_FAILURE,
+                                       "rx-offloads must be >= 0\n");
+                       break;
+               }
+               case TESTPMD_OPT_VXLAN_GPE_PORT_NUM:
+                       n = atoi(optarg);
+                       if (n >= 0)
+                               vxlan_gpe_udp_port = (uint16_t)n;
+                       else
+                               rte_exit(EXIT_FAILURE,
+                                       "vxlan-gpe-port must be >= 0\n");
+                       break;
+               case TESTPMD_OPT_GENEVE_PARSED_PORT_NUM:
+                       n = atoi(optarg);
+                       if (n >= 0)
+                               geneve_udp_port = (uint16_t)n;
+                       else
+                               rte_exit(EXIT_FAILURE,
+                                       "geneve-parsed-port must be >= 0\n");
+                       break;
+               case TESTPMD_OPT_PRINT_EVENT_NUM:
+                       if (parse_event_printing_config(optarg, 1)) {
+                               rte_exit(EXIT_FAILURE,
+                                       "invalid print-event argument\n");
                        }
-
-                       if (!strcmp(lgopts[opt_idx].name, "rx-offloads")) {
-                               char *end = NULL;
-                               n = strtoull(optarg, &end, 16);
-                               if (n >= 0)
-                                       rx_offloads = (uint64_t)n;
-                               else
-                                       rte_exit(EXIT_FAILURE,
-                                                "rx-offloads must be >= 0\n");
+                       break;
+               case TESTPMD_OPT_MASK_EVENT_NUM:
+                       if (parse_event_printing_config(optarg, 0)) {
+                               rte_exit(EXIT_FAILURE,
+                                       "invalid mask-event argument\n");
                        }
+                       break;
+               case TESTPMD_OPT_HOT_PLUG_NUM:
+                       hot_plug = 1;
+                       break;
+               case TESTPMD_OPT_MLOCKALL_NUM:
+                       do_mlockall = 1;
+                       break;
+               case TESTPMD_OPT_NO_MLOCKALL_NUM:
+                       do_mlockall = 0;
+                       break;
+               case TESTPMD_OPT_NOISY_TX_SW_BUFFER_SIZE_NUM:
+                       n = atoi(optarg);
+                       if (n >= 0)
+                               noisy_tx_sw_bufsz = n;
+                       else
+                               rte_exit(EXIT_FAILURE,
+                                       "noisy-tx-sw-buffer-size must be >= 
0\n");
+                       break;
+               case TESTPMD_OPT_NOISY_TX_SW_BUFFER_FLUSHTIME_NUM:
+                       n = atoi(optarg);
+                       if (n >= 0)
+                               noisy_tx_sw_buf_flush_time = n;
+                       else
+                               rte_exit(EXIT_FAILURE,
+                                       "noisy-tx-sw-buffer-flushtime must be 
>= 0\n");
+                       break;
+               case TESTPMD_OPT_NOISY_LKUP_MEMORY_NUM:
+                       n = atoi(optarg);
+                       if (n >= 0)
+                               noisy_lkup_mem_sz = n;
+                       else
+                               rte_exit(EXIT_FAILURE,
+                                       "noisy-lkup-memory must be >= 0\n");
+                       break;
+               case TESTPMD_OPT_NOISY_LKUP_NUM_WRITES_NUM:
+                       n = atoi(optarg);
+                       if (n >= 0)
+                               noisy_lkup_num_writes = n;
+                       else
+                               rte_exit(EXIT_FAILURE,
+                                       "noisy-lkup-num-writes must be >= 0\n");
+                       break;
+               case TESTPMD_OPT_NOISY_LKUP_NUM_READS_NUM:
+                       n = atoi(optarg);
+                       if (n >= 0)
+                               noisy_lkup_num_reads = n;
+                       else
+                               rte_exit(EXIT_FAILURE,
+                                       "noisy-lkup-num-reads must be >= 0\n");
+                       break;
+               case TESTPMD_OPT_NOISY_LKUP_NUM_READS_WRITES_NUM:
+                       n = atoi(optarg);
+                       if (n >= 0)
+                               noisy_lkup_num_reads_writes = n;
+                       else
+                               rte_exit(EXIT_FAILURE,
+                                       "noisy-lkup-num-reads-writes must be >= 
0\n");
+                       break;
+               case TESTPMD_OPT_NOISY_FORWARD_MODE_NUM: {
+                       unsigned int i;
 
-                       if (!strcmp(lgopts[opt_idx].name, "vxlan-gpe-port")) {
-                               n = atoi(optarg);
-                               if (n >= 0)
-                                       vxlan_gpe_udp_port = (uint16_t)n;
-                               else
-                                       rte_exit(EXIT_FAILURE,
-                                                "vxlan-gpe-port must be >= 
0\n");
-                       }
-                       if (!strcmp(lgopts[opt_idx].name,
-                                   "geneve-parsed-port")) {
-                               n = atoi(optarg);
-                               if (n >= 0)
-                                       geneve_udp_port = (uint16_t)n;
-                               else
-                                       rte_exit(EXIT_FAILURE,
-                                                "geneve-parsed-port must be >= 
0\n");
-                       }
-                       if (!strcmp(lgopts[opt_idx].name, "print-event"))
-                               if (parse_event_printing_config(optarg, 1)) {
-                                       rte_exit(EXIT_FAILURE,
-                                                "invalid print-event 
argument\n");
-                               }
-                       if (!strcmp(lgopts[opt_idx].name, "mask-event"))
-                               if (parse_event_printing_config(optarg, 0)) {
-                                       rte_exit(EXIT_FAILURE,
-                                                "invalid mask-event 
argument\n");
+                       for (i = 0; i < NOISY_FWD_MODE_MAX; i++) {
+                               if (!strcmp(optarg, noisy_fwd_mode_desc[i])) {
+                                       noisy_fwd_mode = i;
+                                       break;
                                }
-                       if (!strcmp(lgopts[opt_idx].name, "hot-plug"))
-                               hot_plug = 1;
-                       if (!strcmp(lgopts[opt_idx].name, "mlockall"))
-                               do_mlockall = 1;
-                       if (!strcmp(lgopts[opt_idx].name, "no-mlockall"))
-                               do_mlockall = 0;
-                       if (!strcmp(lgopts[opt_idx].name,
-                                   "noisy-tx-sw-buffer-size")) {
-                               n = atoi(optarg);
-                               if (n >= 0)
-                                       noisy_tx_sw_bufsz = n;
-                               else
-                                       rte_exit(EXIT_FAILURE,
-                                               "noisy-tx-sw-buffer-size must 
be >= 0\n");
                        }
-                       if (!strcmp(lgopts[opt_idx].name,
-                                   "noisy-tx-sw-buffer-flushtime")) {
-                               n = atoi(optarg);
-                               if (n >= 0)
-                                       noisy_tx_sw_buf_flush_time = n;
-                               else
-                                       rte_exit(EXIT_FAILURE,
-                                                "noisy-tx-sw-buffer-flushtime 
must be >= 0\n");
-                       }
-                       if (!strcmp(lgopts[opt_idx].name,
-                                   "noisy-lkup-memory")) {
-                               n = atoi(optarg);
-                               if (n >= 0)
-                                       noisy_lkup_mem_sz = n;
-                               else
-                                       rte_exit(EXIT_FAILURE,
-                                                "noisy-lkup-memory must be >= 
0\n");
-                       }
-                       if (!strcmp(lgopts[opt_idx].name,
-                                   "noisy-lkup-num-writes")) {
-                               n = atoi(optarg);
-                               if (n >= 0)
-                                       noisy_lkup_num_writes = n;
-                               else
-                                       rte_exit(EXIT_FAILURE,
-                                                "noisy-lkup-num-writes must be 
>= 0\n");
-                       }
-                       if (!strcmp(lgopts[opt_idx].name,
-                                   "noisy-lkup-num-reads")) {
-                               n = atoi(optarg);
-                               if (n >= 0)
-                                       noisy_lkup_num_reads = n;
-                               else
-                                       rte_exit(EXIT_FAILURE,
-                                                "noisy-lkup-num-reads must be 
>= 0\n");
-                       }
-                       if (!strcmp(lgopts[opt_idx].name,
-                                   "noisy-lkup-num-reads-writes")) {
-                               n = atoi(optarg);
-                               if (n >= 0)
-                                       noisy_lkup_num_reads_writes = n;
-                               else
-                                       rte_exit(EXIT_FAILURE,
-                                                "noisy-lkup-num-reads-writes 
must be >= 0\n");
-                       }
-                       if (!strcmp(lgopts[opt_idx].name,
-                                   "noisy-forward-mode")) {
-                               int i;
-                               for (i = 0; i < NOISY_FWD_MODE_MAX; i++)
-                                       if (!strcmp(optarg, 
noisy_fwd_mode_desc[i])) {
-                                               noisy_fwd_mode = i;
-                                               break;
-                                       }
-                               if (i == NOISY_FWD_MODE_MAX)
-                                       rte_exit(EXIT_FAILURE, 
"noisy-forward-mode %s invalid,"
-                                                " must be a valid 
noisy-forward-mode value\n",
-                                                optarg);
-                       }
-                       if (!strcmp(lgopts[opt_idx].name, "no-iova-contig"))
-                               mempool_flags = RTE_MEMPOOL_F_NO_IOVA_CONTIG;
-
-                       if (!strcmp(lgopts[opt_idx].name, "rx-mq-mode")) {
-                               char *end = NULL;
-                               n = strtoul(optarg, &end, 16);
-                               if (n >= 0 && n <= RTE_ETH_MQ_RX_VMDQ_DCB_RSS)
-                                       rx_mq_mode = (enum rte_eth_rx_mq_mode)n;
-                               else
-                                       rte_exit(EXIT_FAILURE,
-                                                "rx-mq-mode must be >= 0 and 
<= %d\n",
-                                                RTE_ETH_MQ_RX_VMDQ_DCB_RSS);
-                       }
-                       if (!strcmp(lgopts[opt_idx].name, "record-core-cycles"))
-                               record_core_cycles = 1;
-                       if (!strcmp(lgopts[opt_idx].name, "record-burst-stats"))
-                               record_burst_stats = 1;
-                       if (!strcmp(lgopts[opt_idx].name, PARAM_NUM_PROCS))
-                               num_procs = atoi(optarg);
-                       if (!strcmp(lgopts[opt_idx].name, PARAM_PROC_ID))
-                               proc_id = atoi(optarg);
+                       if (i == NOISY_FWD_MODE_MAX)
+                               rte_exit(EXIT_FAILURE, "noisy-forward-mode %s 
invalid,"
+                                        " must be a valid noisy-forward-mode 
value\n",
+                                        optarg);
                        break;
-               case 'h':
-                       usage(argv[0]);
-                       exit(EXIT_SUCCESS);
+               }
+               case TESTPMD_OPT_NO_IOVA_CONTIG_NUM:
+                       mempool_flags = RTE_MEMPOOL_F_NO_IOVA_CONTIG;
+                       break;
+               case TESTPMD_OPT_RX_MQ_MODE_NUM: {
+                       char *end = NULL;
+
+                       n = strtoul(optarg, &end, 16);
+                       if (n >= 0 && n <= RTE_ETH_MQ_RX_VMDQ_DCB_RSS)
+                               rx_mq_mode = (enum rte_eth_rx_mq_mode)n;
+                       else
+                               rte_exit(EXIT_FAILURE,
+                                       "rx-mq-mode must be >= 0 and <= %d\n",
+                                       RTE_ETH_MQ_RX_VMDQ_DCB_RSS);
+                       break;
+               }
+               case TESTPMD_OPT_RECORD_CORE_CYCLES_NUM:
+                       record_core_cycles = 1;
+                       break;
+               case TESTPMD_OPT_RECORD_BURST_STATS_NUM:
+                       record_burst_stats = 1;
+                       break;
+               case TESTPMD_OPT_NUM_PROCS_NUM:
+                       num_procs = atoi(optarg);
+                       break;
+               case TESTPMD_OPT_PROC_ID_NUM:
+                       proc_id = atoi(optarg);
                        break;
                default:
                        usage(argv[0]);
@@ -1491,9 +1733,9 @@ launch_args_parse(int argc, char** argv)
 
        if (proc_id >= (int)num_procs)
                rte_exit(EXIT_FAILURE,
-                        "The multi-process option '%s(%d)' should be less than 
'%s(%u)'\n",
-                        PARAM_PROC_ID, proc_id,
-                        PARAM_NUM_PROCS, num_procs);
+                       "The multi-process option '%s(%d)' should be less than 
'%s(%u)'\n",
+                       TESTPMD_OPT_PROC_ID, proc_id,
+                       TESTPMD_OPT_NUM_PROCS, num_procs);
 
        /* Set offload configuration from command line parameters. */
        rx_mode.offloads = rx_offloads;
-- 
2.44.0

Reply via email to