diff options
author | Hanoh Haim <hhaim@cisco.com> | 2016-02-16 10:27:32 +0200 |
---|---|---|
committer | Hanoh Haim <hhaim@cisco.com> | 2016-02-16 10:27:32 +0200 |
commit | ecbb10f1ce8303c5803fa9331198ce6d98b3e3fa (patch) | |
tree | 4e9d8437b9bdda1961852c7fa2db611cd398d8cf | |
parent | aebe518a0f109f25928cf82eb998e7b7602a2c03 (diff) |
add action counter
-rw-r--r-- | scripts/automation/regression/unit_tests/functional_tests/stl_basic_tests.py | 5 | ||||
-rw-r--r-- | scripts/exp/burst_3st_loop_x_times.pcap | bin | 0 -> 936 bytes | |||
-rw-r--r-- | scripts/stl/burst_3st_loop_x_times.py | 53 | ||||
-rw-r--r-- | src/rpc-server/commands/trex_rpc_cmd_stream.cpp | 10 | ||||
-rw-r--r-- | src/stateless/dp/trex_stateless_dp_core.cpp | 19 | ||||
-rw-r--r-- | src/stateless/dp/trex_stream_node.h | 3 |
6 files changed, 83 insertions, 7 deletions
diff --git a/scripts/automation/regression/unit_tests/functional_tests/stl_basic_tests.py b/scripts/automation/regression/unit_tests/functional_tests/stl_basic_tests.py index bacfca36..e44948c5 100644 --- a/scripts/automation/regression/unit_tests/functional_tests/stl_basic_tests.py +++ b/scripts/automation/regression/unit_tests/functional_tests/stl_basic_tests.py @@ -174,12 +174,13 @@ class CStlBasic_Test(functional_general_test.CGeneralFunctional_Test): ["yaml/imix_3pkt_vm.yaml","-m 50kpps --limit 20 --cores 2",True], ["udp_1pkt_simple_mac_dst.py","-m 1 -l 1 ",True], ["udp_1pkt_simple_mac_src.py","-m 1 -l 1 ",True], - ["udp_1pkt_simple_mac_dst_src.py","-m 1 -l 1 ",True] + ["udp_1pkt_simple_mac_dst_src.py","-m 1 -l 1 ",True], + ["burst_3st_loop_x_times.py","-m 1 -l 20 ",True] ]; - p1 = [ ["udp_1pkt_simple_mac_dst_src.py","-m 1 -l 1 ",True] ] + p1 = [ ["burst_3st_loop_x_times.py","-m 1 -l 20 ",True] ] for obj in p: diff --git a/scripts/exp/burst_3st_loop_x_times.pcap b/scripts/exp/burst_3st_loop_x_times.pcap Binary files differnew file mode 100644 index 00000000..ca29a1b9 --- /dev/null +++ b/scripts/exp/burst_3st_loop_x_times.pcap diff --git a/scripts/stl/burst_3st_loop_x_times.py b/scripts/stl/burst_3st_loop_x_times.py new file mode 100644 index 00000000..2604124b --- /dev/null +++ b/scripts/stl/burst_3st_loop_x_times.py @@ -0,0 +1,53 @@ +from trex_stl_lib.api import * + +# 1 clients MAC override the LSB of destination +class STLS1(object): + + def __init__ (self): + self.fsize =64; # the size of the packet + + + def create_stream (self): + + # create a base packet and pad it to size + size = self.fsize - 4; # no FCS + base_pkt = Ether()/IP(src="16.0.0.1",dst="48.0.0.1")/UDP(dport=12,sport=1025) + base_pkt1 = Ether()/IP(src="16.0.0.2",dst="48.0.0.1")/UDP(dport=12,sport=1025) + base_pkt2 = Ether()/IP(src="16.0.0.3",dst="48.0.0.1")/UDP(dport=12,sport=1025) + pad = max(0, size - len(base_pkt)) * 'x' + + + return STLProfile( [ STLStream( isg = 10.0, # star in delay + name ='S0', + packet = STLPktBuilder(pkt = base_pkt/pad), + mode = STLTXSingleBurst( pps = 10, total_pkts = 1), + next = 'S1'), # point to next stream + + STLStream( self_start = False, # stream is disabled enable trow S0 + name ='S1', + packet = STLPktBuilder(pkt = base_pkt1/pad), + mode = STLTXSingleBurst( pps = 10, total_pkts = 2), + next = 'S2' ), + + STLStream( self_start = False, # stream is disabled enable trow S0 + name ='S2', + packet = STLPktBuilder(pkt = base_pkt2/pad), + mode = STLTXSingleBurst( pps = 10, total_pkts = 3 ), + action_count = 2, # loop 2 times + next = 'S0' # back to S0 loop + ) + ]).get_streams() + + + def get_streams (self, direction = 0): + # create 1 stream + return self.create_stream() + + +# dynamic load - used for trex console or simulator +def register(): + return STLS1() + + + + diff --git a/src/rpc-server/commands/trex_rpc_cmd_stream.cpp b/src/rpc-server/commands/trex_rpc_cmd_stream.cpp index 87e205b0..918ff99b 100644 --- a/src/rpc-server/commands/trex_rpc_cmd_stream.cpp +++ b/src/rpc-server/commands/trex_rpc_cmd_stream.cpp @@ -57,7 +57,15 @@ TrexRpcCmdAddStream::_run(const Json::Value ¶ms, Json::Value &result) { stream->m_enabled = parse_bool(section, "enabled", result); stream->m_self_start = parse_bool(section, "self_start", result); stream->m_flags = parse_int(section, "flags", result); - stream->m_action_count = (uint16_t)parse_int(section, "action_count", result); + int cnt = parse_int(section, "action_count", result); + if (cnt<0 || cnt >= UINT16_MAX) { + std::stringstream ss; + ss << "bad action_count provided: should be between " << 0 << " and " << UINT16_MAX; + printf(" %s \n",ss.str().c_str()); + delete stream; + generate_execute_err(result, ss.str()); + } + stream->m_action_count = (uint16_t)cnt; /* inter stream gap */ stream->m_isg_usec = parse_double(section, "isg", result); diff --git a/src/stateless/dp/trex_stateless_dp_core.cpp b/src/stateless/dp/trex_stateless_dp_core.cpp index a84269ab..39080453 100644 --- a/src/stateless/dp/trex_stateless_dp_core.cpp +++ b/src/stateless/dp/trex_stateless_dp_core.cpp @@ -348,9 +348,20 @@ bool TrexStatelessDpCore::set_stateless_next_node(CGenNodeStateless * cur_node, assert(state != CGenNodeStateless::ss_FREE_RESUSE); if (state == CGenNodeStateless::ss_INACTIVE ) { - /* refill start info and scedule, no update in active streams */ - next_node->refresh(); - schedule = true; + if (cur_node->m_action_counter > 0) { + cur_node->m_action_counter--; + if (cur_node->m_action_counter==0) { + to_stop_port = lp_port->update_number_of_active_streams(1); + }else{ + /* refill start info and scedule, no update in active streams */ + next_node->refresh(); + schedule = true; + } + }else{ + /* refill start info and scedule, no update in active streams */ + next_node->refresh(); + schedule = true; + } }else{ to_stop_port = lp_port->update_number_of_active_streams(1); @@ -554,6 +565,8 @@ TrexStatelessDpCore::add_stream(TrexStatelessDpPerPort * lp_port, node->m_cache_mbuf=0; node->m_type = CGenNode::STATELESS_PKT; + node->m_action_counter = stream->m_action_count; + /* clone the stream from control plane memory to DP memory */ node->m_ref_stream_info = stream->clone(); /* no need for this memory anymore on the control plane memory */ diff --git a/src/stateless/dp/trex_stream_node.h b/src/stateless/dp/trex_stream_node.h index db7f19e8..ab43defe 100644 --- a/src/stateless/dp/trex_stream_node.h +++ b/src/stateless/dp/trex_stream_node.h @@ -81,7 +81,8 @@ private: void * m_cache_mbuf; double m_next_time_offset; /* in sec */ - uint32_t m_pad11; + uint16_t m_action_counter; + uint16_t m_pad11; uint32_t m_pad12; stream_state_t m_state; |