1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright(c) 2010-2016 Intel Corporation 3 */ 4 5 #ifndef _MAIN_H_ 6 #define _MAIN_H_ 7 8 #ifndef APP_MBUF_ARRAY_SIZE 9 #define APP_MBUF_ARRAY_SIZE 256 10 #endif 11 12 struct app_mbuf_array { 13 struct rte_mbuf *array[APP_MBUF_ARRAY_SIZE]; 14 uint16_t n_mbufs; 15 }; 16 17 #ifndef APP_MAX_PORTS 18 #define APP_MAX_PORTS 4 19 #endif 20 21 struct __rte_cache_aligned app_params { 22 /* CPU cores */ 23 uint32_t core_rx; 24 uint32_t core_worker; 25 uint32_t core_tx; 26 27 /* Ports*/ 28 uint32_t ports[APP_MAX_PORTS]; 29 uint32_t n_ports; 30 uint32_t port_rx_ring_size; 31 uint32_t port_tx_ring_size; 32 33 /* Rings */ 34 struct rte_ring *rings_rx[APP_MAX_PORTS]; 35 struct rte_ring *rings_tx[APP_MAX_PORTS]; 36 uint32_t ring_rx_size; 37 uint32_t ring_tx_size; 38 39 /* Internal buffers */ 40 struct app_mbuf_array mbuf_rx; 41 struct app_mbuf_array mbuf_tx[APP_MAX_PORTS]; 42 43 /* Buffer pool */ 44 struct rte_mempool *pool; 45 uint32_t pool_buffer_size; 46 uint32_t pool_size; 47 uint32_t pool_cache_size; 48 49 /* Burst sizes */ 50 uint32_t burst_size_rx_read; 51 uint32_t burst_size_rx_write; 52 uint32_t burst_size_worker_read; 53 uint32_t burst_size_worker_write; 54 uint32_t burst_size_tx_read; 55 uint32_t burst_size_tx_write; 56 57 /* App behavior */ 58 uint32_t pipeline_type; 59 }; 60 61 extern struct app_params app; 62 63 extern bool force_quit; 64 65 int app_parse_args(int argc, char **argv); 66 void app_print_usage(void); 67 void app_init(void); 68 int app_lcore_main_loop(void *arg); 69 70 /* Pipeline */ 71 enum { 72 e_APP_PIPELINE_NONE = 0, 73 e_APP_PIPELINE_STUB, 74 75 e_APP_PIPELINE_HASH_KEY8_EXT, 76 e_APP_PIPELINE_HASH_KEY8_LRU, 77 e_APP_PIPELINE_HASH_KEY16_EXT, 78 e_APP_PIPELINE_HASH_KEY16_LRU, 79 e_APP_PIPELINE_HASH_KEY32_EXT, 80 e_APP_PIPELINE_HASH_KEY32_LRU, 81 82 e_APP_PIPELINE_HASH_SPEC_KEY8_EXT, 83 e_APP_PIPELINE_HASH_SPEC_KEY8_LRU, 84 e_APP_PIPELINE_HASH_SPEC_KEY16_EXT, 85 e_APP_PIPELINE_HASH_SPEC_KEY16_LRU, 86 e_APP_PIPELINE_HASH_SPEC_KEY32_EXT, 87 e_APP_PIPELINE_HASH_SPEC_KEY32_LRU, 88 89 e_APP_PIPELINE_ACL, 90 e_APP_PIPELINE_LPM, 91 e_APP_PIPELINE_LPM_IPV6, 92 93 e_APP_PIPELINE_HASH_CUCKOO_KEY8, 94 e_APP_PIPELINE_HASH_CUCKOO_KEY16, 95 e_APP_PIPELINE_HASH_CUCKOO_KEY32, 96 e_APP_PIPELINE_HASH_CUCKOO_KEY48, 97 e_APP_PIPELINE_HASH_CUCKOO_KEY64, 98 e_APP_PIPELINE_HASH_CUCKOO_KEY80, 99 e_APP_PIPELINE_HASH_CUCKOO_KEY96, 100 e_APP_PIPELINE_HASH_CUCKOO_KEY112, 101 e_APP_PIPELINE_HASH_CUCKOO_KEY128, 102 e_APP_PIPELINES 103 }; 104 105 void app_main_loop_rx(void); 106 void app_main_loop_rx_metadata(void); 107 uint64_t test_hash(void *key, 108 void *key_mask, 109 uint32_t key_size, 110 uint64_t seed); 111 112 uint32_t test_hash_cuckoo(const void *key, 113 uint32_t key_size, 114 uint32_t seed); 115 116 void app_main_loop_worker(void); 117 void app_main_loop_worker_pipeline_stub(void); 118 void app_main_loop_worker_pipeline_hash(void); 119 void app_main_loop_worker_pipeline_acl(void); 120 void app_main_loop_worker_pipeline_lpm(void); 121 void app_main_loop_worker_pipeline_lpm_ipv6(void); 122 123 void app_main_loop_tx(void); 124 125 #define APP_FLUSH 0 126 #ifndef APP_FLUSH 127 #define APP_FLUSH 0x3FF 128 #endif 129 130 #define APP_METADATA_OFFSET(offset) (sizeof(struct rte_mbuf) + (offset)) 131 132 #endif /* _MAIN_H_ */ 133