get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/138127/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 138127,
    "url": "http://patches.dpdk.org/api/patches/138127/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20240308144841.3615262-5-david.marchand@redhat.com/",
    "project": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<20240308144841.3615262-5-david.marchand@redhat.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20240308144841.3615262-5-david.marchand@redhat.com",
    "date": "2024-03-08T14:48:41",
    "name": "[4/4] app/testpmd: enhance getopt_long usage",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "archived": true,
    "hash": "6c62aa1f7d88e5e97f3f62f962ec78e5151d3f28",
    "submitter": {
        "id": 1173,
        "url": "http://patches.dpdk.org/api/people/1173/?format=api",
        "name": "David Marchand",
        "email": "david.marchand@redhat.com"
    },
    "delegate": {
        "id": 319,
        "url": "http://patches.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20240308144841.3615262-5-david.marchand@redhat.com/mbox/",
    "series": [
        {
            "id": 31440,
            "url": "http://patches.dpdk.org/api/series/31440/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=31440",
            "date": "2024-03-08T14:48:37",
            "name": "testpmd options parsing cleanup",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/31440/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/138127/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/138127/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 08BBA43B67;\n\tFri,  8 Mar 2024 15:49:15 +0100 (CET)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 0E6B743392;\n\tFri,  8 Mar 2024 15:49:03 +0100 (CET)",
            "from us-smtp-delivery-124.mimecast.com\n (us-smtp-delivery-124.mimecast.com [170.10.133.124])\n by mails.dpdk.org (Postfix) with ESMTP id 09FFE43398\n for <dev@dpdk.org>; Fri,  8 Mar 2024 15:49:00 +0100 (CET)",
            "from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com\n [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS\n (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n us-mta-686-O-5kDsYCOReiF89-R1T9oQ-1; Fri, 08 Mar 2024 09:48:58 -0500",
            "from smtp.corp.redhat.com (int-mx02.intmail.prod.int.rdu2.redhat.com\n [10.11.54.2])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest\n SHA256)\n (No client certificate requested)\n by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 994B584B065;\n Fri,  8 Mar 2024 14:48:58 +0000 (UTC)",
            "from dmarchan.redhat.com (unknown [10.45.225.66])\n by smtp.corp.redhat.com (Postfix) with ESMTP id 615FC40C6CBC;\n Fri,  8 Mar 2024 14:48:57 +0000 (UTC)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1709909340;\n h=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n to:to:cc:cc:mime-version:mime-version:content-type:content-type:\n content-transfer-encoding:content-transfer-encoding:\n in-reply-to:in-reply-to:references:references;\n bh=No32rs6Br4BS223Tr6enMXOdKtUlxTzfF55Bu9UivGE=;\n b=aYsVK/8UyqAccboAuBKq/mbM1gjjRZCKpXid9QtKwTlRQwL7cRbFxIO6ZUWNcJHQYFWo6N\n ie3PzB+XmsWrrhspweDuSERNFcdRDE9N9YGTySccm9mZxgu5HcFJIkWn9cNjRrX0za2f0d\n mhUi7DRYAJVmxAlxOjEKTNTw9R2rlAY=",
        "X-MC-Unique": "O-5kDsYCOReiF89-R1T9oQ-1",
        "From": "David Marchand <david.marchand@redhat.com>",
        "To": "dev@dpdk.org",
        "Cc": "Aman Singh <aman.deep.singh@intel.com>,\n 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",
        "Message-ID": "<20240308144841.3615262-5-david.marchand@redhat.com>",
        "In-Reply-To": "<20240308144841.3615262-1-david.marchand@redhat.com>",
        "References": "<20240308144841.3615262-1-david.marchand@redhat.com>",
        "MIME-Version": "1.0",
        "X-Scanned-By": "MIMEDefang 3.4.1 on 10.11.54.2",
        "X-Mimecast-Spam-Score": "0",
        "X-Mimecast-Originator": "redhat.com",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain; charset=\"US-ASCII\"; x-default=true",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org"
    },
    "content": "This is a cleanup similar to previous ones in EAL and examples.\nInstead of using strcmp for every long options while getopt_long already\ndid such parsing, rely on getopt_long return value.\n\nNote for reviewers: this patch is best reviewed once applied locally and\ndisplayed with git show -w.\n\nSigned-off-by: David Marchand <david.marchand@redhat.com>\n---\n app/test-pmd/parameters.c | 1928 +++++++++++++++++++++----------------\n 1 file changed, 1084 insertions(+), 844 deletions(-)",
    "diff": "diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c\nindex 271f0c995a..58f43cb5a8 100644\n--- a/app/test-pmd/parameters.c\n+++ b/app/test-pmd/parameters.c\n@@ -40,6 +40,346 @@\n \n #include \"testpmd.h\"\n \n+enum {\n+\t/* long options mapped to a short option */\n+#define TESTPMD_OPT_AUTO_START \"auto-start\"\n+\tTESTPMD_OPT_AUTO_START_NUM = 'a',\n+#define TESTPMD_OPT_HELP \"help\"\n+\tTESTPMD_OPT_HELP_NUM = 'h',\n+#define TESTPMD_OPT_INTERACTIVE \"interactive\"\n+\tTESTPMD_OPT_INTERACTIVE_NUM = 'i',\n+\n+\t/* first long only option value must be >= 256 */\n+\tTESTPMD_OPT_LONG_MIN_NUM = 256,\n+#define TESTPMD_OPT_CMDLINE_FILE \"cmdline-file\"\n+\tTESTPMD_OPT_CMDLINE_FILE_NUM,\n+#define TESTPMD_OPT_ETH_PEERS_CONFIGFILE \"eth-peers-configfile\"\n+\tTESTPMD_OPT_ETH_PEERS_CONFIGFILE_NUM,\n+#define TESTPMD_OPT_ETH_PEER \"eth-peer\"\n+\tTESTPMD_OPT_ETH_PEER_NUM,\n+#define TESTPMD_OPT_TX_FIRST \"tx-first\"\n+\tTESTPMD_OPT_TX_FIRST_NUM,\n+#define TESTPMD_OPT_STATS_PERIOD \"stats-period\"\n+\tTESTPMD_OPT_STATS_PERIOD_NUM,\n+#define TESTPMD_OPT_DISPLAY_XSTATS \"display-xstats\"\n+\tTESTPMD_OPT_DISPLAY_XSTATS_NUM,\n+#define TESTPMD_OPT_NB_CORES \"nb-cores\"\n+\tTESTPMD_OPT_NB_CORES_NUM,\n+#define TESTPMD_OPT_NB_PORTS \"nb-ports\"\n+\tTESTPMD_OPT_NB_PORTS_NUM,\n+#define TESTPMD_OPT_COREMASK \"coremask\"\n+\tTESTPMD_OPT_COREMASK_NUM,\n+#define TESTPMD_OPT_PORTMASK \"portmask\"\n+\tTESTPMD_OPT_PORTMASK_NUM,\n+#define TESTPMD_OPT_PORTLIST \"portlist\"\n+\tTESTPMD_OPT_PORTLIST_NUM,\n+#define TESTPMD_OPT_NUMA \"numa\"\n+\tTESTPMD_OPT_NUMA_NUM,\n+#define TESTPMD_OPT_NO_NUMA \"no-numa\"\n+\tTESTPMD_OPT_NO_NUMA_NUM,\n+#define TESTPMD_OPT_MP_ANON \"mp-anon\"\n+\tTESTPMD_OPT_MP_ANON_NUM,\n+#define TESTPMD_OPT_PORT_NUMA_CONFIG \"port-numa-config\"\n+\tTESTPMD_OPT_PORT_NUMA_CONFIG_NUM,\n+#define TESTPMD_OPT_RING_NUMA_CONFIG \"ring-numa-config\"\n+\tTESTPMD_OPT_RING_NUMA_CONFIG_NUM,\n+#define TESTPMD_OPT_SOCKET_NUM \"socket-num\"\n+\tTESTPMD_OPT_SOCKET_NUM_NUM,\n+#define TESTPMD_OPT_MBUF_SIZE \"mbuf-size\"\n+\tTESTPMD_OPT_MBUF_SIZE_NUM,\n+#define TESTPMD_OPT_TOTAL_NUM_MBUFS \"total-num-mbufs\"\n+\tTESTPMD_OPT_TOTAL_NUM_MBUFS_NUM,\n+#define TESTPMD_OPT_MAX_PKT_LEN \"max-pkt-len\"\n+\tTESTPMD_OPT_MAX_PKT_LEN_NUM,\n+#define TESTPMD_OPT_MAX_LRO_PKT_SIZE \"max-lro-pkt-size\"\n+\tTESTPMD_OPT_MAX_LRO_PKT_SIZE_NUM,\n+#define TESTPMD_OPT_LATENCYSTATS \"latencystats\"\n+\tTESTPMD_OPT_LATENCYSTATS_NUM,\n+#define TESTPMD_OPT_BITRATE_STATS \"bitrate-stats\"\n+\tTESTPMD_OPT_BITRATE_STATS_NUM,\n+#define TESTPMD_OPT_DISABLE_CRC_STRIP \"disable-crc-strip\"\n+\tTESTPMD_OPT_DISABLE_CRC_STRIP_NUM,\n+#define TESTPMD_OPT_ENABLE_LRO \"enable-lro\"\n+\tTESTPMD_OPT_ENABLE_LRO_NUM,\n+#define TESTPMD_OPT_ENABLE_RX_CKSUM \"enable-rx-cksum\"\n+\tTESTPMD_OPT_ENABLE_RX_CKSUM_NUM,\n+#define TESTPMD_OPT_ENABLE_RX_TIMESTAMP \"enable-rx-timestamp\"\n+\tTESTPMD_OPT_ENABLE_RX_TIMESTAMP_NUM,\n+#define TESTPMD_OPT_ENABLE_SCATTER \"enable-scatter\"\n+\tTESTPMD_OPT_ENABLE_SCATTER_NUM,\n+#define TESTPMD_OPT_ENABLE_HW_VLAN \"enable-hw-vlan\"\n+\tTESTPMD_OPT_ENABLE_HW_VLAN_NUM,\n+#define TESTPMD_OPT_ENABLE_HW_VLAN_FILTER \"enable-hw-vlan-filter\"\n+\tTESTPMD_OPT_ENABLE_HW_VLAN_FILTER_NUM,\n+#define TESTPMD_OPT_ENABLE_HW_VLAN_STRIP \"enable-hw-vlan-strip\"\n+\tTESTPMD_OPT_ENABLE_HW_VLAN_STRIP_NUM,\n+#define TESTPMD_OPT_ENABLE_HW_VLAN_EXTEND \"enable-hw-vlan-extend\"\n+\tTESTPMD_OPT_ENABLE_HW_VLAN_EXTEND_NUM,\n+#define TESTPMD_OPT_ENABLE_HW_QINQ_STRIP \"enable-hw-qinq-strip\"\n+\tTESTPMD_OPT_ENABLE_HW_QINQ_STRIP_NUM,\n+#define TESTPMD_OPT_ENABLE_DROP_EN \"enable-drop-en\"\n+\tTESTPMD_OPT_ENABLE_DROP_EN_NUM,\n+#define TESTPMD_OPT_DISABLE_RSS \"disable-rss\"\n+\tTESTPMD_OPT_DISABLE_RSS_NUM,\n+#define TESTPMD_OPT_PORT_TOPOLOGY \"port-topology\"\n+\tTESTPMD_OPT_PORT_TOPOLOGY_NUM,\n+#define TESTPMD_OPT_FORWARD_MODE \"forward-mode\"\n+\tTESTPMD_OPT_FORWARD_MODE_NUM,\n+#define TESTPMD_OPT_RSS_IP \"rss-ip\"\n+\tTESTPMD_OPT_RSS_IP_NUM,\n+#define TESTPMD_OPT_RSS_UDP \"rss-udp\"\n+\tTESTPMD_OPT_RSS_UDP_NUM,\n+#define TESTPMD_OPT_RSS_LEVEL_OUTER \"rss-level-outer\"\n+\tTESTPMD_OPT_RSS_LEVEL_OUTER_NUM,\n+#define TESTPMD_OPT_RSS_LEVEL_INNER \"rss-level-inner\"\n+\tTESTPMD_OPT_RSS_LEVEL_INNER_NUM,\n+#define TESTPMD_OPT_RXQ \"rxq\"\n+\tTESTPMD_OPT_RXQ_NUM,\n+#define TESTPMD_OPT_TXQ \"txq\"\n+\tTESTPMD_OPT_TXQ_NUM,\n+#define TESTPMD_OPT_RXD \"rxd\"\n+\tTESTPMD_OPT_RXD_NUM,\n+#define TESTPMD_OPT_TXD \"txd\"\n+\tTESTPMD_OPT_TXD_NUM,\n+#define TESTPMD_OPT_HAIRPINQ \"hairpinq\"\n+\tTESTPMD_OPT_HAIRPINQ_NUM,\n+#define TESTPMD_OPT_HAIRPIN_MODE \"hairpin-mode\"\n+\tTESTPMD_OPT_HAIRPIN_MODE_NUM,\n+#define TESTPMD_OPT_BURST \"burst\"\n+\tTESTPMD_OPT_BURST_NUM,\n+#define TESTPMD_OPT_FLOWGEN_CLONES \"flowgen-clones\"\n+\tTESTPMD_OPT_FLOWGEN_CLONES_NUM,\n+#define TESTPMD_OPT_FLOWGEN_FLOWS \"flowgen-flows\"\n+\tTESTPMD_OPT_FLOWGEN_FLOWS_NUM,\n+#define TESTPMD_OPT_MBCACHE \"mbcache\"\n+\tTESTPMD_OPT_MBCACHE_NUM,\n+#define TESTPMD_OPT_TXPT \"txpt\"\n+\tTESTPMD_OPT_TXPT_NUM,\n+#define TESTPMD_OPT_TXHT \"txht\"\n+\tTESTPMD_OPT_TXHT_NUM,\n+#define TESTPMD_OPT_TXWT \"txwt\"\n+\tTESTPMD_OPT_TXWT_NUM,\n+#define TESTPMD_OPT_TXFREET \"txfreet\"\n+\tTESTPMD_OPT_TXFREET_NUM,\n+#define TESTPMD_OPT_TXRST \"txrst\"\n+\tTESTPMD_OPT_TXRST_NUM,\n+#define TESTPMD_OPT_RXPT \"rxpt\"\n+\tTESTPMD_OPT_RXPT_NUM,\n+#define TESTPMD_OPT_RXHT \"rxht\"\n+\tTESTPMD_OPT_RXHT_NUM,\n+#define TESTPMD_OPT_RXWT \"rxwt\"\n+\tTESTPMD_OPT_RXWT_NUM,\n+#define TESTPMD_OPT_RXFREET \"rxfreet\"\n+\tTESTPMD_OPT_RXFREET_NUM,\n+#define TESTPMD_OPT_NO_FLUSH_RX \"no-flush-rx\"\n+\tTESTPMD_OPT_NO_FLUSH_RX_NUM,\n+#define TESTPMD_OPT_FLOW_ISOLATE_ALL \"flow-isolate-all\"\n+\tTESTPMD_OPT_FLOW_ISOLATE_ALL_NUM,\n+#define TESTPMD_OPT_DISABLE_FLOW_FLUSH \"disable-flow-flush\"\n+\tTESTPMD_OPT_DISABLE_FLOW_FLUSH_NUM,\n+#define TESTPMD_OPT_RXOFFS \"rxoffs\"\n+\tTESTPMD_OPT_RXOFFS_NUM,\n+#define TESTPMD_OPT_RXPKTS \"rxpkts\"\n+\tTESTPMD_OPT_RXPKTS_NUM,\n+#define TESTPMD_OPT_RXHDRS \"rxhdrs\"\n+\tTESTPMD_OPT_RXHDRS_NUM,\n+#define TESTPMD_OPT_TXPKTS \"txpkts\"\n+\tTESTPMD_OPT_TXPKTS_NUM,\n+#define TESTPMD_OPT_MULTI_RX_MEMPOOL \"multi-rx-mempool\"\n+\tTESTPMD_OPT_MULTI_RX_MEMPOOL_NUM,\n+#define TESTPMD_OPT_TXONLY_MULTI_FLOW \"txonly-multi-flow\"\n+\tTESTPMD_OPT_TXONLY_MULTI_FLOW_NUM,\n+#define TESTPMD_OPT_RXQ_SHARE \"rxq-share\"\n+\tTESTPMD_OPT_RXQ_SHARE_NUM,\n+#define TESTPMD_OPT_ETH_LINK_SPEED \"eth-link-speed\"\n+\tTESTPMD_OPT_ETH_LINK_SPEED_NUM,\n+#define TESTPMD_OPT_DISABLE_LINK_CHECK \"disable-link-check\"\n+\tTESTPMD_OPT_DISABLE_LINK_CHECK_NUM,\n+#define TESTPMD_OPT_DISABLE_DEVICE_START \"disable-device-start\"\n+\tTESTPMD_OPT_DISABLE_DEVICE_START_NUM,\n+#define TESTPMD_OPT_NO_LSC_INTERRUPT \"no-lsc-interrupt\"\n+\tTESTPMD_OPT_NO_LSC_INTERRUPT_NUM,\n+#define TESTPMD_OPT_NO_RMV_INTERRUPT \"no-rmv-interrupt\"\n+\tTESTPMD_OPT_NO_RMV_INTERRUPT_NUM,\n+#define TESTPMD_OPT_PRINT_EVENT \"print-event\"\n+\tTESTPMD_OPT_PRINT_EVENT_NUM,\n+#define TESTPMD_OPT_MASK_EVENT \"mask-event\"\n+\tTESTPMD_OPT_MASK_EVENT_NUM,\n+#define TESTPMD_OPT_TX_OFFLOADS \"tx-offloads\"\n+\tTESTPMD_OPT_TX_OFFLOADS_NUM,\n+#define TESTPMD_OPT_RX_OFFLOADS \"rx-offloads\"\n+\tTESTPMD_OPT_RX_OFFLOADS_NUM,\n+#define TESTPMD_OPT_HOT_PLUG \"hot-plug\"\n+\tTESTPMD_OPT_HOT_PLUG_NUM,\n+#define TESTPMD_OPT_VXLAN_GPE_PORT \"vxlan-gpe-port\"\n+\tTESTPMD_OPT_VXLAN_GPE_PORT_NUM,\n+#define TESTPMD_OPT_GENEVE_PARSED_PORT \"geneve-parsed-port\"\n+\tTESTPMD_OPT_GENEVE_PARSED_PORT_NUM,\n+#define TESTPMD_OPT_MLOCKALL \"mlockall\"\n+\tTESTPMD_OPT_MLOCKALL_NUM,\n+#define TESTPMD_OPT_NO_MLOCKALL \"no-mlockall\"\n+\tTESTPMD_OPT_NO_MLOCKALL_NUM,\n+#define TESTPMD_OPT_MP_ALLOC \"mp-alloc\"\n+\tTESTPMD_OPT_MP_ALLOC_NUM,\n+#define TESTPMD_OPT_TX_IP \"tx-ip\"\n+\tTESTPMD_OPT_TX_IP_NUM,\n+#define TESTPMD_OPT_TX_UDP \"tx-udp\"\n+\tTESTPMD_OPT_TX_UDP_NUM,\n+#define TESTPMD_OPT_NOISY_TX_SW_BUFFER_SIZE \"noisy-tx-sw-buffer-size\"\n+\tTESTPMD_OPT_NOISY_TX_SW_BUFFER_SIZE_NUM,\n+#define TESTPMD_OPT_NOISY_TX_SW_BUFFER_FLUSHTIME \"noisy-tx-sw-buffer-flushtime\"\n+\tTESTPMD_OPT_NOISY_TX_SW_BUFFER_FLUSHTIME_NUM,\n+#define TESTPMD_OPT_NOISY_LKUP_MEMORY \"noisy-lkup-memory\"\n+\tTESTPMD_OPT_NOISY_LKUP_MEMORY_NUM,\n+#define TESTPMD_OPT_NOISY_LKUP_NUM_WRITES \"noisy-lkup-num-writes\"\n+\tTESTPMD_OPT_NOISY_LKUP_NUM_WRITES_NUM,\n+#define TESTPMD_OPT_NOISY_LKUP_NUM_READS \"noisy-lkup-num-reads\"\n+\tTESTPMD_OPT_NOISY_LKUP_NUM_READS_NUM,\n+#define TESTPMD_OPT_NOISY_LKUP_NUM_READS_WRITES \"noisy-lkup-num-reads-writes\"\n+\tTESTPMD_OPT_NOISY_LKUP_NUM_READS_WRITES_NUM,\n+#define TESTPMD_OPT_NOISY_FORWARD_MODE \"noisy-forward-mode\"\n+\tTESTPMD_OPT_NOISY_FORWARD_MODE_NUM,\n+#define TESTPMD_OPT_NO_IOVA_CONTIG \"no-iova-contig\"\n+\tTESTPMD_OPT_NO_IOVA_CONTIG_NUM,\n+#define TESTPMD_OPT_RX_MQ_MODE \"rx-mq-mode\"\n+\tTESTPMD_OPT_RX_MQ_MODE_NUM,\n+#define TESTPMD_OPT_RECORD_CORE_CYCLES \"record-core-cycles\"\n+\tTESTPMD_OPT_RECORD_CORE_CYCLES_NUM,\n+#define TESTPMD_OPT_RECORD_BURST_STATS \"record-burst-stats\"\n+\tTESTPMD_OPT_RECORD_BURST_STATS_NUM,\n+#define TESTPMD_OPT_NUM_PROCS \"num-procs\"\n+\tTESTPMD_OPT_NUM_PROCS_NUM,\n+#define TESTPMD_OPT_PROC_ID \"proc-id\"\n+\tTESTPMD_OPT_PROC_ID_NUM,\n+\n+\tTESTPMD_OPT_LONG_MAX_NUM\n+};\n+\n+static const char short_options[] = {\n+\t\"a\" /* auto-start */\n+\t\"h\" /* help */\n+#ifdef RTE_LIB_CMDLINE\n+\t\"i\" /* interactive */\n+#endif\n+};\n+\n+static struct option long_options[] = {\n+\t{ TESTPMD_OPT_AUTO_START, 0, NULL, TESTPMD_OPT_AUTO_START_NUM },\n+\t{ TESTPMD_OPT_HELP, 0, NULL, TESTPMD_OPT_HELP_NUM },\n+#ifdef RTE_LIB_CMDLINE\n+\t{ TESTPMD_OPT_INTERACTIVE, 0, NULL, TESTPMD_OPT_INTERACTIVE_NUM },\n+\t{ TESTPMD_OPT_CMDLINE_FILE, 1, NULL, TESTPMD_OPT_CMDLINE_FILE_NUM },\n+\t{ TESTPMD_OPT_ETH_PEERS_CONFIGFILE, 1, NULL, TESTPMD_OPT_ETH_PEERS_CONFIGFILE_NUM },\n+\t{ TESTPMD_OPT_ETH_PEER, 1, NULL, TESTPMD_OPT_ETH_PEER_NUM },\n+#endif\n+\t{ TESTPMD_OPT_TX_FIRST, 0, NULL, TESTPMD_OPT_TX_FIRST_NUM },\n+\t{ TESTPMD_OPT_STATS_PERIOD, 1, NULL, TESTPMD_OPT_STATS_PERIOD_NUM },\n+\t{ TESTPMD_OPT_DISPLAY_XSTATS, 1, NULL, TESTPMD_OPT_DISPLAY_XSTATS_NUM },\n+\t{ TESTPMD_OPT_NB_CORES, 1, NULL, TESTPMD_OPT_NB_CORES_NUM },\n+\t{ TESTPMD_OPT_NB_PORTS, 1, NULL, TESTPMD_OPT_NB_PORTS_NUM },\n+\t{ TESTPMD_OPT_COREMASK, 1, NULL, TESTPMD_OPT_COREMASK_NUM },\n+\t{ TESTPMD_OPT_PORTMASK, 1, NULL, TESTPMD_OPT_PORTMASK_NUM },\n+\t{ TESTPMD_OPT_PORTLIST, 1, NULL, TESTPMD_OPT_PORTLIST_NUM },\n+\t{ TESTPMD_OPT_NUMA, 0, NULL, TESTPMD_OPT_NUMA_NUM },\n+\t{ TESTPMD_OPT_NO_NUMA, 0, NULL, TESTPMD_OPT_NO_NUMA_NUM },\n+\t{ TESTPMD_OPT_MP_ANON, 0, NULL, TESTPMD_OPT_MP_ANON_NUM }, /* deprecated */\n+\t{ TESTPMD_OPT_PORT_NUMA_CONFIG, 1, NULL, TESTPMD_OPT_PORT_NUMA_CONFIG_NUM },\n+\t{ TESTPMD_OPT_RING_NUMA_CONFIG, 1, NULL, TESTPMD_OPT_RING_NUMA_CONFIG_NUM },\n+\t{ TESTPMD_OPT_SOCKET_NUM, 1, NULL, TESTPMD_OPT_SOCKET_NUM_NUM },\n+\t{ TESTPMD_OPT_MBUF_SIZE, 1, NULL, TESTPMD_OPT_MBUF_SIZE_NUM },\n+\t{ TESTPMD_OPT_TOTAL_NUM_MBUFS, 1, NULL, TESTPMD_OPT_TOTAL_NUM_MBUFS_NUM },\n+\t{ TESTPMD_OPT_MAX_PKT_LEN, 1, NULL, TESTPMD_OPT_MAX_PKT_LEN_NUM },\n+\t{ TESTPMD_OPT_MAX_LRO_PKT_SIZE, 1, NULL, TESTPMD_OPT_MAX_LRO_PKT_SIZE_NUM },\n+#ifdef RTE_LIB_LATENCYSTATS\n+\t{ TESTPMD_OPT_LATENCYSTATS, 1, NULL, TESTPMD_OPT_LATENCYSTATS_NUM },\n+#endif\n+#ifdef RTE_LIB_BITRATESTATS\n+\t{ TESTPMD_OPT_BITRATE_STATS, 1, NULL, TESTPMD_OPT_BITRATE_STATS_NUM },\n+#endif\n+\t{ TESTPMD_OPT_DISABLE_CRC_STRIP, 0, NULL, TESTPMD_OPT_DISABLE_CRC_STRIP_NUM },\n+\t{ TESTPMD_OPT_ENABLE_LRO, 0, NULL, TESTPMD_OPT_ENABLE_LRO_NUM },\n+\t{ TESTPMD_OPT_ENABLE_RX_CKSUM, 0, NULL, TESTPMD_OPT_ENABLE_RX_CKSUM_NUM },\n+\t{ TESTPMD_OPT_ENABLE_RX_TIMESTAMP, 0, NULL, TESTPMD_OPT_ENABLE_RX_TIMESTAMP_NUM },\n+\t{ TESTPMD_OPT_ENABLE_SCATTER, 0, NULL, TESTPMD_OPT_ENABLE_SCATTER_NUM },\n+\t{ TESTPMD_OPT_ENABLE_HW_VLAN, 0, NULL, TESTPMD_OPT_ENABLE_HW_VLAN_NUM },\n+\t{ TESTPMD_OPT_ENABLE_HW_VLAN_FILTER, 0, NULL, TESTPMD_OPT_ENABLE_HW_VLAN_FILTER_NUM },\n+\t{ TESTPMD_OPT_ENABLE_HW_VLAN_STRIP, 0, NULL, TESTPMD_OPT_ENABLE_HW_VLAN_STRIP_NUM },\n+\t{ TESTPMD_OPT_ENABLE_HW_VLAN_EXTEND, 0, NULL, TESTPMD_OPT_ENABLE_HW_VLAN_EXTEND_NUM },\n+\t{ TESTPMD_OPT_ENABLE_HW_QINQ_STRIP, 0, NULL, TESTPMD_OPT_ENABLE_HW_QINQ_STRIP_NUM },\n+\t{ TESTPMD_OPT_ENABLE_DROP_EN, 0, NULL, TESTPMD_OPT_ENABLE_DROP_EN_NUM },\n+\t{ TESTPMD_OPT_DISABLE_RSS, 0, NULL, TESTPMD_OPT_DISABLE_RSS_NUM },\n+\t{ TESTPMD_OPT_PORT_TOPOLOGY, 1, NULL, TESTPMD_OPT_PORT_TOPOLOGY_NUM },\n+\t{ TESTPMD_OPT_FORWARD_MODE, 1, NULL, TESTPMD_OPT_FORWARD_MODE_NUM },\n+\t{ TESTPMD_OPT_RSS_IP, 0, NULL, TESTPMD_OPT_RSS_IP_NUM },\n+\t{ TESTPMD_OPT_RSS_UDP, 0, NULL, TESTPMD_OPT_RSS_UDP_NUM },\n+\t{ TESTPMD_OPT_RSS_LEVEL_OUTER, 0, NULL, TESTPMD_OPT_RSS_LEVEL_OUTER_NUM },\n+\t{ TESTPMD_OPT_RSS_LEVEL_INNER, 0, NULL, TESTPMD_OPT_RSS_LEVEL_INNER_NUM },\n+\t{ TESTPMD_OPT_RXQ, 1, NULL, TESTPMD_OPT_RXQ_NUM },\n+\t{ TESTPMD_OPT_TXQ, 1, NULL, TESTPMD_OPT_TXQ_NUM },\n+\t{ TESTPMD_OPT_RXD, 1, NULL, TESTPMD_OPT_RXD_NUM },\n+\t{ TESTPMD_OPT_TXD, 1, NULL, TESTPMD_OPT_TXD_NUM },\n+\t{ TESTPMD_OPT_HAIRPINQ, 1, NULL, TESTPMD_OPT_HAIRPINQ_NUM },\n+\t{ TESTPMD_OPT_HAIRPIN_MODE, 1, NULL, TESTPMD_OPT_HAIRPIN_MODE_NUM },\n+\t{ TESTPMD_OPT_BURST, 1, NULL, TESTPMD_OPT_BURST_NUM },\n+\t{ TESTPMD_OPT_FLOWGEN_CLONES, 1, NULL, TESTPMD_OPT_FLOWGEN_CLONES_NUM },\n+\t{ TESTPMD_OPT_FLOWGEN_FLOWS, 1, NULL, TESTPMD_OPT_FLOWGEN_FLOWS_NUM },\n+\t{ TESTPMD_OPT_MBCACHE, 1, NULL, TESTPMD_OPT_MBCACHE_NUM },\n+\t{ TESTPMD_OPT_TXPT, 1, NULL, TESTPMD_OPT_TXPT_NUM },\n+\t{ TESTPMD_OPT_TXHT, 1, NULL, TESTPMD_OPT_TXHT_NUM },\n+\t{ TESTPMD_OPT_TXWT, 1, NULL, TESTPMD_OPT_TXWT_NUM },\n+\t{ TESTPMD_OPT_TXFREET, 1, NULL, TESTPMD_OPT_TXFREET_NUM },\n+\t{ TESTPMD_OPT_TXRST, 1, NULL, TESTPMD_OPT_TXRST_NUM },\n+\t{ TESTPMD_OPT_RXPT, 1, NULL, TESTPMD_OPT_RXPT_NUM },\n+\t{ TESTPMD_OPT_RXHT, 1, NULL, TESTPMD_OPT_RXHT_NUM },\n+\t{ TESTPMD_OPT_RXWT, 1, NULL, TESTPMD_OPT_RXWT_NUM },\n+\t{ TESTPMD_OPT_RXFREET, 1, NULL, TESTPMD_OPT_RXFREET_NUM },\n+\t{ TESTPMD_OPT_NO_FLUSH_RX, 0, NULL, TESTPMD_OPT_NO_FLUSH_RX_NUM },\n+\t{ TESTPMD_OPT_FLOW_ISOLATE_ALL, 0, NULL, TESTPMD_OPT_FLOW_ISOLATE_ALL_NUM },\n+\t{ TESTPMD_OPT_DISABLE_FLOW_FLUSH, 0, NULL, TESTPMD_OPT_DISABLE_FLOW_FLUSH_NUM },\n+\t{ TESTPMD_OPT_RXOFFS, 1, NULL, TESTPMD_OPT_RXOFFS_NUM },\n+\t{ TESTPMD_OPT_RXPKTS, 1, NULL, TESTPMD_OPT_RXPKTS_NUM },\n+\t{ TESTPMD_OPT_RXHDRS, 1, NULL, TESTPMD_OPT_RXHDRS_NUM },\n+\t{ TESTPMD_OPT_TXPKTS, 1, NULL, TESTPMD_OPT_TXPKTS_NUM },\n+\t{ TESTPMD_OPT_MULTI_RX_MEMPOOL, 0, NULL, TESTPMD_OPT_MULTI_RX_MEMPOOL_NUM },\n+\t{ TESTPMD_OPT_TXONLY_MULTI_FLOW, 0, NULL, TESTPMD_OPT_TXONLY_MULTI_FLOW_NUM },\n+\t{ TESTPMD_OPT_RXQ_SHARE, 2, NULL, TESTPMD_OPT_RXQ_SHARE_NUM },\n+\t{ TESTPMD_OPT_ETH_LINK_SPEED, 1, NULL, TESTPMD_OPT_ETH_LINK_SPEED_NUM },\n+\t{ TESTPMD_OPT_DISABLE_LINK_CHECK, 0, NULL, TESTPMD_OPT_DISABLE_LINK_CHECK_NUM },\n+\t{ TESTPMD_OPT_DISABLE_DEVICE_START, 0, NULL, TESTPMD_OPT_DISABLE_DEVICE_START_NUM },\n+\t{ TESTPMD_OPT_NO_LSC_INTERRUPT, 0, NULL, TESTPMD_OPT_NO_LSC_INTERRUPT_NUM },\n+\t{ TESTPMD_OPT_NO_RMV_INTERRUPT, 0, NULL, TESTPMD_OPT_NO_RMV_INTERRUPT_NUM },\n+\t{ TESTPMD_OPT_PRINT_EVENT, 1, NULL, TESTPMD_OPT_PRINT_EVENT_NUM },\n+\t{ TESTPMD_OPT_MASK_EVENT, 1, NULL, TESTPMD_OPT_MASK_EVENT_NUM },\n+\t{ TESTPMD_OPT_TX_OFFLOADS, 1, NULL, TESTPMD_OPT_TX_OFFLOADS_NUM },\n+\t{ TESTPMD_OPT_RX_OFFLOADS, 1, NULL, TESTPMD_OPT_RX_OFFLOADS_NUM },\n+\t{ TESTPMD_OPT_HOT_PLUG, 0, NULL, TESTPMD_OPT_HOT_PLUG_NUM },\n+\t{ TESTPMD_OPT_VXLAN_GPE_PORT, 1, NULL, TESTPMD_OPT_VXLAN_GPE_PORT_NUM },\n+\t{ TESTPMD_OPT_GENEVE_PARSED_PORT, 1, NULL, TESTPMD_OPT_GENEVE_PARSED_PORT_NUM },\n+#ifndef RTE_EXEC_ENV_WINDOWS\n+\t{ TESTPMD_OPT_MLOCKALL, 0, NULL, TESTPMD_OPT_MLOCKALL_NUM },\n+\t{ TESTPMD_OPT_NO_MLOCKALL, 0, NULL, TESTPMD_OPT_NO_MLOCKALL_NUM },\n+#endif\n+\t{ TESTPMD_OPT_MP_ALLOC, 1, NULL, TESTPMD_OPT_MP_ALLOC_NUM },\n+\t{ TESTPMD_OPT_TX_IP, 1, NULL, TESTPMD_OPT_TX_IP_NUM },\n+\t{ TESTPMD_OPT_TX_UDP, 1, NULL, TESTPMD_OPT_TX_UDP_NUM },\n+\t{ TESTPMD_OPT_NOISY_TX_SW_BUFFER_SIZE, 1, NULL, TESTPMD_OPT_NOISY_TX_SW_BUFFER_SIZE_NUM },\n+\t{ TESTPMD_OPT_NOISY_TX_SW_BUFFER_FLUSHTIME, 1, NULL,\n+\t\tTESTPMD_OPT_NOISY_TX_SW_BUFFER_FLUSHTIME_NUM },\n+\t{ TESTPMD_OPT_NOISY_LKUP_MEMORY, 1, NULL, TESTPMD_OPT_NOISY_LKUP_MEMORY_NUM },\n+\t{ TESTPMD_OPT_NOISY_LKUP_NUM_WRITES, 1, NULL, TESTPMD_OPT_NOISY_LKUP_NUM_WRITES_NUM },\n+\t{ TESTPMD_OPT_NOISY_LKUP_NUM_READS, 1, NULL, TESTPMD_OPT_NOISY_LKUP_NUM_READS_NUM },\n+\t{ TESTPMD_OPT_NOISY_LKUP_NUM_READS_WRITES, 1, NULL,\n+\t\tTESTPMD_OPT_NOISY_LKUP_NUM_READS_WRITES_NUM },\n+\t{ TESTPMD_OPT_NOISY_FORWARD_MODE, 1, NULL, TESTPMD_OPT_NOISY_FORWARD_MODE_NUM },\n+\t{ TESTPMD_OPT_NO_IOVA_CONTIG, 0, NULL, TESTPMD_OPT_NO_IOVA_CONTIG_NUM },\n+\t{ TESTPMD_OPT_RX_MQ_MODE, 1, NULL, TESTPMD_OPT_RX_MQ_MODE_NUM },\n+\t{ TESTPMD_OPT_RECORD_CORE_CYCLES, 0, NULL, TESTPMD_OPT_RECORD_CORE_CYCLES_NUM },\n+\t{ TESTPMD_OPT_RECORD_BURST_STATS, 0, NULL, TESTPMD_OPT_RECORD_BURST_STATS_NUM },\n+\t{ TESTPMD_OPT_NUM_PROCS, 1, NULL, TESTPMD_OPT_NUM_PROCS_NUM },\n+\t{ TESTPMD_OPT_PROC_ID, 1, NULL, TESTPMD_OPT_PROC_ID_NUM },\n+\t{ 0, 0, NULL, 0 }\n+};\n+\n static void\n usage(char* progname)\n {\n@@ -593,9 +933,6 @@ parse_link_speed(int n)\n void\n launch_args_parse(int argc, char** argv)\n {\n-#define PARAM_PROC_ID \"proc-id\"\n-#define PARAM_NUM_PROCS \"num-procs\"\n-\n \tint n, opt;\n \tchar **argvopt;\n \tint opt_idx;\n@@ -608,130 +945,10 @@ launch_args_parse(int argc, char** argv)\n \tuint16_t rec_nb_pkts;\n \tint ret;\n \n-\tstatic struct option lgopts[] = {\n-\t\t{ \"help\",\t\t\t0, 0, 0 },\n-#ifdef RTE_LIB_CMDLINE\n-\t\t{ \"interactive\",\t\t0, 0, 0 },\n-\t\t{ \"cmdline-file\",\t\t1, 0, 0 },\n-\t\t{ \"auto-start\",\t\t\t0, 0, 0 },\n-\t\t{ \"eth-peers-configfile\",\t1, 0, 0 },\n-\t\t{ \"eth-peer\",\t\t\t1, 0, 0 },\n-#endif\n-\t\t{ \"tx-first\",\t\t\t0, 0, 0 },\n-\t\t{ \"stats-period\",\t\t1, 0, 0 },\n-\t\t{ \"display-xstats\",\t\t1, 0, 0 },\n-\t\t{ \"nb-cores\",\t\t\t1, 0, 0 },\n-\t\t{ \"nb-ports\",\t\t\t1, 0, 0 },\n-\t\t{ \"coremask\",\t\t\t1, 0, 0 },\n-\t\t{ \"portmask\",\t\t\t1, 0, 0 },\n-\t\t{ \"portlist\",\t\t\t1, 0, 0 },\n-\t\t{ \"numa\",\t\t\t0, 0, 0 },\n-\t\t{ \"no-numa\",\t\t\t0, 0, 0 },\n-\t\t{ \"mp-anon\",\t\t\t0, 0, 0 }, /* deprecated */\n-\t\t{ \"port-numa-config\",           1, 0, 0 },\n-\t\t{ \"ring-numa-config\",           1, 0, 0 },\n-\t\t{ \"socket-num\",\t\t\t1, 0, 0 },\n-\t\t{ \"mbuf-size\",\t\t\t1, 0, 0 },\n-\t\t{ \"total-num-mbufs\",\t\t1, 0, 0 },\n-\t\t{ \"max-pkt-len\",\t\t1, 0, 0 },\n-\t\t{ \"max-lro-pkt-size\",\t\t1, 0, 0 },\n-#ifdef RTE_LIB_LATENCYSTATS\n-\t\t{ \"latencystats\",               1, 0, 0 },\n-#endif\n-#ifdef RTE_LIB_BITRATESTATS\n-\t\t{ \"bitrate-stats\",              1, 0, 0 },\n-#endif\n-\t\t{ \"disable-crc-strip\",          0, 0, 0 },\n-\t\t{ \"enable-lro\",                 0, 0, 0 },\n-\t\t{ \"enable-rx-cksum\",            0, 0, 0 },\n-\t\t{ \"enable-rx-timestamp\",        0, 0, 0 },\n-\t\t{ \"enable-scatter\",             0, 0, 0 },\n-\t\t{ \"enable-hw-vlan\",             0, 0, 0 },\n-\t\t{ \"enable-hw-vlan-filter\",      0, 0, 0 },\n-\t\t{ \"enable-hw-vlan-strip\",       0, 0, 0 },\n-\t\t{ \"enable-hw-vlan-extend\",      0, 0, 0 },\n-\t\t{ \"enable-hw-qinq-strip\",       0, 0, 0 },\n-\t\t{ \"enable-drop-en\",            0, 0, 0 },\n-\t\t{ \"disable-rss\",                0, 0, 0 },\n-\t\t{ \"port-topology\",              1, 0, 0 },\n-\t\t{ \"forward-mode\",               1, 0, 0 },\n-\t\t{ \"rss-ip\",\t\t\t0, 0, 0 },\n-\t\t{ \"rss-udp\",\t\t\t0, 0, 0 },\n-\t\t{ \"rss-level-outer\",\t\t0, 0, 0 },\n-\t\t{ \"rss-level-inner\",\t\t0, 0, 0 },\n-\t\t{ \"rxq\",\t\t\t1, 0, 0 },\n-\t\t{ \"txq\",\t\t\t1, 0, 0 },\n-\t\t{ \"rxd\",\t\t\t1, 0, 0 },\n-\t\t{ \"txd\",\t\t\t1, 0, 0 },\n-\t\t{ \"hairpinq\",\t\t\t1, 0, 0 },\n-\t\t{ \"hairpin-mode\",\t\t1, 0, 0 },\n-\t\t{ \"burst\",\t\t\t1, 0, 0 },\n-\t\t{ \"flowgen-clones\",\t\t1, 0, 0 },\n-\t\t{ \"flowgen-flows\",\t\t1, 0, 0 },\n-\t\t{ \"mbcache\",\t\t\t1, 0, 0 },\n-\t\t{ \"txpt\",\t\t\t1, 0, 0 },\n-\t\t{ \"txht\",\t\t\t1, 0, 0 },\n-\t\t{ \"txwt\",\t\t\t1, 0, 0 },\n-\t\t{ \"txfreet\",\t\t\t1, 0, 0 },\n-\t\t{ \"txrst\",\t\t\t1, 0, 0 },\n-\t\t{ \"rxpt\",\t\t\t1, 0, 0 },\n-\t\t{ \"rxht\",\t\t\t1, 0, 0 },\n-\t\t{ \"rxwt\",\t\t\t1, 0, 0 },\n-\t\t{ \"rxfreet\",                    1, 0, 0 },\n-\t\t{ \"no-flush-rx\",\t0, 0, 0 },\n-\t\t{ \"flow-isolate-all\",\t        0, 0, 0 },\n-\t\t{ \"disable-flow-flush\",         0, 0, 0 },\n-\t\t{ \"rxoffs\",\t\t\t1, 0, 0 },\n-\t\t{ \"rxpkts\",\t\t\t1, 0, 0 },\n-\t\t{ \"rxhdrs\",\t\t\t1, 0, 0 },\n-\t\t{ \"txpkts\",\t\t\t1, 0, 0 },\n-\t\t{ \"multi-rx-mempool\",           0, 0, 0 },\n-\t\t{ \"txonly-multi-flow\",\t\t0, 0, 0 },\n-\t\t{ \"rxq-share\",\t\t\t2, 0, 0 },\n-\t\t{ \"eth-link-speed\",\t\t1, 0, 0 },\n-\t\t{ \"disable-link-check\",\t\t0, 0, 0 },\n-\t\t{ \"disable-device-start\",\t0, 0, 0 },\n-\t\t{ \"no-lsc-interrupt\",\t\t0, 0, 0 },\n-\t\t{ \"no-rmv-interrupt\",\t\t0, 0, 0 },\n-\t\t{ \"print-event\",\t\t1, 0, 0 },\n-\t\t{ \"mask-event\",\t\t\t1, 0, 0 },\n-\t\t{ \"tx-offloads\",\t\t1, 0, 0 },\n-\t\t{ \"rx-offloads\",\t\t1, 0, 0 },\n-\t\t{ \"hot-plug\",\t\t\t0, 0, 0 },\n-\t\t{ \"vxlan-gpe-port\",\t\t1, 0, 0 },\n-\t\t{ \"geneve-parsed-port\",\t\t1, 0, 0 },\n-#ifndef RTE_EXEC_ENV_WINDOWS\n-\t\t{ \"mlockall\",\t\t\t0, 0, 0 },\n-\t\t{ \"no-mlockall\",\t\t0, 0, 0 },\n-#endif\n-\t\t{ \"mp-alloc\",\t\t\t1, 0, 0 },\n-\t\t{ \"tx-ip\",\t\t\t1, 0, 0 },\n-\t\t{ \"tx-udp\",\t\t\t1, 0, 0 },\n-\t\t{ \"noisy-forward-mode\",\t\t1, 0, 0 },\n-\t\t{ \"noisy-tx-sw-buffer-size\",\t1, 0, 0 },\n-\t\t{ \"noisy-tx-sw-buffer-flushtime\", 1, 0, 0 },\n-\t\t{ \"noisy-lkup-memory\",\t\t1, 0, 0 },\n-\t\t{ \"noisy-lkup-num-writes\",\t1, 0, 0 },\n-\t\t{ \"noisy-lkup-num-reads\",\t1, 0, 0 },\n-\t\t{ \"noisy-lkup-num-reads-writes\", 1, 0, 0 },\n-\t\t{ \"no-iova-contig\",             0, 0, 0 },\n-\t\t{ \"rx-mq-mode\",                 1, 0, 0 },\n-\t\t{ \"record-core-cycles\",         0, 0, 0 },\n-\t\t{ \"record-burst-stats\",         0, 0, 0 },\n-\t\t{ PARAM_NUM_PROCS,              1, 0, 0 },\n-\t\t{ PARAM_PROC_ID,                1, 0, 0 },\n-\t\t{ 0, 0, 0, 0 },\n-\t};\n-\n \targvopt = argv;\n \n-#ifdef RTE_LIB_CMDLINE\n-#define SHORTOPTS \"i\"\n-#else\n-#define SHORTOPTS \"\"\n-#endif\n-\twhile ((opt = getopt_long(argc, argvopt, SHORTOPTS \"ah\",\n-\t\t\t\t lgopts, &opt_idx)) != EOF) {\n+\twhile ((opt = getopt_long(argc, argvopt, short_options, long_options,\n+\t\t\t&opt_idx)) != EOF) {\n \t\tswitch (opt) {\n #ifdef RTE_LIB_CMDLINE\n \t\tcase 'i':\n@@ -743,755 +960,778 @@ launch_args_parse(int argc, char** argv)\n \t\t\tprintf(\"Auto-start selected\\n\");\n \t\t\tauto_start = 1;\n \t\t\tbreak;\n-\n-\t\tcase 0: /*long options */\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"help\")) {\n-\t\t\t\tusage(argv[0]);\n-\t\t\t\texit(EXIT_SUCCESS);\n-\t\t\t}\n+\t\tcase 'h':\n+\t\t\tusage(argv[0]);\n+\t\t\texit(EXIT_SUCCESS);\n+\t\t\tbreak;\n #ifdef RTE_LIB_CMDLINE\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"interactive\")) {\n-\t\t\t\tprintf(\"Interactive-mode selected\\n\");\n-\t\t\t\tinteractive = 1;\n-\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"cmdline-file\")) {\n-\t\t\t\tprintf(\"CLI commands to be read from %s\\n\",\n-\t\t\t\t       optarg);\n-\t\t\t\tstrlcpy(cmdline_filename, optarg,\n-\t\t\t\t\tsizeof(cmdline_filename));\n-\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"auto-start\")) {\n-\t\t\t\tprintf(\"Auto-start selected\\n\");\n-\t\t\t\tauto_start = 1;\n-\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"tx-first\")) {\n-\t\t\t\tprintf(\"Ports to start sending a burst of \"\n-\t\t\t\t\t\t\"packets first\\n\");\n-\t\t\t\ttx_first = 1;\n-\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"stats-period\")) {\n-\t\t\t\tchar *end = NULL;\n-\t\t\t\tunsigned int n;\n-\n-\t\t\t\tn = strtoul(optarg, &end, 10);\n-\t\t\t\tif ((optarg[0] == '\\0') || (end == NULL) ||\n-\t\t\t\t\t\t(*end != '\\0'))\n-\t\t\t\t\trte_exit(EXIT_FAILURE, \"Invalid stats-period value\\n\");\n+\t\tcase TESTPMD_OPT_CMDLINE_FILE_NUM:\n+\t\t\tprintf(\"CLI commands to be read from %s\\n\",\n+\t\t\t\toptarg);\n+\t\t\tstrlcpy(cmdline_filename, optarg,\n+\t\t\t\tsizeof(cmdline_filename));\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_TX_FIRST_NUM:\n+\t\t\tprintf(\"Ports to start sending a burst of \"\n+\t\t\t\t\"packets first\\n\");\n+\t\t\ttx_first = 1;\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_STATS_PERIOD_NUM: {\n+\t\t\tchar *end = NULL;\n+\t\t\tunsigned int n;\n \n-\t\t\t\tstats_period = n;\n-\t\t\t\tbreak;\n-\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"display-xstats\")) {\n-\t\t\t\tchar rc;\n+\t\t\tn = strtoul(optarg, &end, 10);\n+\t\t\tif ((optarg[0] == '\\0') || (end == NULL) ||\n+\t\t\t\t\t(*end != '\\0'))\n+\t\t\t\trte_exit(EXIT_FAILURE, \"Invalid stats-period value\\n\");\n \n-\t\t\t\trc = parse_xstats_list(optarg, &xstats_display,\n-\t\t\t\t\t\t       &xstats_display_num);\n-\t\t\t\tif (rc != 0)\n-\t\t\t\t\trte_exit(EXIT_FAILURE,\n-\t\t\t\t\t\t \"Failed to parse display-xstats argument: %d\\n\",\n-\t\t\t\t\t\t rc);\n-\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name,\n-\t\t\t\t    \"eth-peers-configfile\")) {\n-\t\t\t\tif (init_peer_eth_addrs(optarg) != 0)\n-\t\t\t\t\trte_exit(EXIT_FAILURE,\n-\t\t\t\t\t\t \"Cannot open logfile\\n\");\n-\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"eth-peer\")) {\n-\t\t\t\tchar *port_end;\n-\n-\t\t\t\terrno = 0;\n-\t\t\t\tn = strtoul(optarg, &port_end, 10);\n-\t\t\t\tif (errno != 0 || port_end == optarg || *port_end++ != ',')\n-\t\t\t\t\trte_exit(EXIT_FAILURE,\n-\t\t\t\t\t\t \"Invalid eth-peer: %s\", optarg);\n-\t\t\t\tif (n >= RTE_MAX_ETHPORTS)\n-\t\t\t\t\trte_exit(EXIT_FAILURE,\n-\t\t\t\t\t\t \"eth-peer: port %d >= RTE_MAX_ETHPORTS(%d)\\n\",\n-\t\t\t\t\t\t n, RTE_MAX_ETHPORTS);\n+\t\t\tstats_period = n;\n+\t\t\tbreak;\n+\t\t}\n+\t\tcase TESTPMD_OPT_DISPLAY_XSTATS_NUM: {\n+\t\t\tchar rc;\n+\n+\t\t\trc = parse_xstats_list(optarg, &xstats_display,\n+\t\t\t\t&xstats_display_num);\n+\t\t\tif (rc != 0)\n+\t\t\t\trte_exit(EXIT_FAILURE,\n+\t\t\t\t\t\"Failed to parse display-xstats argument: %d\\n\",\n+\t\t\t\t\trc);\n+\t\t\tbreak;\n+\t\t}\n+\t\tcase TESTPMD_OPT_ETH_PEERS_CONFIGFILE_NUM:\n+\t\t\tif (init_peer_eth_addrs(optarg) != 0)\n+\t\t\t\trte_exit(EXIT_FAILURE,\n+\t\t\t\t\t\"Cannot open logfile\\n\");\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_ETH_PEER_NUM: {\n+\t\t\tchar *port_end;\n \n-\t\t\t\tif (rte_ether_unformat_addr(port_end,\n-\t\t\t\t\t\t&peer_eth_addrs[n]) < 0)\n-\t\t\t\t\trte_exit(EXIT_FAILURE,\n-\t\t\t\t\t\t \"Invalid ethernet address: %s\\n\",\n-\t\t\t\t\t\t port_end);\n-\t\t\t\tnb_peer_eth_addrs++;\n-\t\t\t}\n+\t\t\terrno = 0;\n+\t\t\tn = strtoul(optarg, &port_end, 10);\n+\t\t\tif (errno != 0 || port_end == optarg || *port_end++ != ',')\n+\t\t\t\trte_exit(EXIT_FAILURE,\n+\t\t\t\t\t\"Invalid eth-peer: %s\", optarg);\n+\t\t\tif (n >= RTE_MAX_ETHPORTS)\n+\t\t\t\trte_exit(EXIT_FAILURE,\n+\t\t\t\t\t\"eth-peer: port %d >= RTE_MAX_ETHPORTS(%d)\\n\",\n+\t\t\t\t\tn, RTE_MAX_ETHPORTS);\n+\n+\t\t\tif (rte_ether_unformat_addr(port_end,\n+\t\t\t\t\t&peer_eth_addrs[n]) < 0)\n+\t\t\t\trte_exit(EXIT_FAILURE,\n+\t\t\t\t\t\"Invalid ethernet address: %s\\n\",\n+\t\t\t\t\tport_end);\n+\t\t\tnb_peer_eth_addrs++;\n+\t\t\tbreak;\n+\t\t}\n #endif\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"tx-ip\")) {\n-\t\t\t\tstruct in_addr in;\n-\t\t\t\tchar *end;\n-\n-\t\t\t\tend = strchr(optarg, ',');\n-\t\t\t\tif (end == optarg || !end)\n-\t\t\t\t\trte_exit(EXIT_FAILURE,\n-\t\t\t\t\t\t \"Invalid tx-ip: %s\", optarg);\n-\n-\t\t\t\t*end++ = 0;\n-\t\t\t\tif (inet_pton(AF_INET, optarg, &in) == 0)\n-\t\t\t\t\trte_exit(EXIT_FAILURE,\n-\t\t\t\t\t\t \"Invalid source IP address: %s\\n\",\n-\t\t\t\t\t\t optarg);\n-\t\t\t\ttx_ip_src_addr = rte_be_to_cpu_32(in.s_addr);\n-\n-\t\t\t\tif (inet_pton(AF_INET, end, &in) == 0)\n-\t\t\t\t\trte_exit(EXIT_FAILURE,\n-\t\t\t\t\t\t \"Invalid destination IP address: %s\\n\",\n-\t\t\t\t\t\t optarg);\n-\t\t\t\ttx_ip_dst_addr = rte_be_to_cpu_32(in.s_addr);\n-\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"tx-udp\")) {\n-\t\t\t\tchar *end = NULL;\n-\n-\t\t\t\terrno = 0;\n-\t\t\t\tn = strtoul(optarg, &end, 10);\n-\t\t\t\tif (errno != 0 || end == optarg ||\n-\t\t\t\t    n > UINT16_MAX ||\n-\t\t\t\t    !(*end == '\\0' || *end == ','))\n-\t\t\t\t\trte_exit(EXIT_FAILURE,\n-\t\t\t\t\t\t \"Invalid UDP port: %s\\n\",\n-\t\t\t\t\t\t optarg);\n-\t\t\t\ttx_udp_src_port = n;\n-\t\t\t\tif (*end == ',') {\n-\t\t\t\t\tchar *dst = end + 1;\n-\n-\t\t\t\t\tn = strtoul(dst, &end, 10);\n-\t\t\t\t\tif (errno != 0 || end == dst ||\n-\t\t\t\t\t    n > UINT16_MAX || *end)\n-\t\t\t\t\t\trte_exit(EXIT_FAILURE,\n-\t\t\t\t\t\t\t \"Invalid destination UDP port: %s\\n\",\n-\t\t\t\t\t\t\t dst);\n-\t\t\t\t\ttx_udp_dst_port = n;\n-\t\t\t\t} else {\n-\t\t\t\t\ttx_udp_dst_port = n;\n-\t\t\t\t}\n+\t\tcase TESTPMD_OPT_TX_IP_NUM: {\n+\t\t\tstruct in_addr in;\n+\t\t\tchar *end;\n+\n+\t\t\tend = strchr(optarg, ',');\n+\t\t\tif (end == optarg || !end)\n+\t\t\t\trte_exit(EXIT_FAILURE,\n+\t\t\t\t\t\"Invalid tx-ip: %s\", optarg);\n+\n+\t\t\t*end++ = 0;\n+\t\t\tif (inet_pton(AF_INET, optarg, &in) == 0)\n+\t\t\t\trte_exit(EXIT_FAILURE,\n+\t\t\t\t\t\"Invalid source IP address: %s\\n\",\n+\t\t\t\t\toptarg);\n+\t\t\ttx_ip_src_addr = rte_be_to_cpu_32(in.s_addr);\n+\n+\t\t\tif (inet_pton(AF_INET, end, &in) == 0)\n+\t\t\t\trte_exit(EXIT_FAILURE,\n+\t\t\t\t\t\"Invalid destination IP address: %s\\n\",\n+\t\t\t\t\toptarg);\n+\t\t\ttx_ip_dst_addr = rte_be_to_cpu_32(in.s_addr);\n+\t\t\tbreak;\n+\t\t}\n+\t\tcase TESTPMD_OPT_TX_UDP_NUM: {\n+\t\t\tchar *end = NULL;\n \n-\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"nb-ports\")) {\n-\t\t\t\tn = atoi(optarg);\n-\t\t\t\tif (n > 0 && n <= nb_ports)\n-\t\t\t\t\tnb_fwd_ports = n;\n-\t\t\t\telse\n-\t\t\t\t\trte_exit(EXIT_FAILURE,\n-\t\t\t\t\t\t \"Invalid port %d\\n\", n);\n-\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"nb-cores\")) {\n-\t\t\t\tn = atoi(optarg);\n-\t\t\t\tif (n > 0 && n <= nb_lcores)\n-\t\t\t\t\tnb_fwd_lcores = (uint8_t) n;\n-\t\t\t\telse\n+\t\t\terrno = 0;\n+\t\t\tn = strtoul(optarg, &end, 10);\n+\t\t\tif (errno != 0 || end == optarg ||\n+\t\t\t\t\tn > UINT16_MAX ||\n+\t\t\t\t\t!(*end == '\\0' || *end == ','))\n+\t\t\t\trte_exit(EXIT_FAILURE,\n+\t\t\t\t\t\"Invalid UDP port: %s\\n\",\n+\t\t\t\t\toptarg);\n+\t\t\ttx_udp_src_port = n;\n+\t\t\tif (*end == ',') {\n+\t\t\t\tchar *dst = end + 1;\n+\n+\t\t\t\tn = strtoul(dst, &end, 10);\n+\t\t\t\tif (errno != 0 || end == dst ||\n+\t\t\t\t\t\tn > UINT16_MAX || *end)\n \t\t\t\t\trte_exit(EXIT_FAILURE,\n-\t\t\t\t\t\t \"nb-cores should be > 0 and <= %d\\n\",\n-\t\t\t\t\t\t nb_lcores);\n+\t\t\t\t\t\t\"Invalid destination UDP port: %s\\n\",\n+\t\t\t\t\t\tdst);\n+\t\t\t\ttx_udp_dst_port = n;\n+\t\t\t} else {\n+\t\t\t\ttx_udp_dst_port = n;\n \t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"coremask\"))\n-\t\t\t\tparse_fwd_coremask(optarg);\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"portmask\"))\n-\t\t\t\tparse_fwd_portmask(optarg);\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"portlist\"))\n-\t\t\t\tparse_fwd_portlist(optarg);\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"no-numa\"))\n-\t\t\t\tnuma_support = 0;\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"numa\"))\n-\t\t\t\tnuma_support = 1;\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"mp-anon\")) {\n+\t\t\tbreak;\n+\t\t}\n+\t\tcase TESTPMD_OPT_NB_PORTS_NUM:\n+\t\t\tn = atoi(optarg);\n+\t\t\tif (n > 0 && n <= nb_ports)\n+\t\t\t\tnb_fwd_ports = n;\n+\t\t\telse\n+\t\t\t\trte_exit(EXIT_FAILURE,\n+\t\t\t\t\t\"Invalid port %d\\n\", n);\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_NB_CORES_NUM:\n+\t\t\tn = atoi(optarg);\n+\t\t\tif (n > 0 && n <= nb_lcores)\n+\t\t\t\tnb_fwd_lcores = (uint8_t) n;\n+\t\t\telse\n+\t\t\t\trte_exit(EXIT_FAILURE,\n+\t\t\t\t\t\"nb-cores should be > 0 and <= %d\\n\",\n+\t\t\t\t\tnb_lcores);\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_COREMASK_NUM:\n+\t\t\tparse_fwd_coremask(optarg);\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_PORTMASK_NUM:\n+\t\t\tparse_fwd_portmask(optarg);\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_PORTLIST_NUM:\n+\t\t\tparse_fwd_portlist(optarg);\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_NO_NUMA_NUM:\n+\t\t\tnuma_support = 0;\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_NUMA_NUM:\n+\t\t\tnuma_support = 1;\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_MP_ANON_NUM:\n+\t\t\tmp_alloc_type = MP_ALLOC_ANON;\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_MP_ALLOC_NUM:\n+\t\t\tif (!strcmp(optarg, \"native\"))\n+\t\t\t\tmp_alloc_type = MP_ALLOC_NATIVE;\n+\t\t\telse if (!strcmp(optarg, \"anon\"))\n \t\t\t\tmp_alloc_type = MP_ALLOC_ANON;\n+\t\t\telse if (!strcmp(optarg, \"xmem\"))\n+\t\t\t\tmp_alloc_type = MP_ALLOC_XMEM;\n+\t\t\telse if (!strcmp(optarg, \"xmemhuge\"))\n+\t\t\t\tmp_alloc_type = MP_ALLOC_XMEM_HUGE;\n+\t\t\telse if (!strcmp(optarg, \"xbuf\"))\n+\t\t\t\tmp_alloc_type = MP_ALLOC_XBUF;\n+\t\t\telse\n+\t\t\t\trte_exit(EXIT_FAILURE,\n+\t\t\t\t\t\"mp-alloc %s invalid - must be: \"\n+\t\t\t\t\t\"native, anon, xmem or xmemhuge\\n\",\n+\t\t\t\t\toptarg);\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_PORT_NUMA_CONFIG_NUM:\n+\t\t\tif (parse_portnuma_config(optarg))\n+\t\t\t\trte_exit(EXIT_FAILURE,\n+\t\t\t\t\t\"invalid port-numa configuration\\n\");\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_RING_NUMA_CONFIG_NUM:\n+\t\t\tif (parse_ringnuma_config(optarg))\n+\t\t\t\trte_exit(EXIT_FAILURE,\n+\t\t\t\t\t\"invalid ring-numa configuration\\n\");\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_SOCKET_NUM_NUM:\n+\t\t\tn = atoi(optarg);\n+\t\t\tif (!new_socket_id((uint8_t)n)) {\n+\t\t\t\tsocket_num = (uint8_t)n;\n+\t\t\t} else {\n+\t\t\t\tprint_invalid_socket_id_error();\n+\t\t\t\trte_exit(EXIT_FAILURE,\n+\t\t\t\t\t\"Invalid socket id\");\n \t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"mp-alloc\")) {\n-\t\t\t\tif (!strcmp(optarg, \"native\"))\n-\t\t\t\t\tmp_alloc_type = MP_ALLOC_NATIVE;\n-\t\t\t\telse if (!strcmp(optarg, \"anon\"))\n-\t\t\t\t\tmp_alloc_type = MP_ALLOC_ANON;\n-\t\t\t\telse if (!strcmp(optarg, \"xmem\"))\n-\t\t\t\t\tmp_alloc_type = MP_ALLOC_XMEM;\n-\t\t\t\telse if (!strcmp(optarg, \"xmemhuge\"))\n-\t\t\t\t\tmp_alloc_type = MP_ALLOC_XMEM_HUGE;\n-\t\t\t\telse if (!strcmp(optarg, \"xbuf\"))\n-\t\t\t\t\tmp_alloc_type = MP_ALLOC_XBUF;\n-\t\t\t\telse\n-\t\t\t\t\trte_exit(EXIT_FAILURE,\n-\t\t\t\t\t\t\"mp-alloc %s invalid - must be: \"\n-\t\t\t\t\t\t\"native, anon, xmem or xmemhuge\\n\",\n-\t\t\t\t\t\t optarg);\n-\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"port-numa-config\")) {\n-\t\t\t\tif (parse_portnuma_config(optarg))\n-\t\t\t\t\trte_exit(EXIT_FAILURE,\n-\t\t\t\t\t   \"invalid port-numa configuration\\n\");\n-\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"ring-numa-config\"))\n-\t\t\t\tif (parse_ringnuma_config(optarg))\n-\t\t\t\t\trte_exit(EXIT_FAILURE,\n-\t\t\t\t\t   \"invalid ring-numa configuration\\n\");\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"socket-num\")) {\n-\t\t\t\tn = atoi(optarg);\n-\t\t\t\tif (!new_socket_id((uint8_t)n)) {\n-\t\t\t\t\tsocket_num = (uint8_t)n;\n-\t\t\t\t} else {\n-\t\t\t\t\tprint_invalid_socket_id_error();\n-\t\t\t\t\trte_exit(EXIT_FAILURE,\n-\t\t\t\t\t\t\"Invalid socket id\");\n-\t\t\t\t}\n-\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"mbuf-size\")) {\n-\t\t\t\tunsigned int mb_sz[MAX_SEGS_BUFFER_SPLIT];\n-\t\t\t\tunsigned int nb_segs, i;\n-\n-\t\t\t\tnb_segs = parse_item_list(optarg, \"mbuf-size\",\n-\t\t\t\t\tMAX_SEGS_BUFFER_SPLIT, mb_sz, 0);\n-\t\t\t\tif (nb_segs <= 0)\n-\t\t\t\t\trte_exit(EXIT_FAILURE,\n-\t\t\t\t\t\t \"bad mbuf-size\\n\");\n-\t\t\t\tfor (i = 0; i < nb_segs; i++) {\n-\t\t\t\t\tif (mb_sz[i] <= 0 || mb_sz[i] > 0xFFFF)\n-\t\t\t\t\t\trte_exit(EXIT_FAILURE,\n-\t\t\t\t\t\t\t \"mbuf-size should be \"\n-\t\t\t\t\t\t\t \"> 0 and < 65536\\n\");\n-\t\t\t\t\tmbuf_data_size[i] = (uint16_t) mb_sz[i];\n-\t\t\t\t}\n-\t\t\t\tmbuf_data_size_n = nb_segs;\n-\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"total-num-mbufs\")) {\n-\t\t\t\tn = atoi(optarg);\n-\t\t\t\tif (n > MIN_TOTAL_NUM_MBUFS)\n-\t\t\t\t\tparam_total_num_mbufs = (unsigned)n;\n-\t\t\t\telse\n-\t\t\t\t\trte_exit(EXIT_FAILURE,\n-\t\t\t\t\t\t \"total-num-mbufs should be > %d\\n\",\n-\t\t\t\t\t\t MIN_TOTAL_NUM_MBUFS);\n-\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"max-pkt-len\")) {\n-\t\t\t\tn = atoi(optarg);\n-\t\t\t\tif (n >= RTE_ETHER_MIN_LEN)\n-\t\t\t\t\tmax_rx_pkt_len = n;\n-\t\t\t\telse\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_MBUF_SIZE_NUM: {\n+\t\t\tunsigned int mb_sz[MAX_SEGS_BUFFER_SPLIT];\n+\t\t\tunsigned int nb_segs, i;\n+\n+\t\t\tnb_segs = parse_item_list(optarg, \"mbuf-size\",\n+\t\t\t\tMAX_SEGS_BUFFER_SPLIT, mb_sz, 0);\n+\t\t\tif (nb_segs <= 0)\n+\t\t\t\trte_exit(EXIT_FAILURE,\n+\t\t\t\t\t\"bad mbuf-size\\n\");\n+\t\t\tfor (i = 0; i < nb_segs; i++) {\n+\t\t\t\tif (mb_sz[i] <= 0 || mb_sz[i] > 0xFFFF)\n \t\t\t\t\trte_exit(EXIT_FAILURE,\n-\t\t\t\t\t\t \"Invalid max-pkt-len=%d - should be > %d\\n\",\n-\t\t\t\t\t\t n, RTE_ETHER_MIN_LEN);\n-\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"max-lro-pkt-size\")) {\n-\t\t\t\tn = atoi(optarg);\n-\t\t\t\trx_mode.max_lro_pkt_size = (uint32_t) n;\n+\t\t\t\t\t\t\"mbuf-size should be \"\n+\t\t\t\t\t\t\"> 0 and < 65536\\n\");\n+\t\t\t\tmbuf_data_size[i] = (uint16_t) mb_sz[i];\n \t\t\t}\n+\t\t\tmbuf_data_size_n = nb_segs;\n+\t\t\tbreak;\n+\t\t}\n+\t\tcase TESTPMD_OPT_TOTAL_NUM_MBUFS_NUM:\n+\t\t\tn = atoi(optarg);\n+\t\t\tif (n > MIN_TOTAL_NUM_MBUFS)\n+\t\t\t\tparam_total_num_mbufs = (unsigned int)n;\n+\t\t\telse\n+\t\t\t\trte_exit(EXIT_FAILURE,\n+\t\t\t\t\t\"total-num-mbufs should be > %d\\n\",\n+\t\t\t\t\tMIN_TOTAL_NUM_MBUFS);\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_MAX_PKT_LEN_NUM:\n+\t\t\tn = atoi(optarg);\n+\t\t\tif (n >= RTE_ETHER_MIN_LEN)\n+\t\t\t\tmax_rx_pkt_len = n;\n+\t\t\telse\n+\t\t\t\trte_exit(EXIT_FAILURE,\n+\t\t\t\t\t\"Invalid max-pkt-len=%d - should be > %d\\n\",\n+\t\t\t\t\tn, RTE_ETHER_MIN_LEN);\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_MAX_LRO_PKT_SIZE_NUM:\n+\t\t\tn = atoi(optarg);\n+\t\t\trx_mode.max_lro_pkt_size = (uint32_t) n;\n+\t\t\tbreak;\n #ifdef RTE_LIB_LATENCYSTATS\n-\t\t\tif (!strcmp(lgopts[opt_idx].name,\n-\t\t\t\t    \"latencystats\")) {\n-\t\t\t\tn = atoi(optarg);\n-\t\t\t\tif (n >= 0) {\n-\t\t\t\t\tlatencystats_lcore_id = (lcoreid_t) n;\n-\t\t\t\t\tlatencystats_enabled = 1;\n-\t\t\t\t} else\n-\t\t\t\t\trte_exit(EXIT_FAILURE,\n-\t\t\t\t\t\t \"invalid lcore id %d for latencystats\"\n-\t\t\t\t\t\t \" must be >= 0\\n\", n);\n-\t\t\t}\n+\t\tcase TESTPMD_OPT_LATENCYSTATS_NUM:\n+\t\t\tn = atoi(optarg);\n+\t\t\tif (n >= 0) {\n+\t\t\t\tlatencystats_lcore_id = (lcoreid_t) n;\n+\t\t\t\tlatencystats_enabled = 1;\n+\t\t\t} else\n+\t\t\t\trte_exit(EXIT_FAILURE,\n+\t\t\t\t\t\"invalid lcore id %d for latencystats\"\n+\t\t\t\t\t\" must be >= 0\\n\", n);\n+\n+\t\t\tbreak;\n #endif\n #ifdef RTE_LIB_BITRATESTATS\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"bitrate-stats\")) {\n-\t\t\t\tn = atoi(optarg);\n-\t\t\t\tif (n >= 0) {\n-\t\t\t\t\tbitrate_lcore_id = (lcoreid_t) n;\n-\t\t\t\t\tbitrate_enabled = 1;\n-\t\t\t\t} else\n-\t\t\t\t\trte_exit(EXIT_FAILURE,\n-\t\t\t\t\t\t \"invalid lcore id %d for bitrate stats\"\n-\t\t\t\t\t\t \" must be >= 0\\n\", n);\n-\t\t\t}\n+\t\tcase TESTPMD_OPT_BITRATE_STATS_NUM:\n+\t\t\tn = atoi(optarg);\n+\t\t\tif (n >= 0) {\n+\t\t\t\tbitrate_lcore_id = (lcoreid_t) n;\n+\t\t\t\tbitrate_enabled = 1;\n+\t\t\t} else\n+\t\t\t\trte_exit(EXIT_FAILURE,\n+\t\t\t\t\t\"invalid lcore id %d for bitrate stats\"\n+\t\t\t\t\t\" must be >= 0\\n\", n);\n+\t\t\tbreak;\n #endif\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"disable-crc-strip\"))\n-\t\t\t\trx_offloads |= RTE_ETH_RX_OFFLOAD_KEEP_CRC;\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"enable-lro\"))\n-\t\t\t\trx_offloads |= RTE_ETH_RX_OFFLOAD_TCP_LRO;\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"enable-scatter\"))\n-\t\t\t\trx_offloads |= RTE_ETH_RX_OFFLOAD_SCATTER;\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"enable-rx-cksum\"))\n-\t\t\t\trx_offloads |= RTE_ETH_RX_OFFLOAD_CHECKSUM;\n-\t\t\tif (!strcmp(lgopts[opt_idx].name,\n-\t\t\t\t\t\"enable-rx-timestamp\"))\n-\t\t\t\trx_offloads |= RTE_ETH_RX_OFFLOAD_TIMESTAMP;\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"enable-hw-vlan\"))\n-\t\t\t\trx_offloads |= RTE_ETH_RX_OFFLOAD_VLAN;\n-\n-\t\t\tif (!strcmp(lgopts[opt_idx].name,\n-\t\t\t\t\t\"enable-hw-vlan-filter\"))\n-\t\t\t\trx_offloads |= RTE_ETH_RX_OFFLOAD_VLAN_FILTER;\n-\n-\t\t\tif (!strcmp(lgopts[opt_idx].name,\n-\t\t\t\t\t\"enable-hw-vlan-strip\"))\n-\t\t\t\trx_offloads |= RTE_ETH_RX_OFFLOAD_VLAN_STRIP;\n-\n-\t\t\tif (!strcmp(lgopts[opt_idx].name,\n-\t\t\t\t\t\"enable-hw-vlan-extend\"))\n-\t\t\t\trx_offloads |= RTE_ETH_RX_OFFLOAD_VLAN_EXTEND;\n-\n-\t\t\tif (!strcmp(lgopts[opt_idx].name,\n-\t\t\t\t\t\"enable-hw-qinq-strip\"))\n-\t\t\t\trx_offloads |= RTE_ETH_RX_OFFLOAD_QINQ_STRIP;\n-\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"enable-drop-en\"))\n-\t\t\t\trx_drop_en = 1;\n-\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"disable-rss\"))\n-\t\t\t\trss_hf = 0;\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"port-topology\")) {\n-\t\t\t\tif (!strcmp(optarg, \"paired\"))\n-\t\t\t\t\tport_topology = PORT_TOPOLOGY_PAIRED;\n-\t\t\t\telse if (!strcmp(optarg, \"chained\"))\n-\t\t\t\t\tport_topology = PORT_TOPOLOGY_CHAINED;\n-\t\t\t\telse if (!strcmp(optarg, \"loop\"))\n-\t\t\t\t\tport_topology = PORT_TOPOLOGY_LOOP;\n-\t\t\t\telse\n-\t\t\t\t\trte_exit(EXIT_FAILURE, \"port-topology %s invalid -\"\n-\t\t\t\t\t\t \" must be: paired, chained or loop\\n\",\n-\t\t\t\t\t\t optarg);\n-\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"forward-mode\"))\n-\t\t\t\tset_pkt_forwarding_mode(optarg);\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"rss-ip\"))\n-\t\t\t\trss_hf = RTE_ETH_RSS_IP;\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"rss-udp\"))\n-\t\t\t\trss_hf = RTE_ETH_RSS_UDP;\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"rss-level-inner\"))\n-\t\t\t\trss_hf |= RTE_ETH_RSS_LEVEL_INNERMOST;\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"rss-level-outer\"))\n-\t\t\t\trss_hf |= RTE_ETH_RSS_LEVEL_OUTERMOST;\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"rxq\")) {\n-\t\t\t\tn = atoi(optarg);\n-\t\t\t\tif (n >= 0 && check_nb_rxq((queueid_t)n) == 0)\n-\t\t\t\t\tnb_rxq = (queueid_t) n;\n-\t\t\t\telse\n-\t\t\t\t\trte_exit(EXIT_FAILURE, \"rxq %d invalid - must be\"\n-\t\t\t\t\t\t  \" >= 0 && <= %u\\n\", n,\n-\t\t\t\t\t\t  get_allowed_max_nb_rxq(&pid));\n-\t\t\t\tif (!nb_rxq && !nb_txq)\n-\t\t\t\t\trte_exit(EXIT_FAILURE, \"Either rx or tx queues should be non-zero\\n\");\n-\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"txq\")) {\n-\t\t\t\tn = atoi(optarg);\n-\t\t\t\tif (n >= 0 && check_nb_txq((queueid_t)n) == 0)\n-\t\t\t\t\tnb_txq = (queueid_t) n;\n-\t\t\t\telse\n-\t\t\t\t\trte_exit(EXIT_FAILURE, \"txq %d invalid - must be\"\n-\t\t\t\t\t\t  \" >= 0 && <= %u\\n\", n,\n-\t\t\t\t\t\t  get_allowed_max_nb_txq(&pid));\n-\t\t\t\tif (!nb_rxq && !nb_txq)\n-\t\t\t\t\trte_exit(EXIT_FAILURE, \"Either rx or tx queues should be non-zero\\n\");\n-\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"hairpinq\")) {\n-\t\t\t\tn = atoi(optarg);\n-\t\t\t\tif (n >= 0 &&\n-\t\t\t\t    check_nb_hairpinq((queueid_t)n) == 0)\n-\t\t\t\t\tnb_hairpinq = (queueid_t) n;\n-\t\t\t\telse\n-\t\t\t\t\trte_exit(EXIT_FAILURE, \"txq %d invalid - must be\"\n-\t\t\t\t\t\t  \" >= 0 && <= %u\\n\", n,\n-\t\t\t\t\t\t  get_allowed_max_nb_hairpinq\n-\t\t\t\t\t\t  (&pid));\n-\t\t\t\tif ((n + nb_txq) < 0 ||\n-\t\t\t\t    check_nb_txq((queueid_t)(n + nb_txq)) != 0)\n-\t\t\t\t\trte_exit(EXIT_FAILURE, \"txq + hairpinq \"\n-\t\t\t\t\t\t \"%d invalid - must be\"\n-\t\t\t\t\t\t  \" >= 0 && <= %u\\n\",\n-\t\t\t\t\t\t  n + nb_txq,\n-\t\t\t\t\t\t  get_allowed_max_nb_txq(&pid));\n-\t\t\t\tif ((n + nb_rxq) < 0 ||\n-\t\t\t\t    check_nb_rxq((queueid_t)(n + nb_rxq)) != 0)\n-\t\t\t\t\trte_exit(EXIT_FAILURE, \"rxq + hairpinq \"\n-\t\t\t\t\t\t \"%d invalid - must be\"\n-\t\t\t\t\t\t  \" >= 0 && <= %u\\n\",\n-\t\t\t\t\t\t  n + nb_rxq,\n-\t\t\t\t\t\t  get_allowed_max_nb_rxq(&pid));\n-\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"hairpin-mode\")) {\n-\t\t\t\tchar *end = NULL;\n-\t\t\t\tunsigned int n;\n-\n-\t\t\t\terrno = 0;\n-\t\t\t\tn = strtoul(optarg, &end, 0);\n-\t\t\t\tif (errno != 0 || end == optarg)\n-\t\t\t\t\trte_exit(EXIT_FAILURE, \"hairpin mode invalid\\n\");\n+\t\tcase TESTPMD_OPT_DISABLE_CRC_STRIP_NUM:\n+\t\t\trx_offloads |= RTE_ETH_RX_OFFLOAD_KEEP_CRC;\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_ENABLE_LRO_NUM:\n+\t\t\trx_offloads |= RTE_ETH_RX_OFFLOAD_TCP_LRO;\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_ENABLE_SCATTER_NUM:\n+\t\t\trx_offloads |= RTE_ETH_RX_OFFLOAD_SCATTER;\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_ENABLE_RX_CKSUM_NUM:\n+\t\t\trx_offloads |= RTE_ETH_RX_OFFLOAD_CHECKSUM;\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_ENABLE_RX_TIMESTAMP_NUM:\n+\t\t\trx_offloads |= RTE_ETH_RX_OFFLOAD_TIMESTAMP;\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_ENABLE_HW_VLAN_NUM:\n+\t\t\trx_offloads |= RTE_ETH_RX_OFFLOAD_VLAN;\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_ENABLE_HW_VLAN_FILTER_NUM:\n+\t\t\trx_offloads |= RTE_ETH_RX_OFFLOAD_VLAN_FILTER;\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_ENABLE_HW_VLAN_STRIP_NUM:\n+\t\t\trx_offloads |= RTE_ETH_RX_OFFLOAD_VLAN_STRIP;\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_ENABLE_HW_VLAN_EXTEND_NUM:\n+\t\t\trx_offloads |= RTE_ETH_RX_OFFLOAD_VLAN_EXTEND;\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_ENABLE_HW_QINQ_STRIP_NUM:\n+\t\t\trx_offloads |= RTE_ETH_RX_OFFLOAD_QINQ_STRIP;\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_ENABLE_DROP_EN_NUM:\n+\t\t\trx_drop_en = 1;\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_DISABLE_RSS_NUM:\n+\t\t\trss_hf = 0;\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_PORT_TOPOLOGY_NUM:\n+\t\t\tif (!strcmp(optarg, \"paired\"))\n+\t\t\t\tport_topology = PORT_TOPOLOGY_PAIRED;\n+\t\t\telse if (!strcmp(optarg, \"chained\"))\n+\t\t\t\tport_topology = PORT_TOPOLOGY_CHAINED;\n+\t\t\telse if (!strcmp(optarg, \"loop\"))\n+\t\t\t\tport_topology = PORT_TOPOLOGY_LOOP;\n+\t\t\telse\n+\t\t\t\trte_exit(EXIT_FAILURE, \"port-topology %s invalid -\"\n+\t\t\t\t\t\" must be: paired, chained or loop\\n\",\n+\t\t\t\t\toptarg);\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_FORWARD_MODE_NUM:\n+\t\t\tset_pkt_forwarding_mode(optarg);\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_RSS_IP_NUM:\n+\t\t\trss_hf = RTE_ETH_RSS_IP;\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_RSS_UDP_NUM:\n+\t\t\trss_hf = RTE_ETH_RSS_UDP;\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_RSS_LEVEL_INNER_NUM:\n+\t\t\trss_hf |= RTE_ETH_RSS_LEVEL_INNERMOST;\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_RSS_LEVEL_OUTER_NUM:\n+\t\t\trss_hf |= RTE_ETH_RSS_LEVEL_OUTERMOST;\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_RXQ_NUM:\n+\t\t\tn = atoi(optarg);\n+\t\t\tif (n >= 0 && check_nb_rxq((queueid_t)n) == 0)\n+\t\t\t\tnb_rxq = (queueid_t) n;\n+\t\t\telse\n+\t\t\t\trte_exit(EXIT_FAILURE, \"rxq %d invalid - must be\"\n+\t\t\t\t\t\" >= 0 && <= %u\\n\", n,\n+\t\t\t\t\tget_allowed_max_nb_rxq(&pid));\n+\t\t\tif (!nb_rxq && !nb_txq)\n+\t\t\t\trte_exit(EXIT_FAILURE, \"Either rx or tx queues should be non-zero\\n\");\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_TXQ_NUM:\n+\t\t\tn = atoi(optarg);\n+\t\t\tif (n >= 0 && check_nb_txq((queueid_t)n) == 0)\n+\t\t\t\tnb_txq = (queueid_t) n;\n+\t\t\telse\n+\t\t\t\trte_exit(EXIT_FAILURE, \"txq %d invalid - must be\"\n+\t\t\t\t\t\" >= 0 && <= %u\\n\", n,\n+\t\t\t\t\tget_allowed_max_nb_txq(&pid));\n+\t\t\tif (!nb_rxq && !nb_txq)\n+\t\t\t\trte_exit(EXIT_FAILURE, \"Either rx or tx queues should be non-zero\\n\");\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_HAIRPINQ_NUM:\n+\t\t\tn = atoi(optarg);\n+\t\t\tif (n >= 0 &&\n+\t\t\t\t\tcheck_nb_hairpinq((queueid_t)n) == 0)\n+\t\t\t\tnb_hairpinq = (queueid_t) n;\n+\t\t\telse\n+\t\t\t\trte_exit(EXIT_FAILURE, \"txq %d invalid - must be\"\n+\t\t\t\t\t\" >= 0 && <= %u\\n\", n,\n+\t\t\t\t\tget_allowed_max_nb_hairpinq\n+\t\t\t\t\t(&pid));\n+\t\t\tif ((n + nb_txq) < 0 ||\n+\t\t\t\t\tcheck_nb_txq((queueid_t)(n + nb_txq)) != 0)\n+\t\t\t\trte_exit(EXIT_FAILURE, \"txq + hairpinq \"\n+\t\t\t\t\t\"%d invalid - must be\"\n+\t\t\t\t\t\" >= 0 && <= %u\\n\",\n+\t\t\t\t\tn + nb_txq,\n+\t\t\t\t\tget_allowed_max_nb_txq(&pid));\n+\t\t\tif ((n + nb_rxq) < 0 ||\n+\t\t\t\t\tcheck_nb_rxq((queueid_t)(n + nb_rxq)) != 0)\n+\t\t\t\trte_exit(EXIT_FAILURE, \"rxq + hairpinq \"\n+\t\t\t\t\t\"%d invalid - must be\"\n+\t\t\t\t\t\" >= 0 && <= %u\\n\",\n+\t\t\t\t\tn + nb_rxq,\n+\t\t\t\t\tget_allowed_max_nb_rxq(&pid));\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_HAIRPIN_MODE_NUM: {\n+\t\t\tchar *end = NULL;\n+\t\t\tunsigned int n;\n+\n+\t\t\terrno = 0;\n+\t\t\tn = strtoul(optarg, &end, 0);\n+\t\t\tif (errno != 0 || end == optarg)\n+\t\t\t\trte_exit(EXIT_FAILURE, \"hairpin mode invalid\\n\");\n+\t\t\telse\n+\t\t\t\thairpin_mode = (uint32_t)n;\n+\t\t\tbreak;\n+\t\t}\n+\t\tcase TESTPMD_OPT_BURST_NUM:\n+\t\t\tn = atoi(optarg);\n+\t\t\tif (n == 0) {\n+\t\t\t\t/* A burst size of zero means that the\n+\t\t\t\t * PMD should be queried for\n+\t\t\t\t * recommended Rx burst size. Since\n+\t\t\t\t * testpmd uses a single size for all\n+\t\t\t\t * ports, port 0 is queried for the\n+\t\t\t\t * value, on the assumption that all\n+\t\t\t\t * ports are of the same NIC model.\n+\t\t\t\t */\n+\t\t\t\tret = eth_dev_info_get_print_err(\n+\t\t\t\t\t0,\n+\t\t\t\t\t&dev_info);\n+\t\t\t\tif (ret != 0)\n+\t\t\t\t\trec_nb_pkts = 0;\n \t\t\t\telse\n-\t\t\t\t\thairpin_mode = (uint32_t)n;\n-\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"burst\")) {\n-\t\t\t\tn = atoi(optarg);\n-\t\t\t\tif (n == 0) {\n-\t\t\t\t\t/* A burst size of zero means that the\n-\t\t\t\t\t * PMD should be queried for\n-\t\t\t\t\t * recommended Rx burst size. Since\n-\t\t\t\t\t * testpmd uses a single size for all\n-\t\t\t\t\t * ports, port 0 is queried for the\n-\t\t\t\t\t * value, on the assumption that all\n-\t\t\t\t\t * ports are of the same NIC model.\n-\t\t\t\t\t */\n-\t\t\t\t\tret = eth_dev_info_get_print_err(\n-\t\t\t\t\t\t\t\t0,\n-\t\t\t\t\t\t\t\t&dev_info);\n-\t\t\t\t\tif (ret != 0)\n-\t\t\t\t\t\trec_nb_pkts = 0;\n-\t\t\t\t\telse\n-\t\t\t\t\t\trec_nb_pkts = dev_info\n+\t\t\t\t\trec_nb_pkts = dev_info\n \t\t\t\t\t\t.default_rxportconf.burst_size;\n \n-\t\t\t\t\tif (rec_nb_pkts == 0)\n-\t\t\t\t\t\trte_exit(EXIT_FAILURE,\n-\t\t\t\t\t\t\t\"PMD does not recommend a burst size. \"\n-\t\t\t\t\t\t\t\"Provided value must be between \"\n-\t\t\t\t\t\t\t\"1 and %d\\n\", MAX_PKT_BURST);\n-\t\t\t\t\telse if (rec_nb_pkts > MAX_PKT_BURST)\n-\t\t\t\t\t\trte_exit(EXIT_FAILURE,\n-\t\t\t\t\t\t\t\"PMD recommended burst size of %d\"\n-\t\t\t\t\t\t\t\" exceeds maximum value of %d\\n\",\n-\t\t\t\t\t\t\trec_nb_pkts, MAX_PKT_BURST);\n-\t\t\t\t\tprintf(\"Using PMD-provided burst value of %d\\n\",\n-\t\t\t\t\t\trec_nb_pkts);\n-\t\t\t\t\tnb_pkt_per_burst = rec_nb_pkts;\n-\t\t\t\t} else if (n > MAX_PKT_BURST)\n-\t\t\t\t\trte_exit(EXIT_FAILURE,\n-\t\t\t\t\t\t\"burst must be between1 and %d\\n\",\n-\t\t\t\t\t\tMAX_PKT_BURST);\n-\t\t\t\telse\n-\t\t\t\t\tnb_pkt_per_burst = (uint16_t) n;\n-\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"flowgen-clones\")) {\n-\t\t\t\tn = atoi(optarg);\n-\t\t\t\tif (n >= 0)\n-\t\t\t\t\tnb_pkt_flowgen_clones = (uint16_t) n;\n-\t\t\t\telse\n+\t\t\t\tif (rec_nb_pkts == 0)\n \t\t\t\t\trte_exit(EXIT_FAILURE,\n-\t\t\t\t\t\t \"clones must be >= 0 and <= current burst\\n\");\n-\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"flowgen-flows\")) {\n-\t\t\t\tn = atoi(optarg);\n-\t\t\t\tif (n > 0)\n-\t\t\t\t\tnb_flows_flowgen = (int) n;\n-\t\t\t\telse\n+\t\t\t\t\t\t\"PMD does not recommend a burst size. \"\n+\t\t\t\t\t\t\"Provided value must be between \"\n+\t\t\t\t\t\t\"1 and %d\\n\", MAX_PKT_BURST);\n+\t\t\t\telse if (rec_nb_pkts > MAX_PKT_BURST)\n \t\t\t\t\trte_exit(EXIT_FAILURE,\n-\t\t\t\t\t\t \"flows must be >= 1\\n\");\n-\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"mbcache\")) {\n-\t\t\t\tn = atoi(optarg);\n-\t\t\t\tif ((n >= 0) &&\n-\t\t\t\t    (n <= RTE_MEMPOOL_CACHE_MAX_SIZE))\n-\t\t\t\t\tmb_mempool_cache = (uint16_t) n;\n-\t\t\t\telse\n-\t\t\t\t\trte_exit(EXIT_FAILURE,\n-\t\t\t\t\t\t \"mbcache must be >= 0 and <= %d\\n\",\n-\t\t\t\t\t\t RTE_MEMPOOL_CACHE_MAX_SIZE);\n-\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"txfreet\")) {\n-\t\t\t\tn = atoi(optarg);\n-\t\t\t\tif (n >= 0)\n-\t\t\t\t\ttx_free_thresh = (int16_t)n;\n-\t\t\t\telse\n-\t\t\t\t\trte_exit(EXIT_FAILURE, \"txfreet must be >= 0\\n\");\n-\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"txrst\")) {\n-\t\t\t\tn = atoi(optarg);\n-\t\t\t\tif (n >= 0)\n-\t\t\t\t\ttx_rs_thresh = (int16_t)n;\n-\t\t\t\telse\n-\t\t\t\t\trte_exit(EXIT_FAILURE, \"txrst must be >= 0\\n\");\n-\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"rxd\")) {\n-\t\t\t\tn = atoi(optarg);\n-\t\t\t\tif (n > 0) {\n-\t\t\t\t\tif (rx_free_thresh >= n)\n-\t\t\t\t\t\trte_exit(EXIT_FAILURE,\n-\t\t\t\t\t\t\t \"rxd must be > \"\n-\t\t\t\t\t\t\t \"rx_free_thresh(%d)\\n\",\n-\t\t\t\t\t\t\t (int)rx_free_thresh);\n-\t\t\t\t\telse\n-\t\t\t\t\t\tnb_rxd = (uint16_t) n;\n-\t\t\t\t} else\n+\t\t\t\t\t\t\"PMD recommended burst size of %d\"\n+\t\t\t\t\t\t\" exceeds maximum value of %d\\n\",\n+\t\t\t\t\t\trec_nb_pkts, MAX_PKT_BURST);\n+\t\t\t\tprintf(\"Using PMD-provided burst value of %d\\n\",\n+\t\t\t\t\trec_nb_pkts);\n+\t\t\t\tnb_pkt_per_burst = rec_nb_pkts;\n+\t\t\t} else if (n > MAX_PKT_BURST)\n+\t\t\t\trte_exit(EXIT_FAILURE,\n+\t\t\t\t\t\"burst must be between1 and %d\\n\",\n+\t\t\t\t\tMAX_PKT_BURST);\n+\t\t\telse\n+\t\t\t\tnb_pkt_per_burst = (uint16_t) n;\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_FLOWGEN_CLONES_NUM:\n+\t\t\tn = atoi(optarg);\n+\t\t\tif (n >= 0)\n+\t\t\t\tnb_pkt_flowgen_clones = (uint16_t) n;\n+\t\t\telse\n+\t\t\t\trte_exit(EXIT_FAILURE,\n+\t\t\t\t\t\"clones must be >= 0 and <= current burst\\n\");\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_FLOWGEN_FLOWS_NUM:\n+\t\t\tn = atoi(optarg);\n+\t\t\tif (n > 0)\n+\t\t\t\tnb_flows_flowgen = (int) n;\n+\t\t\telse\n+\t\t\t\trte_exit(EXIT_FAILURE,\n+\t\t\t\t\t\"flows must be >= 1\\n\");\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_MBCACHE_NUM:\n+\t\t\tn = atoi(optarg);\n+\t\t\tif ((n >= 0) &&\n+\t\t\t\t\t(n <= RTE_MEMPOOL_CACHE_MAX_SIZE))\n+\t\t\t\tmb_mempool_cache = (uint16_t) n;\n+\t\t\telse\n+\t\t\t\trte_exit(EXIT_FAILURE,\n+\t\t\t\t\t\"mbcache must be >= 0 and <= %d\\n\",\n+\t\t\t\t\tRTE_MEMPOOL_CACHE_MAX_SIZE);\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_TXFREET_NUM:\n+\t\t\tn = atoi(optarg);\n+\t\t\tif (n >= 0)\n+\t\t\t\ttx_free_thresh = (int16_t)n;\n+\t\t\telse\n+\t\t\t\trte_exit(EXIT_FAILURE, \"txfreet must be >= 0\\n\");\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_TXRST_NUM:\n+\t\t\tn = atoi(optarg);\n+\t\t\tif (n >= 0)\n+\t\t\t\ttx_rs_thresh = (int16_t)n;\n+\t\t\telse\n+\t\t\t\trte_exit(EXIT_FAILURE, \"txrst must be >= 0\\n\");\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_RXD_NUM:\n+\t\t\tn = atoi(optarg);\n+\t\t\tif (n > 0) {\n+\t\t\t\tif (rx_free_thresh >= n)\n \t\t\t\t\trte_exit(EXIT_FAILURE,\n-\t\t\t\t\t\t \"rxd(%d) invalid - must be > 0\\n\",\n-\t\t\t\t\t\t n);\n-\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"txd\")) {\n-\t\t\t\tn = atoi(optarg);\n-\t\t\t\tif (n > 0)\n-\t\t\t\t\tnb_txd = (uint16_t) n;\n-\t\t\t\telse\n-\t\t\t\t\trte_exit(EXIT_FAILURE, \"txd must be in > 0\\n\");\n-\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"txpt\")) {\n-\t\t\t\tn = atoi(optarg);\n-\t\t\t\tif (n >= 0)\n-\t\t\t\t\ttx_pthresh = (int8_t)n;\n-\t\t\t\telse\n-\t\t\t\t\trte_exit(EXIT_FAILURE, \"txpt must be >= 0\\n\");\n-\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"txht\")) {\n-\t\t\t\tn = atoi(optarg);\n-\t\t\t\tif (n >= 0)\n-\t\t\t\t\ttx_hthresh = (int8_t)n;\n+\t\t\t\t\t\t\"rxd must be > \"\n+\t\t\t\t\t\t\"rx_free_thresh(%d)\\n\",\n+\t\t\t\t\t\t(int)rx_free_thresh);\n \t\t\t\telse\n-\t\t\t\t\trte_exit(EXIT_FAILURE, \"txht must be >= 0\\n\");\n-\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"txwt\")) {\n-\t\t\t\tn = atoi(optarg);\n-\t\t\t\tif (n >= 0)\n-\t\t\t\t\ttx_wthresh = (int8_t)n;\n-\t\t\t\telse\n-\t\t\t\t\trte_exit(EXIT_FAILURE, \"txwt must be >= 0\\n\");\n-\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"rxpt\")) {\n-\t\t\t\tn = atoi(optarg);\n-\t\t\t\tif (n >= 0)\n-\t\t\t\t\trx_pthresh = (int8_t)n;\n-\t\t\t\telse\n-\t\t\t\t\trte_exit(EXIT_FAILURE, \"rxpt must be >= 0\\n\");\n-\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"rxht\")) {\n-\t\t\t\tn = atoi(optarg);\n-\t\t\t\tif (n >= 0)\n-\t\t\t\t\trx_hthresh = (int8_t)n;\n-\t\t\t\telse\n-\t\t\t\t\trte_exit(EXIT_FAILURE, \"rxht must be >= 0\\n\");\n-\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"rxwt\")) {\n-\t\t\t\tn = atoi(optarg);\n-\t\t\t\tif (n >= 0)\n-\t\t\t\t\trx_wthresh = (int8_t)n;\n-\t\t\t\telse\n-\t\t\t\t\trte_exit(EXIT_FAILURE, \"rxwt must be >= 0\\n\");\n-\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"rxfreet\")) {\n+\t\t\t\t\tnb_rxd = (uint16_t) n;\n+\t\t\t} else\n+\t\t\t\trte_exit(EXIT_FAILURE,\n+\t\t\t\t\t\"rxd(%d) invalid - must be > 0\\n\",\n+\t\t\t\t\tn);\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_TXD_NUM:\n+\t\t\tn = atoi(optarg);\n+\t\t\tif (n > 0)\n+\t\t\t\tnb_txd = (uint16_t) n;\n+\t\t\telse\n+\t\t\t\trte_exit(EXIT_FAILURE, \"txd must be in > 0\\n\");\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_TXPT_NUM:\n+\t\t\tn = atoi(optarg);\n+\t\t\tif (n >= 0)\n+\t\t\t\ttx_pthresh = (int8_t)n;\n+\t\t\telse\n+\t\t\t\trte_exit(EXIT_FAILURE, \"txpt must be >= 0\\n\");\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_TXHT_NUM:\n+\t\t\tn = atoi(optarg);\n+\t\t\tif (n >= 0)\n+\t\t\t\ttx_hthresh = (int8_t)n;\n+\t\t\telse\n+\t\t\t\trte_exit(EXIT_FAILURE, \"txht must be >= 0\\n\");\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_TXWT_NUM:\n+\t\t\tn = atoi(optarg);\n+\t\t\tif (n >= 0)\n+\t\t\t\ttx_wthresh = (int8_t)n;\n+\t\t\telse\n+\t\t\t\trte_exit(EXIT_FAILURE, \"txwt must be >= 0\\n\");\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_RXPT_NUM:\n+\t\t\tn = atoi(optarg);\n+\t\t\tif (n >= 0)\n+\t\t\t\trx_pthresh = (int8_t)n;\n+\t\t\telse\n+\t\t\t\trte_exit(EXIT_FAILURE, \"rxpt must be >= 0\\n\");\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_RXHT_NUM:\n+\t\t\tn = atoi(optarg);\n+\t\t\tif (n >= 0)\n+\t\t\t\trx_hthresh = (int8_t)n;\n+\t\t\telse\n+\t\t\t\trte_exit(EXIT_FAILURE, \"rxht must be >= 0\\n\");\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_RXWT_NUM:\n+\t\t\tn = atoi(optarg);\n+\t\t\tif (n >= 0)\n+\t\t\t\trx_wthresh = (int8_t)n;\n+\t\t\telse\n+\t\t\t\trte_exit(EXIT_FAILURE, \"rxwt must be >= 0\\n\");\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_RXFREET_NUM:\n+\t\t\tn = atoi(optarg);\n+\t\t\tif (n >= 0)\n+\t\t\t\trx_free_thresh = (int16_t)n;\n+\t\t\telse\n+\t\t\t\trte_exit(EXIT_FAILURE, \"rxfreet must be >= 0\\n\");\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_RXOFFS_NUM: {\n+\t\t\tunsigned int seg_off[MAX_SEGS_BUFFER_SPLIT];\n+\t\t\tunsigned int nb_offs;\n+\n+\t\t\tnb_offs = parse_item_list\n+\t\t\t\t(optarg, \"rxpkt offsets\",\n+\t\t\t\tMAX_SEGS_BUFFER_SPLIT,\n+\t\t\t\tseg_off, 0);\n+\t\t\tif (nb_offs > 0)\n+\t\t\t\tset_rx_pkt_offsets(seg_off, nb_offs);\n+\t\t\telse\n+\t\t\t\trte_exit(EXIT_FAILURE, \"bad rxoffs\\n\");\n+\t\t\tbreak;\n+\t\t}\n+\t\tcase TESTPMD_OPT_RXPKTS_NUM: {\n+\t\t\tunsigned int seg_len[MAX_SEGS_BUFFER_SPLIT];\n+\t\t\tunsigned int nb_segs;\n+\n+\t\t\tnb_segs = parse_item_list\n+\t\t\t\t(optarg, \"rxpkt segments\",\n+\t\t\t\tMAX_SEGS_BUFFER_SPLIT,\n+\t\t\t\tseg_len, 0);\n+\t\t\tif (nb_segs > 0)\n+\t\t\t\tset_rx_pkt_segments(seg_len, nb_segs);\n+\t\t\telse\n+\t\t\t\trte_exit(EXIT_FAILURE, \"bad rxpkts\\n\");\n+\t\t\tbreak;\n+\t\t}\n+\t\tcase TESTPMD_OPT_RXHDRS_NUM: {\n+\t\t\tunsigned int seg_hdrs[MAX_SEGS_BUFFER_SPLIT];\n+\t\t\tunsigned int nb_segs;\n+\n+\t\t\tnb_segs = parse_hdrs_list\n+\t\t\t\t(optarg, \"rxpkt segments\",\n+\t\t\t\tMAX_SEGS_BUFFER_SPLIT,\n+\t\t\t\tseg_hdrs);\n+\t\t\tif (nb_segs > 0)\n+\t\t\t\tset_rx_pkt_hdrs(seg_hdrs, nb_segs);\n+\t\t\telse\n+\t\t\t\trte_exit(EXIT_FAILURE, \"bad rxpkts\\n\");\n+\t\t\tbreak;\n+\t\t}\n+\t\tcase TESTPMD_OPT_TXPKTS_NUM: {\n+\t\t\tunsigned int seg_lengths[RTE_MAX_SEGS_PER_PKT];\n+\t\t\tunsigned int nb_segs;\n+\n+\t\t\tnb_segs = parse_item_list(optarg, \"txpkt segments\",\n+\t\t\t\tRTE_MAX_SEGS_PER_PKT, seg_lengths, 0);\n+\t\t\tif (nb_segs > 0)\n+\t\t\t\tset_tx_pkt_segments(seg_lengths, nb_segs);\n+\t\t\telse\n+\t\t\t\trte_exit(EXIT_FAILURE, \"bad txpkts\\n\");\n+\t\t\tbreak;\n+\t\t}\n+\t\tcase TESTPMD_OPT_MULTI_RX_MEMPOOL_NUM:\n+\t\t\tmulti_rx_mempool = 1;\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_TXONLY_MULTI_FLOW_NUM:\n+\t\t\ttxonly_multi_flow = 1;\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_RXQ_SHARE_NUM:\n+\t\t\tif (optarg == NULL) {\n+\t\t\t\trxq_share = UINT32_MAX;\n+\t\t\t} else {\n \t\t\t\tn = atoi(optarg);\n \t\t\t\tif (n >= 0)\n-\t\t\t\t\trx_free_thresh = (int16_t)n;\n-\t\t\t\telse\n-\t\t\t\t\trte_exit(EXIT_FAILURE, \"rxfreet must be >= 0\\n\");\n-\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"rxoffs\")) {\n-\t\t\t\tunsigned int seg_off[MAX_SEGS_BUFFER_SPLIT];\n-\t\t\t\tunsigned int nb_offs;\n-\n-\t\t\t\tnb_offs = parse_item_list\n-\t\t\t\t\t\t(optarg, \"rxpkt offsets\",\n-\t\t\t\t\t\t MAX_SEGS_BUFFER_SPLIT,\n-\t\t\t\t\t\t seg_off, 0);\n-\t\t\t\tif (nb_offs > 0)\n-\t\t\t\t\tset_rx_pkt_offsets(seg_off, nb_offs);\n-\t\t\t\telse\n-\t\t\t\t\trte_exit(EXIT_FAILURE, \"bad rxoffs\\n\");\n-\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"rxpkts\")) {\n-\t\t\t\tunsigned int seg_len[MAX_SEGS_BUFFER_SPLIT];\n-\t\t\t\tunsigned int nb_segs;\n-\t\t\t\tnb_segs = parse_item_list\n-\t\t\t\t\t\t(optarg, \"rxpkt segments\",\n-\t\t\t\t\t\t MAX_SEGS_BUFFER_SPLIT,\n-\t\t\t\t\t\t seg_len, 0);\n-\t\t\t\tif (nb_segs > 0)\n-\t\t\t\t\tset_rx_pkt_segments(seg_len, nb_segs);\n-\t\t\t\telse\n-\t\t\t\t\trte_exit(EXIT_FAILURE, \"bad rxpkts\\n\");\n-\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"rxhdrs\")) {\n-\t\t\t\tunsigned int seg_hdrs[MAX_SEGS_BUFFER_SPLIT];\n-\t\t\t\tunsigned int nb_segs;\n-\n-\t\t\t\tnb_segs = parse_hdrs_list\n-\t\t\t\t\t\t(optarg, \"rxpkt segments\",\n-\t\t\t\t\t\tMAX_SEGS_BUFFER_SPLIT,\n-\t\t\t\t\t\tseg_hdrs);\n-\t\t\t\tif (nb_segs > 0)\n-\t\t\t\t\tset_rx_pkt_hdrs(seg_hdrs, nb_segs);\n+\t\t\t\t\trxq_share = (uint32_t)n;\n \t\t\t\telse\n-\t\t\t\t\trte_exit(EXIT_FAILURE, \"bad rxpkts\\n\");\n+\t\t\t\t\trte_exit(EXIT_FAILURE, \"rxq-share must be >= 0\\n\");\n \t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"txpkts\")) {\n-\t\t\t\tunsigned seg_lengths[RTE_MAX_SEGS_PER_PKT];\n-\t\t\t\tunsigned int nb_segs;\n-\n-\t\t\t\tnb_segs = parse_item_list(optarg, \"txpkt segments\",\n-\t\t\t\t\t\tRTE_MAX_SEGS_PER_PKT, seg_lengths, 0);\n-\t\t\t\tif (nb_segs > 0)\n-\t\t\t\t\tset_tx_pkt_segments(seg_lengths, nb_segs);\n-\t\t\t\telse\n-\t\t\t\t\trte_exit(EXIT_FAILURE, \"bad txpkts\\n\");\n-\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"multi-rx-mempool\"))\n-\t\t\t\tmulti_rx_mempool = 1;\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"txonly-multi-flow\"))\n-\t\t\t\ttxonly_multi_flow = 1;\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"rxq-share\")) {\n-\t\t\t\tif (optarg == NULL) {\n-\t\t\t\t\trxq_share = UINT32_MAX;\n-\t\t\t\t} else {\n-\t\t\t\t\tn = atoi(optarg);\n-\t\t\t\t\tif (n >= 0)\n-\t\t\t\t\t\trxq_share = (uint32_t)n;\n-\t\t\t\t\telse\n-\t\t\t\t\t\trte_exit(EXIT_FAILURE, \"rxq-share must be >= 0\\n\");\n-\t\t\t\t}\n-\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"no-flush-rx\"))\n-\t\t\t\tno_flush_rx = 1;\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"eth-link-speed\")) {\n-\t\t\t\tn = atoi(optarg);\n-\t\t\t\tif (n >= 0 && parse_link_speed(n) > 0)\n-\t\t\t\t\teth_link_speed = parse_link_speed(n);\n-\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"disable-link-check\"))\n-\t\t\t\tno_link_check = 1;\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"disable-device-start\"))\n-\t\t\t\tno_device_start = 1;\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"no-lsc-interrupt\"))\n-\t\t\t\tlsc_interrupt = 0;\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"no-rmv-interrupt\"))\n-\t\t\t\trmv_interrupt = 0;\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"flow-isolate-all\"))\n-\t\t\t\tflow_isolate_all = 1;\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"disable-flow-flush\"))\n-\t\t\t\tno_flow_flush = 1;\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"tx-offloads\")) {\n-\t\t\t\tchar *end = NULL;\n-\t\t\t\tn = strtoull(optarg, &end, 16);\n-\t\t\t\tif (n >= 0)\n-\t\t\t\t\ttx_offloads = (uint64_t)n;\n-\t\t\t\telse\n-\t\t\t\t\trte_exit(EXIT_FAILURE,\n-\t\t\t\t\t\t \"tx-offloads must be >= 0\\n\");\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_NO_FLUSH_RX_NUM:\n+\t\t\tno_flush_rx = 1;\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_ETH_LINK_SPEED_NUM:\n+\t\t\tn = atoi(optarg);\n+\t\t\tif (n >= 0 && parse_link_speed(n) > 0)\n+\t\t\t\teth_link_speed = parse_link_speed(n);\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_DISABLE_LINK_CHECK_NUM:\n+\t\t\tno_link_check = 1;\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_DISABLE_DEVICE_START_NUM:\n+\t\t\tno_device_start = 1;\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_NO_LSC_INTERRUPT_NUM:\n+\t\t\tlsc_interrupt = 0;\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_NO_RMV_INTERRUPT_NUM:\n+\t\t\trmv_interrupt = 0;\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_FLOW_ISOLATE_ALL_NUM:\n+\t\t\tflow_isolate_all = 1;\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_DISABLE_FLOW_FLUSH_NUM:\n+\t\t\tno_flow_flush = 1;\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_TX_OFFLOADS_NUM: {\n+\t\t\tchar *end = NULL;\n+\n+\t\t\tn = strtoull(optarg, &end, 16);\n+\t\t\tif (n >= 0)\n+\t\t\t\ttx_offloads = (uint64_t)n;\n+\t\t\telse\n+\t\t\t\trte_exit(EXIT_FAILURE,\n+\t\t\t\t\t\"tx-offloads must be >= 0\\n\");\n+\t\t\tbreak;\n+\t\t}\n+\t\tcase TESTPMD_OPT_RX_OFFLOADS_NUM: {\n+\t\t\tchar *end = NULL;\n+\n+\t\t\tn = strtoull(optarg, &end, 16);\n+\t\t\tif (n >= 0)\n+\t\t\t\trx_offloads = (uint64_t)n;\n+\t\t\telse\n+\t\t\t\trte_exit(EXIT_FAILURE,\n+\t\t\t\t\t\"rx-offloads must be >= 0\\n\");\n+\t\t\tbreak;\n+\t\t}\n+\t\tcase TESTPMD_OPT_VXLAN_GPE_PORT_NUM:\n+\t\t\tn = atoi(optarg);\n+\t\t\tif (n >= 0)\n+\t\t\t\tvxlan_gpe_udp_port = (uint16_t)n;\n+\t\t\telse\n+\t\t\t\trte_exit(EXIT_FAILURE,\n+\t\t\t\t\t\"vxlan-gpe-port must be >= 0\\n\");\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_GENEVE_PARSED_PORT_NUM:\n+\t\t\tn = atoi(optarg);\n+\t\t\tif (n >= 0)\n+\t\t\t\tgeneve_udp_port = (uint16_t)n;\n+\t\t\telse\n+\t\t\t\trte_exit(EXIT_FAILURE,\n+\t\t\t\t\t\"geneve-parsed-port must be >= 0\\n\");\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_PRINT_EVENT_NUM:\n+\t\t\tif (parse_event_printing_config(optarg, 1)) {\n+\t\t\t\trte_exit(EXIT_FAILURE,\n+\t\t\t\t\t\"invalid print-event argument\\n\");\n \t\t\t}\n-\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"rx-offloads\")) {\n-\t\t\t\tchar *end = NULL;\n-\t\t\t\tn = strtoull(optarg, &end, 16);\n-\t\t\t\tif (n >= 0)\n-\t\t\t\t\trx_offloads = (uint64_t)n;\n-\t\t\t\telse\n-\t\t\t\t\trte_exit(EXIT_FAILURE,\n-\t\t\t\t\t\t \"rx-offloads must be >= 0\\n\");\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_MASK_EVENT_NUM:\n+\t\t\tif (parse_event_printing_config(optarg, 0)) {\n+\t\t\t\trte_exit(EXIT_FAILURE,\n+\t\t\t\t\t\"invalid mask-event argument\\n\");\n \t\t\t}\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_HOT_PLUG_NUM:\n+\t\t\thot_plug = 1;\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_MLOCKALL_NUM:\n+\t\t\tdo_mlockall = 1;\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_NO_MLOCKALL_NUM:\n+\t\t\tdo_mlockall = 0;\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_NOISY_TX_SW_BUFFER_SIZE_NUM:\n+\t\t\tn = atoi(optarg);\n+\t\t\tif (n >= 0)\n+\t\t\t\tnoisy_tx_sw_bufsz = n;\n+\t\t\telse\n+\t\t\t\trte_exit(EXIT_FAILURE,\n+\t\t\t\t\t\"noisy-tx-sw-buffer-size must be >= 0\\n\");\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_NOISY_TX_SW_BUFFER_FLUSHTIME_NUM:\n+\t\t\tn = atoi(optarg);\n+\t\t\tif (n >= 0)\n+\t\t\t\tnoisy_tx_sw_buf_flush_time = n;\n+\t\t\telse\n+\t\t\t\trte_exit(EXIT_FAILURE,\n+\t\t\t\t\t\"noisy-tx-sw-buffer-flushtime must be >= 0\\n\");\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_NOISY_LKUP_MEMORY_NUM:\n+\t\t\tn = atoi(optarg);\n+\t\t\tif (n >= 0)\n+\t\t\t\tnoisy_lkup_mem_sz = n;\n+\t\t\telse\n+\t\t\t\trte_exit(EXIT_FAILURE,\n+\t\t\t\t\t\"noisy-lkup-memory must be >= 0\\n\");\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_NOISY_LKUP_NUM_WRITES_NUM:\n+\t\t\tn = atoi(optarg);\n+\t\t\tif (n >= 0)\n+\t\t\t\tnoisy_lkup_num_writes = n;\n+\t\t\telse\n+\t\t\t\trte_exit(EXIT_FAILURE,\n+\t\t\t\t\t\"noisy-lkup-num-writes must be >= 0\\n\");\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_NOISY_LKUP_NUM_READS_NUM:\n+\t\t\tn = atoi(optarg);\n+\t\t\tif (n >= 0)\n+\t\t\t\tnoisy_lkup_num_reads = n;\n+\t\t\telse\n+\t\t\t\trte_exit(EXIT_FAILURE,\n+\t\t\t\t\t\"noisy-lkup-num-reads must be >= 0\\n\");\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_NOISY_LKUP_NUM_READS_WRITES_NUM:\n+\t\t\tn = atoi(optarg);\n+\t\t\tif (n >= 0)\n+\t\t\t\tnoisy_lkup_num_reads_writes = n;\n+\t\t\telse\n+\t\t\t\trte_exit(EXIT_FAILURE,\n+\t\t\t\t\t\"noisy-lkup-num-reads-writes must be >= 0\\n\");\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_NOISY_FORWARD_MODE_NUM: {\n+\t\t\tunsigned int i;\n \n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"vxlan-gpe-port\")) {\n-\t\t\t\tn = atoi(optarg);\n-\t\t\t\tif (n >= 0)\n-\t\t\t\t\tvxlan_gpe_udp_port = (uint16_t)n;\n-\t\t\t\telse\n-\t\t\t\t\trte_exit(EXIT_FAILURE,\n-\t\t\t\t\t\t \"vxlan-gpe-port must be >= 0\\n\");\n-\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name,\n-\t\t\t\t    \"geneve-parsed-port\")) {\n-\t\t\t\tn = atoi(optarg);\n-\t\t\t\tif (n >= 0)\n-\t\t\t\t\tgeneve_udp_port = (uint16_t)n;\n-\t\t\t\telse\n-\t\t\t\t\trte_exit(EXIT_FAILURE,\n-\t\t\t\t\t\t \"geneve-parsed-port must be >= 0\\n\");\n-\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"print-event\"))\n-\t\t\t\tif (parse_event_printing_config(optarg, 1)) {\n-\t\t\t\t\trte_exit(EXIT_FAILURE,\n-\t\t\t\t\t\t \"invalid print-event argument\\n\");\n+\t\t\tfor (i = 0; i < NOISY_FWD_MODE_MAX; i++) {\n+\t\t\t\tif (!strcmp(optarg, noisy_fwd_mode_desc[i])) {\n+\t\t\t\t\tnoisy_fwd_mode = i;\n+\t\t\t\t\tbreak;\n \t\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"mask-event\"))\n-\t\t\t\tif (parse_event_printing_config(optarg, 0)) {\n-\t\t\t\t\trte_exit(EXIT_FAILURE,\n-\t\t\t\t\t\t \"invalid mask-event argument\\n\");\n-\t\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"hot-plug\"))\n-\t\t\t\thot_plug = 1;\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"mlockall\"))\n-\t\t\t\tdo_mlockall = 1;\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"no-mlockall\"))\n-\t\t\t\tdo_mlockall = 0;\n-\t\t\tif (!strcmp(lgopts[opt_idx].name,\n-\t\t\t\t    \"noisy-tx-sw-buffer-size\")) {\n-\t\t\t\tn = atoi(optarg);\n-\t\t\t\tif (n >= 0)\n-\t\t\t\t\tnoisy_tx_sw_bufsz = n;\n-\t\t\t\telse\n-\t\t\t\t\trte_exit(EXIT_FAILURE,\n-\t\t\t\t\t\t\"noisy-tx-sw-buffer-size must be >= 0\\n\");\n-\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name,\n-\t\t\t\t    \"noisy-tx-sw-buffer-flushtime\")) {\n-\t\t\t\tn = atoi(optarg);\n-\t\t\t\tif (n >= 0)\n-\t\t\t\t\tnoisy_tx_sw_buf_flush_time = n;\n-\t\t\t\telse\n-\t\t\t\t\trte_exit(EXIT_FAILURE,\n-\t\t\t\t\t\t \"noisy-tx-sw-buffer-flushtime must be >= 0\\n\");\n-\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name,\n-\t\t\t\t    \"noisy-lkup-memory\")) {\n-\t\t\t\tn = atoi(optarg);\n-\t\t\t\tif (n >= 0)\n-\t\t\t\t\tnoisy_lkup_mem_sz = n;\n-\t\t\t\telse\n-\t\t\t\t\trte_exit(EXIT_FAILURE,\n-\t\t\t\t\t\t \"noisy-lkup-memory must be >= 0\\n\");\n-\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name,\n-\t\t\t\t    \"noisy-lkup-num-writes\")) {\n-\t\t\t\tn = atoi(optarg);\n-\t\t\t\tif (n >= 0)\n-\t\t\t\t\tnoisy_lkup_num_writes = n;\n-\t\t\t\telse\n-\t\t\t\t\trte_exit(EXIT_FAILURE,\n-\t\t\t\t\t\t \"noisy-lkup-num-writes must be >= 0\\n\");\n-\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name,\n-\t\t\t\t    \"noisy-lkup-num-reads\")) {\n-\t\t\t\tn = atoi(optarg);\n-\t\t\t\tif (n >= 0)\n-\t\t\t\t\tnoisy_lkup_num_reads = n;\n-\t\t\t\telse\n-\t\t\t\t\trte_exit(EXIT_FAILURE,\n-\t\t\t\t\t\t \"noisy-lkup-num-reads must be >= 0\\n\");\n-\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name,\n-\t\t\t\t    \"noisy-lkup-num-reads-writes\")) {\n-\t\t\t\tn = atoi(optarg);\n-\t\t\t\tif (n >= 0)\n-\t\t\t\t\tnoisy_lkup_num_reads_writes = n;\n-\t\t\t\telse\n-\t\t\t\t\trte_exit(EXIT_FAILURE,\n-\t\t\t\t\t\t \"noisy-lkup-num-reads-writes must be >= 0\\n\");\n-\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name,\n-\t\t\t\t    \"noisy-forward-mode\")) {\n-\t\t\t\tint i;\n-\t\t\t\tfor (i = 0; i < NOISY_FWD_MODE_MAX; i++)\n-\t\t\t\t\tif (!strcmp(optarg, noisy_fwd_mode_desc[i])) {\n-\t\t\t\t\t\tnoisy_fwd_mode = i;\n-\t\t\t\t\t\tbreak;\n-\t\t\t\t\t}\n-\t\t\t\tif (i == NOISY_FWD_MODE_MAX)\n-\t\t\t\t\trte_exit(EXIT_FAILURE, \"noisy-forward-mode %s invalid,\"\n-\t\t\t\t\t\t \" must be a valid noisy-forward-mode value\\n\",\n-\t\t\t\t\t\t optarg);\n-\t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"no-iova-contig\"))\n-\t\t\t\tmempool_flags = RTE_MEMPOOL_F_NO_IOVA_CONTIG;\n-\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"rx-mq-mode\")) {\n-\t\t\t\tchar *end = NULL;\n-\t\t\t\tn = strtoul(optarg, &end, 16);\n-\t\t\t\tif (n >= 0 && n <= RTE_ETH_MQ_RX_VMDQ_DCB_RSS)\n-\t\t\t\t\trx_mq_mode = (enum rte_eth_rx_mq_mode)n;\n-\t\t\t\telse\n-\t\t\t\t\trte_exit(EXIT_FAILURE,\n-\t\t\t\t\t\t \"rx-mq-mode must be >= 0 and <= %d\\n\",\n-\t\t\t\t\t\t RTE_ETH_MQ_RX_VMDQ_DCB_RSS);\n \t\t\t}\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"record-core-cycles\"))\n-\t\t\t\trecord_core_cycles = 1;\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, \"record-burst-stats\"))\n-\t\t\t\trecord_burst_stats = 1;\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, PARAM_NUM_PROCS))\n-\t\t\t\tnum_procs = atoi(optarg);\n-\t\t\tif (!strcmp(lgopts[opt_idx].name, PARAM_PROC_ID))\n-\t\t\t\tproc_id = atoi(optarg);\n+\t\t\tif (i == NOISY_FWD_MODE_MAX)\n+\t\t\t\trte_exit(EXIT_FAILURE, \"noisy-forward-mode %s invalid,\"\n+\t\t\t\t\t \" must be a valid noisy-forward-mode value\\n\",\n+\t\t\t\t\t optarg);\n \t\t\tbreak;\n-\t\tcase 'h':\n-\t\t\tusage(argv[0]);\n-\t\t\texit(EXIT_SUCCESS);\n+\t\t}\n+\t\tcase TESTPMD_OPT_NO_IOVA_CONTIG_NUM:\n+\t\t\tmempool_flags = RTE_MEMPOOL_F_NO_IOVA_CONTIG;\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_RX_MQ_MODE_NUM: {\n+\t\t\tchar *end = NULL;\n+\n+\t\t\tn = strtoul(optarg, &end, 16);\n+\t\t\tif (n >= 0 && n <= RTE_ETH_MQ_RX_VMDQ_DCB_RSS)\n+\t\t\t\trx_mq_mode = (enum rte_eth_rx_mq_mode)n;\n+\t\t\telse\n+\t\t\t\trte_exit(EXIT_FAILURE,\n+\t\t\t\t\t\"rx-mq-mode must be >= 0 and <= %d\\n\",\n+\t\t\t\t\tRTE_ETH_MQ_RX_VMDQ_DCB_RSS);\n+\t\t\tbreak;\n+\t\t}\n+\t\tcase TESTPMD_OPT_RECORD_CORE_CYCLES_NUM:\n+\t\t\trecord_core_cycles = 1;\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_RECORD_BURST_STATS_NUM:\n+\t\t\trecord_burst_stats = 1;\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_NUM_PROCS_NUM:\n+\t\t\tnum_procs = atoi(optarg);\n+\t\t\tbreak;\n+\t\tcase TESTPMD_OPT_PROC_ID_NUM:\n+\t\t\tproc_id = atoi(optarg);\n \t\t\tbreak;\n \t\tdefault:\n \t\t\tusage(argv[0]);\n@@ -1510,9 +1750,9 @@ launch_args_parse(int argc, char** argv)\n \n \tif (proc_id >= (int)num_procs)\n \t\trte_exit(EXIT_FAILURE,\n-\t\t\t \"The multi-process option '%s(%d)' should be less than '%s(%u)'\\n\",\n-\t\t\t PARAM_PROC_ID, proc_id,\n-\t\t\t PARAM_NUM_PROCS, num_procs);\n+\t\t\t\"The multi-process option '%s(%d)' should be less than '%s(%u)'\\n\",\n+\t\t\tTESTPMD_OPT_PROC_ID, proc_id,\n+\t\t\tTESTPMD_OPT_NUM_PROCS, num_procs);\n \n \t/* Set offload configuration from command line parameters. */\n \trx_mode.offloads = rx_offloads;\n",
    "prefixes": [
        "4/4"
    ]
}