153a3b7e8SJerin Jacob /* SPDX-License-Identifier: BSD-3-Clause 253a3b7e8SJerin Jacob * Copyright(c) 2017 Cavium, Inc 30add6c27SJerin Jacob */ 40add6c27SJerin Jacob 50add6c27SJerin Jacob #include <stdio.h> 672b452c5SDmitry Kozlyuk #include <stdlib.h> 70add6c27SJerin Jacob #include <string.h> 80add6c27SJerin Jacob #include <inttypes.h> 90add6c27SJerin Jacob #include <getopt.h> 100add6c27SJerin Jacob 116723c0fcSBruce Richardson #include <rte_string_fns.h> 120add6c27SJerin Jacob #include <rte_common.h> 130add6c27SJerin Jacob #include <rte_eventdev.h> 140add6c27SJerin Jacob #include <rte_lcore.h> 150add6c27SJerin Jacob 160add6c27SJerin Jacob #include "evt_options.h" 170add6c27SJerin Jacob #include "evt_test.h" 180add6c27SJerin Jacob #include "parser.h" 190add6c27SJerin Jacob 200add6c27SJerin Jacob void 210add6c27SJerin Jacob evt_options_default(struct evt_options *opt) 220add6c27SJerin Jacob { 230add6c27SJerin Jacob memset(opt, 0, sizeof(*opt)); 240add6c27SJerin Jacob opt->verbose_level = 1; /* Enable minimal prints */ 250add6c27SJerin Jacob opt->dev_id = 0; 260add6c27SJerin Jacob strncpy(opt->test_name, "order_queue", EVT_TEST_NAME_MAX_LEN); 270add6c27SJerin Jacob opt->nb_flows = 1024; 280add6c27SJerin Jacob opt->socket_id = SOCKET_ID_ANY; 290add6c27SJerin Jacob opt->pool_sz = 16 * 1024; 30f123568cSPavan Nikhilesh opt->prod_enq_burst_sz = 0; 310add6c27SJerin Jacob opt->wkr_deq_dep = 16; 320add6c27SJerin Jacob opt->nb_pkts = (1ULL << 26); /* do ~64M packets */ 33d008f20bSPavan Nikhilesh opt->nb_timers = 1E8; 34d008f20bSPavan Nikhilesh opt->nb_timer_adptrs = 1; 35d008f20bSPavan Nikhilesh opt->timer_tick_nsec = 1E3; /* 1000ns ~ 1us */ 36d008f20bSPavan Nikhilesh opt->max_tmo_nsec = 1E5; /* 100000ns ~100us */ 37d008f20bSPavan Nikhilesh opt->expiry_nsec = 1E4; /* 10000ns ~10us */ 38b01974daSPavan Nikhilesh opt->prod_type = EVT_PROD_TYPE_SYNT; 392eaa37b8SPavan Nikhilesh opt->eth_queues = 1; 402eaa37b8SPavan Nikhilesh opt->vector_size = 64; 412eaa37b8SPavan Nikhilesh opt->vector_tmo_nsec = 100E3; 428f5b5495SAkhil Goyal opt->crypto_op_type = RTE_CRYPTO_OP_TYPE_SYMMETRIC; 43750ab9d5SAakash Sasidharan opt->crypto_cipher_alg = RTE_CRYPTO_CIPHER_NULL; 44750ab9d5SAakash Sasidharan opt->crypto_cipher_key_sz = 0; 450add6c27SJerin Jacob } 4689e84026SJerin Jacob 474afd440eSGuduri Prathyusha typedef int (*option_parser_t)(struct evt_options *opt, 484afd440eSGuduri Prathyusha const char *arg); 494afd440eSGuduri Prathyusha 504afd440eSGuduri Prathyusha struct long_opt_parser { 514afd440eSGuduri Prathyusha const char *lgopt_name; 524afd440eSGuduri Prathyusha option_parser_t parser_fn; 534afd440eSGuduri Prathyusha }; 544afd440eSGuduri Prathyusha 554afd440eSGuduri Prathyusha static int 564afd440eSGuduri Prathyusha evt_parse_nb_flows(struct evt_options *opt, const char *arg) 574afd440eSGuduri Prathyusha { 584afd440eSGuduri Prathyusha int ret; 594afd440eSGuduri Prathyusha 604afd440eSGuduri Prathyusha ret = parser_read_uint32(&(opt->nb_flows), arg); 614afd440eSGuduri Prathyusha 624afd440eSGuduri Prathyusha return ret; 634afd440eSGuduri Prathyusha } 644afd440eSGuduri Prathyusha 654afd440eSGuduri Prathyusha static int 664afd440eSGuduri Prathyusha evt_parse_dev_id(struct evt_options *opt, const char *arg) 674afd440eSGuduri Prathyusha { 684afd440eSGuduri Prathyusha int ret; 694afd440eSGuduri Prathyusha 704afd440eSGuduri Prathyusha ret = parser_read_uint8(&(opt->dev_id), arg); 714afd440eSGuduri Prathyusha 724afd440eSGuduri Prathyusha return ret; 734afd440eSGuduri Prathyusha } 744afd440eSGuduri Prathyusha 754afd440eSGuduri Prathyusha static int 764afd440eSGuduri Prathyusha evt_parse_verbose(struct evt_options *opt, const char *arg __rte_unused) 774afd440eSGuduri Prathyusha { 784afd440eSGuduri Prathyusha opt->verbose_level = atoi(arg); 794afd440eSGuduri Prathyusha return 0; 804afd440eSGuduri Prathyusha } 814afd440eSGuduri Prathyusha 824afd440eSGuduri Prathyusha static int 834afd440eSGuduri Prathyusha evt_parse_fwd_latency(struct evt_options *opt, const char *arg __rte_unused) 844afd440eSGuduri Prathyusha { 854afd440eSGuduri Prathyusha opt->fwd_latency = 1; 864afd440eSGuduri Prathyusha return 0; 874afd440eSGuduri Prathyusha } 884afd440eSGuduri Prathyusha 894afd440eSGuduri Prathyusha static int 904afd440eSGuduri Prathyusha evt_parse_queue_priority(struct evt_options *opt, const char *arg __rte_unused) 914afd440eSGuduri Prathyusha { 924afd440eSGuduri Prathyusha opt->q_priority = 1; 934afd440eSGuduri Prathyusha return 0; 944afd440eSGuduri Prathyusha } 954afd440eSGuduri Prathyusha 964afd440eSGuduri Prathyusha static int 97f0959283SPavan Nikhilesh evt_parse_deq_tmo_nsec(struct evt_options *opt, const char *arg) 98f0959283SPavan Nikhilesh { 99f0959283SPavan Nikhilesh int ret; 100f0959283SPavan Nikhilesh 101f0959283SPavan Nikhilesh ret = parser_read_uint32(&(opt->deq_tmo_nsec), arg); 102f0959283SPavan Nikhilesh 103f0959283SPavan Nikhilesh return ret; 104f0959283SPavan Nikhilesh } 105f0959283SPavan Nikhilesh 106f0959283SPavan Nikhilesh static int 107b01974daSPavan Nikhilesh evt_parse_eth_prod_type(struct evt_options *opt, const char *arg __rte_unused) 108b01974daSPavan Nikhilesh { 109b01974daSPavan Nikhilesh opt->prod_type = EVT_PROD_TYPE_ETH_RX_ADPTR; 110b01974daSPavan Nikhilesh return 0; 111b01974daSPavan Nikhilesh } 112b01974daSPavan Nikhilesh 113b01974daSPavan Nikhilesh static int 114c9043624SPavan Nikhilesh evt_parse_tx_first(struct evt_options *opt, const char *arg __rte_unused) 115c9043624SPavan Nikhilesh { 116c9043624SPavan Nikhilesh int ret; 117c9043624SPavan Nikhilesh 118c9043624SPavan Nikhilesh ret = parser_read_uint32(&(opt->tx_first), arg); 119c9043624SPavan Nikhilesh 120c9043624SPavan Nikhilesh return ret; 121c9043624SPavan Nikhilesh } 122c9043624SPavan Nikhilesh 123c9043624SPavan Nikhilesh static int 124c9043624SPavan Nikhilesh evt_parse_tx_pkt_sz(struct evt_options *opt, const char *arg __rte_unused) 125c9043624SPavan Nikhilesh { 126c9043624SPavan Nikhilesh int ret; 127c9043624SPavan Nikhilesh 128c9043624SPavan Nikhilesh ret = parser_read_uint16(&(opt->tx_pkt_sz), arg); 129c9043624SPavan Nikhilesh 130c9043624SPavan Nikhilesh return ret; 131c9043624SPavan Nikhilesh } 132c9043624SPavan Nikhilesh 133c9043624SPavan Nikhilesh static int 134*7a7a04d3SPavan Nikhilesh evt_parse_preschedule(struct evt_options *opt, const char *arg __rte_unused) 135*7a7a04d3SPavan Nikhilesh { 136*7a7a04d3SPavan Nikhilesh int ret; 137*7a7a04d3SPavan Nikhilesh 138*7a7a04d3SPavan Nikhilesh ret = parser_read_uint8(&(opt->preschedule), arg); 139*7a7a04d3SPavan Nikhilesh opt->preschedule_opted = 1; 140*7a7a04d3SPavan Nikhilesh 141*7a7a04d3SPavan Nikhilesh return ret; 142*7a7a04d3SPavan Nikhilesh } 143*7a7a04d3SPavan Nikhilesh 144*7a7a04d3SPavan Nikhilesh static int 145d008f20bSPavan Nikhilesh evt_parse_timer_prod_type(struct evt_options *opt, const char *arg __rte_unused) 146d008f20bSPavan Nikhilesh { 147d008f20bSPavan Nikhilesh opt->prod_type = EVT_PROD_TYPE_EVENT_TIMER_ADPTR; 148d008f20bSPavan Nikhilesh return 0; 149d008f20bSPavan Nikhilesh } 150d008f20bSPavan Nikhilesh 151d008f20bSPavan Nikhilesh static int 15217b22d0bSPavan Nikhilesh evt_parse_timer_prod_type_burst(struct evt_options *opt, 15317b22d0bSPavan Nikhilesh const char *arg __rte_unused) 15417b22d0bSPavan Nikhilesh { 15517b22d0bSPavan Nikhilesh opt->prod_type = EVT_PROD_TYPE_EVENT_TIMER_ADPTR; 15617b22d0bSPavan Nikhilesh opt->timdev_use_burst = 1; 15717b22d0bSPavan Nikhilesh return 0; 15817b22d0bSPavan Nikhilesh } 15917b22d0bSPavan Nikhilesh 16017b22d0bSPavan Nikhilesh static int 161b25a66c4SAmit Prakash Shukla evt_parse_dma_prod_type(struct evt_options *opt, 162b25a66c4SAmit Prakash Shukla const char *arg __rte_unused) 163b25a66c4SAmit Prakash Shukla { 164b25a66c4SAmit Prakash Shukla opt->prod_type = EVT_PROD_TYPE_EVENT_DMA_ADPTR; 165b25a66c4SAmit Prakash Shukla 166b25a66c4SAmit Prakash Shukla /* Only Forward mode is supported for DMA adapter. */ 167b25a66c4SAmit Prakash Shukla opt->dma_adptr_mode = RTE_EVENT_DMA_ADAPTER_OP_FORWARD; 168b25a66c4SAmit Prakash Shukla 169b25a66c4SAmit Prakash Shukla return 0; 170b25a66c4SAmit Prakash Shukla } 171b25a66c4SAmit Prakash Shukla 172b25a66c4SAmit Prakash Shukla static int 173b25a66c4SAmit Prakash Shukla evt_parse_dma_adptr_mode(struct evt_options *opt, const char *arg) 174b25a66c4SAmit Prakash Shukla { 175b25a66c4SAmit Prakash Shukla uint8_t mode; 176b25a66c4SAmit Prakash Shukla int ret; 177b25a66c4SAmit Prakash Shukla 178b25a66c4SAmit Prakash Shukla ret = parser_read_uint8(&mode, arg); 179b25a66c4SAmit Prakash Shukla if (mode != RTE_EVENT_DMA_ADAPTER_OP_FORWARD) { 180b25a66c4SAmit Prakash Shukla RTE_LOG(ERR, USER1, "DMA adapter is supported in forward mode only\n"); 181b25a66c4SAmit Prakash Shukla return -EINVAL; 182b25a66c4SAmit Prakash Shukla } 183b25a66c4SAmit Prakash Shukla 184b25a66c4SAmit Prakash Shukla opt->dma_adptr_mode = RTE_EVENT_DMA_ADAPTER_OP_FORWARD; 185b25a66c4SAmit Prakash Shukla 186b25a66c4SAmit Prakash Shukla return ret; 187b25a66c4SAmit Prakash Shukla } 188b25a66c4SAmit Prakash Shukla 189b25a66c4SAmit Prakash Shukla 190b25a66c4SAmit Prakash Shukla static int 191de2bc16eSShijith Thotton evt_parse_crypto_prod_type(struct evt_options *opt, 192de2bc16eSShijith Thotton const char *arg __rte_unused) 193de2bc16eSShijith Thotton { 194de2bc16eSShijith Thotton opt->prod_type = EVT_PROD_TYPE_EVENT_CRYPTO_ADPTR; 195de2bc16eSShijith Thotton return 0; 196de2bc16eSShijith Thotton } 197de2bc16eSShijith Thotton 198de2bc16eSShijith Thotton static int 199de2bc16eSShijith Thotton evt_parse_crypto_adptr_mode(struct evt_options *opt, const char *arg) 200de2bc16eSShijith Thotton { 201de2bc16eSShijith Thotton uint8_t mode; 202de2bc16eSShijith Thotton int ret; 203de2bc16eSShijith Thotton 204de2bc16eSShijith Thotton ret = parser_read_uint8(&mode, arg); 205de2bc16eSShijith Thotton opt->crypto_adptr_mode = mode ? RTE_EVENT_CRYPTO_ADAPTER_OP_FORWARD : 206de2bc16eSShijith Thotton RTE_EVENT_CRYPTO_ADAPTER_OP_NEW; 207de2bc16eSShijith Thotton return ret; 208de2bc16eSShijith Thotton } 209de2bc16eSShijith Thotton 210de2bc16eSShijith Thotton static int 2118f5b5495SAkhil Goyal evt_parse_crypto_op_type(struct evt_options *opt, const char *arg) 2128f5b5495SAkhil Goyal { 2138f5b5495SAkhil Goyal uint8_t op_type; 2148f5b5495SAkhil Goyal int ret; 2158f5b5495SAkhil Goyal 2168f5b5495SAkhil Goyal ret = parser_read_uint8(&op_type, arg); 2178f5b5495SAkhil Goyal opt->crypto_op_type = op_type ? RTE_CRYPTO_OP_TYPE_ASYMMETRIC : 2188f5b5495SAkhil Goyal RTE_CRYPTO_OP_TYPE_SYMMETRIC; 2198f5b5495SAkhil Goyal return ret; 2208f5b5495SAkhil Goyal } 2218f5b5495SAkhil Goyal 222750ab9d5SAakash Sasidharan static bool 223750ab9d5SAakash Sasidharan cipher_alg_is_bit_mode(enum rte_crypto_cipher_algorithm alg) 224750ab9d5SAakash Sasidharan { 225750ab9d5SAakash Sasidharan return (alg == RTE_CRYPTO_CIPHER_SNOW3G_UEA2 || 226750ab9d5SAakash Sasidharan alg == RTE_CRYPTO_CIPHER_ZUC_EEA3 || 227750ab9d5SAakash Sasidharan alg == RTE_CRYPTO_CIPHER_KASUMI_F8); 228750ab9d5SAakash Sasidharan } 229750ab9d5SAakash Sasidharan 230750ab9d5SAakash Sasidharan static int 231750ab9d5SAakash Sasidharan evt_parse_crypto_cipher_alg(struct evt_options *opt, const char *arg) 232750ab9d5SAakash Sasidharan { 233750ab9d5SAakash Sasidharan enum rte_crypto_cipher_algorithm cipher_alg; 234750ab9d5SAakash Sasidharan 235750ab9d5SAakash Sasidharan if (rte_cryptodev_get_cipher_algo_enum(&cipher_alg, arg) < 0) { 236750ab9d5SAakash Sasidharan RTE_LOG(ERR, USER1, "Invalid cipher algorithm specified\n"); 237750ab9d5SAakash Sasidharan return -1; 238750ab9d5SAakash Sasidharan } 239750ab9d5SAakash Sasidharan 240750ab9d5SAakash Sasidharan opt->crypto_cipher_alg = cipher_alg; 241750ab9d5SAakash Sasidharan opt->crypto_cipher_bit_mode = cipher_alg_is_bit_mode(cipher_alg); 242750ab9d5SAakash Sasidharan 243750ab9d5SAakash Sasidharan return 0; 244750ab9d5SAakash Sasidharan } 245750ab9d5SAakash Sasidharan 246750ab9d5SAakash Sasidharan static int 247750ab9d5SAakash Sasidharan evt_parse_crypto_cipher_key(struct evt_options *opt, const char *arg) 248750ab9d5SAakash Sasidharan { 249750ab9d5SAakash Sasidharan opt->crypto_cipher_key_sz = EVT_CRYPTO_MAX_KEY_SIZE; 250750ab9d5SAakash Sasidharan if (parse_hex_string(arg, opt->crypto_cipher_key, 251750ab9d5SAakash Sasidharan (uint32_t *)&opt->crypto_cipher_key_sz)) { 252750ab9d5SAakash Sasidharan RTE_LOG(ERR, USER1, "Invalid cipher key specified\n"); 253750ab9d5SAakash Sasidharan return -1; 254750ab9d5SAakash Sasidharan } 255750ab9d5SAakash Sasidharan 256750ab9d5SAakash Sasidharan return 0; 257750ab9d5SAakash Sasidharan } 258750ab9d5SAakash Sasidharan 259750ab9d5SAakash Sasidharan static int 260750ab9d5SAakash Sasidharan evt_parse_crypto_cipher_iv_sz(struct evt_options *opt, const char *arg) 261750ab9d5SAakash Sasidharan { 262750ab9d5SAakash Sasidharan uint16_t iv_sz; 263750ab9d5SAakash Sasidharan int ret; 264750ab9d5SAakash Sasidharan 265750ab9d5SAakash Sasidharan ret = parser_read_uint16(&(iv_sz), arg); 266750ab9d5SAakash Sasidharan if (iv_sz > EVT_CRYPTO_MAX_IV_SIZE) { 267750ab9d5SAakash Sasidharan RTE_LOG(ERR, USER1, 268750ab9d5SAakash Sasidharan "Unsupported cipher IV length [%d] specified\n", 269750ab9d5SAakash Sasidharan iv_sz); 270750ab9d5SAakash Sasidharan return -1; 271750ab9d5SAakash Sasidharan } 272750ab9d5SAakash Sasidharan 273750ab9d5SAakash Sasidharan opt->crypto_cipher_iv_sz = iv_sz; 274750ab9d5SAakash Sasidharan return ret; 275750ab9d5SAakash Sasidharan } 276750ab9d5SAakash Sasidharan 2778f5b5495SAkhil Goyal static int 2784afd440eSGuduri Prathyusha evt_parse_test_name(struct evt_options *opt, const char *arg) 2794afd440eSGuduri Prathyusha { 2806723c0fcSBruce Richardson strlcpy(opt->test_name, arg, EVT_TEST_NAME_MAX_LEN); 2814afd440eSGuduri Prathyusha return 0; 2824afd440eSGuduri Prathyusha } 2834afd440eSGuduri Prathyusha 2844afd440eSGuduri Prathyusha static int 2854afd440eSGuduri Prathyusha evt_parse_socket_id(struct evt_options *opt, const char *arg) 2864afd440eSGuduri Prathyusha { 2874afd440eSGuduri Prathyusha opt->socket_id = atoi(arg); 2884afd440eSGuduri Prathyusha return 0; 2894afd440eSGuduri Prathyusha } 2904afd440eSGuduri Prathyusha 2914afd440eSGuduri Prathyusha static int 2924afd440eSGuduri Prathyusha evt_parse_wkr_deq_dep(struct evt_options *opt, const char *arg) 2934afd440eSGuduri Prathyusha { 2944afd440eSGuduri Prathyusha int ret; 2954afd440eSGuduri Prathyusha 2964afd440eSGuduri Prathyusha ret = parser_read_uint16(&(opt->wkr_deq_dep), arg); 2974afd440eSGuduri Prathyusha return ret; 2984afd440eSGuduri Prathyusha } 2994afd440eSGuduri Prathyusha 3004afd440eSGuduri Prathyusha static int 3014afd440eSGuduri Prathyusha evt_parse_nb_pkts(struct evt_options *opt, const char *arg) 3024afd440eSGuduri Prathyusha { 3034afd440eSGuduri Prathyusha int ret; 3044afd440eSGuduri Prathyusha 3054afd440eSGuduri Prathyusha ret = parser_read_uint64(&(opt->nb_pkts), arg); 3064afd440eSGuduri Prathyusha 3074afd440eSGuduri Prathyusha return ret; 3084afd440eSGuduri Prathyusha } 3094afd440eSGuduri Prathyusha 3104afd440eSGuduri Prathyusha static int 31198c62921SPavan Nikhilesh evt_parse_nb_timers(struct evt_options *opt, const char *arg) 31298c62921SPavan Nikhilesh { 31398c62921SPavan Nikhilesh int ret; 31498c62921SPavan Nikhilesh 31598c62921SPavan Nikhilesh ret = parser_read_uint64(&(opt->nb_timers), arg); 31698c62921SPavan Nikhilesh 31798c62921SPavan Nikhilesh return ret; 31898c62921SPavan Nikhilesh } 31998c62921SPavan Nikhilesh 32098c62921SPavan Nikhilesh static int 32198c62921SPavan Nikhilesh evt_parse_timer_tick_nsec(struct evt_options *opt, const char *arg) 32298c62921SPavan Nikhilesh { 32398c62921SPavan Nikhilesh int ret; 32498c62921SPavan Nikhilesh 32598c62921SPavan Nikhilesh ret = parser_read_uint64(&(opt->timer_tick_nsec), arg); 32698c62921SPavan Nikhilesh 32798c62921SPavan Nikhilesh return ret; 32898c62921SPavan Nikhilesh } 32998c62921SPavan Nikhilesh 33098c62921SPavan Nikhilesh static int 33198c62921SPavan Nikhilesh evt_parse_max_tmo_nsec(struct evt_options *opt, const char *arg) 33298c62921SPavan Nikhilesh { 33398c62921SPavan Nikhilesh int ret; 33498c62921SPavan Nikhilesh 33598c62921SPavan Nikhilesh ret = parser_read_uint64(&(opt->max_tmo_nsec), arg); 33698c62921SPavan Nikhilesh 33798c62921SPavan Nikhilesh return ret; 33898c62921SPavan Nikhilesh } 33998c62921SPavan Nikhilesh 34098c62921SPavan Nikhilesh static int 34198c62921SPavan Nikhilesh evt_parse_expiry_nsec(struct evt_options *opt, const char *arg) 34298c62921SPavan Nikhilesh { 34398c62921SPavan Nikhilesh int ret; 34498c62921SPavan Nikhilesh 34598c62921SPavan Nikhilesh ret = parser_read_uint64(&(opt->expiry_nsec), arg); 34698c62921SPavan Nikhilesh 34798c62921SPavan Nikhilesh return ret; 34898c62921SPavan Nikhilesh } 34998c62921SPavan Nikhilesh 35098c62921SPavan Nikhilesh static int 35198c62921SPavan Nikhilesh evt_parse_nb_timer_adptrs(struct evt_options *opt, const char *arg) 35298c62921SPavan Nikhilesh { 35398c62921SPavan Nikhilesh int ret; 35498c62921SPavan Nikhilesh 35598c62921SPavan Nikhilesh ret = parser_read_uint8(&(opt->nb_timer_adptrs), arg); 35615c19f36SPavan Nikhilesh if (opt->nb_timer_adptrs <= 0) { 35715c19f36SPavan Nikhilesh evt_err("Number of timer adapters cannot be <= 0"); 35815c19f36SPavan Nikhilesh return -EINVAL; 35915c19f36SPavan Nikhilesh } 36098c62921SPavan Nikhilesh 36198c62921SPavan Nikhilesh return ret; 36298c62921SPavan Nikhilesh } 36398c62921SPavan Nikhilesh 36498c62921SPavan Nikhilesh static int 3654afd440eSGuduri Prathyusha evt_parse_pool_sz(struct evt_options *opt, const char *arg) 3664afd440eSGuduri Prathyusha { 3674afd440eSGuduri Prathyusha opt->pool_sz = atoi(arg); 3684afd440eSGuduri Prathyusha 3694afd440eSGuduri Prathyusha return 0; 3704afd440eSGuduri Prathyusha } 3714afd440eSGuduri Prathyusha 3724afd440eSGuduri Prathyusha static int 3734afd440eSGuduri Prathyusha evt_parse_plcores(struct evt_options *opt, const char *corelist) 3744afd440eSGuduri Prathyusha { 3754afd440eSGuduri Prathyusha int ret; 3764afd440eSGuduri Prathyusha 37732d7dbf2SMin Hu (Connor) ret = parse_lcores_list(opt->plcores, RTE_MAX_LCORE, corelist); 3784afd440eSGuduri Prathyusha if (ret == -E2BIG) 3794afd440eSGuduri Prathyusha evt_err("duplicate lcores in plcores"); 3804afd440eSGuduri Prathyusha 3814afd440eSGuduri Prathyusha return ret; 3824afd440eSGuduri Prathyusha } 3834afd440eSGuduri Prathyusha 3844afd440eSGuduri Prathyusha static int 3854afd440eSGuduri Prathyusha evt_parse_work_lcores(struct evt_options *opt, const char *corelist) 3864afd440eSGuduri Prathyusha { 3874afd440eSGuduri Prathyusha int ret; 3884afd440eSGuduri Prathyusha 38932d7dbf2SMin Hu (Connor) ret = parse_lcores_list(opt->wlcores, RTE_MAX_LCORE, corelist); 3904afd440eSGuduri Prathyusha if (ret == -E2BIG) 3914afd440eSGuduri Prathyusha evt_err("duplicate lcores in wlcores"); 3924afd440eSGuduri Prathyusha 3934afd440eSGuduri Prathyusha return ret; 3944afd440eSGuduri Prathyusha } 3954afd440eSGuduri Prathyusha 396fc8b96fbSPavan Nikhilesh static int 397fc8b96fbSPavan Nikhilesh evt_parse_mbuf_sz(struct evt_options *opt, const char *arg) 398fc8b96fbSPavan Nikhilesh { 399fc8b96fbSPavan Nikhilesh int ret; 400fc8b96fbSPavan Nikhilesh 401fc8b96fbSPavan Nikhilesh ret = parser_read_uint16(&(opt->mbuf_sz), arg); 402fc8b96fbSPavan Nikhilesh 403fc8b96fbSPavan Nikhilesh return ret; 404fc8b96fbSPavan Nikhilesh } 405fc8b96fbSPavan Nikhilesh 406fc8b96fbSPavan Nikhilesh static int 407fc8b96fbSPavan Nikhilesh evt_parse_max_pkt_sz(struct evt_options *opt, const char *arg) 408fc8b96fbSPavan Nikhilesh { 409fc8b96fbSPavan Nikhilesh int ret; 410fc8b96fbSPavan Nikhilesh 411fc8b96fbSPavan Nikhilesh ret = parser_read_uint32(&(opt->max_pkt_sz), arg); 412fc8b96fbSPavan Nikhilesh 413fc8b96fbSPavan Nikhilesh return ret; 414fc8b96fbSPavan Nikhilesh } 415fc8b96fbSPavan Nikhilesh 4162eaa37b8SPavan Nikhilesh static int 4172eaa37b8SPavan Nikhilesh evt_parse_ena_vector(struct evt_options *opt, const char *arg __rte_unused) 4182eaa37b8SPavan Nikhilesh { 4192eaa37b8SPavan Nikhilesh opt->ena_vector = 1; 4202eaa37b8SPavan Nikhilesh return 0; 4212eaa37b8SPavan Nikhilesh } 4222eaa37b8SPavan Nikhilesh 4232eaa37b8SPavan Nikhilesh static int 4242eaa37b8SPavan Nikhilesh evt_parse_vector_size(struct evt_options *opt, const char *arg) 4252eaa37b8SPavan Nikhilesh { 4262eaa37b8SPavan Nikhilesh int ret; 4272eaa37b8SPavan Nikhilesh 4282eaa37b8SPavan Nikhilesh ret = parser_read_uint16(&(opt->vector_size), arg); 4292eaa37b8SPavan Nikhilesh 4302eaa37b8SPavan Nikhilesh return ret; 4312eaa37b8SPavan Nikhilesh } 4322eaa37b8SPavan Nikhilesh 4332eaa37b8SPavan Nikhilesh static int 4342eaa37b8SPavan Nikhilesh evt_parse_vector_tmo_ns(struct evt_options *opt, const char *arg) 4352eaa37b8SPavan Nikhilesh { 4362eaa37b8SPavan Nikhilesh int ret; 4372eaa37b8SPavan Nikhilesh 4382eaa37b8SPavan Nikhilesh ret = parser_read_uint64(&(opt->vector_tmo_nsec), arg); 4392eaa37b8SPavan Nikhilesh 4402eaa37b8SPavan Nikhilesh return ret; 4412eaa37b8SPavan Nikhilesh } 4422eaa37b8SPavan Nikhilesh 4432eaa37b8SPavan Nikhilesh static int 4442eaa37b8SPavan Nikhilesh evt_parse_eth_queues(struct evt_options *opt, const char *arg) 4452eaa37b8SPavan Nikhilesh { 4462eaa37b8SPavan Nikhilesh int ret; 4472eaa37b8SPavan Nikhilesh 4482eaa37b8SPavan Nikhilesh ret = parser_read_uint16(&(opt->eth_queues), arg); 4492eaa37b8SPavan Nikhilesh 4502eaa37b8SPavan Nikhilesh return ret; 4512eaa37b8SPavan Nikhilesh } 4522eaa37b8SPavan Nikhilesh 453dbd4defeSPavan Nikhilesh static int 454dbd4defeSPavan Nikhilesh evt_parse_per_port_pool(struct evt_options *opt, const char *arg __rte_unused) 455dbd4defeSPavan Nikhilesh { 456dbd4defeSPavan Nikhilesh opt->per_port_pool = 1; 457dbd4defeSPavan Nikhilesh return 0; 458dbd4defeSPavan Nikhilesh } 459dbd4defeSPavan Nikhilesh 46020841a25SRashmi Shetty static int 46120841a25SRashmi Shetty evt_parse_prod_enq_burst_sz(struct evt_options *opt, const char *arg) 46220841a25SRashmi Shetty { 46320841a25SRashmi Shetty int ret; 46420841a25SRashmi Shetty 46520841a25SRashmi Shetty ret = parser_read_uint32(&(opt->prod_enq_burst_sz), arg); 46620841a25SRashmi Shetty 46720841a25SRashmi Shetty return ret; 46820841a25SRashmi Shetty } 46920841a25SRashmi Shetty 4704afd440eSGuduri Prathyusha static void 4714afd440eSGuduri Prathyusha usage(char *program) 4724afd440eSGuduri Prathyusha { 4734afd440eSGuduri Prathyusha printf("usage : %s [EAL options] -- [application options]\n", program); 4744afd440eSGuduri Prathyusha printf("application options:\n"); 4754afd440eSGuduri Prathyusha printf("\t--verbose : verbose level\n" 4764afd440eSGuduri Prathyusha "\t--dev : device id of the event device\n" 4774afd440eSGuduri Prathyusha "\t--test : name of the test application to run\n" 4784afd440eSGuduri Prathyusha "\t--socket_id : socket_id of application resources\n" 4794afd440eSGuduri Prathyusha "\t--pool_sz : pool size of the mempool\n" 4804afd440eSGuduri Prathyusha "\t--plcores : list of lcore ids for producers\n" 4814afd440eSGuduri Prathyusha "\t--wlcores : list of lcore ids for workers\n" 4824afd440eSGuduri Prathyusha "\t--stlist : list of scheduled types of the stages\n" 4834afd440eSGuduri Prathyusha "\t--nb_flows : number of flows to produce\n" 4844afd440eSGuduri Prathyusha "\t--nb_pkts : number of packets to produce\n" 4854afd440eSGuduri Prathyusha "\t--worker_deq_depth : dequeue depth of the worker\n" 4864afd440eSGuduri Prathyusha "\t--fwd_latency : perform fwd_latency measurement\n" 4874afd440eSGuduri Prathyusha "\t--queue_priority : enable queue priority\n" 488f0959283SPavan Nikhilesh "\t--deq_tmo_nsec : global dequeue timeout\n" 489d008f20bSPavan Nikhilesh "\t--prod_type_ethdev : use ethernet device as producer.\n" 490b25a66c4SAmit Prakash Shukla "\t--prod_type_dmadev : use dma device as producer.\n" 491de2bc16eSShijith Thotton "\t--prod_type_cryptodev : use crypto device as producer.\n" 492d008f20bSPavan Nikhilesh "\t--prod_type_timerdev : use event timer device as producer.\n" 4937be78d02SJosh Soref "\t expiry_nsec would be the timeout\n" 494d008f20bSPavan Nikhilesh "\t in ns.\n" 49517b22d0bSPavan Nikhilesh "\t--prod_type_timerdev_burst : use timer device as producer\n" 49617b22d0bSPavan Nikhilesh "\t burst mode.\n" 49798c62921SPavan Nikhilesh "\t--nb_timers : number of timers to arm.\n" 49898c62921SPavan Nikhilesh "\t--nb_timer_adptrs : number of timer adapters to use.\n" 49998c62921SPavan Nikhilesh "\t--timer_tick_nsec : timer tick interval in ns.\n" 50098c62921SPavan Nikhilesh "\t--max_tmo_nsec : max timeout interval in ns.\n" 5019e596d88SPavan Nikhilesh "\t--expiry_nsec : event timer expiry ns.\n" 502b25a66c4SAmit Prakash Shukla "\t--dma_adptr_mode : 1 for OP_FORWARD mode (default).\n" 503de2bc16eSShijith Thotton "\t--crypto_adptr_mode : 0 for OP_NEW mode (default) and\n" 504de2bc16eSShijith Thotton "\t 1 for OP_FORWARD mode.\n" 5058f5b5495SAkhil Goyal "\t--crypto_op_type : 0 for SYM ops (default) and\n" 5068f5b5495SAkhil Goyal "\t 1 for ASYM ops.\n" 507750ab9d5SAakash Sasidharan "\t--crypto_cipher_alg : cipher algorithm to be used\n" 508750ab9d5SAakash Sasidharan "\t default algorithm is NULL.\n" 509750ab9d5SAakash Sasidharan "\t--crypto_cipher_key : key for the cipher algorithm selected\n" 510750ab9d5SAakash Sasidharan "\t--crypto_cipher_iv_sz : IV size for the cipher algorithm\n" 511750ab9d5SAakash Sasidharan "\t selected\n" 512fc8b96fbSPavan Nikhilesh "\t--mbuf_sz : packet mbuf size.\n" 513fc8b96fbSPavan Nikhilesh "\t--max_pkt_sz : max packet size.\n" 51420841a25SRashmi Shetty "\t--prod_enq_burst_sz : producer enqueue burst size.\n" 5152eaa37b8SPavan Nikhilesh "\t--nb_eth_queues : number of ethernet Rx queues.\n" 5162eaa37b8SPavan Nikhilesh "\t--enable_vector : enable event vectorization.\n" 5172eaa37b8SPavan Nikhilesh "\t--vector_size : Max vector size.\n" 5182eaa37b8SPavan Nikhilesh "\t--vector_tmo_ns : Max vector timeout in nanoseconds\n" 519dbd4defeSPavan Nikhilesh "\t--per_port_pool : Configure unique pool per ethdev port\n" 520c9043624SPavan Nikhilesh "\t--tx_first : Transmit given number of packets\n" 521c9043624SPavan Nikhilesh " across all the ethernet devices before\n" 522c9043624SPavan Nikhilesh " event workers start.\n" 523c9043624SPavan Nikhilesh "\t--tx_pkt_sz : Packet size to use with Tx first." 524*7a7a04d3SPavan Nikhilesh "\t--preschedule : Pre-schedule type to use.\n" 525*7a7a04d3SPavan Nikhilesh " 0 - disable pre-schedule\n" 526*7a7a04d3SPavan Nikhilesh " 1 - pre-schedule\n" 527*7a7a04d3SPavan Nikhilesh " 2 - pre-schedule adaptive (Default)\n" 5284afd440eSGuduri Prathyusha ); 5294afd440eSGuduri Prathyusha printf("available tests:\n"); 5304afd440eSGuduri Prathyusha evt_test_dump_names(); 5314afd440eSGuduri Prathyusha } 5324afd440eSGuduri Prathyusha 5334afd440eSGuduri Prathyusha static int 5344afd440eSGuduri Prathyusha evt_parse_sched_type_list(struct evt_options *opt, const char *arg) 5354afd440eSGuduri Prathyusha { 5364afd440eSGuduri Prathyusha char c; 5374afd440eSGuduri Prathyusha int i = 0, j = -1; 5384afd440eSGuduri Prathyusha 5394afd440eSGuduri Prathyusha for (i = 0; i < EVT_MAX_STAGES; i++) 5404afd440eSGuduri Prathyusha opt->sched_type_list[i] = (uint8_t)-1; 5414afd440eSGuduri Prathyusha 5424afd440eSGuduri Prathyusha i = 0; 5434afd440eSGuduri Prathyusha 5444afd440eSGuduri Prathyusha do { 5454afd440eSGuduri Prathyusha c = arg[++j]; 5464afd440eSGuduri Prathyusha 5474afd440eSGuduri Prathyusha switch (c) { 5484afd440eSGuduri Prathyusha case 'o': 5494afd440eSGuduri Prathyusha case 'O': 5504afd440eSGuduri Prathyusha opt->sched_type_list[i++] = RTE_SCHED_TYPE_ORDERED; 5514afd440eSGuduri Prathyusha break; 5524afd440eSGuduri Prathyusha case 'a': 5534afd440eSGuduri Prathyusha case 'A': 5544afd440eSGuduri Prathyusha opt->sched_type_list[i++] = RTE_SCHED_TYPE_ATOMIC; 5554afd440eSGuduri Prathyusha break; 5564afd440eSGuduri Prathyusha case 'p': 5574afd440eSGuduri Prathyusha case 'P': 5584afd440eSGuduri Prathyusha opt->sched_type_list[i++] = RTE_SCHED_TYPE_PARALLEL; 5594afd440eSGuduri Prathyusha break; 5604afd440eSGuduri Prathyusha case ',': 5614afd440eSGuduri Prathyusha break; 5624afd440eSGuduri Prathyusha default: 5634afd440eSGuduri Prathyusha if (c != '\0') { 5644afd440eSGuduri Prathyusha evt_err("invalid sched_type %c", c); 5654afd440eSGuduri Prathyusha return -EINVAL; 5664afd440eSGuduri Prathyusha } 5674afd440eSGuduri Prathyusha } 5684afd440eSGuduri Prathyusha } while (c != '\0'); 5694afd440eSGuduri Prathyusha 5704afd440eSGuduri Prathyusha opt->nb_stages = i; 5714afd440eSGuduri Prathyusha return 0; 5724afd440eSGuduri Prathyusha } 5734afd440eSGuduri Prathyusha 5744afd440eSGuduri Prathyusha static struct option lgopts[] = { 5754afd440eSGuduri Prathyusha { EVT_NB_FLOWS, 1, 0, 0 }, 5764afd440eSGuduri Prathyusha { EVT_DEVICE, 1, 0, 0 }, 5774afd440eSGuduri Prathyusha { EVT_VERBOSE, 1, 0, 0 }, 5784afd440eSGuduri Prathyusha { EVT_TEST, 1, 0, 0 }, 5794afd440eSGuduri Prathyusha { EVT_PROD_LCORES, 1, 0, 0 }, 5804afd440eSGuduri Prathyusha { EVT_WORK_LCORES, 1, 0, 0 }, 5814afd440eSGuduri Prathyusha { EVT_SOCKET_ID, 1, 0, 0 }, 5824afd440eSGuduri Prathyusha { EVT_POOL_SZ, 1, 0, 0 }, 5834afd440eSGuduri Prathyusha { EVT_NB_PKTS, 1, 0, 0 }, 5844afd440eSGuduri Prathyusha { EVT_WKR_DEQ_DEP, 1, 0, 0 }, 5854afd440eSGuduri Prathyusha { EVT_SCHED_TYPE_LIST, 1, 0, 0 }, 5864afd440eSGuduri Prathyusha { EVT_FWD_LATENCY, 0, 0, 0 }, 5874afd440eSGuduri Prathyusha { EVT_QUEUE_PRIORITY, 0, 0, 0 }, 588f0959283SPavan Nikhilesh { EVT_DEQ_TMO_NSEC, 1, 0, 0 }, 589b01974daSPavan Nikhilesh { EVT_PROD_ETHDEV, 0, 0, 0 }, 590b25a66c4SAmit Prakash Shukla { EVT_PROD_DMADEV, 0, 0, 0 }, 591de2bc16eSShijith Thotton { EVT_PROD_CRYPTODEV, 0, 0, 0 }, 592d008f20bSPavan Nikhilesh { EVT_PROD_TIMERDEV, 0, 0, 0 }, 59317b22d0bSPavan Nikhilesh { EVT_PROD_TIMERDEV_BURST, 0, 0, 0 }, 594b25a66c4SAmit Prakash Shukla { EVT_DMA_ADPTR_MODE, 1, 0, 0 }, 595de2bc16eSShijith Thotton { EVT_CRYPTO_ADPTR_MODE, 1, 0, 0 }, 5968f5b5495SAkhil Goyal { EVT_CRYPTO_OP_TYPE, 1, 0, 0 }, 597750ab9d5SAakash Sasidharan { EVT_CRYPTO_CIPHER_ALG, 1, 0, 0 }, 598750ab9d5SAakash Sasidharan { EVT_CRYPTO_CIPHER_KEY, 1, 0, 0 }, 599750ab9d5SAakash Sasidharan { EVT_CRYPTO_CIPHER_IV_SZ, 1, 0, 0 }, 60098c62921SPavan Nikhilesh { EVT_NB_TIMERS, 1, 0, 0 }, 60198c62921SPavan Nikhilesh { EVT_NB_TIMER_ADPTRS, 1, 0, 0 }, 60298c62921SPavan Nikhilesh { EVT_TIMER_TICK_NSEC, 1, 0, 0 }, 60398c62921SPavan Nikhilesh { EVT_MAX_TMO_NSEC, 1, 0, 0 }, 60498c62921SPavan Nikhilesh { EVT_EXPIRY_NSEC, 1, 0, 0 }, 605fc8b96fbSPavan Nikhilesh { EVT_MBUF_SZ, 1, 0, 0 }, 606fc8b96fbSPavan Nikhilesh { EVT_MAX_PKT_SZ, 1, 0, 0 }, 60720841a25SRashmi Shetty { EVT_PROD_ENQ_BURST_SZ, 1, 0, 0 }, 6082eaa37b8SPavan Nikhilesh { EVT_NB_ETH_QUEUES, 1, 0, 0 }, 6092eaa37b8SPavan Nikhilesh { EVT_ENA_VECTOR, 0, 0, 0 }, 6102eaa37b8SPavan Nikhilesh { EVT_VECTOR_SZ, 1, 0, 0 }, 6112eaa37b8SPavan Nikhilesh { EVT_VECTOR_TMO, 1, 0, 0 }, 612dbd4defeSPavan Nikhilesh { EVT_PER_PORT_POOL, 0, 0, 0 }, 6134afd440eSGuduri Prathyusha { EVT_HELP, 0, 0, 0 }, 614c9043624SPavan Nikhilesh { EVT_TX_FIRST, 1, 0, 0 }, 615c9043624SPavan Nikhilesh { EVT_TX_PKT_SZ, 1, 0, 0 }, 616*7a7a04d3SPavan Nikhilesh { EVT_PRESCHEDULE, 1, 0, 0 }, 6174afd440eSGuduri Prathyusha { NULL, 0, 0, 0 } 6184afd440eSGuduri Prathyusha }; 6194afd440eSGuduri Prathyusha 6204afd440eSGuduri Prathyusha static int 6214afd440eSGuduri Prathyusha evt_opts_parse_long(int opt_idx, struct evt_options *opt) 6224afd440eSGuduri Prathyusha { 6234afd440eSGuduri Prathyusha unsigned int i; 6244afd440eSGuduri Prathyusha 6254afd440eSGuduri Prathyusha struct long_opt_parser parsermap[] = { 6264afd440eSGuduri Prathyusha { EVT_NB_FLOWS, evt_parse_nb_flows}, 6274afd440eSGuduri Prathyusha { EVT_DEVICE, evt_parse_dev_id}, 6284afd440eSGuduri Prathyusha { EVT_VERBOSE, evt_parse_verbose}, 6294afd440eSGuduri Prathyusha { EVT_TEST, evt_parse_test_name}, 6304afd440eSGuduri Prathyusha { EVT_PROD_LCORES, evt_parse_plcores}, 6314afd440eSGuduri Prathyusha { EVT_WORK_LCORES, evt_parse_work_lcores}, 6324afd440eSGuduri Prathyusha { EVT_SOCKET_ID, evt_parse_socket_id}, 6334afd440eSGuduri Prathyusha { EVT_POOL_SZ, evt_parse_pool_sz}, 6344afd440eSGuduri Prathyusha { EVT_NB_PKTS, evt_parse_nb_pkts}, 6354afd440eSGuduri Prathyusha { EVT_WKR_DEQ_DEP, evt_parse_wkr_deq_dep}, 6364afd440eSGuduri Prathyusha { EVT_SCHED_TYPE_LIST, evt_parse_sched_type_list}, 6374afd440eSGuduri Prathyusha { EVT_FWD_LATENCY, evt_parse_fwd_latency}, 6384afd440eSGuduri Prathyusha { EVT_QUEUE_PRIORITY, evt_parse_queue_priority}, 639f0959283SPavan Nikhilesh { EVT_DEQ_TMO_NSEC, evt_parse_deq_tmo_nsec}, 640b01974daSPavan Nikhilesh { EVT_PROD_ETHDEV, evt_parse_eth_prod_type}, 641de2bc16eSShijith Thotton { EVT_PROD_CRYPTODEV, evt_parse_crypto_prod_type}, 642b25a66c4SAmit Prakash Shukla { EVT_PROD_DMADEV, evt_parse_dma_prod_type}, 643d008f20bSPavan Nikhilesh { EVT_PROD_TIMERDEV, evt_parse_timer_prod_type}, 64417b22d0bSPavan Nikhilesh { EVT_PROD_TIMERDEV_BURST, evt_parse_timer_prod_type_burst}, 645b25a66c4SAmit Prakash Shukla { EVT_DMA_ADPTR_MODE, evt_parse_dma_adptr_mode}, 646de2bc16eSShijith Thotton { EVT_CRYPTO_ADPTR_MODE, evt_parse_crypto_adptr_mode}, 6478f5b5495SAkhil Goyal { EVT_CRYPTO_OP_TYPE, evt_parse_crypto_op_type}, 648750ab9d5SAakash Sasidharan { EVT_CRYPTO_CIPHER_ALG, evt_parse_crypto_cipher_alg}, 649750ab9d5SAakash Sasidharan { EVT_CRYPTO_CIPHER_KEY, evt_parse_crypto_cipher_key}, 650750ab9d5SAakash Sasidharan { EVT_CRYPTO_CIPHER_IV_SZ, evt_parse_crypto_cipher_iv_sz}, 65198c62921SPavan Nikhilesh { EVT_NB_TIMERS, evt_parse_nb_timers}, 65298c62921SPavan Nikhilesh { EVT_NB_TIMER_ADPTRS, evt_parse_nb_timer_adptrs}, 65398c62921SPavan Nikhilesh { EVT_TIMER_TICK_NSEC, evt_parse_timer_tick_nsec}, 65498c62921SPavan Nikhilesh { EVT_MAX_TMO_NSEC, evt_parse_max_tmo_nsec}, 65598c62921SPavan Nikhilesh { EVT_EXPIRY_NSEC, evt_parse_expiry_nsec}, 656fc8b96fbSPavan Nikhilesh { EVT_MBUF_SZ, evt_parse_mbuf_sz}, 657fc8b96fbSPavan Nikhilesh { EVT_MAX_PKT_SZ, evt_parse_max_pkt_sz}, 65820841a25SRashmi Shetty { EVT_PROD_ENQ_BURST_SZ, evt_parse_prod_enq_burst_sz}, 6592eaa37b8SPavan Nikhilesh { EVT_NB_ETH_QUEUES, evt_parse_eth_queues}, 6602eaa37b8SPavan Nikhilesh { EVT_ENA_VECTOR, evt_parse_ena_vector}, 6612eaa37b8SPavan Nikhilesh { EVT_VECTOR_SZ, evt_parse_vector_size}, 6622eaa37b8SPavan Nikhilesh { EVT_VECTOR_TMO, evt_parse_vector_tmo_ns}, 663dbd4defeSPavan Nikhilesh { EVT_PER_PORT_POOL, evt_parse_per_port_pool}, 664c9043624SPavan Nikhilesh { EVT_TX_FIRST, evt_parse_tx_first}, 665c9043624SPavan Nikhilesh { EVT_TX_PKT_SZ, evt_parse_tx_pkt_sz}, 666*7a7a04d3SPavan Nikhilesh { EVT_PRESCHEDULE, evt_parse_preschedule}, 6674afd440eSGuduri Prathyusha }; 6684afd440eSGuduri Prathyusha 6694afd440eSGuduri Prathyusha for (i = 0; i < RTE_DIM(parsermap); i++) { 6704afd440eSGuduri Prathyusha if (strncmp(lgopts[opt_idx].name, parsermap[i].lgopt_name, 671d008f20bSPavan Nikhilesh strlen(lgopts[opt_idx].name)) == 0) 6724afd440eSGuduri Prathyusha return parsermap[i].parser_fn(opt, optarg); 6734afd440eSGuduri Prathyusha } 6744afd440eSGuduri Prathyusha 6754afd440eSGuduri Prathyusha return -EINVAL; 6764afd440eSGuduri Prathyusha } 6774afd440eSGuduri Prathyusha 6784afd440eSGuduri Prathyusha int 6794afd440eSGuduri Prathyusha evt_options_parse(struct evt_options *opt, int argc, char **argv) 6804afd440eSGuduri Prathyusha { 6814afd440eSGuduri Prathyusha int opts, retval, opt_idx; 6824afd440eSGuduri Prathyusha 6834afd440eSGuduri Prathyusha while ((opts = getopt_long(argc, argv, "", lgopts, &opt_idx)) != EOF) { 6844afd440eSGuduri Prathyusha switch (opts) { 6854afd440eSGuduri Prathyusha case 0: /* long options */ 6864afd440eSGuduri Prathyusha if (!strcmp(lgopts[opt_idx].name, "help")) { 6874afd440eSGuduri Prathyusha usage(argv[0]); 6884afd440eSGuduri Prathyusha exit(EXIT_SUCCESS); 6894afd440eSGuduri Prathyusha } 6904afd440eSGuduri Prathyusha 6914afd440eSGuduri Prathyusha retval = evt_opts_parse_long(opt_idx, opt); 6924afd440eSGuduri Prathyusha if (retval != 0) 6934afd440eSGuduri Prathyusha return retval; 6944afd440eSGuduri Prathyusha break; 6954afd440eSGuduri Prathyusha default: 6964afd440eSGuduri Prathyusha return -EINVAL; 6974afd440eSGuduri Prathyusha } 6984afd440eSGuduri Prathyusha } 6994afd440eSGuduri Prathyusha return 0; 7004afd440eSGuduri Prathyusha } 7014afd440eSGuduri Prathyusha 70289e84026SJerin Jacob void 70389e84026SJerin Jacob evt_options_dump(struct evt_options *opt) 70489e84026SJerin Jacob { 70589e84026SJerin Jacob int lcore_id; 70689e84026SJerin Jacob struct rte_event_dev_info dev_info; 70789e84026SJerin Jacob 70889e84026SJerin Jacob rte_event_dev_info_get(opt->dev_id, &dev_info); 70989e84026SJerin Jacob evt_dump("driver", "%s", dev_info.driver_name); 71089e84026SJerin Jacob evt_dump("test", "%s", opt->test_name); 71189e84026SJerin Jacob evt_dump("dev", "%d", opt->dev_id); 71289e84026SJerin Jacob evt_dump("verbose_level", "%d", opt->verbose_level); 71389e84026SJerin Jacob evt_dump("socket_id", "%d", opt->socket_id); 71489e84026SJerin Jacob evt_dump("pool_sz", "%d", opt->pool_sz); 715cb056611SStephen Hemminger evt_dump("main lcore", "%d", rte_get_main_lcore()); 71689e84026SJerin Jacob evt_dump("nb_pkts", "%"PRIu64, opt->nb_pkts); 717d008f20bSPavan Nikhilesh evt_dump("nb_timers", "%"PRIu64, opt->nb_timers); 71889e84026SJerin Jacob evt_dump_begin("available lcores"); 71989e84026SJerin Jacob RTE_LCORE_FOREACH(lcore_id) 72089e84026SJerin Jacob printf("%d ", lcore_id); 72189e84026SJerin Jacob evt_dump_end; 72289e84026SJerin Jacob evt_dump_nb_flows(opt); 72389e84026SJerin Jacob evt_dump_worker_dequeue_depth(opt); 72489e84026SJerin Jacob } 725