xref: /dpdk/app/test-eventdev/evt_options.c (revision 7a7a04d3ce8eab9b53d23b673dfdc71b50fd523d)
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