From 04eae221e7c0089ae974f86e3f6fe156d4cb56ce Mon Sep 17 00:00:00 2001 From: imarom Date: Sun, 4 Sep 2016 15:25:42 +0300 Subject: DUAL mode - phase #1 --- src/stateless/dp/trex_stateless_dp_core.cpp | 17 +++++++++++------ src/stateless/dp/trex_stateless_dp_core.h | 6 ++++-- src/stateless/dp/trex_stream_node.h | 15 +++++++++++++-- 3 files changed, 28 insertions(+), 10 deletions(-) (limited to 'src/stateless/dp') diff --git a/src/stateless/dp/trex_stateless_dp_core.cpp b/src/stateless/dp/trex_stateless_dp_core.cpp index 4d9137f1..e5679590 100644 --- a/src/stateless/dp/trex_stateless_dp_core.cpp +++ b/src/stateless/dp/trex_stateless_dp_core.cpp @@ -478,7 +478,8 @@ bool TrexStatelessDpPerPort::push_pcap(uint8_t port_id, const std::string &pcap_filename, double ipg_usec, double speedup, - uint32_t count) { + uint32_t count, + bool is_dual) { /* push pcap can only happen on an idle port from the core prespective */ assert(m_state == TrexStatelessDpPerPort::ppSTATE_IDLE); @@ -501,7 +502,8 @@ bool TrexStatelessDpPerPort::push_pcap(uint8_t port_id, pcap_filename, ipg_usec, speedup, - count); + count, + is_dual); if (!rc) { m_core->free_node((CGenNode *)pcap_node); return (false); @@ -1162,14 +1164,15 @@ TrexStatelessDpCore::push_pcap(uint8_t port_id, double ipg_usec, double speedup, uint32_t count, - double duration) { + double duration, + bool is_dual) { TrexStatelessDpPerPort * lp_port = get_port_db(port_id); lp_port->set_event_id(event_id); /* delegate the command to the port */ - bool rc = lp_port->push_pcap(port_id, pcap_filename, ipg_usec, speedup, count); + bool rc = lp_port->push_pcap(port_id, pcap_filename, ipg_usec, speedup, count, is_dual); if (!rc) { /* report back that we stopped */ CNodeRing *ring = CMsgIns::Ins()->getCpDp()->getRingDpToCp(m_core->m_thread_id); @@ -1253,7 +1256,8 @@ bool CGenNodePCAP::create(uint8_t port_id, const std::string &pcap_filename, double ipg_usec, double speedup, - uint32_t count) { + uint32_t count, + bool is_dual) { std::stringstream ss; m_type = CGenNode::PCAP_PKT; @@ -1261,7 +1265,8 @@ bool CGenNodePCAP::create(uint8_t port_id, m_src_port = 0; m_port_id = port_id; m_count = count; - + m_is_dual = is_dual; + /* mark this node as slow path */ set_slow_path(true); diff --git a/src/stateless/dp/trex_stateless_dp_core.h b/src/stateless/dp/trex_stateless_dp_core.h index 9babb172..b386daf7 100644 --- a/src/stateless/dp/trex_stateless_dp_core.h +++ b/src/stateless/dp/trex_stateless_dp_core.h @@ -75,7 +75,8 @@ public: const std::string &pcap_filename, double ipg_usec, double speedup, - uint32_t count); + uint32_t count, + bool is_dual); bool stop_traffic(uint8_t port_id, bool stop_on_id, @@ -184,7 +185,8 @@ public: double ipg_usec, double speedup, uint32_t count, - double duration); + double duration, + bool is_dual); /** diff --git a/src/stateless/dp/trex_stream_node.h b/src/stateless/dp/trex_stream_node.h index 8a68625c..b4910fce 100644 --- a/src/stateless/dp/trex_stream_node.h +++ b/src/stateless/dp/trex_stream_node.h @@ -468,7 +468,8 @@ public: const std::string &pcap_filename, double ipg_usec, double speedup, - uint32_t count); + uint32_t count, + bool is_dual); /** * destroy the node cleaning up any data @@ -476,6 +477,10 @@ public: */ void destroy(); + bool is_dual() const { + return m_is_dual; + } + /** * advance - will read the next packet * @@ -505,6 +510,10 @@ public: } } + if (is_dual()) { + uint8_t dir = m_raw_packet->getInterface() & 0x1; + set_mbuf_dir(dir); + } } /** @@ -615,8 +624,10 @@ private: uint8_t m_port_id; + bool m_is_dual; + /* pad to match the size of CGenNode */ - uint8_t m_pad_end[33]; + uint8_t m_pad_end[32]; } __rte_cache_aligned; -- cgit 1.2.3-korg