app/testpmd: detect numa socket count
[dpdk.git] / app / test-pmd / parameters.c
index adf3203..fe78723 100644 (file)
@@ -58,7 +58,6 @@
 #include <rte_memory.h>
 #include <rte_memzone.h>
 #include <rte_launch.h>
-#include <rte_tailq.h>
 #include <rte_eal.h>
 #include <rte_per_lcore.h>
 #include <rte_lcore.h>
@@ -145,10 +144,6 @@ usage(char* progname)
               "(N: none  or match (default) or always).\n");
        printf("  --pkt-filter-size=N: set Flow Director mode "
               "(N: 64K (default mode) or 128K or 256K).\n");
-       printf("  --pkt-filter-flexbytes-offset=N: set flexbytes-offset. "
-              "The offset is defined in word units counted from the "
-              "first byte of the destination Ethernet MAC address. "
-              "0 <= N <= 32.\n");
        printf("  --pkt-filter-drop-queue=N: set drop-queue. "
               "In perfect mode, when you add a rule with queue = -1 "
               "the packet will be enqueued into the rx drop-queue. "
@@ -157,6 +152,9 @@ usage(char* progname)
        printf("  --crc-strip: enable CRC stripping by hardware.\n");
        printf("  --enable-rx-cksum: enable rx hardware checksum offload.\n");
        printf("  --disable-hw-vlan: disable hardware vlan.\n");
+       printf("  --disable-hw-vlan-filter: disable hardware vlan filter.\n");
+       printf("  --disable-hw-vlan-strip: disable hardware vlan strip.\n");
+       printf("  --disable-hw-vlan-extend: disable hardware vlan extend.\n");
        printf("  --enable-drop-en: enable per queue packet drop.\n");
        printf("  --disable-rss: disable rss.\n");
        printf("  --port-topology=N: set port topology (N: paired (default) or "
@@ -171,20 +169,14 @@ usage(char* progname)
        printf("  --txd=N: set the number of descriptors in TX rings to N.\n");
        printf("  --burst=N: set the number of packets per burst to N.\n");
        printf("  --mbcache=N: set the cache of mbuf memory pool to N.\n");
-       printf("  --rxpt=N: set prefetch threshold register of RX rings to N "
-              "(0 <= N <= 16).\n");
-       printf("  --rxht=N: set the host threshold register of RX rings to N "
-              "(0 <= N <= 16).\n");
+       printf("  --rxpt=N: set prefetch threshold register of RX rings to N.\n");
+       printf("  --rxht=N: set the host threshold register of RX rings to N.\n");
        printf("  --rxfreet=N: set the free threshold of RX descriptors to N "
               "(0 <= N < value of rxd).\n");
-       printf("  --rxwt=N: set the write-back threshold register of RX rings "
-              "to N (0 <= N <= 16).\n");
-       printf("  --txpt=N: set the prefetch threshold register of TX rings "
-              "to N (0 <= N <= 16).\n");
-       printf("  --txht=N: set the nhost threshold register of TX rings to N "
-              "(0 <= N <= 16).\n");
-       printf("  --txwt=N: set the write-back threshold register of TX rings "
-              "to N (0 <= N <= 16).\n");
+       printf("  --rxwt=N: set the write-back threshold register of RX rings to N.\n");
+       printf("  --txpt=N: set the prefetch threshold register of TX rings to N.\n");
+       printf("  --txht=N: set the nhost threshold register of TX rings to N.\n");
+       printf("  --txwt=N: set the write-back threshold register of TX rings to N.\n");
        printf("  --txfreet=N: set the transmit free threshold of TX rings to N "
               "(0 <= N <= value of txd).\n");
        printf("  --txrst=N: set the transmit RS bit threshold of TX rings to N "
@@ -376,6 +368,7 @@ parse_portnuma_config(const char *q_arg)
        };
        unsigned long int_fld[_NUM_FLD];
        char *str_fld[_NUM_FLD];
+       portid_t pid;
 
        /* reset from value set at definition */
        while ((p = strchr(p0,'(')) != NULL) {
@@ -397,14 +390,17 @@ parse_portnuma_config(const char *q_arg)
                                return -1;
                }
                port_id = (uint8_t)int_fld[FLD_PORT];
-               if (port_id >= nb_ports) {
-                       printf("Invalid port, range is [0, %d]\n", nb_ports - 1);
+               if (port_id_is_invalid(port_id, ENABLED_WARN)) {
+                       printf("Valid port range is [0");
+                       FOREACH_PORT(pid, ports)
+                               printf(", %d", pid);
+                       printf("]\n");
                        return -1;
                }
                socket_id = (uint8_t)int_fld[FLD_SOCKET];
-               if(socket_id >= MAX_SOCKET) {
+               if(socket_id >= max_socket) {
                        printf("Invalid socket id, range is [0, %d]\n",
-                                MAX_SOCKET - 1);
+                                max_socket - 1);
                        return -1;
                }
                port_numa[port_id] = socket_id;
@@ -429,6 +425,7 @@ parse_ringnuma_config(const char *q_arg)
        };
        unsigned long int_fld[_NUM_FLD];
        char *str_fld[_NUM_FLD];
+       portid_t pid;
        #define RX_RING_ONLY 0x1
        #define TX_RING_ONLY 0x2
        #define RXTX_RING    0x3
@@ -453,14 +450,17 @@ parse_ringnuma_config(const char *q_arg)
                                return -1;
                }
                port_id = (uint8_t)int_fld[FLD_PORT];
-               if (port_id >= nb_ports) {
-                       printf("Invalid port, range is [0, %d]\n", nb_ports - 1);
+               if (port_id_is_invalid(port_id, ENABLED_WARN)) {
+                       printf("Valid port range is [0");
+                       FOREACH_PORT(pid, ports)
+                               printf(", %d", pid);
+                       printf("]\n");
                        return -1;
                }
                socket_id = (uint8_t)int_fld[FLD_SOCKET];
-               if (socket_id >= MAX_SOCKET) {
+               if (socket_id >= max_socket) {
                        printf("Invalid socket id, range is [0, %d]\n",
-                               MAX_SOCKET - 1);
+                               max_socket - 1);
                        return -1;
                }
                ring_flag = (uint8_t)int_fld[FLD_FLAG];
@@ -523,11 +523,13 @@ launch_args_parse(int argc, char** argv)
                { "pkt-filter-mode",            1, 0, 0 },
                { "pkt-filter-report-hash",     1, 0, 0 },
                { "pkt-filter-size",            1, 0, 0 },
-               { "pkt-filter-flexbytes-offset",1, 0, 0 },
                { "pkt-filter-drop-queue",      1, 0, 0 },
                { "crc-strip",                  0, 0, 0 },
                { "enable-rx-cksum",            0, 0, 0 },
                { "disable-hw-vlan",            0, 0, 0 },
+               { "disable-hw-vlan-filter",     0, 0, 0 },
+               { "disable-hw-vlan-strip",      0, 0, 0 },
+               { "disable-hw-vlan-extend",     0, 0, 0 },
                { "enable-drop-en",            0, 0, 0 },
                { "disable-rss",                0, 0, 0 },
                { "port-topology",              1, 0, 0 },
@@ -630,8 +632,7 @@ launch_args_parse(int argc, char** argv)
                                        nb_fwd_ports = (uint8_t) n;
                                else
                                        rte_exit(EXIT_FAILURE,
-                                                "nb-ports should be > 0 and <= %d\n",
-                                                nb_ports);
+                                                "Invalid port %d\n", n);
                        }
                        if (!strcmp(lgopts[opt_idx].name, "nb-cores")) {
                                n = atoi(optarg);
@@ -666,12 +667,12 @@ launch_args_parse(int argc, char** argv)
                                           "invalid ring-numa configuration\n");
                        if (!strcmp(lgopts[opt_idx].name, "socket-num")) {
                                n = atoi(optarg);
-                               if(n < MAX_SOCKET)
+                               if((uint8_t)n < max_socket)
                                        socket_num = (uint8_t)n;
                                else
                                        rte_exit(EXIT_FAILURE,
                                                "The socket number should be < %d\n",
-                                               MAX_SOCKET);
+                                               max_socket);
                        }
                        if (!strcmp(lgopts[opt_idx].name, "mbuf-size")) {
                                n = atoi(optarg);
@@ -746,17 +747,6 @@ launch_args_parse(int argc, char** argv)
                                                 " must be: 64K or 128K or 256K\n",
                                                 optarg);
                        }
-                       if (!strcmp(lgopts[opt_idx].name,
-                                   "pkt-filter-flexbytes-offset")) {
-                               n = atoi(optarg);
-                               if ( n >= 0 && n <= (int) 32)
-                                       fdir_conf.flexbytes_offset =
-                                               (uint8_t) n;
-                               else
-                                       rte_exit(EXIT_FAILURE,
-                                                "flexbytes %d invalid - must"
-                                                "be  >= 0 && <= 32\n", n);
-                       }
                        if (!strcmp(lgopts[opt_idx].name,
                                    "pkt-filter-drop-queue")) {
                                n = atoi(optarg);
@@ -778,6 +768,18 @@ launch_args_parse(int argc, char** argv)
                                rx_mode.hw_vlan_extend = 0;
                        }
 
+                       if (!strcmp(lgopts[opt_idx].name,
+                                       "disable-hw-vlan-filter"))
+                               rx_mode.hw_vlan_filter = 0;
+
+                       if (!strcmp(lgopts[opt_idx].name,
+                                       "disable-hw-vlan-strip"))
+                               rx_mode.hw_vlan_strip  = 0;
+
+                       if (!strcmp(lgopts[opt_idx].name,
+                                       "disable-hw-vlan-extend"))
+                               rx_mode.hw_vlan_extend = 0;
+
                        if (!strcmp(lgopts[opt_idx].name, "enable-drop-en"))
                                rx_drop_en = 1;
 
@@ -819,20 +821,6 @@ launch_args_parse(int argc, char** argv)
                                                  " >= 1 && <= %d\n", n,
                                                  (int) MAX_QUEUE_ID);
                        }
-                       if (!strcmp(lgopts[opt_idx].name, "rxd")) {
-                               n = atoi(optarg);
-                               if (n > 0)
-                                       nb_rxd = (uint16_t) n;
-                               else
-                                       rte_exit(EXIT_FAILURE, "rxd must be > 0\n");
-                       }
-                       if (!strcmp(lgopts[opt_idx].name, "txd")) {
-                               n = atoi(optarg);
-                               if (n > 0)
-                                       nb_txd = (uint16_t) n;
-                               else
-                                       rte_exit(EXIT_FAILURE, "txd must be in > 0\n");
-                       }
                        if (!strcmp(lgopts[opt_idx].name, "burst")) {
                                n = atoi(optarg);
                                if ((n >= 1) && (n <= MAX_PKT_BURST))
@@ -852,38 +840,17 @@ launch_args_parse(int argc, char** argv)
                                                 "mbcache must be >= 0 and <= %d\n",
                                                 RTE_MEMPOOL_CACHE_MAX_SIZE);
                        }
-                       if (!strcmp(lgopts[opt_idx].name, "txpt")) {
-                               n = atoi(optarg);
-                               if (n >= 0)
-                                       tx_thresh.pthresh = (uint8_t)n;
-                               else
-                                       rte_exit(EXIT_FAILURE, "txpt must be >= 0\n");
-                       }
-                       if (!strcmp(lgopts[opt_idx].name, "txht")) {
-                               n = atoi(optarg);
-                               if (n >= 0)
-                                       tx_thresh.hthresh = (uint8_t)n;
-                               else
-                                       rte_exit(EXIT_FAILURE, "txht must be >= 0\n");
-                       }
-                       if (!strcmp(lgopts[opt_idx].name, "txwt")) {
-                               n = atoi(optarg);
-                               if (n >= 0)
-                                       tx_thresh.wthresh = (uint8_t)n;
-                               else
-                                       rte_exit(EXIT_FAILURE, "txwt must be >= 0\n");
-                       }
                        if (!strcmp(lgopts[opt_idx].name, "txfreet")) {
                                n = atoi(optarg);
                                if (n >= 0)
-                                       tx_free_thresh = (uint16_t)n;
+                                       tx_free_thresh = (int16_t)n;
                                else
                                        rte_exit(EXIT_FAILURE, "txfreet must be >= 0\n");
                        }
                        if (!strcmp(lgopts[opt_idx].name, "txrst")) {
                                n = atoi(optarg);
                                if (n >= 0)
-                                       tx_rs_thresh = (uint16_t)n;
+                                       tx_rs_thresh = (int16_t)n;
                                else
                                        rte_exit(EXIT_FAILURE, "txrst must be >= 0\n");
                        }
@@ -891,32 +858,11 @@ launch_args_parse(int argc, char** argv)
                                char *end = NULL;
                                n = strtoul(optarg, &end, 16);
                                if (n >= 0)
-                                       txq_flags = (uint32_t)n;
+                                       txq_flags = (int32_t)n;
                                else
                                        rte_exit(EXIT_FAILURE,
                                                 "txqflags must be >= 0\n");
                        }
-                       if (!strcmp(lgopts[opt_idx].name, "rxpt")) {
-                               n = atoi(optarg);
-                               if (n >= 0)
-                                       rx_thresh.pthresh = (uint8_t)n;
-                               else
-                                       rte_exit(EXIT_FAILURE, "rxpt must be >= 0\n");
-                       }
-                       if (!strcmp(lgopts[opt_idx].name, "rxht")) {
-                               n = atoi(optarg);
-                               if (n >= 0)
-                                       rx_thresh.hthresh = (uint8_t)n;
-                               else
-                                       rte_exit(EXIT_FAILURE, "rxht must be >= 0\n");
-                       }
-                       if (!strcmp(lgopts[opt_idx].name, "rxwt")) {
-                               n = atoi(optarg);
-                               if (n >= 0)
-                                       rx_thresh.wthresh = (uint8_t)n;
-                               else
-                                       rte_exit(EXIT_FAILURE, "rxwt must be >= 0\n");
-                       }
                        if (!strcmp(lgopts[opt_idx].name, "rxd")) {
                                n = atoi(optarg);
                                if (n > 0) {
@@ -942,49 +888,49 @@ launch_args_parse(int argc, char** argv)
                        if (!strcmp(lgopts[opt_idx].name, "txpt")) {
                                n = atoi(optarg);
                                if (n >= 0)
-                                       tx_thresh.pthresh = (uint8_t)n;
+                                       tx_pthresh = (int8_t)n;
                                else
                                        rte_exit(EXIT_FAILURE, "txpt must be >= 0\n");
                        }
                        if (!strcmp(lgopts[opt_idx].name, "txht")) {
                                n = atoi(optarg);
                                if (n >= 0)
-                                       tx_thresh.hthresh = (uint8_t)n;
+                                       tx_hthresh = (int8_t)n;
                                else
                                        rte_exit(EXIT_FAILURE, "txht must be >= 0\n");
                        }
                        if (!strcmp(lgopts[opt_idx].name, "txwt")) {
                                n = atoi(optarg);
                                if (n >= 0)
-                                       tx_thresh.wthresh = (uint8_t)n;
+                                       tx_wthresh = (int8_t)n;
                                else
                                        rte_exit(EXIT_FAILURE, "txwt must be >= 0\n");
                        }
                        if (!strcmp(lgopts[opt_idx].name, "rxpt")) {
                                n = atoi(optarg);
                                if (n >= 0)
-                                       rx_thresh.pthresh = (uint8_t)n;
+                                       rx_pthresh = (int8_t)n;
                                else
                                        rte_exit(EXIT_FAILURE, "rxpt must be >= 0\n");
                        }
                        if (!strcmp(lgopts[opt_idx].name, "rxht")) {
                                n = atoi(optarg);
                                if (n >= 0)
-                                       rx_thresh.hthresh = (uint8_t)n;
+                                       rx_hthresh = (int8_t)n;
                                else
                                        rte_exit(EXIT_FAILURE, "rxht must be >= 0\n");
                        }
                        if (!strcmp(lgopts[opt_idx].name, "rxwt")) {
                                n = atoi(optarg);
                                if (n >= 0)
-                                       rx_thresh.wthresh = (uint8_t)n;
+                                       rx_wthresh = (int8_t)n;
                                else
                                        rte_exit(EXIT_FAILURE, "rxwt must be >= 0\n");
                        }
                        if (!strcmp(lgopts[opt_idx].name, "rxfreet")) {
                                n = atoi(optarg);
                                if (n >= 0)
-                                       rx_free_thresh = (uint16_t)n;
+                                       rx_free_thresh = (int16_t)n;
                                else
                                        rte_exit(EXIT_FAILURE, "rxfreet must be >= 0\n");
                        }