X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;ds=sidebyside;f=app%2Ftest-pmd%2Fparameters.c;h=245b610641ee9a812631d9e2c172918ee939cfc4;hb=1d273622c84042cb7e2f3d13faa9b705ce3f24a0;hp=7f18b3e7483e8a56df4ff052736d3af8d6fe9ac3;hpb=59fcf854eda29c12c3c41ec8a7c425bc0cc90d35;p=dpdk.git diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c index 7f18b3e748..245b610641 100644 --- a/app/test-pmd/parameters.c +++ b/app/test-pmd/parameters.c @@ -19,6 +19,7 @@ #include #include #include +#include #include #include @@ -65,6 +66,7 @@ usage(char* progname) #ifdef RTE_LIBRTE_CMDLINE "--eth-peers-configfile= | " "--eth-peer=X,M:M:M:M:M:M | " + "--tx-ip=SRC,DST | --tx-udp=PORT | " #endif "--pkt-filter-mode= |" "--rss-ip | --rss-udp | " @@ -647,6 +649,8 @@ launch_args_parse(int argc, char** argv) { "mlockall", 0, 0, 0 }, { "no-mlockall", 0, 0, 0 }, { "mp-alloc", 1, 0, 0 }, + { "tx-ip", 1, 0, 0 }, + { "tx-udp", 1, 0, 0 }, { "noisy-tx-sw-buffer-size", 1, 0, 0 }, { "noisy-tx-sw-buffer-flushtime", 1, 0, 0 }, { "noisy-lkup-memory", 1, 0, 0 }, @@ -746,6 +750,55 @@ launch_args_parse(int argc, char** argv) nb_peer_eth_addrs++; } #endif + if (!strcmp(lgopts[opt_idx].name, "tx-ip")) { + struct in_addr in; + char *end; + + end = strchr(optarg, ','); + if (end == optarg || !end) + rte_exit(EXIT_FAILURE, + "Invalid tx-ip: %s", optarg); + + *end++ = 0; + if (inet_aton(optarg, &in) == 0) + rte_exit(EXIT_FAILURE, + "Invalid source IP address: %s\n", + optarg); + tx_ip_src_addr = rte_be_to_cpu_32(in.s_addr); + + if (inet_aton(end, &in) == 0) + rte_exit(EXIT_FAILURE, + "Invalid destination IP address: %s\n", + optarg); + tx_ip_dst_addr = rte_be_to_cpu_32(in.s_addr); + } + if (!strcmp(lgopts[opt_idx].name, "tx-udp")) { + char *end = NULL; + + errno = 0; + n = strtoul(optarg, &end, 10); + if (errno != 0 || end == optarg || + n > UINT16_MAX || + !(*end == '\0' || *end == ',')) + rte_exit(EXIT_FAILURE, + "Invalid UDP port: %s\n", + optarg); + tx_udp_src_port = n; + if (*end == ',') { + char *dst = end + 1; + + n = strtoul(dst, &end, 10); + if (errno != 0 || end == dst || + n > UINT16_MAX || *end) + rte_exit(EXIT_FAILURE, + "Invalid destination UDP port: %s\n", + dst); + tx_udp_dst_port = n; + } else { + tx_udp_dst_port = n; + } + + } if (!strcmp(lgopts[opt_idx].name, "nb-ports")) { n = atoi(optarg); if (n > 0 && n <= nb_ports) @@ -826,15 +879,15 @@ launch_args_parse(int argc, char** argv) } if (!strcmp(lgopts[opt_idx].name, "max-pkt-len")) { n = atoi(optarg); - if (n >= ETHER_MIN_LEN) { + if (n >= RTE_ETHER_MIN_LEN) { rx_mode.max_rx_pkt_len = (uint32_t) n; - if (n > ETHER_MAX_LEN) + if (n > RTE_ETHER_MAX_LEN) rx_offloads |= DEV_RX_OFFLOAD_JUMBO_FRAME; } else rte_exit(EXIT_FAILURE, "Invalid max-pkt-len=%d - should be > %d\n", - n, ETHER_MIN_LEN); + n, RTE_ETHER_MIN_LEN); } if (!strcmp(lgopts[opt_idx].name, "pkt-filter-mode")) { if (!strcmp(optarg, "signature"))