From db9145d248720c633dd4da6c785e071198986326 Mon Sep 17 00:00:00 2001 From: imarom Date: Sun, 8 May 2016 17:32:12 +0300 Subject: added duration to remote push --- src/stateless/cp/trex_stateless_port.cpp | 10 ++++++++-- src/stateless/cp/trex_stateless_port.h | 6 +++++- src/stateless/dp/trex_stateless_dp_core.cpp | 20 ++++++++++++++------ src/stateless/dp/trex_stateless_dp_core.h | 7 +++++-- src/stateless/dp/trex_stream_node.h | 4 ++++ src/stateless/messaging/trex_stateless_messaging.cpp | 11 +++++++++-- src/stateless/messaging/trex_stateless_messaging.h | 5 ++++- 7 files changed, 49 insertions(+), 14 deletions(-) (limited to 'src/stateless') diff --git a/src/stateless/cp/trex_stateless_port.cpp b/src/stateless/cp/trex_stateless_port.cpp index aa2d43f3..360cc7d6 100644 --- a/src/stateless/cp/trex_stateless_port.cpp +++ b/src/stateless/cp/trex_stateless_port.cpp @@ -416,7 +416,12 @@ TrexStatelessPort::update_traffic(const TrexPortMultiplier &mul, bool force) { } void -TrexStatelessPort::push_remote(const std::string &pcap_filename, double ipg_usec, double speedup, uint32_t count) { +TrexStatelessPort::push_remote(const std::string &pcap_filename, + double ipg_usec, + double speedup, + uint32_t count, + double duration) { + /* command allowed only on state stream */ verify_state(PORT_STATE_IDLE | PORT_STATE_STREAMS); @@ -449,7 +454,8 @@ TrexStatelessPort::push_remote(const std::string &pcap_filename, double ipg_usec pcap_filename, ipg_usec, speedup, - count); + count, + duration); send_message_to_dp(tx_core, push_msg); /* update subscribers */ diff --git a/src/stateless/cp/trex_stateless_port.h b/src/stateless/cp/trex_stateless_port.h index ccbfad0d..8856b429 100644 --- a/src/stateless/cp/trex_stateless_port.h +++ b/src/stateless/cp/trex_stateless_port.h @@ -216,7 +216,11 @@ public: * push a PCAP file onto the port * */ - void push_remote(const std::string &pcap_filename, double ipg_usec, double speedup, uint32_t count); + void push_remote(const std::string &pcap_filename, + double ipg_usec, + double speedup, + uint32_t count, + double duration); /** * get the port state diff --git a/src/stateless/dp/trex_stateless_dp_core.cpp b/src/stateless/dp/trex_stateless_dp_core.cpp index 6450d0f9..dff5285d 100644 --- a/src/stateless/dp/trex_stateless_dp_core.cpp +++ b/src/stateless/dp/trex_stateless_dp_core.cpp @@ -301,7 +301,7 @@ bool TrexStatelessDpPerPort::push_pcap(uint8_t port_id, assert(m_active_pcap_node == NULL); m_active_pcap_node = pcap_node; - m_state = TrexStatelessDpPerPort::ppSTATE_TRANSMITTING; + m_state = TrexStatelessDpPerPort::ppSTATE_PCAP_TX; return (true); } @@ -898,7 +898,8 @@ TrexStatelessDpCore::push_pcap(uint8_t port_id, const std::string &pcap_filename, double ipg_usec, double speedup, - uint32_t count) { + uint32_t count, + double duration) { TrexStatelessDpPerPort * lp_port = get_port_db(port_id); @@ -917,13 +918,12 @@ TrexStatelessDpCore::push_pcap(uint8_t port_id, return; } - m_state = TrexStatelessDpCore::STATE_TRANSMITTING; - #if 0 - if ( duration > 0.0 ){ + if (duration > 0.0) { add_port_duration(duration, port_id, event_id); } - #endif + + m_state = TrexStatelessDpCore::STATE_PCAP_TX; } @@ -1007,6 +1007,9 @@ bool CGenNodePCAP::create(uint8_t port_id, m_port_id = port_id; m_count = count; + /* mark this node as slow path */ + set_slow_path(true); + if (ipg_usec != -1) { /* fixed IPG */ m_ipg_sec = usec_to_sec(ipg_usec / speedup); @@ -1046,6 +1049,11 @@ bool CGenNodePCAP::create(uint8_t port_id, return true; } +/** + * cleanup for PCAP node + * + * @author imarom (08-May-16) + */ void CGenNodePCAP::destroy() { if (m_raw_packet) { diff --git a/src/stateless/dp/trex_stateless_dp_core.h b/src/stateless/dp/trex_stateless_dp_core.h index 115f8873..0941f6f3 100644 --- a/src/stateless/dp/trex_stateless_dp_core.h +++ b/src/stateless/dp/trex_stateless_dp_core.h @@ -54,7 +54,8 @@ public: enum state_e { ppSTATE_IDLE, ppSTATE_TRANSMITTING, - ppSTATE_PAUSE + ppSTATE_PAUSE, + ppSTATE_PCAP_TX, }; @@ -117,6 +118,7 @@ public: enum state_e { STATE_IDLE, STATE_TRANSMITTING, + STATE_PCAP_TX, STATE_TERMINATE }; @@ -175,7 +177,8 @@ public: const std::string &pcap_filename, double ipg_usec, double speedup, - uint32_t count); + uint32_t count, + double duration); /** diff --git a/src/stateless/dp/trex_stream_node.h b/src/stateless/dp/trex_stream_node.h index a970c1f7..bdbc5084 100644 --- a/src/stateless/dp/trex_stream_node.h +++ b/src/stateless/dp/trex_stream_node.h @@ -406,6 +406,10 @@ public: double speedup, uint32_t count); + /** + * destroy the node cleaning up any data + * + */ void destroy(); /** diff --git a/src/stateless/messaging/trex_stateless_messaging.cpp b/src/stateless/messaging/trex_stateless_messaging.cpp index c0151c76..1cbacb6f 100644 --- a/src/stateless/messaging/trex_stateless_messaging.cpp +++ b/src/stateless/messaging/trex_stateless_messaging.cpp @@ -187,7 +187,13 @@ TrexStatelessDpUpdate::clone() { ************************/ bool TrexStatelessDpPushPCAP::handle(TrexStatelessDpCore *dp_core) { - dp_core->push_pcap(m_port_id, m_event_id, m_pcap_filename, m_ipg_usec, m_speedup, m_count); + dp_core->push_pcap(m_port_id, + m_event_id, + m_pcap_filename, + m_ipg_usec, + m_speedup, + m_count, + m_duration); return true; } @@ -198,7 +204,8 @@ TrexStatelessDpPushPCAP::clone() { m_pcap_filename, m_ipg_usec, m_speedup, - m_count); + m_count, + m_duration); return new_msg; } diff --git a/src/stateless/messaging/trex_stateless_messaging.h b/src/stateless/messaging/trex_stateless_messaging.h index c3de82ee..9b1f2e31 100644 --- a/src/stateless/messaging/trex_stateless_messaging.h +++ b/src/stateless/messaging/trex_stateless_messaging.h @@ -258,12 +258,14 @@ public: const std::string &pcap_filename, double ipg_usec, double speedup, - uint32_t count) : m_pcap_filename(pcap_filename) { + uint32_t count, + double duration) : m_pcap_filename(pcap_filename) { m_port_id = port_id; m_event_id = event_id; m_ipg_usec = ipg_usec; m_speedup = speedup; m_count = count; + m_duration = duration; } virtual bool handle(TrexStatelessDpCore *dp_core); @@ -275,6 +277,7 @@ private: int m_event_id; double m_ipg_usec; double m_speedup; + double m_duration; uint32_t m_count; uint8_t m_port_id; }; -- cgit 1.2.3-korg