diff options
author | 2015-11-03 17:45:44 +0200 | |
---|---|---|
committer | 2015-11-03 17:45:44 +0200 | |
commit | 6b241b37b4c0cd462c158c2dad28009ea817cd86 (patch) | |
tree | 5b05af8f3d8a261e1735b24f2590ad187cf66ffc /src/stateless | |
parent | c0a49eef86df00d9497fa5701d5b9d4cbf4bacc2 (diff) |
support for multicore
Diffstat (limited to 'src/stateless')
-rw-r--r-- | src/stateless/cp/trex_stateless_port.cpp | 2 | ||||
-rw-r--r-- | src/stateless/cp/trex_streams_compiler.cpp | 19 | ||||
-rw-r--r-- | src/stateless/cp/trex_streams_compiler.h | 6 | ||||
-rw-r--r-- | src/stateless/messaging/trex_stateless_messaging.cpp | 25 | ||||
-rw-r--r-- | src/stateless/messaging/trex_stateless_messaging.h | 15 |
5 files changed, 66 insertions, 1 deletions
diff --git a/src/stateless/cp/trex_stateless_port.cpp b/src/stateless/cp/trex_stateless_port.cpp index a64ee92f..3a8d2c14 100644 --- a/src/stateless/cp/trex_stateless_port.cpp +++ b/src/stateless/cp/trex_stateless_port.cpp @@ -199,7 +199,7 @@ TrexStatelessPort::send_message_to_dp(TrexStatelessCpToDpMsgBase *msg) { /* send the message to the core */ CNodeRing *ring = CMsgIns::Ins()->getCpDp()->getRingCpToDp(core_pair.first); - ring->Enqueue((CGenNode *)msg); + ring->Enqueue((CGenNode *)msg->clone()); } } diff --git a/src/stateless/cp/trex_streams_compiler.cpp b/src/stateless/cp/trex_streams_compiler.cpp index f394b971..06c0119a 100644 --- a/src/stateless/cp/trex_streams_compiler.cpp +++ b/src/stateless/cp/trex_streams_compiler.cpp @@ -51,6 +51,24 @@ TrexStreamsCompiledObj::add_compiled_stream(double isg_usec, double pps, uint8_t m_objs.push_back(obj); } +TrexStreamsCompiledObj * +TrexStreamsCompiledObj::clone() { + + TrexStreamsCompiledObj *new_compiled_obj = new TrexStreamsCompiledObj(m_port_id, m_mul); + + /** + * clone each element + */ + for (auto obj : m_objs) { + new_compiled_obj->add_compiled_stream(obj.m_isg_usec, + obj.m_pps, + obj.m_pkt, + obj.m_pkt_len); + } + + return new_compiled_obj; +} + /************************************** * stream compiler *************************************/ @@ -85,3 +103,4 @@ TrexStreamsCompiler::compile(const std::vector<TrexStream *> &streams, TrexStrea return true; } + diff --git a/src/stateless/cp/trex_streams_compiler.h b/src/stateless/cp/trex_streams_compiler.h index 752f76b2..404fdd21 100644 --- a/src/stateless/cp/trex_streams_compiler.h +++ b/src/stateless/cp/trex_streams_compiler.h @@ -51,6 +51,12 @@ public: return m_objs; } + /** + * clone the compiled object + * + */ + TrexStreamsCompiledObj * clone(); + private: void add_compiled_stream(double isg_usec, double pps, uint8_t *pkt, uint16_t pkt_len); std::vector<obj_st> m_objs; diff --git a/src/stateless/messaging/trex_stateless_messaging.cpp b/src/stateless/messaging/trex_stateless_messaging.cpp index 3e754649..032559bc 100644 --- a/src/stateless/messaging/trex_stateless_messaging.cpp +++ b/src/stateless/messaging/trex_stateless_messaging.cpp @@ -29,6 +29,21 @@ limitations under the License. TrexStatelessDpStart::TrexStatelessDpStart(TrexStreamsCompiledObj *obj) : m_obj(obj) { } + +/** + * clone for DP start message + * + */ +TrexStatelessCpToDpMsgBase * +TrexStatelessDpStart::clone() { + + TrexStreamsCompiledObj *new_obj = m_obj->clone(); + + TrexStatelessCpToDpMsgBase *new_msg = new TrexStatelessDpStart(new_obj); + + return new_msg; +} + TrexStatelessDpStart::~TrexStatelessDpStart() { if (m_obj) { delete m_obj; @@ -51,3 +66,13 @@ TrexStatelessDpStop::handle(TrexStatelessDpCore *dp_core) { return true; } +/** + * clone for DP stop message + * + */ +TrexStatelessCpToDpMsgBase * +TrexStatelessDpStop::clone() { + TrexStatelessCpToDpMsgBase *new_msg = new TrexStatelessDpStop(m_port_id); + + return new_msg; +} diff --git a/src/stateless/messaging/trex_stateless_messaging.h b/src/stateless/messaging/trex_stateless_messaging.h index 381e146d..7978b7f9 100644 --- a/src/stateless/messaging/trex_stateless_messaging.h +++ b/src/stateless/messaging/trex_stateless_messaging.h @@ -45,6 +45,17 @@ public: * */ virtual bool handle(TrexStatelessDpCore *dp_core) = 0; + + + /** + * clone the current message + * + */ + virtual TrexStatelessCpToDpMsgBase * clone() = 0; + + /* no copy constructor */ + TrexStatelessCpToDpMsgBase(TrexStatelessCpToDpMsgBase &) = delete; + }; /** @@ -61,6 +72,8 @@ public: virtual bool handle(TrexStatelessDpCore *dp_core); + virtual TrexStatelessCpToDpMsgBase * clone(); + private: TrexStreamsCompiledObj *m_obj; }; @@ -78,6 +91,8 @@ public: virtual bool handle(TrexStatelessDpCore *dp_core); + virtual TrexStatelessCpToDpMsgBase * clone(); + private: uint8_t m_port_id; }; |