summaryrefslogtreecommitdiffstats
path: root/src/sim
diff options
context:
space:
mode:
authorimarom <imarom@cisco.com>2016-03-08 09:20:02 +0200
committerimarom <imarom@cisco.com>2016-03-10 17:16:36 +0200
commit60fbd456c4d804adc903839f916c9c2bbe272d94 (patch)
tree319c377cbf8ac4c857bd2a60090bcd687b3541c1 /src/sim
parent834431083b4f9e6ac7eac00d5ec6682c92b16da9 (diff)
RX stats - major refactor
Diffstat (limited to 'src/sim')
-rw-r--r--src/sim/trex_sim.h2
-rw-r--r--src/sim/trex_sim_stateless.cpp33
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) {