diff options
Diffstat (limited to 'src/bp_sim.h')
-rwxr-xr-x | src/bp_sim.h | 98 |
1 files changed, 74 insertions, 24 deletions
diff --git a/src/bp_sim.h b/src/bp_sim.h index da8e8780..b9a42027 100755 --- a/src/bp_sim.h +++ b/src/bp_sim.h @@ -411,10 +411,6 @@ public: #define CONST_NB_MBUF 16380 - -#define MAX_BUF_SIZE (2048) -#define CONST_MBUF_SIZE (MAX_BUF_SIZE + sizeof(struct rte_mbuf) + RTE_PKTMBUF_HEADROOM) - /* this is the first small part of the packet that we manipulate */ #define FIRST_PKT_SIZE 64 #define CONST_SMALL_MBUF_SIZE (FIRST_PKT_SIZE + sizeof(struct rte_mbuf) + RTE_PKTMBUF_HEADROOM) @@ -424,13 +420,19 @@ public: #define _256_MBUF_SIZE 256 #define _512_MBUF_SIZE 512 #define _1024_MBUF_SIZE 1024 +#define _2048_MBUF_SIZE 2048 +#define _4096_MBUF_SIZE 4096 +#define MAX_PKT_ALIGN_BUF_9K (9*1024+64) +#define MBUF_PKT_PREFIX ( sizeof(struct rte_mbuf) + RTE_PKTMBUF_HEADROOM ) - -#define CONST_128_MBUF_SIZE (128 + sizeof(struct rte_mbuf) + RTE_PKTMBUF_HEADROOM) -#define CONST_256_MBUF_SIZE (256 + sizeof(struct rte_mbuf) + RTE_PKTMBUF_HEADROOM) -#define CONST_512_MBUF_SIZE (512 + sizeof(struct rte_mbuf) + RTE_PKTMBUF_HEADROOM) -#define CONST_1024_MBUF_SIZE (1024 + sizeof(struct rte_mbuf) + RTE_PKTMBUF_HEADROOM) +#define CONST_128_MBUF_SIZE (128 + MBUF_PKT_PREFIX ) +#define CONST_256_MBUF_SIZE (256 + MBUF_PKT_PREFIX ) +#define CONST_512_MBUF_SIZE (512 + MBUF_PKT_PREFIX) +#define CONST_1024_MBUF_SIZE (1024 + MBUF_PKT_PREFIX) +#define CONST_2048_MBUF_SIZE (2048 + MBUF_PKT_PREFIX) +#define CONST_4096_MBUF_SIZE (4096 + MBUF_PKT_PREFIX) +#define CONST_9k_MBUF_SIZE (MAX_PKT_ALIGN_BUF_9K + MBUF_PKT_PREFIX) class CPreviewMode { @@ -774,6 +776,7 @@ public: uint16_t m_run_flags; uint8_t m_mac_splitter; uint8_t m_l_pkt_mode; + uint16_t m_debug_pkt_proto; trex_run_mode_e m_run_mode; @@ -1118,9 +1121,13 @@ public: m = _rte_pktmbuf_alloc(m_mbuf_pool_512); }else if (size < _1024_MBUF_SIZE) { m = _rte_pktmbuf_alloc(m_mbuf_pool_1024); + }else if (size < _2048_MBUF_SIZE) { + m = _rte_pktmbuf_alloc(m_mbuf_pool_2048); + }else if (size < _4096_MBUF_SIZE) { + m = _rte_pktmbuf_alloc(m_mbuf_pool_4096); }else{ - assert(size<MAX_BUF_SIZE); - m = _rte_pktmbuf_alloc(m_big_mbuf_pool); + assert(size<MAX_PKT_ALIGN_BUF_9K); + m = _rte_pktmbuf_alloc(m_mbuf_pool_9k); } return (m); } @@ -1129,21 +1136,22 @@ public: return ( _rte_pktmbuf_alloc(m_small_mbuf_pool) ); } - inline rte_mbuf_t * pktmbuf_alloc_big(){ - return ( _rte_pktmbuf_alloc(m_big_mbuf_pool) ); - } void dump(FILE *fd); void dump_in_case_of_error(FILE *fd); public: - rte_mempool_t * m_big_mbuf_pool; /* pool for const packets */ rte_mempool_t * m_small_mbuf_pool; /* pool for start packets */ + rte_mempool_t * m_mbuf_pool_128; rte_mempool_t * m_mbuf_pool_256; rte_mempool_t * m_mbuf_pool_512; rte_mempool_t * m_mbuf_pool_1024; + rte_mempool_t * m_mbuf_pool_2048; + rte_mempool_t * m_mbuf_pool_4096; + rte_mempool_t * m_mbuf_pool_9k; + rte_mempool_t * m_mbuf_global_nodes; uint32_t m_pool_id; }; @@ -1162,11 +1170,7 @@ public: return ( m_mem_pool[socket].pktmbuf_alloc_small() ); } - static inline rte_mbuf_t * pktmbuf_alloc_big(socket_id_t socket){ - return ( m_mem_pool[socket].pktmbuf_alloc_big() ); - } - - + /** * try to allocate small buffers too @@ -1832,7 +1836,7 @@ public: protected: - void fill_raw_packet(rte_mbuf_t * m,CGenNode * node,pkt_dir_t dir); + virtual void fill_raw_packet(rte_mbuf_t * m,CGenNode * node,pkt_dir_t dir); CFileWriterBase * m_writer; CCapPktRaw * m_raw; @@ -1846,6 +1850,41 @@ public: virtual int send_node(CGenNode * node); }; +/** + * same as regular STL but no I/O (dry run) + * + * @author imarom (07-Jan-16) + */ +class CErfIFStlNull : public CErfIFStl { +public: + + virtual int open_file(std::string file_name) { + return (0); + } + + virtual int write_pkt(CCapPktRaw *pkt_raw) { + return (0); + } + + virtual int close_file(void) { + return (0); + } + + virtual void fill_raw_packet(rte_mbuf_t * m,CGenNode * node,pkt_dir_t dir) { + + } + + virtual int update_mac_addr_from_global_cfg(pkt_dir_t dir, uint8_t * p){ + return (0); + } + + + virtual int flush_tx_queue(void){ + return (0); + + } + +}; static inline int fill_pkt(CCapPktRaw * raw,rte_mbuf_t * m){ @@ -1929,6 +1968,12 @@ public: add_node(node); } + /** + * set packet limit for the generator + */ + void set_packet_limit(uint64_t limit) { + m_limit = limit; + } void DumpHist(FILE *fd){ fprintf(fd,"\n"); @@ -1947,7 +1992,7 @@ private: } int update_stats(CGenNode * node); int update_stl_stats(CGenNodeStateless *node_sl); - + bool has_limit_reached(); FORCE_NO_INLINE bool handle_slow_messages(uint8_t type, CGenNode * node, @@ -1963,6 +2008,7 @@ public: CFlowGenListPerThread * m_parent; CPreviewMode m_preview_mode; uint64_t m_cnt; + uint64_t m_limit; CTimeHistogram m_realtime_his; }; @@ -3095,7 +3141,11 @@ public: SIZE_512 = 512, SIZE_1024 = 1024, SIZE_2048 = 2048, - MASK_SIZE =6 + SIZE_4096 = 4096, + SIZE_8192 = 8192, + SIZE_16384 = 16384, + + MASK_SIZE =9 }; void clear(){ @@ -3477,7 +3527,7 @@ public: void start_stateless_daemon_simulation(); /* open a file for simulation */ - void start_stateless_simulation_file(std::string erf_file_name,CPreviewMode &preview); + void start_stateless_simulation_file(std::string erf_file_name,CPreviewMode &preview, uint64_t limit = 0); /* close a file for simulation */ void stop_stateless_simulation_file(); |