/*-
* BSD LICENSE
*
- * Copyright(c) 2010-2012 Intel Corporation. All rights reserved.
+ * Copyright(c) 2010-2013 Intel Corporation. All rights reserved.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
"--rss-ip | --rss-udp | "
"--rxpt= | --rxht= | --rxwt= | --rxfreet= | "
"--txpt= | --txht= | --txwt= | --txfreet= | "
- "--txrst= ]\n",
+ "--txrst= | --txqflags= ]\n",
progname);
printf(" --interactive: run in interactive mode\n");
printf(" --help: display this message and quit\n");
printf(" --nb-ports=N set the number of forwarding ports"
" (1 <= N <= %d)\n", nb_ports);
printf(" --coremask=COREMASK: hexadecimal bitmask of cores running "
- "the packet forwarding test\n");
+ "the packet forwarding test. The master lcore is reserved for "
+ "command line parsing only, and can not be masked on for running"
+ "the packet forwarding\n");
printf(" --portmask=PORTMASK: hexadecimal bitmask of ports used "
"by the packet forwarding test\n");
printf(" --numa: enable NUMA-aware allocation of RX/TX rings and of "
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(" --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");
" (0 <= N <= value of txd)\n");
printf(" --txrst=N set the transmit RS bit threshold of TX rings to N"
" (0 <= N <= value of txd)\n");
+ printf(" --txqflags=0xXXXXXXXX hexidecimal bitmask of TX queue flags"
+ " (0 <= N <= 0x7FFFFFFF)\n");
printf(" --tx-queue-stats-mapping (port,queue,mapping)[,(port,queue,mapping]:"
" tx queues statistics counters mapping"
" (0 <= mapping <= %d)\n", RTE_ETHDEV_QUEUE_STAT_CNTRS - 1);
cm = strtoull(coremask, &end, 16);
if ((coremask[0] == '\0') || (end == NULL) || (*end != '\0'))
rte_exit(EXIT_FAILURE, "Invalid fwd core mask\n");
- else
- set_fwd_lcores_mask((uint64_t) cm);
+ else if (set_fwd_lcores_mask((uint64_t) cm) < 0)
+ rte_exit(EXIT_FAILURE, "coremask is not valid\n");
}
/*
int n, opt;
char **argvopt;
int opt_idx;
+ enum { TX, RX };
+
static struct option lgopts[] = {
{ "help", 0, 0, 0 },
{ "interactive", 0, 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 },
+ { "enable-drop-en", 0, 0, 0 },
{ "disable-rss", 0, 0, 0 },
{ "port-topology", 1, 0, 0 },
{ "rss-ip", 0, 0, 0 },
{ "txwt", 1, 0, 0 },
{ "txfreet", 1, 0, 0 },
{ "txrst", 1, 0, 0 },
+ { "txqflags", 1, 0, 0 },
{ "rxpt", 1, 0, 0 },
{ "rxht", 1, 0, 0 },
{ "rxwt", 1, 0, 0 },
rx_mode.hw_vlan_extend = 0;
}
+ if (!strcmp(lgopts[opt_idx].name, "enable-drop-en"))
+ rx_drop_en = 1;
+
if (!strcmp(lgopts[opt_idx].name, "disable-rss"))
rss_hf = 0;
if (!strcmp(lgopts[opt_idx].name, "port-topology")) {
if (!strcmp(lgopts[opt_idx].name, "rss-ip"))
rss_hf = ETH_RSS_IPV4 | ETH_RSS_IPV6;
if (!strcmp(lgopts[opt_idx].name, "rss-udp"))
- rss_hf = ETH_RSS_IPV4 | ETH_RSS_IPV6 |
- ETH_RSS_IPV4_UDP;
+ rss_hf = ETH_RSS_IPV4 |
+ ETH_RSS_IPV6 | ETH_RSS_IPV4_UDP;
if (!strcmp(lgopts[opt_idx].name, "rxq")) {
n = atoi(optarg);
if (n >= 1 && n <= (int) MAX_QUEUE_ID)
else
rte_exit(EXIT_FAILURE, "txrst must be >= 0\n");
}
+ if (!strcmp(lgopts[opt_idx].name, "txqflags")) {
+ char *end = NULL;
+ n = strtoul(optarg, &end, 16);
+ if (n >= 0)
+ txq_flags = (uint32_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)