summaryrefslogtreecommitdiffstats
path: root/src/stateless/dp
diff options
context:
space:
mode:
authorimarom <imarom@cisco.com>2015-11-26 02:30:03 -0500
committerimarom <imarom@cisco.com>2015-11-26 02:30:03 -0500
commitd9a11302236095e055247295021bdfce6c988802 (patch)
treeea240260db4bddf3719a3e76aadd2ba5ae34eb10 /src/stateless/dp
parent12a19244693cacbd77ca0a8e43f382a10f773f91 (diff)
added support for 'update'
Diffstat (limited to 'src/stateless/dp')
-rw-r--r--src/stateless/dp/trex_stateless_dp_core.cpp34
-rw-r--r--src/stateless/dp/trex_stateless_dp_core.h16
-rw-r--r--src/stateless/dp/trex_stream_node.h12
3 files changed, 52 insertions, 10 deletions
diff --git a/src/stateless/dp/trex_stateless_dp_core.cpp b/src/stateless/dp/trex_stateless_dp_core.cpp
index 4e429c8f..dd4937cd 100644
--- a/src/stateless/dp/trex_stateless_dp_core.cpp
+++ b/src/stateless/dp/trex_stateless_dp_core.cpp
@@ -139,6 +139,20 @@ bool TrexStatelessDpPerPort::resume_traffic(uint8_t port_id){
return (true);
}
+bool TrexStatelessDpPerPort::update_traffic(uint8_t port_id, double mul) {
+
+ assert( (m_state == TrexStatelessDpPerPort::ppSTATE_TRANSMITTING ||
+ (m_state == TrexStatelessDpPerPort::ppSTATE_PAUSE)) );
+
+ for (auto dp_stream : m_active_nodes) {
+ CGenNodeStateless * node = dp_stream.m_node;
+ assert(node->get_port_id() == port_id);
+
+ node->set_multiplier(mul);
+ }
+
+ return (true);
+}
bool TrexStatelessDpPerPort::pause_traffic(uint8_t port_id){
@@ -402,9 +416,9 @@ TrexStatelessDpCore::add_port_duration(double duration,
void
-TrexStatelessDpCore::add_cont_stream(TrexStatelessDpPerPort * lp_port,
- TrexStream * stream,
- TrexStreamsCompiledObj *comp) {
+TrexStatelessDpCore::add_stream(TrexStatelessDpPerPort * lp_port,
+ TrexStream * stream,
+ TrexStreamsCompiledObj *comp) {
CGenNodeStateless *node = m_core->create_node_sl();
@@ -439,8 +453,8 @@ TrexStatelessDpCore::add_cont_stream(TrexStatelessDpPerPort * lp_port,
node->m_pause =0;
node->m_stream_type = stream->m_type;
- node->m_next_time_offset = 1.0 / (stream->get_pps() * comp->get_multiplier()) ;
-
+ node->m_base_pps = stream->get_pps();
+ node->set_multiplier(comp->get_multiplier());
/* stateless specific fields */
switch ( stream->m_type ) {
@@ -520,7 +534,7 @@ TrexStatelessDpCore::start_traffic(TrexStreamsCompiledObj *obj,
for (auto single_stream : obj->get_objects()) {
/* all commands should be for the same port */
assert(obj->get_port_id() == single_stream.m_stream->m_port_id);
- add_cont_stream(lp_port,single_stream.m_stream,obj);
+ add_stream(lp_port,single_stream.m_stream,obj);
}
uint32_t nodes = lp_port->m_active_nodes.size();
@@ -582,6 +596,14 @@ TrexStatelessDpCore::pause_traffic(uint8_t port_id){
lp_port->pause_traffic(port_id);
}
+void
+TrexStatelessDpCore::update_traffic(uint8_t port_id, double mul) {
+
+ TrexStatelessDpPerPort * lp_port = get_port_db(port_id);
+
+ lp_port->update_traffic(port_id, mul);
+}
+
void
TrexStatelessDpCore::stop_traffic(uint8_t port_id,
diff --git a/src/stateless/dp/trex_stateless_dp_core.h b/src/stateless/dp/trex_stateless_dp_core.h
index eda1ae59..563159b2 100644
--- a/src/stateless/dp/trex_stateless_dp_core.h
+++ b/src/stateless/dp/trex_stateless_dp_core.h
@@ -68,6 +68,8 @@ public:
bool resume_traffic(uint8_t port_id);
+ bool update_traffic(uint8_t port_id, double mul);
+
bool stop_traffic(uint8_t port_id,
bool stop_on_id,
int event_id);
@@ -159,6 +161,14 @@ public:
/**
+ * update current traffic rate
+ *
+ * @author imarom (25-Nov-15)
+ *
+ */
+ void update_traffic(uint8_t port_id, double mul);
+
+ /**
*
* stop all traffic for this core
*
@@ -250,9 +260,9 @@ private:
void add_global_duration(double duration);
- void add_cont_stream(TrexStatelessDpPerPort * lp_port,
- TrexStream * stream,
- TrexStreamsCompiledObj *comp);
+ void add_stream(TrexStatelessDpPerPort * lp_port,
+ TrexStream * stream,
+ TrexStreamsCompiledObj *comp);
uint8_t m_thread_id;
uint8_t m_local_port_offset;
diff --git a/src/stateless/dp/trex_stream_node.h b/src/stateless/dp/trex_stream_node.h
index ccf99eaa..5997376f 100644
--- a/src/stateless/dp/trex_stream_node.h
+++ b/src/stateless/dp/trex_stream_node.h
@@ -86,8 +86,9 @@ private:
TrexStream * m_ref_stream_info; /* the stream info */
CGenNodeStateless * m_next_stream;
+ double m_base_pps;
/* pad to match the size of CGenNode */
- uint8_t m_pad_end[56];
+ uint8_t m_pad_end[48];
@@ -99,6 +100,15 @@ public:
}
+ /**
+ * calculate the time offset based
+ * on the PPS and multiplier
+ *
+ */
+ void set_multiplier(double mul) {
+ m_next_time_offset = 1.0 / (m_base_pps * mul) ;
+ }
+
/* we restart the stream, schedule it using stream isg */
inline void update_refresh_time(double cur_time){
m_time = cur_time + usec_to_sec(m_ref_stream_info->m_isg_usec);