X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=app%2Ftest-pmd%2Fparameters.c;h=11d9af09b6ce130132113576e8d75a7800994ea3;hb=ff708facfcbf42f3dcb3c62d82ecd93e7b8c2506;hp=454961605af6b3a6e34b7163f6ff3586fd1b1b0b;hpb=e9d48c0072d36eb6423b45fba4ec49d0def6c36f;p=dpdk.git diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c index 454961605a..11d9af09b6 100644 --- a/app/test-pmd/parameters.c +++ b/app/test-pmd/parameters.c @@ -1,13 +1,13 @@ /*- * BSD LICENSE - * + * * Copyright(c) 2010-2014 Intel Corporation. All rights reserved. * All rights reserved. - * + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: - * + * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright @@ -17,7 +17,7 @@ * * Neither the name of Intel Corporation nor the names of its * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR @@ -58,7 +58,6 @@ #include #include #include -#include #include #include #include @@ -71,27 +70,42 @@ #include #include #include +#ifdef RTE_LIBRTE_CMDLINE #include #include +#endif +#ifdef RTE_LIBRTE_PMD_BOND +#include +#endif #include "testpmd.h" static void usage(char* progname) { - printf("usage: %s [--interactive|-i] [--help|-h] | [" + printf("usage: %s " +#ifdef RTE_LIBRTE_CMDLINE + "[--interactive|-i] " +#endif + "[--help|-h] | [--auto-start|-a] | [" "--coremask=COREMASK --portmask=PORTMASK --numa " "--mbuf-size= | --total-num-mbufs= | " "--nb-cores= | --nb-ports= | " +#ifdef RTE_LIBRTE_CMDLINE "--eth-peers-configfile= | " "--eth-peer=X,M:M:M:M:M:M | " +#endif "--pkt-filter-mode= |" "--rss-ip | --rss-udp | " "--rxpt= | --rxht= | --rxwt= | --rxfreet= | " "--txpt= | --txht= | --txwt= | --txfreet= | " "--txrst= | --txqflags= ]\n", progname); +#ifdef RTE_LIBRTE_CMDLINE printf(" --interactive: run in interactive mode.\n"); +#endif + printf(" --auto-start: start forwarding on init " + "[always when non-interactive].\n"); printf(" --help: display this message and quit.\n"); printf(" --nb-cores=N: set the number of forwarding cores " "(1 <= N <= %d).\n", nb_lcores); @@ -118,20 +132,18 @@ usage(char* progname) printf(" --total-num-mbufs=N: set the number of mbufs to be allocated " "in mbuf pools.\n"); printf(" --max-pkt-len=N: set the maximum size of packet to N bytes.\n"); +#ifdef RTE_LIBRTE_CMDLINE printf(" --eth-peers-configfile=name: config file with ethernet addresses " "of peer ports.\n"); printf(" --eth-peer=X,M:M:M:M:M:M: set the MAC address of the X peer " "port (0 <= X < %d).\n", RTE_MAX_ETHPORTS); +#endif printf(" --pkt-filter-mode=N: set Flow Director mode " "(N: none (default mode) or signature or perfect).\n"); printf(" --pkt-filter-report-hash=N: set Flow Director report mode " "(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. " @@ -140,10 +152,15 @@ 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 " "chained).\n"); + printf(" --forward-mode=N: set forwarding mode (N: %s).\n", + list_pkt_forwarding_modes()); printf(" --rss-ip: set RSS functions to IPv4/IPv6 only .\n"); printf(" --rss-udp: set RSS functions to IPv4/IPv6 + UDP.\n"); printf(" --rxq=N: set the number of RX queues per port to N.\n"); @@ -152,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 " @@ -180,8 +191,12 @@ usage(char* progname) "(0 <= mapping <= %d).\n", RTE_ETHDEV_QUEUE_STAT_CNTRS - 1); printf(" --no-flush-rx: Don't flush RX streams before forwarding." " Used mainly with PCAP drivers.\n"); + printf(" --txpkts=X[,Y]*: set TX segment sizes.\n"); + printf(" --disable-link-check: disable check on link status when " + "starting/stopping ports.\n"); } +#ifdef RTE_LIBRTE_CMDLINE static int init_peer_eth_addrs(char *config_filename) { @@ -200,7 +215,8 @@ init_peer_eth_addrs(char *config_filename) if (fgets(buf, sizeof(buf), config_file) == NULL) break; - if (cmdline_parse_etheraddr(NULL, buf, &peer_eth_addrs[i]) < 0 ){ + if (cmdline_parse_etheraddr(NULL, buf, &peer_eth_addrs[i], + sizeof(peer_eth_addrs[i])) < 0) { printf("Bad MAC address format on line %d\n", i+1); fclose(config_file); return -1; @@ -210,6 +226,7 @@ init_peer_eth_addrs(char *config_filename) nb_peer_eth_addrs = (portid_t) i; return 0; } +#endif /* * Parse the coremask given as argument (hexadecimal string) and set @@ -279,7 +296,7 @@ parse_queue_stats_mapping_config(const char *q_arg, int is_rx) if(size >= sizeof(s)) return -1; - rte_snprintf(s, sizeof(s), "%.*s", size, p); + snprintf(s, sizeof(s), "%.*s", size, p); if (rte_strsplit(s, sizeof(s), str_fld, _NUM_FLD, ',') != _NUM_FLD) return -1; for (i = 0; i < _NUM_FLD; i++){ @@ -295,14 +312,14 @@ parse_queue_stats_mapping_config(const char *q_arg, int is_rx) return -1; } - if (is_rx ? (nb_rx_queue_stats_mappings >= MAX_RX_QUEUE_STATS_MAPPINGS) : - (nb_tx_queue_stats_mappings >= MAX_TX_QUEUE_STATS_MAPPINGS)) { - printf("exceeded max number of %s queue statistics mappings: %hu\n", - is_rx ? "RX" : "TX", - is_rx ? nb_rx_queue_stats_mappings : nb_tx_queue_stats_mappings); - return -1; - } if (!is_rx) { + if ((nb_tx_queue_stats_mappings >= + MAX_TX_QUEUE_STATS_MAPPINGS)) { + printf("exceeded max number of TX queue " + "statistics mappings: %hu\n", + nb_tx_queue_stats_mappings); + return -1; + } tx_queue_stats_mappings_array[nb_tx_queue_stats_mappings].port_id = (uint8_t)int_fld[FLD_PORT]; tx_queue_stats_mappings_array[nb_tx_queue_stats_mappings].queue_id = @@ -312,6 +329,13 @@ parse_queue_stats_mapping_config(const char *q_arg, int is_rx) ++nb_tx_queue_stats_mappings; } else { + if ((nb_rx_queue_stats_mappings >= + MAX_RX_QUEUE_STATS_MAPPINGS)) { + printf("exceeded max number of RX queue " + "statistics mappings: %hu\n", + nb_rx_queue_stats_mappings); + return -1; + } rx_queue_stats_mappings_array[nb_rx_queue_stats_mappings].port_id = (uint8_t)int_fld[FLD_PORT]; rx_queue_stats_mappings_array[nb_rx_queue_stats_mappings].queue_id = @@ -343,7 +367,8 @@ parse_portnuma_config(const char *q_arg) _NUM_FLD }; unsigned long int_fld[_NUM_FLD]; - char *str_fld[_NUM_FLD]; + char *str_fld[_NUM_FLD]; + portid_t pid; /* reset from value set at definition */ while ((p = strchr(p0,'(')) != NULL) { @@ -355,7 +380,7 @@ parse_portnuma_config(const char *q_arg) if(size >= sizeof(s)) return -1; - rte_snprintf(s, sizeof(s), "%.*s", size, p); + snprintf(s, sizeof(s), "%.*s", size, p); if (rte_strsplit(s, sizeof(s), str_fld, _NUM_FLD, ',') != _NUM_FLD) return -1; for (i = 0; i < _NUM_FLD; i++) { @@ -365,8 +390,11 @@ 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]; @@ -396,7 +424,8 @@ parse_ringnuma_config(const char *q_arg) _NUM_FLD }; unsigned long int_fld[_NUM_FLD]; - char *str_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 @@ -411,7 +440,7 @@ parse_ringnuma_config(const char *q_arg) if(size >= sizeof(s)) return -1; - rte_snprintf(s, sizeof(s), "%.*s", size, p); + snprintf(s, sizeof(s), "%.*s", size, p); if (rte_strsplit(s, sizeof(s), str_fld, _NUM_FLD, ',') != _NUM_FLD) return -1; for (i = 0; i < _NUM_FLD; i++) { @@ -421,8 +450,11 @@ 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]; @@ -454,8 +486,8 @@ parse_ringnuma_config(const char *q_arg) ring_flag,port_id); break; } - } - + } + return 0; } @@ -469,32 +501,39 @@ launch_args_parse(int argc, char** argv) static struct option lgopts[] = { { "help", 0, 0, 0 }, +#ifdef RTE_LIBRTE_CMDLINE { "interactive", 0, 0, 0 }, + { "auto-start", 0, 0, 0 }, { "eth-peers-configfile", 1, 0, 0 }, { "eth-peer", 1, 0, 0 }, +#endif { "ports", 1, 0, 0 }, { "nb-cores", 1, 0, 0 }, { "nb-ports", 1, 0, 0 }, { "coremask", 1, 0, 0 }, { "portmask", 1, 0, 0 }, { "numa", 0, 0, 0 }, + { "mp-anon", 0, 0, 0 }, { "port-numa-config", 1, 0, 0 }, { "ring-numa-config", 1, 0, 0 }, - { "socket-num", 1, 0, 0 }, + { "socket-num", 1, 0, 0 }, { "mbuf-size", 1, 0, 0 }, { "total-num-mbufs", 1, 0, 0 }, { "max-pkt-len", 1, 0, 0 }, { "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 }, + { "forward-mode", 1, 0, 0 }, { "rss-ip", 0, 0, 0 }, { "rss-udp", 0, 0, 0 }, { "rxq", 1, 0, 0 }, @@ -516,27 +555,46 @@ launch_args_parse(int argc, char** argv) { "tx-queue-stats-mapping", 1, 0, 0 }, { "rx-queue-stats-mapping", 1, 0, 0 }, { "no-flush-rx", 0, 0, 0 }, + { "txpkts", 1, 0, 0 }, + { "disable-link-check", 0, 0, 0 }, { 0, 0, 0, 0 }, }; argvopt = argv; - while ((opt = getopt_long(argc, argvopt, "ih", +#ifdef RTE_LIBRTE_CMDLINE +#define SHORTOPTS "i" +#else +#define SHORTOPTS "" +#endif + while ((opt = getopt_long(argc, argvopt, SHORTOPTS "ah", lgopts, &opt_idx)) != EOF) { switch (opt) { +#ifdef RTE_LIBRTE_CMDLINE case 'i': printf("Interactive-mode selected\n"); interactive = 1; break; +#endif + case 'a': + printf("Auto-start selected\n"); + auto_start = 1; + break; + case 0: /*long options */ if (!strcmp(lgopts[opt_idx].name, "help")) { usage(argv[0]); rte_exit(EXIT_SUCCESS, "Displayed help\n"); } +#ifdef RTE_LIBRTE_CMDLINE if (!strcmp(lgopts[opt_idx].name, "interactive")) { printf("Interactive-mode selected\n"); interactive = 1; } + if (!strcmp(lgopts[opt_idx].name, "auto-start")) { + printf("Auto-start selected\n"); + auto_start = 1; + } if (!strcmp(lgopts[opt_idx].name, "eth-peers-configfile")) { if (init_peer_eth_addrs(optarg) != 0) @@ -557,7 +615,8 @@ launch_args_parse(int argc, char** argv) "eth-peer: port %d >= RTE_MAX_ETHPORTS(%d)\n", n, RTE_MAX_ETHPORTS); - if (cmdline_parse_etheraddr(NULL, port_end, &peer_addr) < 0 ) + if (cmdline_parse_etheraddr(NULL, port_end, + &peer_addr, sizeof(peer_addr)) < 0) rte_exit(EXIT_FAILURE, "Invalid ethernet address: %s\n", port_end); @@ -566,14 +625,15 @@ launch_args_parse(int argc, char** argv) peer_addr[c]; nb_peer_eth_addrs++; } +#endif if (!strcmp(lgopts[opt_idx].name, "nb-ports")) { n = atoi(optarg); - if (n > 0 && n <= nb_ports) + if (n > 0 && + !port_id_is_invalid(n, DISABLED_WARN)) 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); @@ -594,6 +654,9 @@ launch_args_parse(int argc, char** argv) memset(rxring_numa,NUMA_NO_CONFIG,RTE_MAX_ETHPORTS); memset(txring_numa,NUMA_NO_CONFIG,RTE_MAX_ETHPORTS); } + if (!strcmp(lgopts[opt_idx].name, "mp-anon")) { + mp_anon = 1; + } if (!strcmp(lgopts[opt_idx].name, "port-numa-config")) { if (parse_portnuma_config(optarg)) rte_exit(EXIT_FAILURE, @@ -685,17 +748,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); @@ -717,6 +769,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; @@ -727,16 +791,19 @@ launch_args_parse(int argc, char** argv) port_topology = PORT_TOPOLOGY_PAIRED; else if (!strcmp(optarg, "chained")) port_topology = PORT_TOPOLOGY_CHAINED; + else if (!strcmp(optarg, "loop")) + port_topology = PORT_TOPOLOGY_LOOP; else rte_exit(EXIT_FAILURE, "port-topology %s invalid -" " must be: paired or chained \n", optarg); } + if (!strcmp(lgopts[opt_idx].name, "forward-mode")) + set_pkt_forwarding_mode(optarg); if (!strcmp(lgopts[opt_idx].name, "rss-ip")) - rss_hf = ETH_RSS_IPV4 | ETH_RSS_IPV6; + rss_hf = ETH_RSS_IP; if (!strcmp(lgopts[opt_idx].name, "rss-udp")) - rss_hf = ETH_RSS_IPV4 | - ETH_RSS_IPV6 | ETH_RSS_IPV4_UDP; + rss_hf = ETH_RSS_UDP; if (!strcmp(lgopts[opt_idx].name, "rxq")) { n = atoi(optarg); if (n >= 1 && n <= (int) MAX_QUEUE_ID) @@ -755,20 +822,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)) @@ -788,38 +841,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"); } @@ -827,32 +859,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) { @@ -878,49 +889,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"); } @@ -936,8 +947,21 @@ launch_args_parse(int argc, char** argv) "invalid RX queue statistics mapping config entered\n"); } } + if (!strcmp(lgopts[opt_idx].name, "txpkts")) { + unsigned seg_lengths[RTE_MAX_SEGS_PER_PKT]; + unsigned int nb_segs; + + nb_segs = parse_item_list(optarg, "txpkt segments", + RTE_MAX_SEGS_PER_PKT, seg_lengths, 0); + if (nb_segs > 0) + set_tx_pkt_segments(seg_lengths, nb_segs); + else + rte_exit(EXIT_FAILURE, "bad txpkts\n"); + } if (!strcmp(lgopts[opt_idx].name, "no-flush-rx")) no_flush_rx = 1; + if (!strcmp(lgopts[opt_idx].name, "disable-link-check")) + no_link_check = 1; break; case 'h':