summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorimarom <imarom@cisco.com>2015-11-19 22:13:55 +0200
committerimarom <imarom@cisco.com>2015-11-19 22:28:51 +0200
commitb094110ef86889a0694dc71503c5610abaf47ebe (patch)
treedc7e98f0fdcdee176b6bdbcfdc7736364e020608 /src
parent90e283923e5d860803eae5996a1247b1390ea36a (diff)
BUG: didn't do all the states per port on the DP - now fixed
Diffstat (limited to 'src')
-rw-r--r--src/gtest/trex_stateless_gtest.cpp20
-rw-r--r--src/stateless/cp/trex_stateless_port.cpp6
-rw-r--r--src/stateless/cp/trex_stateless_port.h2
-rw-r--r--src/stateless/dp/trex_stateless_dp_core.cpp2
-rw-r--r--src/stateless/dp/trex_stateless_dp_core.h27
-rw-r--r--src/stateless/messaging/trex_stateless_messaging.cpp11
-rw-r--r--src/stateless/messaging/trex_stateless_messaging.h8
7 files changed, 45 insertions, 31 deletions
diff --git a/src/gtest/trex_stateless_gtest.cpp b/src/gtest/trex_stateless_gtest.cpp
index d7bf2ab6..bdaebcea 100644
--- a/src/gtest/trex_stateless_gtest.cpp
+++ b/src/gtest/trex_stateless_gtest.cpp
@@ -331,7 +331,7 @@ TEST_F(basic_stl, simple_prog4) {
EXPECT_TRUE(compile.compile(streams, comp_obj) );
- TrexStatelessDpStart * lpstart = new TrexStatelessDpStart(0, comp_obj.clone(), 20.0 );
+ TrexStatelessDpStart * lpstart = new TrexStatelessDpStart(0, 0, comp_obj.clone(), 20.0 );
t1.m_msg = lpstart;
@@ -401,7 +401,7 @@ TEST_F(basic_stl, simple_prog3) {
EXPECT_TRUE(compile.compile(streams, comp_obj) );
- TrexStatelessDpStart * lpstart = new TrexStatelessDpStart(0, comp_obj.clone(), 50.0 );
+ TrexStatelessDpStart * lpstart = new TrexStatelessDpStart(0, 0, comp_obj.clone(), 50.0 );
t1.m_msg = lpstart;
@@ -463,7 +463,7 @@ TEST_F(basic_stl, simple_prog2) {
EXPECT_TRUE(compile.compile(streams, comp_obj) );
- TrexStatelessDpStart * lpstart = new TrexStatelessDpStart(0, comp_obj.clone(), 10.0 );
+ TrexStatelessDpStart * lpstart = new TrexStatelessDpStart(0, 0, comp_obj.clone(), 10.0 );
t1.m_msg = lpstart;
@@ -525,7 +525,7 @@ TEST_F(basic_stl, simple_prog1) {
EXPECT_TRUE(compile.compile(streams, comp_obj) );
- TrexStatelessDpStart * lpstart = new TrexStatelessDpStart(0, comp_obj.clone(), 10.0 );
+ TrexStatelessDpStart * lpstart = new TrexStatelessDpStart(0, 0, comp_obj.clone(), 10.0 );
t1.m_msg = lpstart;
@@ -570,7 +570,7 @@ TEST_F(basic_stl, single_pkt_burst1) {
assert(compile.compile(streams, comp_obj) );
- TrexStatelessDpStart * lpstart = new TrexStatelessDpStart(0, comp_obj.clone(), 10.0 );
+ TrexStatelessDpStart * lpstart = new TrexStatelessDpStart(0, 0, comp_obj.clone(), 10.0 );
t1.m_msg = lpstart;
@@ -621,7 +621,7 @@ TEST_F(basic_stl, single_pkt) {
assert(compile.compile(streams, comp_obj) );
- TrexStatelessDpStart * lpstart = new TrexStatelessDpStart(0, comp_obj.clone(), 10.0 /*sec */ );
+ TrexStatelessDpStart * lpstart = new TrexStatelessDpStart(port_id, 0, comp_obj.clone(), 10.0 /*sec */ );
t1.m_msg = lpstart;
@@ -678,7 +678,7 @@ TEST_F(basic_stl, multi_pkt1) {
assert(compile.compile(streams, comp_obj) );
- TrexStatelessDpStart * lpstart = new TrexStatelessDpStart(0, comp_obj.clone(), 10 );
+ TrexStatelessDpStart * lpstart = new TrexStatelessDpStart(0, 0, comp_obj.clone(), 10 );
t1.m_msg = lpstart;
@@ -741,7 +741,7 @@ TEST_F(basic_stl, multi_pkt2) {
assert(compile.compile(streams, comp_obj) );
- TrexStatelessDpStart * lpstart = new TrexStatelessDpStart(0, comp_obj.clone(), 10 );
+ TrexStatelessDpStart * lpstart = new TrexStatelessDpStart(0, 0, comp_obj.clone(), 10 );
t1.m_msg = lpstart;
@@ -787,7 +787,7 @@ TEST_F(basic_stl, multi_burst1) {
assert(compile.compile(streams, comp_obj) );
- TrexStatelessDpStart * lpstart = new TrexStatelessDpStart(0, comp_obj.clone(), 40 );
+ TrexStatelessDpStart * lpstart = new TrexStatelessDpStart(0, 0, comp_obj.clone(), 40 );
t1.m_msg = lpstart;
@@ -1099,7 +1099,7 @@ TEST_F(basic_stl, dp_stop_event) {
assert(compile.compile(streams, comp_obj) );
- TrexStatelessDpStart * lpstart = new TrexStatelessDpStart(17, comp_obj.clone(), 10.0 /*sec */ );
+ TrexStatelessDpStart * lpstart = new TrexStatelessDpStart(port_id, 17, comp_obj.clone(), 10.0 /*sec */ );
t1.m_msg = lpstart;
diff --git a/src/stateless/cp/trex_stateless_port.cpp b/src/stateless/cp/trex_stateless_port.cpp
index 795c0f12..fbc5f7c7 100644
--- a/src/stateless/cp/trex_stateless_port.cpp
+++ b/src/stateless/cp/trex_stateless_port.cpp
@@ -121,11 +121,11 @@ TrexStatelessPort::start_traffic(double mul, double duration) {
}
/* generate a message to all the relevant DP cores to start transmitting */
- m_event_id = m_dp_events.generate_event_id();
+ int event_id = m_dp_events.generate_event_id();
/* mark that DP event of stoppped is possible */
- m_dp_events.wait_for_event(TrexDpPortEvent::EVENT_STOP, m_event_id);
+ m_dp_events.wait_for_event(TrexDpPortEvent::EVENT_STOP, event_id);
- TrexStatelessCpToDpMsgBase *start_msg = new TrexStatelessDpStart(m_event_id, compiled_obj, duration);
+ TrexStatelessCpToDpMsgBase *start_msg = new TrexStatelessDpStart(m_port_id, event_id, compiled_obj, duration);
change_state(PORT_STATE_TX);
diff --git a/src/stateless/cp/trex_stateless_port.h b/src/stateless/cp/trex_stateless_port.h
index da75284e..73157c15 100644
--- a/src/stateless/cp/trex_stateless_port.h
+++ b/src/stateless/cp/trex_stateless_port.h
@@ -258,11 +258,9 @@ private:
std::string m_owner_handler;
/* holds the DP cores associated with this port */
- //std::vector<std::pair<uint8_t, uint8_t>> m_cores_id_list;
std::vector<int> m_cores_id_list;
TrexDpPortEvents m_dp_events;
- int m_event_id;
};
#endif /* __TREX_STATELESS_PORT_H__ */
diff --git a/src/stateless/dp/trex_stateless_dp_core.cpp b/src/stateless/dp/trex_stateless_dp_core.cpp
index cde34a4b..6db66661 100644
--- a/src/stateless/dp/trex_stateless_dp_core.cpp
+++ b/src/stateless/dp/trex_stateless_dp_core.cpp
@@ -525,7 +525,7 @@ TrexStatelessDpCore::stop_traffic(uint8_t port_id) {
TrexStatelessDpToCpMsgBase *event_msg = new TrexDpPortEventMsg(m_core->m_thread_id,
port_id,
TrexDpPortEvent::EVENT_STOP,
- get_event_id());
+ lp_port->get_event_id());
ring->Enqueue((CGenNode *)event_msg);
}
diff --git a/src/stateless/dp/trex_stateless_dp_core.h b/src/stateless/dp/trex_stateless_dp_core.h
index 7ee5abc4..c0bbe702 100644
--- a/src/stateless/dp/trex_stateless_dp_core.h
+++ b/src/stateless/dp/trex_stateless_dp_core.h
@@ -66,6 +66,18 @@ public:
bool update_number_of_active_streams(uint32_t d);
+ state_e get_state() {
+ return m_state;
+ }
+
+ void set_event_id(int event_id) {
+ m_event_id = event_id;
+ }
+
+ int get_event_id() {
+ return m_event_id;
+ }
+
public:
state_e m_state;
@@ -75,6 +87,7 @@ public:
std::vector<CDpOneStream> m_active_nodes; /* holds the current active nodes */
CFlowGenListPerThread * m_core ;
+ int m_event_id;
};
/* for now */
@@ -166,19 +179,13 @@ public:
/* quit the main loop, work in both stateless in stateful, don't free memory trigger from master */
void quit_main_loop();
- void set_event_id(int event_id) {
- m_event_id = event_id;
- }
-
- int get_event_id() {
- return m_event_id;
+ state_e get_state() {
+ return m_state;
}
bool set_stateless_next_node(CGenNodeStateless * cur_node,
CGenNodeStateless * next_node);
-private:
-
TrexStatelessDpPerPort * get_port_db(uint8_t port_id){
assert((m_local_port_offset==port_id) ||(m_local_port_offset+1==port_id));
@@ -188,6 +195,9 @@ private:
}
+
+private:
+
void schedule_exit();
@@ -236,7 +246,6 @@ private:
CFlowGenListPerThread * m_core;
double m_duration;
- int m_event_id;
};
#endif /* __TREX_STATELESS_DP_CORE_H__ */
diff --git a/src/stateless/messaging/trex_stateless_messaging.cpp b/src/stateless/messaging/trex_stateless_messaging.cpp
index c92ad68a..629fe24c 100644
--- a/src/stateless/messaging/trex_stateless_messaging.cpp
+++ b/src/stateless/messaging/trex_stateless_messaging.cpp
@@ -29,7 +29,8 @@ limitations under the License.
/*************************
start traffic message
************************/
-TrexStatelessDpStart::TrexStatelessDpStart(int event_id, TrexStreamsCompiledObj *obj, double duration) {
+TrexStatelessDpStart::TrexStatelessDpStart(uint8_t port_id, int event_id, TrexStreamsCompiledObj *obj, double duration) {
+ m_port_id = port_id;
m_event_id = event_id;
m_obj = obj;
m_duration = duration;
@@ -45,7 +46,7 @@ TrexStatelessDpStart::clone() {
TrexStreamsCompiledObj *new_obj = m_obj->clone();
- TrexStatelessCpToDpMsgBase *new_msg = new TrexStatelessDpStart(m_event_id, new_obj, m_duration);
+ TrexStatelessCpToDpMsgBase *new_msg = new TrexStatelessDpStart(m_port_id, m_event_id, new_obj, m_duration);
return new_msg;
}
@@ -60,7 +61,7 @@ bool
TrexStatelessDpStart::handle(TrexStatelessDpCore *dp_core) {
/* mark the event id for DP response */
- dp_core->set_event_id(m_event_id);
+ dp_core->get_port_db(m_port_id)->set_event_id(m_event_id);
/* staet traffic */
dp_core->start_traffic(m_obj, m_duration);
@@ -73,6 +74,10 @@ TrexStatelessDpStart::handle(TrexStatelessDpCore *dp_core) {
************************/
bool
TrexStatelessDpStop::handle(TrexStatelessDpCore *dp_core) {
+ if (dp_core->get_port_db(m_port_id)->get_state() == TrexStatelessDpPerPort::ppSTATE_IDLE) {
+ return true;
+ }
+
dp_core->stop_traffic(m_port_id);
return true;
}
diff --git a/src/stateless/messaging/trex_stateless_messaging.h b/src/stateless/messaging/trex_stateless_messaging.h
index ffb36124..2fb5a024 100644
--- a/src/stateless/messaging/trex_stateless_messaging.h
+++ b/src/stateless/messaging/trex_stateless_messaging.h
@@ -77,7 +77,7 @@ protected:
class TrexStatelessDpStart : public TrexStatelessCpToDpMsgBase {
public:
- TrexStatelessDpStart(int m_event_id, TrexStreamsCompiledObj *obj, double duration);
+ TrexStatelessDpStart(uint8_t m_port_id, int m_event_id, TrexStreamsCompiledObj *obj, double duration);
~TrexStatelessDpStart();
@@ -87,9 +87,11 @@ public:
private:
- int m_event_id;
+ uint8_t m_port_id;
+ int m_event_id;
TrexStreamsCompiledObj *m_obj;
- double m_duration;
+ double m_duration;
+
};
/**