summaryrefslogtreecommitdiffstats
path: root/src/bp_sim.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/bp_sim.h')
-rwxr-xr-xsrc/bp_sim.h98
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();