153a3b7e8SJerin Jacob /* SPDX-License-Identifier: BSD-3-Clause 253a3b7e8SJerin Jacob * Copyright(c) 2017 Cavium, Inc 30add6c27SJerin Jacob */ 40add6c27SJerin Jacob 50add6c27SJerin Jacob #include <stdio.h> 60add6c27SJerin Jacob #include <string.h> 70add6c27SJerin Jacob #include <inttypes.h> 80add6c27SJerin Jacob #include <getopt.h> 90add6c27SJerin Jacob 106723c0fcSBruce Richardson #include <rte_string_fns.h> 110add6c27SJerin Jacob #include <rte_common.h> 120add6c27SJerin Jacob #include <rte_eventdev.h> 130add6c27SJerin Jacob #include <rte_lcore.h> 140add6c27SJerin Jacob 150add6c27SJerin Jacob #include "evt_options.h" 160add6c27SJerin Jacob #include "evt_test.h" 170add6c27SJerin Jacob #include "parser.h" 180add6c27SJerin Jacob 190add6c27SJerin Jacob void 200add6c27SJerin Jacob evt_options_default(struct evt_options *opt) 210add6c27SJerin Jacob { 220add6c27SJerin Jacob memset(opt, 0, sizeof(*opt)); 230add6c27SJerin Jacob opt->verbose_level = 1; /* Enable minimal prints */ 240add6c27SJerin Jacob opt->dev_id = 0; 250add6c27SJerin Jacob strncpy(opt->test_name, "order_queue", EVT_TEST_NAME_MAX_LEN); 260add6c27SJerin Jacob opt->nb_flows = 1024; 270add6c27SJerin Jacob opt->socket_id = SOCKET_ID_ANY; 280add6c27SJerin Jacob opt->pool_sz = 16 * 1024; 290add6c27SJerin Jacob opt->wkr_deq_dep = 16; 300add6c27SJerin Jacob opt->nb_pkts = (1ULL << 26); /* do ~64M packets */ 31d008f20bSPavan Nikhilesh opt->nb_timers = 1E8; 32d008f20bSPavan Nikhilesh opt->nb_timer_adptrs = 1; 33d008f20bSPavan Nikhilesh opt->timer_tick_nsec = 1E3; /* 1000ns ~ 1us */ 34d008f20bSPavan Nikhilesh opt->max_tmo_nsec = 1E5; /* 100000ns ~100us */ 35d008f20bSPavan Nikhilesh opt->expiry_nsec = 1E4; /* 10000ns ~10us */ 36b01974daSPavan Nikhilesh opt->prod_type = EVT_PROD_TYPE_SYNT; 370add6c27SJerin Jacob } 3889e84026SJerin Jacob 394afd440eSGuduri Prathyusha typedef int (*option_parser_t)(struct evt_options *opt, 404afd440eSGuduri Prathyusha const char *arg); 414afd440eSGuduri Prathyusha 424afd440eSGuduri Prathyusha struct long_opt_parser { 434afd440eSGuduri Prathyusha const char *lgopt_name; 444afd440eSGuduri Prathyusha option_parser_t parser_fn; 454afd440eSGuduri Prathyusha }; 464afd440eSGuduri Prathyusha 474afd440eSGuduri Prathyusha static int 484afd440eSGuduri Prathyusha evt_parse_nb_flows(struct evt_options *opt, const char *arg) 494afd440eSGuduri Prathyusha { 504afd440eSGuduri Prathyusha int ret; 514afd440eSGuduri Prathyusha 524afd440eSGuduri Prathyusha ret = parser_read_uint32(&(opt->nb_flows), arg); 534afd440eSGuduri Prathyusha 544afd440eSGuduri Prathyusha return ret; 554afd440eSGuduri Prathyusha } 564afd440eSGuduri Prathyusha 574afd440eSGuduri Prathyusha static int 584afd440eSGuduri Prathyusha evt_parse_dev_id(struct evt_options *opt, const char *arg) 594afd440eSGuduri Prathyusha { 604afd440eSGuduri Prathyusha int ret; 614afd440eSGuduri Prathyusha 624afd440eSGuduri Prathyusha ret = parser_read_uint8(&(opt->dev_id), arg); 634afd440eSGuduri Prathyusha 644afd440eSGuduri Prathyusha return ret; 654afd440eSGuduri Prathyusha } 664afd440eSGuduri Prathyusha 674afd440eSGuduri Prathyusha static int 684afd440eSGuduri Prathyusha evt_parse_verbose(struct evt_options *opt, const char *arg __rte_unused) 694afd440eSGuduri Prathyusha { 704afd440eSGuduri Prathyusha opt->verbose_level = atoi(arg); 714afd440eSGuduri Prathyusha return 0; 724afd440eSGuduri Prathyusha } 734afd440eSGuduri Prathyusha 744afd440eSGuduri Prathyusha static int 754afd440eSGuduri Prathyusha evt_parse_fwd_latency(struct evt_options *opt, const char *arg __rte_unused) 764afd440eSGuduri Prathyusha { 774afd440eSGuduri Prathyusha opt->fwd_latency = 1; 784afd440eSGuduri Prathyusha return 0; 794afd440eSGuduri Prathyusha } 804afd440eSGuduri Prathyusha 814afd440eSGuduri Prathyusha static int 824afd440eSGuduri Prathyusha evt_parse_queue_priority(struct evt_options *opt, const char *arg __rte_unused) 834afd440eSGuduri Prathyusha { 844afd440eSGuduri Prathyusha opt->q_priority = 1; 854afd440eSGuduri Prathyusha return 0; 864afd440eSGuduri Prathyusha } 874afd440eSGuduri Prathyusha 884afd440eSGuduri Prathyusha static int 89f0959283SPavan Nikhilesh evt_parse_deq_tmo_nsec(struct evt_options *opt, const char *arg) 90f0959283SPavan Nikhilesh { 91f0959283SPavan Nikhilesh int ret; 92f0959283SPavan Nikhilesh 93f0959283SPavan Nikhilesh ret = parser_read_uint32(&(opt->deq_tmo_nsec), arg); 94f0959283SPavan Nikhilesh 95f0959283SPavan Nikhilesh return ret; 96f0959283SPavan Nikhilesh } 97f0959283SPavan Nikhilesh 98f0959283SPavan Nikhilesh static int 99b01974daSPavan Nikhilesh evt_parse_eth_prod_type(struct evt_options *opt, const char *arg __rte_unused) 100b01974daSPavan Nikhilesh { 101b01974daSPavan Nikhilesh opt->prod_type = EVT_PROD_TYPE_ETH_RX_ADPTR; 102b01974daSPavan Nikhilesh return 0; 103b01974daSPavan Nikhilesh } 104b01974daSPavan Nikhilesh 105b01974daSPavan Nikhilesh static int 106d008f20bSPavan Nikhilesh evt_parse_timer_prod_type(struct evt_options *opt, const char *arg __rte_unused) 107d008f20bSPavan Nikhilesh { 108d008f20bSPavan Nikhilesh opt->prod_type = EVT_PROD_TYPE_EVENT_TIMER_ADPTR; 109d008f20bSPavan Nikhilesh return 0; 110d008f20bSPavan Nikhilesh } 111d008f20bSPavan Nikhilesh 112d008f20bSPavan Nikhilesh static int 11317b22d0bSPavan Nikhilesh evt_parse_timer_prod_type_burst(struct evt_options *opt, 11417b22d0bSPavan Nikhilesh const char *arg __rte_unused) 11517b22d0bSPavan Nikhilesh { 11617b22d0bSPavan Nikhilesh opt->prod_type = EVT_PROD_TYPE_EVENT_TIMER_ADPTR; 11717b22d0bSPavan Nikhilesh opt->timdev_use_burst = 1; 11817b22d0bSPavan Nikhilesh return 0; 11917b22d0bSPavan Nikhilesh } 12017b22d0bSPavan Nikhilesh 12117b22d0bSPavan Nikhilesh static int 1224afd440eSGuduri Prathyusha evt_parse_test_name(struct evt_options *opt, const char *arg) 1234afd440eSGuduri Prathyusha { 1246723c0fcSBruce Richardson strlcpy(opt->test_name, arg, EVT_TEST_NAME_MAX_LEN); 1254afd440eSGuduri Prathyusha return 0; 1264afd440eSGuduri Prathyusha } 1274afd440eSGuduri Prathyusha 1284afd440eSGuduri Prathyusha static int 1294afd440eSGuduri Prathyusha evt_parse_socket_id(struct evt_options *opt, const char *arg) 1304afd440eSGuduri Prathyusha { 1314afd440eSGuduri Prathyusha opt->socket_id = atoi(arg); 1324afd440eSGuduri Prathyusha return 0; 1334afd440eSGuduri Prathyusha } 1344afd440eSGuduri Prathyusha 1354afd440eSGuduri Prathyusha static int 1364afd440eSGuduri Prathyusha evt_parse_wkr_deq_dep(struct evt_options *opt, const char *arg) 1374afd440eSGuduri Prathyusha { 1384afd440eSGuduri Prathyusha int ret; 1394afd440eSGuduri Prathyusha 1404afd440eSGuduri Prathyusha ret = parser_read_uint16(&(opt->wkr_deq_dep), arg); 1414afd440eSGuduri Prathyusha return ret; 1424afd440eSGuduri Prathyusha } 1434afd440eSGuduri Prathyusha 1444afd440eSGuduri Prathyusha static int 1454afd440eSGuduri Prathyusha evt_parse_nb_pkts(struct evt_options *opt, const char *arg) 1464afd440eSGuduri Prathyusha { 1474afd440eSGuduri Prathyusha int ret; 1484afd440eSGuduri Prathyusha 1494afd440eSGuduri Prathyusha ret = parser_read_uint64(&(opt->nb_pkts), arg); 1504afd440eSGuduri Prathyusha 1514afd440eSGuduri Prathyusha return ret; 1524afd440eSGuduri Prathyusha } 1534afd440eSGuduri Prathyusha 1544afd440eSGuduri Prathyusha static int 15598c62921SPavan Nikhilesh evt_parse_nb_timers(struct evt_options *opt, const char *arg) 15698c62921SPavan Nikhilesh { 15798c62921SPavan Nikhilesh int ret; 15898c62921SPavan Nikhilesh 15998c62921SPavan Nikhilesh ret = parser_read_uint64(&(opt->nb_timers), arg); 16098c62921SPavan Nikhilesh 16198c62921SPavan Nikhilesh return ret; 16298c62921SPavan Nikhilesh } 16398c62921SPavan Nikhilesh 16498c62921SPavan Nikhilesh static int 16598c62921SPavan Nikhilesh evt_parse_timer_tick_nsec(struct evt_options *opt, const char *arg) 16698c62921SPavan Nikhilesh { 16798c62921SPavan Nikhilesh int ret; 16898c62921SPavan Nikhilesh 16998c62921SPavan Nikhilesh ret = parser_read_uint64(&(opt->timer_tick_nsec), arg); 17098c62921SPavan Nikhilesh 17198c62921SPavan Nikhilesh return ret; 17298c62921SPavan Nikhilesh } 17398c62921SPavan Nikhilesh 17498c62921SPavan Nikhilesh static int 17598c62921SPavan Nikhilesh evt_parse_max_tmo_nsec(struct evt_options *opt, const char *arg) 17698c62921SPavan Nikhilesh { 17798c62921SPavan Nikhilesh int ret; 17898c62921SPavan Nikhilesh 17998c62921SPavan Nikhilesh ret = parser_read_uint64(&(opt->max_tmo_nsec), arg); 18098c62921SPavan Nikhilesh 18198c62921SPavan Nikhilesh return ret; 18298c62921SPavan Nikhilesh } 18398c62921SPavan Nikhilesh 18498c62921SPavan Nikhilesh static int 18598c62921SPavan Nikhilesh evt_parse_expiry_nsec(struct evt_options *opt, const char *arg) 18698c62921SPavan Nikhilesh { 18798c62921SPavan Nikhilesh int ret; 18898c62921SPavan Nikhilesh 18998c62921SPavan Nikhilesh ret = parser_read_uint64(&(opt->expiry_nsec), arg); 19098c62921SPavan Nikhilesh 19198c62921SPavan Nikhilesh return ret; 19298c62921SPavan Nikhilesh } 19398c62921SPavan Nikhilesh 19498c62921SPavan Nikhilesh static int 19598c62921SPavan Nikhilesh evt_parse_nb_timer_adptrs(struct evt_options *opt, const char *arg) 19698c62921SPavan Nikhilesh { 19798c62921SPavan Nikhilesh int ret; 19898c62921SPavan Nikhilesh 19998c62921SPavan Nikhilesh ret = parser_read_uint8(&(opt->nb_timer_adptrs), arg); 20098c62921SPavan Nikhilesh 20198c62921SPavan Nikhilesh return ret; 20298c62921SPavan Nikhilesh } 20398c62921SPavan Nikhilesh 20498c62921SPavan Nikhilesh static int 2054afd440eSGuduri Prathyusha evt_parse_pool_sz(struct evt_options *opt, const char *arg) 2064afd440eSGuduri Prathyusha { 2074afd440eSGuduri Prathyusha opt->pool_sz = atoi(arg); 2084afd440eSGuduri Prathyusha 2094afd440eSGuduri Prathyusha return 0; 2104afd440eSGuduri Prathyusha } 2114afd440eSGuduri Prathyusha 2124afd440eSGuduri Prathyusha static int 2134afd440eSGuduri Prathyusha evt_parse_plcores(struct evt_options *opt, const char *corelist) 2144afd440eSGuduri Prathyusha { 2154afd440eSGuduri Prathyusha int ret; 2164afd440eSGuduri Prathyusha 2174afd440eSGuduri Prathyusha ret = parse_lcores_list(opt->plcores, corelist); 2184afd440eSGuduri Prathyusha if (ret == -E2BIG) 2194afd440eSGuduri Prathyusha evt_err("duplicate lcores in plcores"); 2204afd440eSGuduri Prathyusha 2214afd440eSGuduri Prathyusha return ret; 2224afd440eSGuduri Prathyusha } 2234afd440eSGuduri Prathyusha 2244afd440eSGuduri Prathyusha static int 2254afd440eSGuduri Prathyusha evt_parse_work_lcores(struct evt_options *opt, const char *corelist) 2264afd440eSGuduri Prathyusha { 2274afd440eSGuduri Prathyusha int ret; 2284afd440eSGuduri Prathyusha 2294afd440eSGuduri Prathyusha ret = parse_lcores_list(opt->wlcores, corelist); 2304afd440eSGuduri Prathyusha if (ret == -E2BIG) 2314afd440eSGuduri Prathyusha evt_err("duplicate lcores in wlcores"); 2324afd440eSGuduri Prathyusha 2334afd440eSGuduri Prathyusha return ret; 2344afd440eSGuduri Prathyusha } 2354afd440eSGuduri Prathyusha 236*fc8b96fbSPavan Nikhilesh static int 237*fc8b96fbSPavan Nikhilesh evt_parse_mbuf_sz(struct evt_options *opt, const char *arg) 238*fc8b96fbSPavan Nikhilesh { 239*fc8b96fbSPavan Nikhilesh int ret; 240*fc8b96fbSPavan Nikhilesh 241*fc8b96fbSPavan Nikhilesh ret = parser_read_uint16(&(opt->mbuf_sz), arg); 242*fc8b96fbSPavan Nikhilesh 243*fc8b96fbSPavan Nikhilesh return ret; 244*fc8b96fbSPavan Nikhilesh } 245*fc8b96fbSPavan Nikhilesh 246*fc8b96fbSPavan Nikhilesh static int 247*fc8b96fbSPavan Nikhilesh evt_parse_max_pkt_sz(struct evt_options *opt, const char *arg) 248*fc8b96fbSPavan Nikhilesh { 249*fc8b96fbSPavan Nikhilesh int ret; 250*fc8b96fbSPavan Nikhilesh 251*fc8b96fbSPavan Nikhilesh ret = parser_read_uint32(&(opt->max_pkt_sz), arg); 252*fc8b96fbSPavan Nikhilesh 253*fc8b96fbSPavan Nikhilesh return ret; 254*fc8b96fbSPavan Nikhilesh } 255*fc8b96fbSPavan Nikhilesh 2564afd440eSGuduri Prathyusha static void 2574afd440eSGuduri Prathyusha usage(char *program) 2584afd440eSGuduri Prathyusha { 2594afd440eSGuduri Prathyusha printf("usage : %s [EAL options] -- [application options]\n", program); 2604afd440eSGuduri Prathyusha printf("application options:\n"); 2614afd440eSGuduri Prathyusha printf("\t--verbose : verbose level\n" 2624afd440eSGuduri Prathyusha "\t--dev : device id of the event device\n" 2634afd440eSGuduri Prathyusha "\t--test : name of the test application to run\n" 2644afd440eSGuduri Prathyusha "\t--socket_id : socket_id of application resources\n" 2654afd440eSGuduri Prathyusha "\t--pool_sz : pool size of the mempool\n" 2664afd440eSGuduri Prathyusha "\t--plcores : list of lcore ids for producers\n" 2674afd440eSGuduri Prathyusha "\t--wlcores : list of lcore ids for workers\n" 2684afd440eSGuduri Prathyusha "\t--stlist : list of scheduled types of the stages\n" 2694afd440eSGuduri Prathyusha "\t--nb_flows : number of flows to produce\n" 2704afd440eSGuduri Prathyusha "\t--nb_pkts : number of packets to produce\n" 2714afd440eSGuduri Prathyusha "\t--worker_deq_depth : dequeue depth of the worker\n" 2724afd440eSGuduri Prathyusha "\t--fwd_latency : perform fwd_latency measurement\n" 2734afd440eSGuduri Prathyusha "\t--queue_priority : enable queue priority\n" 274f0959283SPavan Nikhilesh "\t--deq_tmo_nsec : global dequeue timeout\n" 275d008f20bSPavan Nikhilesh "\t--prod_type_ethdev : use ethernet device as producer.\n" 276d008f20bSPavan Nikhilesh "\t--prod_type_timerdev : use event timer device as producer.\n" 277d008f20bSPavan Nikhilesh "\t expity_nsec would be the timeout\n" 278d008f20bSPavan Nikhilesh "\t in ns.\n" 27917b22d0bSPavan Nikhilesh "\t--prod_type_timerdev_burst : use timer device as producer\n" 28017b22d0bSPavan Nikhilesh "\t burst mode.\n" 28198c62921SPavan Nikhilesh "\t--nb_timers : number of timers to arm.\n" 28298c62921SPavan Nikhilesh "\t--nb_timer_adptrs : number of timer adapters to use.\n" 28398c62921SPavan Nikhilesh "\t--timer_tick_nsec : timer tick interval in ns.\n" 28498c62921SPavan Nikhilesh "\t--max_tmo_nsec : max timeout interval in ns.\n" 2859e596d88SPavan Nikhilesh "\t--expiry_nsec : event timer expiry ns.\n" 286*fc8b96fbSPavan Nikhilesh "\t--mbuf_sz : packet mbuf size.\n" 287*fc8b96fbSPavan Nikhilesh "\t--max_pkt_sz : max packet size.\n" 2884afd440eSGuduri Prathyusha ); 2894afd440eSGuduri Prathyusha printf("available tests:\n"); 2904afd440eSGuduri Prathyusha evt_test_dump_names(); 2914afd440eSGuduri Prathyusha } 2924afd440eSGuduri Prathyusha 2934afd440eSGuduri Prathyusha static int 2944afd440eSGuduri Prathyusha evt_parse_sched_type_list(struct evt_options *opt, const char *arg) 2954afd440eSGuduri Prathyusha { 2964afd440eSGuduri Prathyusha char c; 2974afd440eSGuduri Prathyusha int i = 0, j = -1; 2984afd440eSGuduri Prathyusha 2994afd440eSGuduri Prathyusha for (i = 0; i < EVT_MAX_STAGES; i++) 3004afd440eSGuduri Prathyusha opt->sched_type_list[i] = (uint8_t)-1; 3014afd440eSGuduri Prathyusha 3024afd440eSGuduri Prathyusha i = 0; 3034afd440eSGuduri Prathyusha 3044afd440eSGuduri Prathyusha do { 3054afd440eSGuduri Prathyusha c = arg[++j]; 3064afd440eSGuduri Prathyusha 3074afd440eSGuduri Prathyusha switch (c) { 3084afd440eSGuduri Prathyusha case 'o': 3094afd440eSGuduri Prathyusha case 'O': 3104afd440eSGuduri Prathyusha opt->sched_type_list[i++] = RTE_SCHED_TYPE_ORDERED; 3114afd440eSGuduri Prathyusha break; 3124afd440eSGuduri Prathyusha case 'a': 3134afd440eSGuduri Prathyusha case 'A': 3144afd440eSGuduri Prathyusha opt->sched_type_list[i++] = RTE_SCHED_TYPE_ATOMIC; 3154afd440eSGuduri Prathyusha break; 3164afd440eSGuduri Prathyusha case 'p': 3174afd440eSGuduri Prathyusha case 'P': 3184afd440eSGuduri Prathyusha opt->sched_type_list[i++] = RTE_SCHED_TYPE_PARALLEL; 3194afd440eSGuduri Prathyusha break; 3204afd440eSGuduri Prathyusha case ',': 3214afd440eSGuduri Prathyusha break; 3224afd440eSGuduri Prathyusha default: 3234afd440eSGuduri Prathyusha if (c != '\0') { 3244afd440eSGuduri Prathyusha evt_err("invalid sched_type %c", c); 3254afd440eSGuduri Prathyusha return -EINVAL; 3264afd440eSGuduri Prathyusha } 3274afd440eSGuduri Prathyusha } 3284afd440eSGuduri Prathyusha } while (c != '\0'); 3294afd440eSGuduri Prathyusha 3304afd440eSGuduri Prathyusha opt->nb_stages = i; 3314afd440eSGuduri Prathyusha return 0; 3324afd440eSGuduri Prathyusha } 3334afd440eSGuduri Prathyusha 3344afd440eSGuduri Prathyusha static struct option lgopts[] = { 3354afd440eSGuduri Prathyusha { EVT_NB_FLOWS, 1, 0, 0 }, 3364afd440eSGuduri Prathyusha { EVT_DEVICE, 1, 0, 0 }, 3374afd440eSGuduri Prathyusha { EVT_VERBOSE, 1, 0, 0 }, 3384afd440eSGuduri Prathyusha { EVT_TEST, 1, 0, 0 }, 3394afd440eSGuduri Prathyusha { EVT_PROD_LCORES, 1, 0, 0 }, 3404afd440eSGuduri Prathyusha { EVT_WORK_LCORES, 1, 0, 0 }, 3414afd440eSGuduri Prathyusha { EVT_SOCKET_ID, 1, 0, 0 }, 3424afd440eSGuduri Prathyusha { EVT_POOL_SZ, 1, 0, 0 }, 3434afd440eSGuduri Prathyusha { EVT_NB_PKTS, 1, 0, 0 }, 3444afd440eSGuduri Prathyusha { EVT_WKR_DEQ_DEP, 1, 0, 0 }, 3454afd440eSGuduri Prathyusha { EVT_SCHED_TYPE_LIST, 1, 0, 0 }, 3464afd440eSGuduri Prathyusha { EVT_FWD_LATENCY, 0, 0, 0 }, 3474afd440eSGuduri Prathyusha { EVT_QUEUE_PRIORITY, 0, 0, 0 }, 348f0959283SPavan Nikhilesh { EVT_DEQ_TMO_NSEC, 1, 0, 0 }, 349b01974daSPavan Nikhilesh { EVT_PROD_ETHDEV, 0, 0, 0 }, 350d008f20bSPavan Nikhilesh { EVT_PROD_TIMERDEV, 0, 0, 0 }, 35117b22d0bSPavan Nikhilesh { EVT_PROD_TIMERDEV_BURST, 0, 0, 0 }, 35298c62921SPavan Nikhilesh { EVT_NB_TIMERS, 1, 0, 0 }, 35398c62921SPavan Nikhilesh { EVT_NB_TIMER_ADPTRS, 1, 0, 0 }, 35498c62921SPavan Nikhilesh { EVT_TIMER_TICK_NSEC, 1, 0, 0 }, 35598c62921SPavan Nikhilesh { EVT_MAX_TMO_NSEC, 1, 0, 0 }, 35698c62921SPavan Nikhilesh { EVT_EXPIRY_NSEC, 1, 0, 0 }, 357*fc8b96fbSPavan Nikhilesh { EVT_MBUF_SZ, 1, 0, 0 }, 358*fc8b96fbSPavan Nikhilesh { EVT_MAX_PKT_SZ, 1, 0, 0 }, 3594afd440eSGuduri Prathyusha { EVT_HELP, 0, 0, 0 }, 3604afd440eSGuduri Prathyusha { NULL, 0, 0, 0 } 3614afd440eSGuduri Prathyusha }; 3624afd440eSGuduri Prathyusha 3634afd440eSGuduri Prathyusha static int 3644afd440eSGuduri Prathyusha evt_opts_parse_long(int opt_idx, struct evt_options *opt) 3654afd440eSGuduri Prathyusha { 3664afd440eSGuduri Prathyusha unsigned int i; 3674afd440eSGuduri Prathyusha 3684afd440eSGuduri Prathyusha struct long_opt_parser parsermap[] = { 3694afd440eSGuduri Prathyusha { EVT_NB_FLOWS, evt_parse_nb_flows}, 3704afd440eSGuduri Prathyusha { EVT_DEVICE, evt_parse_dev_id}, 3714afd440eSGuduri Prathyusha { EVT_VERBOSE, evt_parse_verbose}, 3724afd440eSGuduri Prathyusha { EVT_TEST, evt_parse_test_name}, 3734afd440eSGuduri Prathyusha { EVT_PROD_LCORES, evt_parse_plcores}, 3744afd440eSGuduri Prathyusha { EVT_WORK_LCORES, evt_parse_work_lcores}, 3754afd440eSGuduri Prathyusha { EVT_SOCKET_ID, evt_parse_socket_id}, 3764afd440eSGuduri Prathyusha { EVT_POOL_SZ, evt_parse_pool_sz}, 3774afd440eSGuduri Prathyusha { EVT_NB_PKTS, evt_parse_nb_pkts}, 3784afd440eSGuduri Prathyusha { EVT_WKR_DEQ_DEP, evt_parse_wkr_deq_dep}, 3794afd440eSGuduri Prathyusha { EVT_SCHED_TYPE_LIST, evt_parse_sched_type_list}, 3804afd440eSGuduri Prathyusha { EVT_FWD_LATENCY, evt_parse_fwd_latency}, 3814afd440eSGuduri Prathyusha { EVT_QUEUE_PRIORITY, evt_parse_queue_priority}, 382f0959283SPavan Nikhilesh { EVT_DEQ_TMO_NSEC, evt_parse_deq_tmo_nsec}, 383b01974daSPavan Nikhilesh { EVT_PROD_ETHDEV, evt_parse_eth_prod_type}, 384d008f20bSPavan Nikhilesh { EVT_PROD_TIMERDEV, evt_parse_timer_prod_type}, 38517b22d0bSPavan Nikhilesh { EVT_PROD_TIMERDEV_BURST, evt_parse_timer_prod_type_burst}, 38698c62921SPavan Nikhilesh { EVT_NB_TIMERS, evt_parse_nb_timers}, 38798c62921SPavan Nikhilesh { EVT_NB_TIMER_ADPTRS, evt_parse_nb_timer_adptrs}, 38898c62921SPavan Nikhilesh { EVT_TIMER_TICK_NSEC, evt_parse_timer_tick_nsec}, 38998c62921SPavan Nikhilesh { EVT_MAX_TMO_NSEC, evt_parse_max_tmo_nsec}, 39098c62921SPavan Nikhilesh { EVT_EXPIRY_NSEC, evt_parse_expiry_nsec}, 391*fc8b96fbSPavan Nikhilesh { EVT_MBUF_SZ, evt_parse_mbuf_sz}, 392*fc8b96fbSPavan Nikhilesh { EVT_MAX_PKT_SZ, evt_parse_max_pkt_sz}, 3934afd440eSGuduri Prathyusha }; 3944afd440eSGuduri Prathyusha 3954afd440eSGuduri Prathyusha for (i = 0; i < RTE_DIM(parsermap); i++) { 3964afd440eSGuduri Prathyusha if (strncmp(lgopts[opt_idx].name, parsermap[i].lgopt_name, 397d008f20bSPavan Nikhilesh strlen(lgopts[opt_idx].name)) == 0) 3984afd440eSGuduri Prathyusha return parsermap[i].parser_fn(opt, optarg); 3994afd440eSGuduri Prathyusha } 4004afd440eSGuduri Prathyusha 4014afd440eSGuduri Prathyusha return -EINVAL; 4024afd440eSGuduri Prathyusha } 4034afd440eSGuduri Prathyusha 4044afd440eSGuduri Prathyusha int 4054afd440eSGuduri Prathyusha evt_options_parse(struct evt_options *opt, int argc, char **argv) 4064afd440eSGuduri Prathyusha { 4074afd440eSGuduri Prathyusha int opts, retval, opt_idx; 4084afd440eSGuduri Prathyusha 4094afd440eSGuduri Prathyusha while ((opts = getopt_long(argc, argv, "", lgopts, &opt_idx)) != EOF) { 4104afd440eSGuduri Prathyusha switch (opts) { 4114afd440eSGuduri Prathyusha case 0: /* long options */ 4124afd440eSGuduri Prathyusha if (!strcmp(lgopts[opt_idx].name, "help")) { 4134afd440eSGuduri Prathyusha usage(argv[0]); 4144afd440eSGuduri Prathyusha exit(EXIT_SUCCESS); 4154afd440eSGuduri Prathyusha } 4164afd440eSGuduri Prathyusha 4174afd440eSGuduri Prathyusha retval = evt_opts_parse_long(opt_idx, opt); 4184afd440eSGuduri Prathyusha if (retval != 0) 4194afd440eSGuduri Prathyusha return retval; 4204afd440eSGuduri Prathyusha break; 4214afd440eSGuduri Prathyusha default: 4224afd440eSGuduri Prathyusha return -EINVAL; 4234afd440eSGuduri Prathyusha } 4244afd440eSGuduri Prathyusha } 4254afd440eSGuduri Prathyusha return 0; 4264afd440eSGuduri Prathyusha } 4274afd440eSGuduri Prathyusha 42889e84026SJerin Jacob void 42989e84026SJerin Jacob evt_options_dump(struct evt_options *opt) 43089e84026SJerin Jacob { 43189e84026SJerin Jacob int lcore_id; 43289e84026SJerin Jacob struct rte_event_dev_info dev_info; 43389e84026SJerin Jacob 43489e84026SJerin Jacob rte_event_dev_info_get(opt->dev_id, &dev_info); 43589e84026SJerin Jacob evt_dump("driver", "%s", dev_info.driver_name); 43689e84026SJerin Jacob evt_dump("test", "%s", opt->test_name); 43789e84026SJerin Jacob evt_dump("dev", "%d", opt->dev_id); 43889e84026SJerin Jacob evt_dump("verbose_level", "%d", opt->verbose_level); 43989e84026SJerin Jacob evt_dump("socket_id", "%d", opt->socket_id); 44089e84026SJerin Jacob evt_dump("pool_sz", "%d", opt->pool_sz); 44189e84026SJerin Jacob evt_dump("master lcore", "%d", rte_get_master_lcore()); 44289e84026SJerin Jacob evt_dump("nb_pkts", "%"PRIu64, opt->nb_pkts); 443d008f20bSPavan Nikhilesh evt_dump("nb_timers", "%"PRIu64, opt->nb_timers); 44489e84026SJerin Jacob evt_dump_begin("available lcores"); 44589e84026SJerin Jacob RTE_LCORE_FOREACH(lcore_id) 44689e84026SJerin Jacob printf("%d ", lcore_id); 44789e84026SJerin Jacob evt_dump_end; 44889e84026SJerin Jacob evt_dump_nb_flows(opt); 44989e84026SJerin Jacob evt_dump_worker_dequeue_depth(opt); 45089e84026SJerin Jacob } 451