From: David Marchand <david.marchand@redhat.com>
To: dev@dpdk.org
Cc: Aman Singh <aman.deep.singh@intel.com>,
Yuying Zhang <yuying.zhang@intel.com>
Subject: [PATCH 4/4] app/testpmd: enhance getopt_long usage
Date: Fri, 8 Mar 2024 15:48:41 +0100 [thread overview]
Message-ID: <20240308144841.3615262-5-david.marchand@redhat.com> (raw)
In-Reply-To: <20240308144841.3615262-1-david.marchand@redhat.com>
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.marchand@redhat.com>
---
app/test-pmd/parameters.c | 1928 +++++++++++++++++++++----------------
1 file changed, 1084 insertions(+), 844 deletions(-)
diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c
index 271f0c995a..58f43cb5a8 100644
--- a/app/test-pmd/parameters.c
+++ b/app/test-pmd/parameters.c
@@ -40,6 +40,346 @@
#include "testpmd.h"
+enum {
+ /* long options mapped to a short option */
+#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',
+
+ /* first long only option value must be >= 256 */
+ 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 */
+#ifdef RTE_LIB_CMDLINE
+ "i" /* interactive */
+#endif
+};
+
+static struct option long_options[] = {
+ { TESTPMD_OPT_AUTO_START, 0, NULL, TESTPMD_OPT_AUTO_START_NUM },
+ { TESTPMD_OPT_HELP, 0, NULL, TESTPMD_OPT_HELP_NUM },
+#ifdef RTE_LIB_CMDLINE
+ { TESTPMD_OPT_INTERACTIVE, 0, NULL, TESTPMD_OPT_INTERACTIVE_NUM },
+ { TESTPMD_OPT_CMDLINE_FILE, 1, NULL, TESTPMD_OPT_CMDLINE_FILE_NUM },
+ { TESTPMD_OPT_ETH_PEERS_CONFIGFILE, 1, NULL, TESTPMD_OPT_ETH_PEERS_CONFIGFILE_NUM },
+ { TESTPMD_OPT_ETH_PEER, 1, NULL, TESTPMD_OPT_ETH_PEER_NUM },
+#endif
+ { TESTPMD_OPT_TX_FIRST, 0, NULL, TESTPMD_OPT_TX_FIRST_NUM },
+ { TESTPMD_OPT_STATS_PERIOD, 1, NULL, TESTPMD_OPT_STATS_PERIOD_NUM },
+ { TESTPMD_OPT_DISPLAY_XSTATS, 1, NULL, TESTPMD_OPT_DISPLAY_XSTATS_NUM },
+ { TESTPMD_OPT_NB_CORES, 1, NULL, TESTPMD_OPT_NB_CORES_NUM },
+ { TESTPMD_OPT_NB_PORTS, 1, NULL, TESTPMD_OPT_NB_PORTS_NUM },
+ { TESTPMD_OPT_COREMASK, 1, NULL, TESTPMD_OPT_COREMASK_NUM },
+ { TESTPMD_OPT_PORTMASK, 1, NULL, TESTPMD_OPT_PORTMASK_NUM },
+ { TESTPMD_OPT_PORTLIST, 1, NULL, TESTPMD_OPT_PORTLIST_NUM },
+ { TESTPMD_OPT_NUMA, 0, NULL, TESTPMD_OPT_NUMA_NUM },
+ { TESTPMD_OPT_NO_NUMA, 0, NULL, TESTPMD_OPT_NO_NUMA_NUM },
+ { TESTPMD_OPT_MP_ANON, 0, NULL, TESTPMD_OPT_MP_ANON_NUM }, /* deprecated */
+ { TESTPMD_OPT_PORT_NUMA_CONFIG, 1, NULL, TESTPMD_OPT_PORT_NUMA_CONFIG_NUM },
+ { TESTPMD_OPT_RING_NUMA_CONFIG, 1, NULL, TESTPMD_OPT_RING_NUMA_CONFIG_NUM },
+ { TESTPMD_OPT_SOCKET_NUM, 1, NULL, TESTPMD_OPT_SOCKET_NUM_NUM },
+ { TESTPMD_OPT_MBUF_SIZE, 1, NULL, TESTPMD_OPT_MBUF_SIZE_NUM },
+ { TESTPMD_OPT_TOTAL_NUM_MBUFS, 1, NULL, TESTPMD_OPT_TOTAL_NUM_MBUFS_NUM },
+ { TESTPMD_OPT_MAX_PKT_LEN, 1, NULL, TESTPMD_OPT_MAX_PKT_LEN_NUM },
+ { TESTPMD_OPT_MAX_LRO_PKT_SIZE, 1, NULL, TESTPMD_OPT_MAX_LRO_PKT_SIZE_NUM },
+#ifdef RTE_LIB_LATENCYSTATS
+ { TESTPMD_OPT_LATENCYSTATS, 1, NULL, TESTPMD_OPT_LATENCYSTATS_NUM },
+#endif
+#ifdef RTE_LIB_BITRATESTATS
+ { TESTPMD_OPT_BITRATE_STATS, 1, NULL, TESTPMD_OPT_BITRATE_STATS_NUM },
+#endif
+ { TESTPMD_OPT_DISABLE_CRC_STRIP, 0, NULL, TESTPMD_OPT_DISABLE_CRC_STRIP_NUM },
+ { TESTPMD_OPT_ENABLE_LRO, 0, NULL, TESTPMD_OPT_ENABLE_LRO_NUM },
+ { TESTPMD_OPT_ENABLE_RX_CKSUM, 0, NULL, TESTPMD_OPT_ENABLE_RX_CKSUM_NUM },
+ { TESTPMD_OPT_ENABLE_RX_TIMESTAMP, 0, NULL, TESTPMD_OPT_ENABLE_RX_TIMESTAMP_NUM },
+ { TESTPMD_OPT_ENABLE_SCATTER, 0, NULL, TESTPMD_OPT_ENABLE_SCATTER_NUM },
+ { TESTPMD_OPT_ENABLE_HW_VLAN, 0, NULL, TESTPMD_OPT_ENABLE_HW_VLAN_NUM },
+ { TESTPMD_OPT_ENABLE_HW_VLAN_FILTER, 0, NULL, TESTPMD_OPT_ENABLE_HW_VLAN_FILTER_NUM },
+ { TESTPMD_OPT_ENABLE_HW_VLAN_STRIP, 0, NULL, TESTPMD_OPT_ENABLE_HW_VLAN_STRIP_NUM },
+ { TESTPMD_OPT_ENABLE_HW_VLAN_EXTEND, 0, NULL, TESTPMD_OPT_ENABLE_HW_VLAN_EXTEND_NUM },
+ { TESTPMD_OPT_ENABLE_HW_QINQ_STRIP, 0, NULL, TESTPMD_OPT_ENABLE_HW_QINQ_STRIP_NUM },
+ { TESTPMD_OPT_ENABLE_DROP_EN, 0, NULL, TESTPMD_OPT_ENABLE_DROP_EN_NUM },
+ { TESTPMD_OPT_DISABLE_RSS, 0, NULL, TESTPMD_OPT_DISABLE_RSS_NUM },
+ { TESTPMD_OPT_PORT_TOPOLOGY, 1, NULL, TESTPMD_OPT_PORT_TOPOLOGY_NUM },
+ { TESTPMD_OPT_FORWARD_MODE, 1, NULL, TESTPMD_OPT_FORWARD_MODE_NUM },
+ { TESTPMD_OPT_RSS_IP, 0, NULL, TESTPMD_OPT_RSS_IP_NUM },
+ { TESTPMD_OPT_RSS_UDP, 0, NULL, TESTPMD_OPT_RSS_UDP_NUM },
+ { TESTPMD_OPT_RSS_LEVEL_OUTER, 0, NULL, TESTPMD_OPT_RSS_LEVEL_OUTER_NUM },
+ { TESTPMD_OPT_RSS_LEVEL_INNER, 0, NULL, TESTPMD_OPT_RSS_LEVEL_INNER_NUM },
+ { TESTPMD_OPT_RXQ, 1, NULL, TESTPMD_OPT_RXQ_NUM },
+ { TESTPMD_OPT_TXQ, 1, NULL, TESTPMD_OPT_TXQ_NUM },
+ { TESTPMD_OPT_RXD, 1, NULL, TESTPMD_OPT_RXD_NUM },
+ { TESTPMD_OPT_TXD, 1, NULL, TESTPMD_OPT_TXD_NUM },
+ { TESTPMD_OPT_HAIRPINQ, 1, NULL, TESTPMD_OPT_HAIRPINQ_NUM },
+ { TESTPMD_OPT_HAIRPIN_MODE, 1, NULL, TESTPMD_OPT_HAIRPIN_MODE_NUM },
+ { TESTPMD_OPT_BURST, 1, NULL, TESTPMD_OPT_BURST_NUM },
+ { TESTPMD_OPT_FLOWGEN_CLONES, 1, NULL, TESTPMD_OPT_FLOWGEN_CLONES_NUM },
+ { TESTPMD_OPT_FLOWGEN_FLOWS, 1, NULL, TESTPMD_OPT_FLOWGEN_FLOWS_NUM },
+ { TESTPMD_OPT_MBCACHE, 1, NULL, TESTPMD_OPT_MBCACHE_NUM },
+ { TESTPMD_OPT_TXPT, 1, NULL, TESTPMD_OPT_TXPT_NUM },
+ { TESTPMD_OPT_TXHT, 1, NULL, TESTPMD_OPT_TXHT_NUM },
+ { TESTPMD_OPT_TXWT, 1, NULL, TESTPMD_OPT_TXWT_NUM },
+ { TESTPMD_OPT_TXFREET, 1, NULL, TESTPMD_OPT_TXFREET_NUM },
+ { TESTPMD_OPT_TXRST, 1, NULL, TESTPMD_OPT_TXRST_NUM },
+ { TESTPMD_OPT_RXPT, 1, NULL, TESTPMD_OPT_RXPT_NUM },
+ { TESTPMD_OPT_RXHT, 1, NULL, TESTPMD_OPT_RXHT_NUM },
+ { TESTPMD_OPT_RXWT, 1, NULL, TESTPMD_OPT_RXWT_NUM },
+ { TESTPMD_OPT_RXFREET, 1, NULL, TESTPMD_OPT_RXFREET_NUM },
+ { TESTPMD_OPT_NO_FLUSH_RX, 0, NULL, TESTPMD_OPT_NO_FLUSH_RX_NUM },
+ { TESTPMD_OPT_FLOW_ISOLATE_ALL, 0, NULL, TESTPMD_OPT_FLOW_ISOLATE_ALL_NUM },
+ { TESTPMD_OPT_DISABLE_FLOW_FLUSH, 0, NULL, TESTPMD_OPT_DISABLE_FLOW_FLUSH_NUM },
+ { TESTPMD_OPT_RXOFFS, 1, NULL, TESTPMD_OPT_RXOFFS_NUM },
+ { TESTPMD_OPT_RXPKTS, 1, NULL, TESTPMD_OPT_RXPKTS_NUM },
+ { TESTPMD_OPT_RXHDRS, 1, NULL, TESTPMD_OPT_RXHDRS_NUM },
+ { TESTPMD_OPT_TXPKTS, 1, NULL, TESTPMD_OPT_TXPKTS_NUM },
+ { TESTPMD_OPT_MULTI_RX_MEMPOOL, 0, NULL, TESTPMD_OPT_MULTI_RX_MEMPOOL_NUM },
+ { TESTPMD_OPT_TXONLY_MULTI_FLOW, 0, NULL, TESTPMD_OPT_TXONLY_MULTI_FLOW_NUM },
+ { TESTPMD_OPT_RXQ_SHARE, 2, NULL, TESTPMD_OPT_RXQ_SHARE_NUM },
+ { TESTPMD_OPT_ETH_LINK_SPEED, 1, NULL, TESTPMD_OPT_ETH_LINK_SPEED_NUM },
+ { TESTPMD_OPT_DISABLE_LINK_CHECK, 0, NULL, TESTPMD_OPT_DISABLE_LINK_CHECK_NUM },
+ { TESTPMD_OPT_DISABLE_DEVICE_START, 0, NULL, TESTPMD_OPT_DISABLE_DEVICE_START_NUM },
+ { TESTPMD_OPT_NO_LSC_INTERRUPT, 0, NULL, TESTPMD_OPT_NO_LSC_INTERRUPT_NUM },
+ { TESTPMD_OPT_NO_RMV_INTERRUPT, 0, NULL, TESTPMD_OPT_NO_RMV_INTERRUPT_NUM },
+ { TESTPMD_OPT_PRINT_EVENT, 1, NULL, TESTPMD_OPT_PRINT_EVENT_NUM },
+ { TESTPMD_OPT_MASK_EVENT, 1, NULL, TESTPMD_OPT_MASK_EVENT_NUM },
+ { TESTPMD_OPT_TX_OFFLOADS, 1, NULL, TESTPMD_OPT_TX_OFFLOADS_NUM },
+ { TESTPMD_OPT_RX_OFFLOADS, 1, NULL, TESTPMD_OPT_RX_OFFLOADS_NUM },
+ { TESTPMD_OPT_HOT_PLUG, 0, NULL, TESTPMD_OPT_HOT_PLUG_NUM },
+ { TESTPMD_OPT_VXLAN_GPE_PORT, 1, NULL, TESTPMD_OPT_VXLAN_GPE_PORT_NUM },
+ { TESTPMD_OPT_GENEVE_PARSED_PORT, 1, NULL, TESTPMD_OPT_GENEVE_PARSED_PORT_NUM },
+#ifndef RTE_EXEC_ENV_WINDOWS
+ { TESTPMD_OPT_MLOCKALL, 0, NULL, TESTPMD_OPT_MLOCKALL_NUM },
+ { TESTPMD_OPT_NO_MLOCKALL, 0, NULL, TESTPMD_OPT_NO_MLOCKALL_NUM },
+#endif
+ { TESTPMD_OPT_MP_ALLOC, 1, NULL, TESTPMD_OPT_MP_ALLOC_NUM },
+ { TESTPMD_OPT_TX_IP, 1, NULL, TESTPMD_OPT_TX_IP_NUM },
+ { TESTPMD_OPT_TX_UDP, 1, NULL, TESTPMD_OPT_TX_UDP_NUM },
+ { TESTPMD_OPT_NOISY_TX_SW_BUFFER_SIZE, 1, NULL, TESTPMD_OPT_NOISY_TX_SW_BUFFER_SIZE_NUM },
+ { TESTPMD_OPT_NOISY_TX_SW_BUFFER_FLUSHTIME, 1, NULL,
+ TESTPMD_OPT_NOISY_TX_SW_BUFFER_FLUSHTIME_NUM },
+ { TESTPMD_OPT_NOISY_LKUP_MEMORY, 1, NULL, TESTPMD_OPT_NOISY_LKUP_MEMORY_NUM },
+ { TESTPMD_OPT_NOISY_LKUP_NUM_WRITES, 1, NULL, TESTPMD_OPT_NOISY_LKUP_NUM_WRITES_NUM },
+ { TESTPMD_OPT_NOISY_LKUP_NUM_READS, 1, NULL, TESTPMD_OPT_NOISY_LKUP_NUM_READS_NUM },
+ { TESTPMD_OPT_NOISY_LKUP_NUM_READS_WRITES, 1, NULL,
+ TESTPMD_OPT_NOISY_LKUP_NUM_READS_WRITES_NUM },
+ { TESTPMD_OPT_NOISY_FORWARD_MODE, 1, NULL, TESTPMD_OPT_NOISY_FORWARD_MODE_NUM },
+ { TESTPMD_OPT_NO_IOVA_CONTIG, 0, NULL, TESTPMD_OPT_NO_IOVA_CONTIG_NUM },
+ { TESTPMD_OPT_RX_MQ_MODE, 1, NULL, TESTPMD_OPT_RX_MQ_MODE_NUM },
+ { TESTPMD_OPT_RECORD_CORE_CYCLES, 0, NULL, TESTPMD_OPT_RECORD_CORE_CYCLES_NUM },
+ { TESTPMD_OPT_RECORD_BURST_STATS, 0, NULL, TESTPMD_OPT_RECORD_BURST_STATS_NUM },
+ { TESTPMD_OPT_NUM_PROCS, 1, NULL, TESTPMD_OPT_NUM_PROCS_NUM },
+ { TESTPMD_OPT_PROC_ID, 1, NULL, TESTPMD_OPT_PROC_ID_NUM },
+ { 0, 0, NULL, 0 }
+};
+
static void
usage(char* progname)
{
@@ -593,9 +933,6 @@ 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;
@@ -608,130 +945,10 @@ launch_args_parse(int argc, char** argv)
uint16_t rec_nb_pkts;
int ret;
- static struct option lgopts[] = {
- { "help", 0, 0, 0 },
-#ifdef RTE_LIB_CMDLINE
- { "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 },
-#endif
- { "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;
-#ifdef RTE_LIB_CMDLINE
-#define SHORTOPTS "i"
-#else
-#define SHORTOPTS ""
-#endif
- while ((opt = getopt_long(argc, argvopt, SHORTOPTS "ah",
- lgopts, &opt_idx)) != EOF) {
+ while ((opt = getopt_long(argc, argvopt, short_options, long_options,
+ &opt_idx)) != EOF) {
switch (opt) {
#ifdef RTE_LIB_CMDLINE
case 'i':
@@ -743,755 +960,778 @@ launch_args_parse(int argc, char** argv)
printf("Auto-start selected\n");
auto_start = 1;
break;
-
- case 0: /*long options */
- if (!strcmp(lgopts[opt_idx].name, "help")) {
- usage(argv[0]);
- exit(EXIT_SUCCESS);
- }
+ case 'h':
+ usage(argv[0]);
+ exit(EXIT_SUCCESS);
+ break;
#ifdef RTE_LIB_CMDLINE
- 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");
+ 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;
- stats_period = n;
- break;
- }
- if (!strcmp(lgopts[opt_idx].name, "display-xstats")) {
- char rc;
+ n = strtoul(optarg, &end, 10);
+ if ((optarg[0] == '\0') || (end == NULL) ||
+ (*end != '\0'))
+ rte_exit(EXIT_FAILURE, "Invalid stats-period value\n");
- 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);
+ 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 (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++;
- }
+ 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;
+ }
#endif
- 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);
-
- *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);
- }
- 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;
- }
+ 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 (!nb_rxq && !nb_txq)
- rte_exit(EXIT_FAILURE, "Either rx or tx queues should be non-zero\n");
- }
- 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 (!nb_rxq && !nb_txq)
- rte_exit(EXIT_FAILURE, "Either rx or tx queues should be non-zero\n");
- }
- 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");
+ 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));
+ if (!nb_rxq && !nb_txq)
+ rte_exit(EXIT_FAILURE, "Either rx or tx queues should be non-zero\n");
+ 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));
+ if (!nb_rxq && !nb_txq)
+ rte_exit(EXIT_FAILURE, "Either rx or tx queues should be non-zero\n");
+ 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)
+ rec_nb_pkts = 0;
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)
- rec_nb_pkts = 0;
- else
- rec_nb_pkts = dev_info
+ 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
+ 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;
- 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;
+ "rxd must be > "
+ "rx_free_thresh(%d)\n",
+ (int)rx_free_thresh);
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);
+ rxq_share = (uint32_t)n;
else
- rte_exit(EXIT_FAILURE, "bad rxpkts\n");
+ rte_exit(EXIT_FAILURE, "rxq-share must be >= 0\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);
- else
- rte_exit(EXIT_FAILURE, "bad txpkts\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");
+ 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, "mask-event"))
- if (parse_event_printing_config(optarg, 0)) {
- rte_exit(EXIT_FAILURE,
- "invalid mask-event argument\n");
- }
- 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]);
@@ -1510,9 +1750,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
next prev parent reply other threads:[~2024-03-08 14:49 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-08 14:48 [PATCH 0/4] testpmd options parsing cleanup David Marchand
2024-03-08 14:48 ` [PATCH 1/4] app/testpmd: fix stats-period option check David Marchand
2024-03-12 16:43 ` Ferruh Yigit
2024-03-08 14:48 ` [PATCH 2/4] app/testpmd: fix burst option parsing David Marchand
2024-03-12 16:47 ` Ferruh Yigit
2024-03-13 7:24 ` David Marchand
2024-03-13 10:37 ` Ferruh Yigit
2024-03-13 11:13 ` David Marchand
2024-03-13 12:09 ` Ferruh Yigit
2024-03-13 16:32 ` Stephen Hemminger
2024-03-08 14:48 ` [PATCH 3/4] app/testpmd: check queue count for related options David Marchand
2024-03-12 16:59 ` Ferruh Yigit
2024-03-13 7:37 ` David Marchand
2024-03-13 10:42 ` Ferruh Yigit
2024-03-13 11:10 ` David Marchand
2024-03-13 12:18 ` Ferruh Yigit
2024-03-08 14:48 ` David Marchand [this message]
2024-03-12 17:03 ` [PATCH 4/4] app/testpmd: enhance getopt_long usage Ferruh Yigit
2024-03-13 16:51 ` David Marchand
2024-03-13 17:20 ` David Marchand
2024-03-13 23:28 ` Ferruh Yigit
2024-03-13 23:28 ` Ferruh Yigit
2024-03-14 9:17 ` [PATCH v2 0/6] testpmd options parsing cleanup David Marchand
2024-03-14 9:17 ` [PATCH v2 1/6] app/testpmd: fix stats-period option check David Marchand
2024-03-14 9:17 ` [PATCH v2 2/6] app/testpmd: fix burst option parsing David Marchand
2024-03-14 9:22 ` Ferruh Yigit
2024-03-14 9:17 ` [PATCH v2 3/6] app/testpmd: fix error message for invalid option David Marchand
2024-03-14 9:23 ` Ferruh Yigit
2024-03-14 9:17 ` [PATCH v2 4/6] app/testpmd: enhance queue count check David Marchand
2024-03-14 9:23 ` Ferruh Yigit
2024-03-14 9:17 ` [PATCH v2 5/6] app/testpmd: remove dead code for disabling cmdline library David Marchand
2024-03-14 11:33 ` Ferruh Yigit
2024-03-14 9:17 ` [PATCH v2 6/6] app/testpmd: enhance getopt_long usage David Marchand
2024-03-14 11:43 ` Ferruh Yigit
2024-03-14 12:43 ` [PATCH v2 0/6] testpmd options parsing cleanup Ferruh Yigit
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240308144841.3615262-5-david.marchand@redhat.com \
--to=david.marchand@redhat.com \
--cc=aman.deep.singh@intel.com \
--cc=dev@dpdk.org \
--cc=yuying.zhang@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.