diff options
author | 2016-03-08 09:20:02 +0200 | |
---|---|---|
committer | 2016-03-10 17:16:36 +0200 | |
commit | 60fbd456c4d804adc903839f916c9c2bbe272d94 (patch) | |
tree | 319c377cbf8ac4c857bd2a60090bcd687b3541c1 /src/sim | |
parent | 834431083b4f9e6ac7eac00d5ec6682c92b16da9 (diff) |
RX stats - major refactor
Diffstat (limited to 'src/sim')
-rw-r--r-- | src/sim/trex_sim.h | 2 | ||||
-rw-r--r-- | src/sim/trex_sim_stateless.cpp | 33 |
2 files changed, 35 insertions, 0 deletions
diff --git a/src/sim/trex_sim.h b/src/sim/trex_sim.h index 59184b75..5aeeb226 100644 --- a/src/sim/trex_sim.h +++ b/src/sim/trex_sim.h @@ -149,7 +149,9 @@ private: uint64_t &simulated_pkts, uint64_t &written_pkts); + void cleanup(); void flush_dp_to_cp_messages_core(int core_index); + void flush_cp_to_dp_messages_core(int core_index); void validate_response(const Json::Value &resp); diff --git a/src/sim/trex_sim_stateless.cpp b/src/sim/trex_sim_stateless.cpp index 87c61ae2..ffe377f4 100644 --- a/src/sim/trex_sim_stateless.cpp +++ b/src/sim/trex_sim_stateless.cpp @@ -347,6 +347,10 @@ SimStateless::run_dp(const std::string &out_filename) { } } + /* cleanup */ + cleanup(); + + std::cout << "\n\nSimulation summary:\n"; std::cout << "-------------------\n\n"; std::cout << "simulated " << simulated_pkts_cnt << " packets\n"; @@ -360,6 +364,18 @@ SimStateless::run_dp(const std::string &out_filename) { std::cout << "\n"; } +void +SimStateless::cleanup() { + + for (int port_id = 0; port_id < get_stateless_obj()->get_port_count(); port_id++) { + get_stateless_obj()->get_port_by_id(port_id)->stop_traffic(); + get_stateless_obj()->get_port_by_id(port_id)->remove_and_delete_all_streams(); + } + for (int i = 0; i < m_dp_core_count; i++) { + flush_cp_to_dp_messages_core(i); + flush_dp_to_cp_messages_core(i); + } +} uint64_t SimStateless::get_limit_per_core(int core_index) { @@ -418,6 +434,23 @@ SimStateless::flush_dp_to_cp_messages_core(int core_index) { } } +void +SimStateless::flush_cp_to_dp_messages_core(int core_index) { + + CNodeRing *ring = CMsgIns::Ins()->getCpDp()->getRingCpToDp(core_index); + + while ( true ) { + CGenNode * node = NULL; + if (ring->Dequeue(node) != 0) { + break; + } + assert(node); + + TrexStatelessCpToDpMsgBase * msg = (TrexStatelessCpToDpMsgBase *)node; + delete msg; + } +} + bool SimStateless::should_capture_core(int i) { |