summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorimarom <imarom@cisco.com>2015-11-03 17:45:44 +0200
committerimarom <imarom@cisco.com>2015-11-03 17:45:44 +0200
commit6b241b37b4c0cd462c158c2dad28009ea817cd86 (patch)
tree5b05af8f3d8a261e1735b24f2590ad187cf66ffc
parentc0a49eef86df00d9497fa5701d5b9d4cbf4bacc2 (diff)
support for multicore
-rw-r--r--src/stateless/cp/trex_stateless_port.cpp2
-rw-r--r--src/stateless/cp/trex_streams_compiler.cpp19
-rw-r--r--src/stateless/cp/trex_streams_compiler.h6
-rw-r--r--src/stateless/messaging/trex_stateless_messaging.cpp25
-rw-r--r--src/stateless/messaging/trex_stateless_messaging.h15
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;
};