diff options
author | Hanoh Haim <hhaim@cisco.com> | 2016-02-23 15:32:19 +0200 |
---|---|---|
committer | Hanoh Haim <hhaim@cisco.com> | 2016-02-23 15:32:19 +0200 |
commit | 36cc1ecef32dcee3640e6ddf96422c07d89777b3 (patch) | |
tree | 6a9eadb662ad0f98395886077fe32943512fd040 /src/stateless | |
parent | 68ebd739646a27f1bb92ce8eacb5bb76f6399580 (diff) | |
parent | 81059eb5df274efe48ad3914039ddb657c3285ab (diff) |
Merge ipv4 checksum issue
Diffstat (limited to 'src/stateless')
-rw-r--r-- | src/stateless/cp/trex_stateless_port.cpp | 16 | ||||
-rw-r--r-- | src/stateless/cp/trex_stateless_port.h | 15 | ||||
-rw-r--r-- | src/stateless/cp/trex_stream.cpp | 28 | ||||
-rw-r--r-- | src/stateless/cp/trex_stream.h | 233 | ||||
-rw-r--r-- | src/stateless/cp/trex_stream_vm.h | 16 | ||||
-rw-r--r-- | src/stateless/cp/trex_streams_compiler.cpp | 36 | ||||
-rw-r--r-- | src/stateless/cp/trex_streams_compiler.h | 16 |
7 files changed, 281 insertions, 79 deletions
diff --git a/src/stateless/cp/trex_stateless_port.cpp b/src/stateless/cp/trex_stateless_port.cpp index 8ee46d29..99b6565c 100644 --- a/src/stateless/cp/trex_stateless_port.cpp +++ b/src/stateless/cp/trex_stateless_port.cpp @@ -631,7 +631,10 @@ TrexStatelessPort::validate(void) { void -TrexStatelessPort::get_port_effective_rate(uint64_t &bps, uint64_t &pps) { +TrexStatelessPort::get_port_effective_rate(double &pps, + double &bps_L1, + double &bps_L2, + double &percentage) { if (get_stream_count() == 0) { return; @@ -641,8 +644,11 @@ TrexStatelessPort::get_port_effective_rate(uint64_t &bps, uint64_t &pps) { generate_streams_graph(); } - bps = m_graph_obj->get_max_bps_l2() * m_factor; - pps = m_graph_obj->get_max_pps() * m_factor; + pps = m_graph_obj->get_max_pps() * m_factor; + bps_L1 = m_graph_obj->get_max_bps_l1() * m_factor; + bps_L2 = m_graph_obj->get_max_bps_l2() * m_factor; + percentage = (bps_L1 / get_port_speed_bps()) * 100.0; + } /************* Trex Port Owner **************/ @@ -651,7 +657,7 @@ TrexPortOwner::TrexPortOwner() { m_is_free = true; /* for handlers random generation */ - srand(time(NULL)); + m_seed = time(NULL); } /** @@ -669,7 +675,7 @@ TrexPortOwner::generate_handler() { /* generate 8 bytes of random handler */ for (int i = 0; i < 8; ++i) { - ss << alphanum[rand() % (sizeof(alphanum) - 1)]; + ss << alphanum[rand_r(&m_seed) % (sizeof(alphanum) - 1)]; } return (ss.str()); diff --git a/src/stateless/cp/trex_stateless_port.h b/src/stateless/cp/trex_stateless_port.h index b0b0ddf3..49e69757 100644 --- a/src/stateless/cp/trex_stateless_port.h +++ b/src/stateless/cp/trex_stateless_port.h @@ -93,6 +93,8 @@ private: /* handler genereated internally */ std::string m_handler; + /* seed for generating random values */ + unsigned int m_seed; /* just references defaults... */ static const std::string g_unowned_name; @@ -316,10 +318,11 @@ public: * * @author imarom (07-Jan-16) * - * @param bps - * @param pps */ - void get_port_effective_rate(uint64_t &bps, uint64_t &pps); + void get_port_effective_rate(double &pps, + double &bps_L1, + double &bps_L2, + double &percentage); private: @@ -441,9 +444,9 @@ public: static const std::initializer_list<std::string> g_types; static const std::initializer_list<std::string> g_ops; - mul_type_e m_type; - mul_op_e m_op; - double m_value; + mul_type_e m_type; + mul_op_e m_op; + double m_value; }; #endif /* __TREX_STATELESS_PORT_H__ */ diff --git a/src/stateless/cp/trex_stream.cpp b/src/stateless/cp/trex_stream.cpp index 05c14cba..f1c93a11 100644 --- a/src/stateless/cp/trex_stream.cpp +++ b/src/stateless/cp/trex_stream.cpp @@ -22,6 +22,7 @@ limitations under the License. #include <cstddef> #include <string.h> #include <assert.h> +#include <trex_stateless.h> /************************************** * stream @@ -93,25 +94,30 @@ void TrexStream::Dump(FILE *fd){ fprintf(fd," type : %s \n",get_stream_type_str(m_type).c_str()); if ( m_type == TrexStream::stCONTINUOUS ) { - fprintf(fd," pps : %f \n",m_pps); } if (m_type == TrexStream::stSINGLE_BURST) { - fprintf(fd," pps : %f \n",m_pps); fprintf(fd," burst : %lu \n",(ulong)m_burst_total_pkts); } if (m_type == TrexStream::stMULTI_BURST) { - fprintf(fd," pps : %f \n",m_pps); fprintf(fd," burst : %lu \n",(ulong)m_burst_total_pkts); fprintf(fd," mburst : %lu \n",(ulong)m_num_bursts); if (m_ibg_usec>0.0) { fprintf(fd," m_ibg_usec : %f \n",m_ibg_usec); } } + + fprintf(fd," rate :\n\n"); + + fprintf(fd," pps : %f\n", m_rate.get_pps()); + fprintf(fd," bps L1 : %f\n", m_rate.get_bps_L1()); + fprintf(fd," bps L2 : %f\n", m_rate.get_bps_L2()); + fprintf(fd," percentage : %f\n", m_rate.get_percentage()); + } TrexStream::TrexStream(uint8_t type, - uint8_t port_id, uint32_t stream_id) : m_port_id(port_id), m_stream_id(stream_id) { + uint8_t port_id, uint32_t stream_id) : m_port_id(port_id), m_stream_id(stream_id) , m_rate(*this) { /* default values */ m_type = type; @@ -127,7 +133,6 @@ TrexStream::TrexStream(uint8_t type, m_rx_check.m_enable = false; - m_pps=-1.0; m_burst_total_pkts=0; m_num_bursts=1; m_ibg_usec=0.0; @@ -238,3 +243,16 @@ int TrexStreamTable::size() { } +/************************************** + * TrexStreamRate + *************************************/ +uint64_t +TrexStreamRate::get_line_speed_bps() { + TrexStatelessPort *port = get_stateless_obj()->get_port_by_id(m_stream.m_port_id); + return port->get_port_speed_bps(); +} + +double +TrexStreamRate::get_pkt_size() { + return m_stream.get_pkt_size(); +} diff --git a/src/stateless/cp/trex_stream.h b/src/stateless/cp/trex_stream.h index 5240e96d..cc05c198 100644 --- a/src/stateless/cp/trex_stream.h +++ b/src/stateless/cp/trex_stream.h @@ -107,12 +107,184 @@ public: } }; +class TrexStream; + +/** + * describes a stream rate + * + * @author imarom (18-Feb-16) + */ +class TrexStreamRate { + + +public: + + enum rate_type_e { + RATE_INVALID, + RATE_PPS, + RATE_BPS_L1, + RATE_BPS_L2, + RATE_PERCENTAGE + }; + + TrexStreamRate(TrexStream &stream) : m_stream(stream) { + m_pps = 0; + m_bps_L1 = 0; + m_bps_L2 = 0; + m_percentage = 0; + } + + + TrexStreamRate& operator=(const TrexStreamRate& other) { + m_pps = other.m_pps; + m_bps_L1 = other.m_bps_L1; + m_bps_L2 = other.m_bps_L2; + m_percentage = other.m_percentage; + + return (*this); + } + + /** + * set the base rate + * other values will be dervied from this value + * + */ + void set_base_rate(rate_type_e type, double value) { + m_pps = 0; + m_bps_L1 = 0; + m_bps_L2 = 0; + m_percentage = 0; + + assert(value > 0); + + switch (type) { + case RATE_PPS: + m_pps = value; + break; + case RATE_BPS_L1: + m_bps_L1 = value; + break; + case RATE_BPS_L2: + m_bps_L2 = value; + break; + case RATE_PERCENTAGE: + m_percentage = value; + break; + + default: + assert(0); + + } + } + + double get_pps() { + if (m_pps == 0) { + calculate(); + } + return (m_pps); + } + + double get_bps_L1() { + if (m_bps_L1 == 0) { + calculate(); + } + return (m_bps_L1); + } + + double get_bps_L2() { + if (m_bps_L2 == 0) { + calculate(); + } + return m_bps_L2; + } + + double get_percentage() { + if (m_percentage == 0) { + calculate(); + } + return m_percentage; + } + + + + /* update the rate by a factor */ + void update_factor(double factor) { + /* if all are non zero - it works, if only one (base) is also works */ + m_pps *= factor; + m_bps_L1 *= factor; + m_bps_L2 *= factor; + m_percentage *= factor; + } + + + +private: + + /** + * calculates all the rates from the base rate + * + */ + void calculate() { + + if (m_pps != 0) { + calculate_from_pps(); + } else if (m_bps_L1 != 0) { + calculate_from_bps_L1(); + } else if (m_bps_L2 != 0) { + calculate_from_bps_L2(); + } else if (m_percentage != 0) { + calculate_from_percentage(); + } else { + assert(0); + } + } + + + uint64_t get_line_speed_bps(); + double get_pkt_size(); + + void calculate_from_pps() { + m_bps_L1 = m_pps * (get_pkt_size() + 24) * 8; + m_bps_L2 = m_pps * (get_pkt_size() + 4) * 8; + m_percentage = (m_bps_L1 / get_line_speed_bps()) * 100.0; + } + + + void calculate_from_bps_L1() { + m_bps_L2 = m_bps_L1 * ( (get_pkt_size() + 4.0) / (get_pkt_size() + 24.0) ); + m_pps = m_bps_L2 / (8 * (get_pkt_size() + 4)); + m_percentage = (m_bps_L1 / get_line_speed_bps()) * 100.0; + } + + + void calculate_from_bps_L2() { + m_bps_L1 = m_bps_L2 * ( (get_pkt_size() + 24.0) / (get_pkt_size() + 4.0)); + m_pps = m_bps_L2 / (8 * (get_pkt_size() + 4)); + m_percentage = (m_bps_L1 / get_line_speed_bps()) * 100.0; + } + + void calculate_from_percentage() { + m_bps_L1 = (m_percentage / 100.0) * get_line_speed_bps(); + m_bps_L2 = m_bps_L1 * ( (get_pkt_size() + 4.0) / (get_pkt_size() + 24.0) ); + m_pps = m_bps_L2 / (8 * (get_pkt_size() + 4)); + + } + + double m_pps; + double m_bps_L1; + double m_bps_L2; + double m_percentage; + + /* reference to the owner class */ + TrexStream &m_stream; +}; /** * Stateless Stream * */ class TrexStream { +friend class TrexStreamRate; public: enum STREAM_TYPE { @@ -155,12 +327,29 @@ public: m_next_stream_id = next_stream_id; } - double get_pps() const { - return m_pps; + + double get_pps() { + return m_rate.get_pps(); + } + + double get_bps_L1() { + return m_rate.get_bps_L1(); } - void set_pps(double pps){ - m_pps = pps; + double get_bps_L2() { + return m_rate.get_bps_L2(); + } + + double get_bw_percentage() { + return m_rate.get_percentage(); + } + + void set_rate(TrexStreamRate::rate_type_e type, double value) { + m_rate.set_base_rate(type, value); + } + + void update_rate_factor(double factor) { + m_rate.update_factor(factor); } void set_type(uint8_t type){ @@ -227,13 +416,14 @@ public: dp->m_expected_pkt_len = m_expected_pkt_len; dp->m_rx_check = m_rx_check; - dp->m_pps = m_pps; dp->m_burst_total_pkts = m_burst_total_pkts; dp->m_num_bursts = m_num_bursts; dp->m_ibg_usec = m_ibg_usec; dp->m_flags = m_flags; dp->m_action_count = m_action_count; + dp->m_rate = m_rate; + return(dp); } @@ -245,19 +435,11 @@ public: } } - double get_burst_length_usec() const { - return ( (m_burst_total_pkts / m_pps) * 1000 * 1000); + double get_burst_length_usec() { + return ( (m_burst_total_pkts / get_pps()) * 1000 * 1000); } - double get_bps_l2() { - return get_bps(false); - } - - double get_bps_l1() { - return get_bps(true); - } - - + void Dump(FILE *fd); StreamVmDp * getDpVm(){ @@ -325,8 +507,6 @@ public: } m_rx_check; - double m_pps; - uint32_t m_burst_total_pkts; /* valid in case of burst stSINGLE_BURST,stMULTI_BURST*/ uint32_t m_num_bursts; /* valid in case of stMULTI_BURST */ @@ -338,8 +518,7 @@ public: private: - double get_bps(bool layer1) { - + double get_pkt_size() { /* 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) */ @@ -349,17 +528,13 @@ private: 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); - } + return m_expected_pkt_len; } + + + /* no access to this without a lazy build method */ + TrexStreamRate m_rate; }; diff --git a/src/stateless/cp/trex_stream_vm.h b/src/stateless/cp/trex_stream_vm.h index c16545d9..0bd00711 100644 --- a/src/stateless/cp/trex_stream_vm.h +++ b/src/stateless/cp/trex_stream_vm.h @@ -227,7 +227,7 @@ public: inline void run_inc(uint8_t * flow_var) { uint8_t *p = (flow_var + m_flow_offset); - if (*p >= (m_max_val-m_step)) { + if (*p > (m_max_val-m_step)) { *p = m_min_val; } else { *p = *p + m_step; @@ -236,7 +236,7 @@ public: inline void run_dec(uint8_t * flow_var) { uint8_t *p = (flow_var + m_flow_offset); - if (*p <= (m_min_val+m_step)) { + if (*p < (m_min_val+m_step)) { *p = m_max_val; } else { *p = *p - m_step; @@ -257,7 +257,7 @@ public: inline void run_inc(uint8_t * flow_var) { uint16_t *p = (uint16_t *)(flow_var + m_flow_offset); - if (*p >= (m_max_val-m_step)) { + if (*p > (m_max_val-m_step)) { *p = m_min_val; } else { *p = *p + m_step; @@ -266,7 +266,7 @@ public: inline void run_dec(uint8_t * flow_var) { uint16_t *p = (uint16_t *)(flow_var + m_flow_offset); - if (*p <= (m_min_val+m_step)) { + if (*p < (m_min_val+m_step)) { *p = m_max_val; } else { *p = *p - m_step; @@ -286,7 +286,7 @@ public: inline void run_inc(uint8_t * flow_var) { uint32_t *p = (uint32_t *)(flow_var + m_flow_offset); - if (*p >= (m_max_val-m_step)) { + if (*p > (m_max_val-m_step)) { *p = m_min_val; } else { *p = *p + m_step; @@ -295,7 +295,7 @@ public: inline void run_dec(uint8_t * flow_var) { uint32_t *p = (uint32_t *)(flow_var + m_flow_offset); - if (*p <= (m_min_val+m_step)) { + if (*p < (m_min_val+m_step)) { *p = m_max_val; } else { *p = *p - m_step; @@ -315,7 +315,7 @@ public: inline void run_inc(uint8_t * flow_var) { uint64_t *p = (uint64_t *)(flow_var + m_flow_offset); - if (*p >= (m_max_val-m_step) ) { + if (*p > (m_max_val-m_step) ) { *p = m_min_val; } else { *p = *p + m_step; @@ -324,7 +324,7 @@ public: inline void run_dec(uint8_t * flow_var) { uint64_t *p = (uint64_t *)(flow_var + m_flow_offset); - if (*p <= m_min_val+m_step) { + if (*p < m_min_val+m_step) { *p = m_max_val; } else { *p = *p - m_step; diff --git a/src/stateless/cp/trex_streams_compiler.cpp b/src/stateless/cp/trex_streams_compiler.cpp index 9d048dbd..aca74498 100644 --- a/src/stateless/cp/trex_streams_compiler.cpp +++ b/src/stateless/cp/trex_streams_compiler.cpp @@ -459,7 +459,7 @@ TrexStreamsCompiler::compile_internal(uint8_t por * */ void -TrexStreamsCompiler::compile_stream(const TrexStream *stream, +TrexStreamsCompiler::compile_stream(TrexStream *stream, double factor, uint8_t dp_core_count, std::vector<TrexStreamsCompiledObj *> &objs, @@ -500,7 +500,7 @@ TrexStreamsCompiler::compile_stream(const TrexStream *stream, * */ void -TrexStreamsCompiler::compile_stream_on_all_cores(const TrexStream *stream, +TrexStreamsCompiler::compile_stream_on_all_cores(TrexStream *stream, double factor, uint8_t dp_core_count, std::vector<TrexStreamsCompiledObj *> &objs, @@ -509,7 +509,7 @@ TrexStreamsCompiler::compile_stream_on_all_cores(const TrexStream *stream, std::vector<TrexStream *> core_streams(dp_core_count); - double per_core_rate = (stream->m_pps * (factor / dp_core_count)); + double per_core_factor = (factor / dp_core_count); int per_core_burst_total_pkts = (stream->m_burst_total_pkts / dp_core_count); /* for each core - creates its own version of the stream */ @@ -521,7 +521,7 @@ TrexStreamsCompiler::compile_stream_on_all_cores(const TrexStream *stream, /* adjust rate and packets count */ - dp_stream->m_pps = per_core_rate; + dp_stream->update_rate_factor(per_core_factor); dp_stream->m_burst_total_pkts = per_core_burst_total_pkts; core_streams[i] = dp_stream; @@ -547,7 +547,7 @@ TrexStreamsCompiler::compile_stream_on_all_cores(const TrexStream *stream, * */ void -TrexStreamsCompiler::compile_stream_on_single_core(const TrexStream *stream, +TrexStreamsCompiler::compile_stream_on_single_core(TrexStream *stream, double factor, TrexStreamsCompiledObj *obj, int new_id, @@ -560,7 +560,7 @@ TrexStreamsCompiler::compile_stream_on_single_core(const TrexStream *stream, /* compile the VM if exists */ if (!stream->m_vm.is_vm_empty()) { - ((TrexStream *)stream)->vm_compile(); + stream->vm_compile(); dp_stream->m_vm_dp = stream->m_vm_dp->clone(); } @@ -581,7 +581,7 @@ TrexStreamsCompiler::compile_stream_on_single_core(const TrexStream *stream, * @param stream */ void -TrexStreamsGraph::add_rate_events_for_stream(double &offset_usec, const TrexStream *stream) { +TrexStreamsGraph::add_rate_events_for_stream(double &offset_usec, TrexStream *stream) { switch (stream->get_type()) { @@ -604,7 +604,7 @@ TrexStreamsGraph::add_rate_events_for_stream(double &offset_usec, const TrexStre * */ void -TrexStreamsGraph::add_rate_events_for_stream_cont(double &offset_usec, const TrexStream *stream) { +TrexStreamsGraph::add_rate_events_for_stream_cont(double &offset_usec, TrexStream *stream) { TrexStreamsGraphObj::rate_event_st start_event; @@ -613,8 +613,8 @@ TrexStreamsGraph::add_rate_events_for_stream_cont(double &offset_usec, const Tre start_event.time = offset_usec + stream->m_isg_usec; 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.diff_bps_l2 = stream->get_bps_L2(); + start_event.diff_bps_l1 = stream->get_bps_L1(); m_graph_obj->add_rate_event(start_event); /* no more events after this stream */ @@ -629,7 +629,7 @@ TrexStreamsGraph::add_rate_events_for_stream_cont(double &offset_usec, const Tre * */ void -TrexStreamsGraph::add_rate_events_for_stream_single_burst(double &offset_usec, const TrexStream *stream) { +TrexStreamsGraph::add_rate_events_for_stream_single_burst(double &offset_usec, TrexStream *stream) { TrexStreamsGraphObj::rate_event_st start_event; TrexStreamsGraphObj::rate_event_st stop_event; @@ -640,9 +640,9 @@ TrexStreamsGraph::add_rate_events_for_stream_single_burst(double &offset_usec, c /* start event */ start_event.time = offset_usec + stream->m_isg_usec; - 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.diff_pps = stream->get_pps(); + start_event.diff_bps_l2 = stream->get_bps_L2(); + start_event.diff_bps_l1 = stream->get_bps_L1(); m_graph_obj->add_rate_event(start_event); /* stop event */ @@ -662,7 +662,7 @@ TrexStreamsGraph::add_rate_events_for_stream_single_burst(double &offset_usec, c * */ void -TrexStreamsGraph::add_rate_events_for_stream_multi_burst(double &offset_usec, const TrexStream *stream) { +TrexStreamsGraph::add_rate_events_for_stream_multi_burst(double &offset_usec, TrexStream *stream) { TrexStreamsGraphObj::rate_event_st start_event; TrexStreamsGraphObj::rate_event_st stop_event; @@ -672,8 +672,8 @@ 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_l2 = ((TrexStream *)stream)->get_bps_l2(); - start_event.diff_bps_l1 = ((TrexStream *)stream)->get_bps_l1(); + start_event.diff_bps_l2 = stream->get_bps_L2(); + start_event.diff_bps_l1 = stream->get_bps_L1(); start_event.stream_id = stream->m_stream_id; stop_event.diff_pps = -(start_event.diff_pps); @@ -714,7 +714,7 @@ TrexStreamsGraph::generate_graph_for_one_root(uint32_t root_stream_id) { double offset = 0; while (true) { - const TrexStream *stream; + TrexStream *stream; /* fetch the stream from the hash - if it is not present, report an error */ try { diff --git a/src/stateless/cp/trex_streams_compiler.h b/src/stateless/cp/trex_streams_compiler.h index a3a1f8f7..b8b0be37 100644 --- a/src/stateless/cp/trex_streams_compiler.h +++ b/src/stateless/cp/trex_streams_compiler.h @@ -123,19 +123,19 @@ private: void add_warning(const std::string &warning); void err(const std::string &err); - void compile_stream(const TrexStream *stream, + void compile_stream(TrexStream *stream, double factor, uint8_t dp_core_count, std::vector<TrexStreamsCompiledObj *> &objs, GraphNodeMap &nodes); - void compile_stream_on_single_core(const TrexStream *stream, + void compile_stream_on_single_core(TrexStream *stream, double factor, TrexStreamsCompiledObj *obj, int new_id, int new_next_id); - void compile_stream_on_all_cores(const TrexStream *stream, + void compile_stream_on_all_cores(TrexStream *stream, double factor, uint8_t dp_core_count, std::vector<TrexStreamsCompiledObj *> &objs, @@ -245,13 +245,13 @@ private: void generate_graph_for_one_root(uint32_t root_stream_id); - void add_rate_events_for_stream(double &offset, const TrexStream *stream); - void add_rate_events_for_stream_cont(double &offset_usec, const TrexStream *stream); - void add_rate_events_for_stream_single_burst(double &offset_usec, const TrexStream *stream); - void add_rate_events_for_stream_multi_burst(double &offset_usec, const TrexStream *stream); + void add_rate_events_for_stream(double &offset, TrexStream *stream); + void add_rate_events_for_stream_cont(double &offset_usec, TrexStream *stream); + void add_rate_events_for_stream_single_burst(double &offset_usec, TrexStream *stream); + void add_rate_events_for_stream_multi_burst(double &offset_usec, TrexStream *stream); /* for fast processing of streams */ - std::unordered_map<uint32_t, const TrexStream *> m_streams_hash; + std::unordered_map<uint32_t, TrexStream *> m_streams_hash; /* main object to hold the graph - returned to the user */ TrexStreamsGraphObj *m_graph_obj; |