summaryrefslogtreecommitdiffstats
path: root/src/stateless/messaging
diff options
context:
space:
mode:
authorimarom <imarom@cisco.com>2015-11-19 12:35:16 +0200
committerimarom <imarom@cisco.com>2015-11-19 12:35:16 +0200
commita7317d45787669af71ca8c65fd1e51f8a47d2c1e (patch)
tree2ba3d71c3b9e9815f5b9d6bcc63fe496e19ce8b3 /src/stateless/messaging
parentd9ed62e91c83039521b817779b4bc0197cc8151a (diff)
async events (DP to CP)
Diffstat (limited to 'src/stateless/messaging')
-rw-r--r--src/stateless/messaging/trex_stateless_messaging.cpp23
-rw-r--r--src/stateless/messaging/trex_stateless_messaging.h76
2 files changed, 86 insertions, 13 deletions
diff --git a/src/stateless/messaging/trex_stateless_messaging.cpp b/src/stateless/messaging/trex_stateless_messaging.cpp
index 2e3acffd..a2d00f8b 100644
--- a/src/stateless/messaging/trex_stateless_messaging.cpp
+++ b/src/stateless/messaging/trex_stateless_messaging.cpp
@@ -21,12 +21,17 @@ limitations under the License.
#include <trex_stateless_messaging.h>
#include <trex_stateless_dp_core.h>
#include <trex_streams_compiler.h>
+#include <trex_stateless.h>
+
#include <string.h>
/*************************
start traffic message
************************/
-TrexStatelessDpStart::TrexStatelessDpStart(TrexStreamsCompiledObj *obj, double duration) : m_obj(obj), m_duration(duration) {
+TrexStatelessDpStart::TrexStatelessDpStart(int event_id, TrexStreamsCompiledObj *obj, double duration) {
+ m_event_id = event_id;
+ m_obj = obj;
+ m_duration = duration;
}
@@ -39,7 +44,7 @@ TrexStatelessDpStart::clone() {
TrexStreamsCompiledObj *new_obj = m_obj->clone();
- TrexStatelessCpToDpMsgBase *new_msg = new TrexStatelessDpStart(new_obj, m_duration);
+ TrexStatelessCpToDpMsgBase *new_msg = new TrexStatelessDpStart(m_event_id, new_obj, m_duration);
return new_msg;
}
@@ -53,7 +58,12 @@ TrexStatelessDpStart::~TrexStatelessDpStart() {
bool
TrexStatelessDpStart::handle(TrexStatelessDpCore *dp_core) {
+ /* mark the event id for DP response */
+ dp_core->set_event_id(m_event_id);
+
+ /* staet traffic */
dp_core->start_traffic(m_obj, m_duration);
+
return true;
}
@@ -96,3 +106,12 @@ bool TrexStatelessDpQuit::handle(TrexStatelessDpCore *dp_core){
return (true);
}
+
+/************************* messages from DP to CP **********************/
+bool
+TrexDpPortEventMsg::handle() {
+ TrexStatelessPort *port = get_stateless_obj()->get_port_by_id(m_port_id);
+ port->get_dp_events().handle_event(m_event_type, m_thread_id, m_event_id);
+
+ return (true);
+}
diff --git a/src/stateless/messaging/trex_stateless_messaging.h b/src/stateless/messaging/trex_stateless_messaging.h
index 6473a6a4..3fb1ef84 100644
--- a/src/stateless/messaging/trex_stateless_messaging.h
+++ b/src/stateless/messaging/trex_stateless_messaging.h
@@ -23,6 +23,7 @@ limitations under the License.
#define __TREX_STATELESS_MESSAGING_H__
#include <msg_manager.h>
+#include <trex_dp_port_events.h>
class TrexStatelessDpCore;
class TrexStreamsCompiledObj;
@@ -41,12 +42,8 @@ public:
virtual ~TrexStatelessCpToDpMsgBase() {
}
- /**
- * virtual function to handle a message
- *
- */
- virtual bool handle(TrexStatelessDpCore *dp_core) = 0;
+ virtual bool handle(TrexStatelessDpCore *dp_core) = 0;
/**
* clone the current message
@@ -57,6 +54,8 @@ public:
/* no copy constructor */
TrexStatelessCpToDpMsgBase(TrexStatelessCpToDpMsgBase &) = delete;
+protected:
+ int m_event_id;
};
/**
@@ -67,16 +66,17 @@ public:
class TrexStatelessDpStart : public TrexStatelessCpToDpMsgBase {
public:
- TrexStatelessDpStart(TrexStreamsCompiledObj *obj, double duration);
+ TrexStatelessDpStart(int m_event_id, TrexStreamsCompiledObj *obj, double duration);
~TrexStatelessDpStart();
- virtual bool handle(TrexStatelessDpCore *dp_core);
-
virtual TrexStatelessCpToDpMsgBase * clone();
+ virtual bool handle(TrexStatelessDpCore *dp_core);
private:
+
+ int m_event_id;
TrexStreamsCompiledObj *m_obj;
double m_duration;
};
@@ -92,10 +92,10 @@ public:
TrexStatelessDpStop(uint8_t port_id) : m_port_id(port_id) {
}
- virtual bool handle(TrexStatelessDpCore *dp_core);
-
virtual TrexStatelessCpToDpMsgBase * clone();
+ virtual bool handle(TrexStatelessDpCore *dp_core);
+
private:
uint8_t m_port_id;
};
@@ -111,10 +111,64 @@ public:
TrexStatelessDpQuit() {
}
- virtual bool handle(TrexStatelessDpCore *dp_core);
virtual TrexStatelessCpToDpMsgBase * clone();
+
+ virtual bool handle(TrexStatelessDpCore *dp_core);
+
+};
+
+/************************* messages from DP to CP **********************/
+
+/**
+ * defines the base class for CP to DP messages
+ *
+ * @author imarom (27-Oct-15)
+ */
+class TrexStatelessDpToCpMsgBase {
+public:
+
+ TrexStatelessDpToCpMsgBase() {
+ }
+
+ virtual ~TrexStatelessDpToCpMsgBase() {
+ }
+
+ /**
+ * virtual function to handle a message
+ *
+ */
+ virtual bool handle() = 0;
+
+ /* no copy constructor */
+ TrexStatelessDpToCpMsgBase(TrexStatelessDpToCpMsgBase &) = delete;
+
};
+/**
+ * a message indicating an event has happened on a port at the
+ * DP
+ *
+ */
+class TrexDpPortEventMsg : public TrexStatelessDpToCpMsgBase {
+public:
+
+ TrexDpPortEventMsg(int thread_id, uint8_t port_id, TrexDpPortEvent::event_e type, int event_id) {
+ m_thread_id = thread_id;
+ m_port_id = port_id;
+ m_event_type = type;
+ m_event_id = event_id;
+ }
+
+ virtual bool handle();
+
+private:
+ int m_thread_id;
+ uint8_t m_port_id;
+ TrexDpPortEvent::event_e m_event_type;
+ int m_event_id;
+
+};
#endif /* __TREX_STATELESS_MESSAGING_H__ */
+