summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/internal_api/trex_platform_api.h2
-rw-r--r--src/sim/trex_sim.h2
-rw-r--r--src/sim/trex_sim_stateless.cpp33
-rw-r--r--src/stateless/cp/trex_dp_port_events.cpp6
-rw-r--r--src/stateless/cp/trex_stateless_port.cpp9
5 files changed, 44 insertions, 8 deletions
diff --git a/src/internal_api/trex_platform_api.h b/src/internal_api/trex_platform_api.h
index b1cf2fb7..e9cf56d7 100644
--- a/src/internal_api/trex_platform_api.h
+++ b/src/internal_api/trex_platform_api.h
@@ -214,7 +214,7 @@ public:
virtual void get_interface_stats(uint8_t interface_id, TrexPlatformInterfaceStats &stats) const {
}
- virtual void get_interface_stat_info(uint8_t interface_id, uint16_t &num_counters, uint16_t &capabilities) const {num_counters=128; capabilities=0; }
+ virtual void get_interface_stat_info(uint8_t interface_id, uint16_t &num_counters, uint16_t &capabilities) const {num_counters=128; capabilities=TrexPlatformApi::IF_STAT_IPV4_ID; }
virtual void port_id_to_cores(uint8_t port_id, std::vector<std::pair<uint8_t, uint8_t>> &cores_id_list) const {
for (int i = 0; i < m_dp_core_count; i++) {
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) {
diff --git a/src/stateless/cp/trex_dp_port_events.cpp b/src/stateless/cp/trex_dp_port_events.cpp
index 8e098adf..1321a362 100644
--- a/src/stateless/cp/trex_dp_port_events.cpp
+++ b/src/stateless/cp/trex_dp_port_events.cpp
@@ -82,6 +82,12 @@ protected:
void
TrexDpPortEvents::barrier() {
+
+ /* simulator will be stuck here forever */
+ #ifdef TREX_SIM
+ return;
+ #endif
+
int barrier_id = create_event(new DPBarrier());
TrexStatelessCpToDpMsgBase *barrier_msg = new TrexStatelessDpBarrier(m_port->m_port_id, barrier_id);
diff --git a/src/stateless/cp/trex_stateless_port.cpp b/src/stateless/cp/trex_stateless_port.cpp
index 7302e05d..5947aaf7 100644
--- a/src/stateless/cp/trex_stateless_port.cpp
+++ b/src/stateless/cp/trex_stateless_port.cpp
@@ -103,14 +103,9 @@ TrexStatelessPort::TrexStatelessPort(uint8_t port_id, const TrexPlatformApi *api
}
TrexStatelessPort::~TrexStatelessPort() {
- if (m_graph_obj) {
- delete m_graph_obj;
- }
- if (m_pending_async_stop_event != TrexDpPortEvents::INVALID_ID) {
- m_dp_events.destroy_event(m_pending_async_stop_event);
- m_pending_async_stop_event = TrexDpPortEvents::INVALID_ID;
- }
+ stop_traffic();
+ remove_and_delete_all_streams();
}
/**