diff options
author | imarom <imarom@cisco.com> | 2016-03-08 09:20:02 +0200 |
---|---|---|
committer | imarom <imarom@cisco.com> | 2016-03-10 17:16:36 +0200 |
commit | 60fbd456c4d804adc903839f916c9c2bbe272d94 (patch) | |
tree | 319c377cbf8ac4c857bd2a60090bcd687b3541c1 /src | |
parent | 834431083b4f9e6ac7eac00d5ec6682c92b16da9 (diff) |
RX stats - major refactor
Diffstat (limited to 'src')
-rw-r--r-- | src/internal_api/trex_platform_api.h | 2 | ||||
-rw-r--r-- | src/sim/trex_sim.h | 2 | ||||
-rw-r--r-- | src/sim/trex_sim_stateless.cpp | 33 | ||||
-rw-r--r-- | src/stateless/cp/trex_dp_port_events.cpp | 6 | ||||
-rw-r--r-- | src/stateless/cp/trex_stateless_port.cpp | 9 |
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(); } /** |