summaryrefslogtreecommitdiffstats
path: root/src/bp_sim.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/bp_sim.cpp')
-rwxr-xr-xsrc/bp_sim.cpp94
1 files changed, 58 insertions, 36 deletions
diff --git a/src/bp_sim.cpp b/src/bp_sim.cpp
index 6342b7f3..31ce0440 100755
--- a/src/bp_sim.cpp
+++ b/src/bp_sim.cpp
@@ -66,7 +66,7 @@ void CGlobalMemory::Dump(FILE *fd){
int i=0;
for (i=0; i<MBUF_SIZE; i++) {
- if ( (i>MBUF_2048) && (i<MBUF_DP_FLOWS)){
+ if ( (i>MBUF_9k) && (i<MBUF_DP_FLOWS)){
continue;
}
if ( i<TRAFFIC_MBUF_64 ){
@@ -95,6 +95,8 @@ void CGlobalMemory::set(const CPlatformMemoryYamlInfo &info,float mul){
m_mbuf[MBUF_512] += info.m_mbuf[TRAFFIC_MBUF_512];
m_mbuf[MBUF_1024] += info.m_mbuf[TRAFFIC_MBUF_1024];
m_mbuf[MBUF_2048] += info.m_mbuf[TRAFFIC_MBUF_2048];
+ m_mbuf[MBUF_4096] += info.m_mbuf[TRAFFIC_MBUF_4096];
+ m_mbuf[MBUF_9k] += info.m_mbuf[MBUF_9k];
}
@@ -494,7 +496,10 @@ void CRteMemPool::dump(FILE *fd){
DUMP_MBUF("mbuf_256",m_mbuf_pool_256);
DUMP_MBUF("mbuf_512",m_mbuf_pool_512);
DUMP_MBUF("mbuf_1024",m_mbuf_pool_1024);
- DUMP_MBUF("mbuf_2048",m_big_mbuf_pool);
+ DUMP_MBUF("mbuf_2048",m_mbuf_pool_2048);
+ DUMP_MBUF("mbuf_4096",m_mbuf_pool_4096);
+ DUMP_MBUF("mbuf_9k",m_mbuf_pool_9k);
+
}
////////////////////////////////////////
@@ -506,12 +511,14 @@ void CGlobalInfo::free_pools(){
for (i=0; i<(int)MAX_SOCKETS_SUPPORTED; i++) {
if (lpSocket->is_sockets_enable((socket_id_t)i)) {
lpmem= &m_mem_pool[i];
- utl_rte_mempool_delete(lpmem->m_big_mbuf_pool);
utl_rte_mempool_delete(lpmem->m_small_mbuf_pool);
utl_rte_mempool_delete(lpmem->m_mbuf_pool_128);
utl_rte_mempool_delete(lpmem->m_mbuf_pool_256);
utl_rte_mempool_delete(lpmem->m_mbuf_pool_512);
utl_rte_mempool_delete(lpmem->m_mbuf_pool_1024);
+ utl_rte_mempool_delete(lpmem->m_mbuf_pool_2048);
+ utl_rte_mempool_delete(lpmem->m_mbuf_pool_4096);
+ utl_rte_mempool_delete(lpmem->m_mbuf_pool_9k);
}
utl_rte_mempool_delete(m_mem_pool[0].m_mbuf_global_nodes);
}
@@ -531,12 +538,6 @@ void CGlobalInfo::init_pools(uint32_t rx_buffers){
lpmem= &m_mem_pool[i];
lpmem->m_pool_id=i;
- lpmem->m_big_mbuf_pool = utl_rte_mempool_create("big-pkt-const",
- (lp->get_2k_num_blocks()+rx_buffers),
- CONST_MBUF_SIZE,
- 32,
- (i<<5)+ 1,i);
- assert(lpmem->m_big_mbuf_pool);
/* this include the packet from 0-64 this is for small packets */
lpmem->m_small_mbuf_pool =utl_rte_mempool_create("small-pkt-const",
@@ -577,6 +578,26 @@ void CGlobalInfo::init_pools(uint32_t rx_buffers){
assert(lpmem->m_mbuf_pool_1024);
+ lpmem->m_mbuf_pool_2048=utl_rte_mempool_create("_2048-pkt-const",
+ lp->m_mbuf[MBUF_2048],
+ CONST_2048_MBUF_SIZE,
+ 32,(i<<5)+ 5,i);
+
+ assert(lpmem->m_mbuf_pool_2048);
+
+ lpmem->m_mbuf_pool_4096=utl_rte_mempool_create("_4096-pkt-const",
+ lp->m_mbuf[MBUF_4096],
+ CONST_4096_MBUF_SIZE,
+ 32,(i<<5)+ 5,i);
+
+ assert(lpmem->m_mbuf_pool_4096);
+
+ lpmem->m_mbuf_pool_9k=utl_rte_mempool_create("_9k-pkt-const",
+ lp->m_mbuf[MBUF_9k]+rx_buffers,
+ CONST_9k_MBUF_SIZE,
+ 32,(i<<5)+ 5,i);
+
+ assert(lpmem->m_mbuf_pool_9k);
}
}
@@ -1190,9 +1211,9 @@ void CPacketIndication::ProcessIpPacket(CPacketParser *parser,
return;
}
- if ( m_packet->pkt_len > MAX_BUF_SIZE -FIRST_PKT_SIZE ){
+ if ( m_packet->pkt_len > MAX_PKT_SIZE ){
m_cnt->m_tcp_udp_pkt_length_error++;
- printf("ERROR packet is too big, not supported jumbo packets that larger than %d \n",MAX_BUF_SIZE);
+ printf("ERROR packet is too big, not supported jumbo packets that larger than %d \n",MAX_PKT_SIZE);
return;
}
@@ -1200,9 +1221,6 @@ void CPacketIndication::ProcessIpPacket(CPacketParser *parser,
m_packet->pkt_len = l3.m_ipv4->getTotalLength() + getIpOffset();
if (m_packet->pkt_len < 60) { m_packet->pkt_len = 60; }
-
-
-
m_cnt->m_valid_udp_tcp++;
m_payload_len = l3.m_ipv4->getTotalLength() - (payload_offset_from_ip);
m_payload = (uint8_t *)(packetBase +offset);
@@ -3146,7 +3164,8 @@ int CNodeGenerator::open_file(std::string file_name,
/* ser preview mode */
m_v_if->set_review_mode(preview_mode);
m_v_if->open_file(file_name);
- m_cnt = 0;
+ m_cnt = 0;
+ m_limit = 0;
return (0);
}
@@ -3161,10 +3180,12 @@ int CNodeGenerator::close_file(CFlowGenListPerThread * thread){
int CNodeGenerator::update_stl_stats(CGenNodeStateless *node_sl){
m_cnt++;
+ #ifdef _DEBUG
if ( m_preview_mode.getVMode() >2 ){
fprintf(stdout," %4lu ,", (ulong)m_cnt);
node_sl->Dump(stdout);
}
+ #endif
return (0);
}
@@ -3179,6 +3200,10 @@ int CNodeGenerator::update_stats(CGenNode * node){
return (0);
}
+bool CNodeGenerator::has_limit_reached() {
+ /* do we have a limit and has it passed ? */
+ return ( (m_limit > 0) && (m_cnt >= m_limit) );
+}
bool CFlowGenListPerThread::Create(uint32_t thread_id,
uint32_t core_id,
@@ -3514,9 +3539,6 @@ int CNodeGenerator::flush_file(dsec_t max_time,
}
}
- //#ifndef RTE_DPDK
- //thread->check_msgs();
- //#endif
uint8_t type=node->m_type;
@@ -3524,16 +3546,21 @@ int CNodeGenerator::flush_file(dsec_t max_time,
m_p_queue.pop();
CGenNodeStateless *node_sl = (CGenNodeStateless *)node;
- #ifdef _DEBUG
- update_stl_stats(node_sl);
- #endif
-
/* if the stream has been deactivated - end */
if ( unlikely( node_sl->is_mask_for_free() ) ) {
thread->free_node(node);
} else {
node_sl->handle(thread);
+
+ #ifdef TREX_SIM
+ update_stl_stats(node_sl);
+ if (has_limit_reached()) {
+ thread->m_stateless_dp_info.stop_traffic(node_sl->get_port_id(), false, 0);
+ }
+ #endif
+
}
+
}else{
if ( likely( type == CGenNode::FLOW_PKT ) ) {
@@ -3974,9 +4001,11 @@ void CFlowGenListPerThread::check_msgs(void) {
void CFlowGenListPerThread::start_stateless_simulation_file(std::string erf_file_name,
- CPreviewMode &preview){
+ CPreviewMode &preview,
+ uint64_t limit){
m_preview_mode = preview;
m_node_gen.open_file(erf_file_name,&m_preview_mode);
+ m_node_gen.set_packet_limit(limit);
}
void CFlowGenListPerThread::stop_stateless_simulation_file(){
@@ -3987,7 +4016,6 @@ void CFlowGenListPerThread::start_stateless_daemon_simulation(){
m_cur_time_sec = 0;
m_stateless_dp_info.run_once();
-
}
@@ -4677,13 +4705,11 @@ int CErfIFStl::send_node(CGenNode * _no_to_use){
rte_pktmbuf_free(m);
}
-
- BP_ASSERT(m_writer);
- bool res=m_writer->write_packet(m_raw);
-
-
- BP_ASSERT(res);
+
+ int rc = write_pkt(m_raw);
+ BP_ASSERT(rc == 0);
}
+
return (0);
}
@@ -4721,13 +4747,9 @@ int CErfIF::send_node(CGenNode * node){
//utl_DumpBuffer(stdout,p, 12,0);
- BP_ASSERT(m_writer);
-
- bool res=m_writer->write_packet(m_raw);
-
- //utl_DumpBuffer(stdout,m_raw->raw,m_raw->pkt_len,0);
+ int rc = write_pkt(m_raw);
+ BP_ASSERT(rc == 0);
- BP_ASSERT(res);
rte_pktmbuf_free(m);
}
return (0);