summaryrefslogtreecommitdiffstats
path: root/src/stateless/cp
diff options
context:
space:
mode:
authorimarom <imarom@cisco.com>2016-01-24 08:27:22 -0500
committerimarom <imarom@cisco.com>2016-01-24 08:28:19 -0500
commit7294d7f162e19e0ccd3a37eafbafe22cf63df6a4 (patch)
tree69300aec21fbd1fd6dd93c0ada94fdf4137dfdc5 /src/stateless/cp
parent42160bad7056d26b6f5b8c42efc0a8bf5302dfef (diff)
fixed issue trex-172: Console -m 100% is L2 and no L1
http://trex-tgn.cisco.com/youtrack/issue/trex-172
Diffstat (limited to 'src/stateless/cp')
-rw-r--r--src/stateless/cp/trex_stateless_port.cpp6
-rw-r--r--src/stateless/cp/trex_stream.h44
-rw-r--r--src/stateless/cp/trex_streams_compiler.cpp45
-rw-r--r--src/stateless/cp/trex_streams_compiler.h17
4 files changed, 73 insertions, 39 deletions
diff --git a/src/stateless/cp/trex_stateless_port.cpp b/src/stateless/cp/trex_stateless_port.cpp
index 05283d5f..f14cc84c 100644
--- a/src/stateless/cp/trex_stateless_port.cpp
+++ b/src/stateless/cp/trex_stateless_port.cpp
@@ -461,7 +461,7 @@ TrexStatelessPort::calculate_effective_factor(const TrexPortMultiplier &mul) {
switch (mul.m_type) {
case TrexPortMultiplier::MUL_BPS:
- return (mul.m_value / m_graph_obj->get_max_bps());
+ return (mul.m_value / m_graph_obj->get_max_bps_l2());
case TrexPortMultiplier::MUL_PPS:
return (mul.m_value / m_graph_obj->get_max_pps());
@@ -471,7 +471,7 @@ TrexStatelessPort::calculate_effective_factor(const TrexPortMultiplier &mul) {
if (mul.m_op == TrexPortMultiplier::OP_ABS) {
double required = (mul.m_value / 100.0) * get_port_speed_bps();
- return (required / m_graph_obj->get_max_bps());
+ return (required / m_graph_obj->get_max_bps_l1());
} else {
return (m_factor * (mul.m_value / 100.0));
}
@@ -606,7 +606,7 @@ TrexStatelessPort::get_port_effective_rate(uint64_t &bps, uint64_t &pps) {
generate_streams_graph();
}
- bps = m_graph_obj->get_max_bps() * m_factor;
+ bps = m_graph_obj->get_max_bps_l2() * m_factor;
pps = m_graph_obj->get_max_pps() * m_factor;
}
diff --git a/src/stateless/cp/trex_stream.h b/src/stateless/cp/trex_stream.h
index 0964d39a..6bb30cf9 100644
--- a/src/stateless/cp/trex_stream.h
+++ b/src/stateless/cp/trex_stream.h
@@ -221,23 +221,15 @@ public:
return ( (m_burst_total_pkts / m_pps) * 1000 * 1000);
}
- double get_bps() {
-
- /* lazy calculate the expected packet length */
- if (m_expected_pkt_len == 0) {
- /* if we have a VM - it might have changed the packet (even random) */
- if (m_vm.is_vm_empty()) {
- m_expected_pkt_len = m_pkt.len;
- } else {
- m_expected_pkt_len = m_vm.calc_expected_pkt_size(m_pkt.len);
- }
- }
-
+ double get_bps_l2() {
+ return get_bps(false);
+ }
- /* packet length + 4 CRC bytes to bits and multiplied by PPS */
- return (m_pps * (m_expected_pkt_len + 4) * 8);
+ double get_bps_l1() {
+ return get_bps(true);
}
+
void Dump(FILE *fd);
StreamVmDp * getDpVm(){
@@ -296,6 +288,30 @@ public:
/* original template provided by requester */
Json::Value m_stream_json;
+private:
+
+ double get_bps(bool layer1) {
+
+ /* lazy calculate the expected packet length */
+ if (m_expected_pkt_len == 0) {
+ /* if we have a VM - it might have changed the packet (even random) */
+ if (m_vm.is_vm_empty()) {
+ m_expected_pkt_len = m_pkt.len;
+ } else {
+ m_expected_pkt_len = m_vm.calc_expected_pkt_size(m_pkt.len);
+ }
+ }
+
+
+ /* packet length + 4 CRC bytes to bits and multiplied by PPS */
+
+ if (layer1) {
+ /* layer one includes preamble, frame delimiter and interpacket gap */
+ return (m_pps * (m_expected_pkt_len + 4 + 8 + 12) * 8);
+ } else {
+ return (m_pps * (m_expected_pkt_len + 4) * 8);
+ }
+ }
};
diff --git a/src/stateless/cp/trex_streams_compiler.cpp b/src/stateless/cp/trex_streams_compiler.cpp
index aa3fa1a0..d9f979e8 100644
--- a/src/stateless/cp/trex_streams_compiler.cpp
+++ b/src/stateless/cp/trex_streams_compiler.cpp
@@ -549,8 +549,9 @@ TrexStreamsGraph::add_rate_events_for_stream_cont(double &offset_usec, const Tre
start_event.stream_id = stream->m_stream_id;
start_event.time = offset_usec + stream->m_isg_usec;
- start_event.diff_pps = stream->get_pps();
- start_event.diff_bps = ((TrexStream *)stream)->get_bps();
+ start_event.diff_pps = stream->get_pps();
+ start_event.diff_bps_l2 = ((TrexStream *)stream)->get_bps_l2();
+ start_event.diff_bps_l1 = ((TrexStream *)stream)->get_bps_l1();
m_graph_obj->add_rate_event(start_event);
/* no more events after this stream */
@@ -571,19 +572,21 @@ TrexStreamsGraph::add_rate_events_for_stream_single_burst(double &offset_usec, c
/* for debug purposes */
- start_event.stream_id = stream->m_stream_id;
+ start_event.stream_id = stream->m_stream_id;
stop_event.stream_id = stream->m_stream_id;
/* start event */
start_event.time = offset_usec + stream->m_isg_usec;
start_event.diff_pps = stream->get_pps();
- start_event.diff_bps = ((TrexStream *)stream)->get_bps();
+ start_event.diff_bps_l2 = ((TrexStream *)stream)->get_bps_l2();
+ start_event.diff_bps_l1 = ((TrexStream *)stream)->get_bps_l1();
m_graph_obj->add_rate_event(start_event);
/* stop event */
stop_event.time = start_event.time + stream->get_burst_length_usec();
stop_event.diff_pps = -(start_event.diff_pps);
- stop_event.diff_bps = -(start_event.diff_bps);
+ stop_event.diff_bps_l2 = -(start_event.diff_bps_l2);
+ stop_event.diff_bps_l1 = -(start_event.diff_bps_l1);
m_graph_obj->add_rate_event(stop_event);
/* next stream starts from here */
@@ -605,13 +608,15 @@ TrexStreamsGraph::add_rate_events_for_stream_multi_burst(double &offset_usec, co
/* for debug purposes */
- start_event.diff_pps = stream->get_pps();
- start_event.diff_bps = ((TrexStream *)stream)->get_bps();
- start_event.stream_id = stream->m_stream_id;
+ start_event.diff_pps = stream->get_pps();
+ start_event.diff_bps_l2 = ((TrexStream *)stream)->get_bps_l2();
+ start_event.diff_bps_l1 = ((TrexStream *)stream)->get_bps_l1();
+ start_event.stream_id = stream->m_stream_id;
- stop_event.diff_pps = -(start_event.diff_pps);
- stop_event.diff_bps = -(start_event.diff_bps);
- stop_event.stream_id = stream->m_stream_id;
+ stop_event.diff_pps = -(start_event.diff_pps);
+ stop_event.diff_bps_l2 = -(start_event.diff_bps_l2);
+ stop_event.diff_bps_l1 = -(start_event.diff_bps_l1);
+ stop_event.stream_id = stream->m_stream_id;
/* for each burst create up/down events */
for (int i = 0; i < stream->m_num_bursts; i++) {
@@ -730,17 +735,22 @@ TrexStreamsGraphObj::find_max_rate() {
double max_rate_pps = 0;
double current_rate_pps = 0;
- double max_rate_bps = 0;
- double current_rate_bps = 0;
+ double max_rate_bps_l1 = 0;
+ double current_rate_bps_l1 = 0;
+
+ double max_rate_bps_l2 = 0;
+ double current_rate_bps_l2 = 0;
/* now we simply walk the list and hold the max */
for (auto &ev : m_rate_events) {
current_rate_pps += ev.diff_pps;
- current_rate_bps += ev.diff_bps;
+ current_rate_bps_l2 += ev.diff_bps_l2;
+ current_rate_bps_l1 += ev.diff_bps_l1;
- max_rate_pps = std::max(max_rate_pps, current_rate_pps);
- max_rate_bps = std::max(max_rate_bps, current_rate_bps);
+ max_rate_pps = std::max(max_rate_pps, current_rate_pps);
+ max_rate_bps_l2 = std::max(max_rate_bps_l2, current_rate_bps_l2);
+ max_rate_bps_l1 = std::max(max_rate_bps_l1, current_rate_bps_l1);
}
/* if not mark as inifite - get the last event time */
@@ -749,7 +759,8 @@ TrexStreamsGraphObj::find_max_rate() {
}
m_max_pps = max_rate_pps;
- m_max_bps = max_rate_bps;
+ m_max_bps_l2 = max_rate_bps_l2;
+ m_max_bps_l1 = max_rate_bps_l1;
}
static
diff --git a/src/stateless/cp/trex_streams_compiler.h b/src/stateless/cp/trex_streams_compiler.h
index 4b61dcfa..aaef78be 100644
--- a/src/stateless/cp/trex_streams_compiler.h
+++ b/src/stateless/cp/trex_streams_compiler.h
@@ -142,7 +142,8 @@ public:
TrexStreamsGraphObj() {
m_max_pps = 0;
- m_max_bps = 0;
+ m_max_bps_l1 = 0;
+ m_max_bps_l2 = 0;
m_expected_duration = 0;
}
@@ -156,7 +157,8 @@ public:
struct rate_event_st {
double time;
double diff_pps;
- double diff_bps;
+ double diff_bps_l1;
+ double diff_bps_l2;
uint32_t stream_id;
};
@@ -164,8 +166,12 @@ public:
return m_max_pps;
}
- double get_max_bps() const {
- return m_max_bps;
+ double get_max_bps_l1() const {
+ return m_max_bps_l1;
+ }
+
+ double get_max_bps_l2() const {
+ return m_max_bps_l2;
}
int get_duration() const {
@@ -191,7 +197,8 @@ private:
void find_max_rate();
double m_max_pps;
- double m_max_bps;
+ double m_max_bps_l1;
+ double m_max_bps_l2;
int m_expected_duration;
/* list of rate events */