X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=app%2Ftest-pmd%2Fparameters.c;h=eb14cd3ca2a567935a5d47d9dde209824ed64025;hb=3031749c2df04a63cdcef186dcce3781e61436e8;hp=8a3ce2c5662ddaa324fc8f0af8fcc8534962ce24;hpb=769ce6b1783591b70141b4ac4c20bebea1cab155;p=dpdk.git diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c index 8a3ce2c566..eb14cd3ca2 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 @@ -196,6 +196,9 @@ 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 @@ -361,7 +364,7 @@ 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]; /* reset from value set at definition */ while ((p = strchr(p0,'(')) != NULL) { @@ -414,7 +417,7 @@ 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]; #define RX_RING_ONLY 0x1 #define TX_RING_ONLY 0x2 #define RXTX_RING 0x3 @@ -472,11 +475,57 @@ parse_ringnuma_config(const char *q_arg) ring_flag,port_id); break; } - } - + } + return 0; } +static unsigned int +parse_item_list(char* str, unsigned int max_items, unsigned int *parsed_items) +{ + unsigned int nb_item; + unsigned int value; + unsigned int i; + int value_ok; + char c; + + /* + * First parse all items in the list and store their value. + */ + value = 0; + nb_item = 0; + value_ok = 0; + for (i = 0; i < strlen(str); i++) { + c = str[i]; + if ((c >= '0') && (c <= '9')) { + value = (unsigned int) (value * 10 + (c - '0')); + value_ok = 1; + continue; + } + if (c != ',') { + printf("character %c is not a decimal digit\n", c); + return (0); + } + if (! value_ok) { + printf("No valid value before comma\n"); + return (0); + } + if (nb_item < max_items) { + parsed_items[nb_item] = value; + value_ok = 0; + value = 0; + } + nb_item++; + } + + if (nb_item >= max_items) + rte_exit(EXIT_FAILURE, "too many txpkt segments!\n"); + + parsed_items[nb_item++] = value; + + return (nb_item); +} + void launch_args_parse(int argc, char** argv) { @@ -502,7 +551,7 @@ launch_args_parse(int argc, char** argv) { "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 }, @@ -539,6 +588,8 @@ 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 }, }; @@ -984,8 +1035,20 @@ 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, RTE_MAX_SEGS_PER_PKT, seg_lengths); + 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':