get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 138371,
    "url": "http://patches.dpdk.org/api/patches/138371/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20240314091708.1542769-7-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": "<20240314091708.1542769-7-david.marchand@redhat.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20240314091708.1542769-7-david.marchand@redhat.com",
    "date": "2024-03-14T09:17:07",
    "name": "[v2,6/6] app/testpmd: enhance getopt_long usage",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "703c0a01e0b39f3ee6a21d90339b34adcff42c55",
    "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/20240314091708.1542769-7-david.marchand@redhat.com/mbox/",
    "series": [
        {
            "id": 31506,
            "url": "http://patches.dpdk.org/api/series/31506/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=31506",
            "date": "2024-03-14T09:17:01",
            "name": "testpmd options parsing cleanup",
            "version": 2,
            "mbox": "http://patches.dpdk.org/series/31506/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/138371/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/138371/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 25CFE43CB2;\n\tThu, 14 Mar 2024 10:17:57 +0100 (CET)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 401A842E91;\n\tThu, 14 Mar 2024 10:17:42 +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 BD24E42E5D\n for <dev@dpdk.org>; Thu, 14 Mar 2024 10:17:37 +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-206-P1QWft2APci6tjR5rByKpg-1; Thu, 14 Mar 2024 05:17:33 -0400",
            "from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com\n [10.11.54.1])\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 76647851785;\n Thu, 14 Mar 2024 09:17:33 +0000 (UTC)",
            "from dmarchan.redhat.com (unknown [10.45.225.27])\n by smtp.corp.redhat.com (Postfix) with ESMTP id 1F6603C24;\n Thu, 14 Mar 2024 09:17:31 +0000 (UTC)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1710407857;\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=QWpAwiWnNk3VQYRTwxEX+54YTKUYo2M68JVL0LZNfUc=;\n b=dca5KqM8JIOAl+1gE8Ne456P3chNl/gI9gNsQ6YOMfL6zC7ykoHsXgwzSQJiNxCZroLdz9\n SXh6rB6dDFacGij3tHPw/Y51lE3dNiUIhRGyQEtTiZzlYtHxB06gbvmQE8kQWrIgE0e6ts\n R9tH7OZyNn2ely9hJoQKaVC5rv4B8ds=",
        "X-MC-Unique": "P1QWft2APci6tjR5rByKpg-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 v2 6/6] app/testpmd: enhance getopt_long usage",
        "Date": "Thu, 14 Mar 2024 10:17:07 +0100",
        "Message-ID": "<20240314091708.1542769-7-david.marchand@redhat.com>",
        "In-Reply-To": "<20240314091708.1542769-1-david.marchand@redhat.com>",
        "References": "<20240308144841.3615262-1-david.marchand@redhat.com>\n <20240314091708.1542769-1-david.marchand@redhat.com>",
        "MIME-Version": "1.0",
        "X-Scanned-By": "MIMEDefang 3.4.1 on 10.11.54.1",
        "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---\nChanges since v1:\n- removed useless comments in options enum definitions,\n- constified long_options,\n- added macros to shorten long options array definitions,\n- removed unneeded argvopt,\n\n---\n app/test-pmd/parameters.c | 1924 +++++++++++++++++++++----------------\n 1 file changed, 1083 insertions(+), 841 deletions(-)",
    "diff": "diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c\nindex a69639b6fb..c13f7564bf 100644\n--- a/app/test-pmd/parameters.c\n+++ b/app/test-pmd/parameters.c\n@@ -40,6 +40,344 @@\n \n #include \"testpmd.h\"\n \n+enum {\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+\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+\t\"i\" /* interactive */\n+};\n+\n+#define NO_ARG(opt) { opt, no_argument, NULL, opt ## _NUM }\n+#define REQUIRED_ARG(opt) { opt, required_argument, NULL, opt ## _NUM }\n+#define OPTIONAL_ARG(opt) { opt, optional_argument, NULL, opt ## _NUM }\n+static const struct option long_options[] = {\n+\tNO_ARG(TESTPMD_OPT_AUTO_START),\n+\tNO_ARG(TESTPMD_OPT_HELP),\n+\tNO_ARG(TESTPMD_OPT_INTERACTIVE),\n+\tREQUIRED_ARG(TESTPMD_OPT_CMDLINE_FILE),\n+\tREQUIRED_ARG(TESTPMD_OPT_ETH_PEERS_CONFIGFILE),\n+\tREQUIRED_ARG(TESTPMD_OPT_ETH_PEER),\n+\tNO_ARG(TESTPMD_OPT_TX_FIRST),\n+\tREQUIRED_ARG(TESTPMD_OPT_STATS_PERIOD),\n+\tREQUIRED_ARG(TESTPMD_OPT_DISPLAY_XSTATS),\n+\tREQUIRED_ARG(TESTPMD_OPT_NB_CORES),\n+\tREQUIRED_ARG(TESTPMD_OPT_NB_PORTS),\n+\tREQUIRED_ARG(TESTPMD_OPT_COREMASK),\n+\tREQUIRED_ARG(TESTPMD_OPT_PORTMASK),\n+\tREQUIRED_ARG(TESTPMD_OPT_PORTLIST),\n+\tNO_ARG(TESTPMD_OPT_NUMA),\n+\tNO_ARG(TESTPMD_OPT_NO_NUMA),\n+\tNO_ARG(TESTPMD_OPT_MP_ANON), /* deprecated */\n+\tREQUIRED_ARG(TESTPMD_OPT_PORT_NUMA_CONFIG),\n+\tREQUIRED_ARG(TESTPMD_OPT_RING_NUMA_CONFIG),\n+\tREQUIRED_ARG(TESTPMD_OPT_SOCKET_NUM),\n+\tREQUIRED_ARG(TESTPMD_OPT_MBUF_SIZE),\n+\tREQUIRED_ARG(TESTPMD_OPT_TOTAL_NUM_MBUFS),\n+\tREQUIRED_ARG(TESTPMD_OPT_MAX_PKT_LEN),\n+\tREQUIRED_ARG(TESTPMD_OPT_MAX_LRO_PKT_SIZE),\n+#ifdef RTE_LIB_LATENCYSTATS\n+\tREQUIRED_ARG(TESTPMD_OPT_LATENCYSTATS),\n+#endif\n+#ifdef RTE_LIB_BITRATESTATS\n+\tREQUIRED_ARG(TESTPMD_OPT_BITRATE_STATS),\n+#endif\n+\tNO_ARG(TESTPMD_OPT_DISABLE_CRC_STRIP),\n+\tNO_ARG(TESTPMD_OPT_ENABLE_LRO),\n+\tNO_ARG(TESTPMD_OPT_ENABLE_RX_CKSUM),\n+\tNO_ARG(TESTPMD_OPT_ENABLE_RX_TIMESTAMP),\n+\tNO_ARG(TESTPMD_OPT_ENABLE_SCATTER),\n+\tNO_ARG(TESTPMD_OPT_ENABLE_HW_VLAN),\n+\tNO_ARG(TESTPMD_OPT_ENABLE_HW_VLAN_FILTER),\n+\tNO_ARG(TESTPMD_OPT_ENABLE_HW_VLAN_STRIP),\n+\tNO_ARG(TESTPMD_OPT_ENABLE_HW_VLAN_EXTEND),\n+\tNO_ARG(TESTPMD_OPT_ENABLE_HW_QINQ_STRIP),\n+\tNO_ARG(TESTPMD_OPT_ENABLE_DROP_EN),\n+\tNO_ARG(TESTPMD_OPT_DISABLE_RSS),\n+\tREQUIRED_ARG(TESTPMD_OPT_PORT_TOPOLOGY),\n+\tREQUIRED_ARG(TESTPMD_OPT_FORWARD_MODE),\n+\tNO_ARG(TESTPMD_OPT_RSS_IP),\n+\tNO_ARG(TESTPMD_OPT_RSS_UDP),\n+\tNO_ARG(TESTPMD_OPT_RSS_LEVEL_OUTER),\n+\tNO_ARG(TESTPMD_OPT_RSS_LEVEL_INNER),\n+\tREQUIRED_ARG(TESTPMD_OPT_RXQ),\n+\tREQUIRED_ARG(TESTPMD_OPT_TXQ),\n+\tREQUIRED_ARG(TESTPMD_OPT_RXD),\n+\tREQUIRED_ARG(TESTPMD_OPT_TXD),\n+\tREQUIRED_ARG(TESTPMD_OPT_HAIRPINQ),\n+\tREQUIRED_ARG(TESTPMD_OPT_HAIRPIN_MODE),\n+\tREQUIRED_ARG(TESTPMD_OPT_BURST),\n+\tREQUIRED_ARG(TESTPMD_OPT_FLOWGEN_CLONES),\n+\tREQUIRED_ARG(TESTPMD_OPT_FLOWGEN_FLOWS),\n+\tREQUIRED_ARG(TESTPMD_OPT_MBCACHE),\n+\tREQUIRED_ARG(TESTPMD_OPT_TXPT),\n+\tREQUIRED_ARG(TESTPMD_OPT_TXHT),\n+\tREQUIRED_ARG(TESTPMD_OPT_TXWT),\n+\tREQUIRED_ARG(TESTPMD_OPT_TXFREET),\n+\tREQUIRED_ARG(TESTPMD_OPT_TXRST),\n+\tREQUIRED_ARG(TESTPMD_OPT_RXPT),\n+\tREQUIRED_ARG(TESTPMD_OPT_RXHT),\n+\tREQUIRED_ARG(TESTPMD_OPT_RXWT),\n+\tREQUIRED_ARG(TESTPMD_OPT_RXFREET),\n+\tNO_ARG(TESTPMD_OPT_NO_FLUSH_RX),\n+\tNO_ARG(TESTPMD_OPT_FLOW_ISOLATE_ALL),\n+\tNO_ARG(TESTPMD_OPT_DISABLE_FLOW_FLUSH),\n+\tREQUIRED_ARG(TESTPMD_OPT_RXOFFS),\n+\tREQUIRED_ARG(TESTPMD_OPT_RXPKTS),\n+\tREQUIRED_ARG(TESTPMD_OPT_RXHDRS),\n+\tREQUIRED_ARG(TESTPMD_OPT_TXPKTS),\n+\tNO_ARG(TESTPMD_OPT_MULTI_RX_MEMPOOL),\n+\tNO_ARG(TESTPMD_OPT_TXONLY_MULTI_FLOW),\n+\tOPTIONAL_ARG(TESTPMD_OPT_RXQ_SHARE),\n+\tREQUIRED_ARG(TESTPMD_OPT_ETH_LINK_SPEED),\n+\tNO_ARG(TESTPMD_OPT_DISABLE_LINK_CHECK),\n+\tNO_ARG(TESTPMD_OPT_DISABLE_DEVICE_START),\n+\tNO_ARG(TESTPMD_OPT_NO_LSC_INTERRUPT),\n+\tNO_ARG(TESTPMD_OPT_NO_RMV_INTERRUPT),\n+\tREQUIRED_ARG(TESTPMD_OPT_PRINT_EVENT),\n+\tREQUIRED_ARG(TESTPMD_OPT_MASK_EVENT),\n+\tREQUIRED_ARG(TESTPMD_OPT_TX_OFFLOADS),\n+\tREQUIRED_ARG(TESTPMD_OPT_RX_OFFLOADS),\n+\tNO_ARG(TESTPMD_OPT_HOT_PLUG),\n+\tREQUIRED_ARG(TESTPMD_OPT_VXLAN_GPE_PORT),\n+\tREQUIRED_ARG(TESTPMD_OPT_GENEVE_PARSED_PORT),\n+#ifndef RTE_EXEC_ENV_WINDOWS\n+\tNO_ARG(TESTPMD_OPT_MLOCKALL),\n+\tNO_ARG(TESTPMD_OPT_NO_MLOCKALL),\n+#endif\n+\tREQUIRED_ARG(TESTPMD_OPT_MP_ALLOC),\n+\tREQUIRED_ARG(TESTPMD_OPT_TX_IP),\n+\tREQUIRED_ARG(TESTPMD_OPT_TX_UDP),\n+\tREQUIRED_ARG(TESTPMD_OPT_NOISY_TX_SW_BUFFER_SIZE),\n+\tREQUIRED_ARG(TESTPMD_OPT_NOISY_TX_SW_BUFFER_FLUSHTIME),\n+\tREQUIRED_ARG(TESTPMD_OPT_NOISY_LKUP_MEMORY),\n+\tREQUIRED_ARG(TESTPMD_OPT_NOISY_LKUP_NUM_WRITES),\n+\tREQUIRED_ARG(TESTPMD_OPT_NOISY_LKUP_NUM_READS),\n+\tREQUIRED_ARG(TESTPMD_OPT_NOISY_LKUP_NUM_READS_WRITES),\n+\tREQUIRED_ARG(TESTPMD_OPT_NOISY_FORWARD_MODE),\n+\tNO_ARG(TESTPMD_OPT_NO_IOVA_CONTIG),\n+\tREQUIRED_ARG(TESTPMD_OPT_RX_MQ_MODE),\n+\tNO_ARG(TESTPMD_OPT_RECORD_CORE_CYCLES),\n+\tNO_ARG(TESTPMD_OPT_RECORD_BURST_STATS),\n+\tREQUIRED_ARG(TESTPMD_OPT_NUM_PROCS),\n+\tREQUIRED_ARG(TESTPMD_OPT_PROC_ID),\n+\t{ 0, 0, NULL, 0 }\n+};\n+#undef NO_ARG\n+#undef REQUIRED_ARG\n+#undef OPTIONAL_ARG\n+\n static void\n usage(char* progname)\n {\n@@ -587,11 +925,7 @@ 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 \tportid_t pid;\n \tenum { TX, RX };\n@@ -602,123 +936,8 @@ 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-\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-\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-\twhile ((opt = getopt_long(argc, argvopt, \"iah\",\n-\t\t\t\t lgopts, &opt_idx)) != EOF) {\n+\twhile ((opt = getopt_long(argc, argv, short_options, long_options,\n+\t\t\t&opt_idx)) != EOF) {\n \t\tswitch (opt) {\n \t\tcase 'i':\n \t\t\tprintf(\"Interactive-mode selected\\n\");\n@@ -728,751 +947,774 @@ 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+\t\tcase 'h':\n+\t\t\tusage(argv[0]);\n+\t\t\texit(EXIT_SUCCESS);\n+\t\t\tbreak;\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\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\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-\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-\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-\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\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+\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\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+\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 (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\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+\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}\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}\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\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\trte_exit(EXIT_FAILURE, \"Failed to get driver \"\n-\t\t\t\t\t\t\t\"recommended burst size, please provide a \"\n-\t\t\t\t\t\t\t\"value between 1 and %d\\n\", MAX_PKT_BURST);\n-\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\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\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\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\trte_exit(EXIT_FAILURE, \"Failed to get driver \"\n+\t\t\t\t\t\t\"recommended burst size, please provide a \"\n+\t\t\t\t\t\t\"value between 1 and %d\\n\", MAX_PKT_BURST);\n+\n+\t\t\t\trec_nb_pkts = dev_info\n+\t\t\t\t\t.default_rxportconf.burst_size;\n+\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\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, \"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\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\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, \"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\t\trxq_share = (uint32_t)n;\n \t\t\t\telse\n-\t\t\t\t\trte_exit(EXIT_FAILURE, \"bad txpkts\\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, \"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\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\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, \"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@@ -1491,9 +1733,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": [
        "v2",
        "6/6"
    ]
}