hltapi: add line rate and bps support
authorYaroslav Brustinov <[email protected]>
Tue, 23 Feb 2016 16:23:08 +0000 (11:23 -0500)
committerYaroslav Brustinov <[email protected]>
Tue, 23 Feb 2016 16:23:08 +0000 (11:23 -0500)
scripts/automation/regression/unit_tests/functional_tests/hltapi_stream_builder_test.py
scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_hltapi.py
scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_streams.py
scripts/exp/hlt_david1.pcap
scripts/exp/hlt_david2.pcap
scripts/exp/hlt_david3.pcap
scripts/exp/hlt_david4.pcap
scripts/stl/hlt/hlt_david1.py
scripts/stl/hlt/hlt_david3.py
scripts/stl/hlt/hlt_tcp_ranges.py
scripts/stl/hlt/hlt_udp_inc_dec_len_9k.py

index 297034d..30a9f6f 100755 (executable)
@@ -47,7 +47,7 @@ class CTRexHltApi_Test(unittest.TestCase):
     flags: 3
     isg: 0.0
     mode:
-      pps: 1
+      percentage: 10.0
       type: continuous
     packet:
       binary: AAAAAAAAAAABAAABCABFAAAyAAAAAEAGusUAAAAAwAAAAQQAAFAAAAABAAAAAVAAD+U1/QAAISEhISEhISEhIQ==
@@ -92,7 +92,8 @@ TBD
                                    ip_dst_addr = '5.5.5.5',
                                    ip_dst_count = 2,
                                    ip_dst_mode = 'random',
-                                   name = 'test_ip_ranges')
+                                   name = 'test_ip_ranges',
+                                   rate_pps = 1)
         self.test_yaml = test_stream.dump_to_yaml(self.yaml_save_location())
         self.golden_yaml = '''
 - name: test_ip_ranges
@@ -102,7 +103,7 @@ TBD
     flags: 3
     isg: 0.0
     mode:
-      pps: 1
+      pps: 1.0
       type: continuous
     packet:
       binary: AAAAAAAAAAABAAABCABFAAAyAAAAAEAGrxPAqAEBBQUFBQQAAFAAAAABAAAAAVAAD+UqSwAAISEhISEhISEhIQ==
@@ -150,7 +151,8 @@ TBD
                                    tcp_dst_port_mode = 'random',
                                    tcp_dst_port_count = 10,
                                    tcp_dst_port = 1234,
-                                   name = 'test_tcp_ranges')
+                                   name = 'test_tcp_ranges',
+                                   rate_pps = '2')
         self.test_yaml = test_stream.dump_to_yaml(self.yaml_save_location())
         self.golden_yaml = '''
 - name: test_tcp_ranges
@@ -160,7 +162,7 @@ TBD
     flags: 3
     isg: 0.0
     mode:
-      pps: 1
+      pps: 2.0
       type: continuous
     packet:
       binary: AAAAAAAAAAABAAABCABFAAAyAAAAAEAGusUAAAAAwAAAAQQABNIAAAABAAAAAVAAD+UxewAAISEhISEhISEhIQ==
@@ -227,7 +229,8 @@ TBD
                                    udp_dst_port_mode = 'increment',
                                    udp_dst_port_count = 10,
                                    udp_dst_port = 1234,
-                                   name = 'test_udp_ranges')
+                                   name = 'test_udp_ranges',
+                                   rate_percent = 20,)
         self.test_yaml = test_stream.dump_to_yaml(self.yaml_save_location())
         self.golden_yaml = '''
 - name: test_udp_ranges
@@ -237,7 +240,7 @@ TBD
     flags: 3
     isg: 0.0
     mode:
-      pps: 1
+      percentage: 20.0
       type: continuous
     packet:
       binary: AAAAAAAAAAABAAABCABFAAAyAAAAAEARuroAAAAAwAAAAQTSBNIAHsmgISEhISEhISEhISEhISEhISEhISEhIQ==
@@ -287,7 +290,8 @@ TBD
         test_stream = STLHltStream(length_mode = 'decrement',
                                    frame_size_min = 100,
                                    frame_size_max = 3000,
-                                   name = 'test_pkt_len_by_framesize')
+                                   name = 'test_pkt_len_by_framesize',
+                                   rate_bps = 1000)
         self.test_yaml = test_stream.dump_to_yaml(self.yaml_save_location())
         self.golden_yaml = '''
 - name: test_pkt_len_by_framesize
@@ -297,7 +301,7 @@ TBD
     flags: 3
     isg: 0.0
     mode:
-      pps: 1
+      bps_L2: 1000.0
       type: continuous
     packet:
       binary: AAAAAAAAAAABAAABCABFAAuqAAAAAEAGr00AAAAAwAAAAQQAAFAAAAABAAAAAVAAD+UwiwAAISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEh
@@ -343,7 +347,7 @@ TBD
     flags: 3
     isg: 0.0
     mode:
-      pps: 1
+      percentage: 10.0
       type: continuous
     packet:
       binary: AAAAAAAAAAABAAABCABFAAGQAAAAAEARuVwAAAAAwAAAAQQAAFABfCaTISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEh
@@ -397,7 +401,7 @@ TBD
     flags: 3
     isg: 0.0
     mode:
-      pps: 1
+      percentage: 10.0
       type: continuous
     packet:
       binary: AAAAAAAAAAABAAABgQAwAAgARQAALgAAAABABrrJAAAAAMAAAAEEAABQAAAAAQAAAAFQAA/leEMAACEhISEhIQ==
@@ -429,7 +433,7 @@ TBD
     flags: 3
     isg: 0.0
     mode:
-      pps: 1
+      percentage: 10.0
       type: continuous
     packet:
       binary: AAAAAAAAAAABAAABgQAwAYEAMAKBADADgQAwBAgARQAARgAAAABABrqxAAAAAMAAAAEEAABQAAAAAQAAAAFQAA/l6p0AACEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIQ==
@@ -461,7 +465,7 @@ TBD
     flags: 3
     isg: 0.0
     mode:
-      pps: 1
+      percentage: 10.0
       type: continuous
     packet:
       binary: AAAAAAAAAAABAAABgQAwAYEAMAKBADPogQAwBIEAMAUIAEUAAEIAAAAAQAa6tQAAAADAAAABBAAAUAAAAAEAAAABUAAP5SzkAAAhISEhISEhISEhISEhISEhISEhISEhISEhIQ==
@@ -540,7 +544,7 @@ TBD
     flags: 3
     isg: 0.0
     mode:
-      pps: 1
+      percentage: 10.0
       type: continuous
     packet:
       binary: AAAAAAAAAAABAAABht1gAAAAAG4GQP6AAAAAAAAAAAAAAAAAABL+gAAAAAAAAAAAAAAAAAAiBAAAUAAAAAEAAAABUAAP5ctLAAAhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISE=
@@ -570,7 +574,7 @@ TBD
     flags: 3
     isg: 0.0
     mode:
-      pps: 1
+      percentage: 10.0
       type: continuous
     packet:
       binary: AAAAAAAAAAABAAABht1gAAAAAG4RQBERIiIzM0REVVVmZnd3iIgRERERERERERERERERERERBAAAUABucjohISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISE=
index 581ea41..593c4c4 100755 (executable)
@@ -27,9 +27,9 @@ traffic_config_kwargs = {
     'port_handle2': None,
     # stream builder parameters
     'transmit_mode': 'continuous',          # ( continuous | multi_burst | single_burst )
-    'rate_pps': 1,                          # TODO: support bps and percent once stateless API will, use rate_percent by default
+    'rate_pps': None,
     'rate_bps': None,
-    'rate_percent': 100,
+    'rate_percent': 10,
     'stream_id': None,
     'name': None,
     'bidirectional': 0,
@@ -663,55 +663,67 @@ class CTRexHltApi(object):
 
 def STLHltStream(**user_kwargs):
     kwargs = merge_kwargs(traffic_config_kwargs, user_kwargs)
+    # verify rate is given by at most one arg
+    rate_args = set(['rate_pps', 'rate_bps', 'rate_percent'])
+    intersect_rate_args = list(rate_args & set(user_kwargs.keys()))
+    if len(intersect_rate_args) > 1:
+        raise STLError('More than one rate argument specified: %s' % intersect_rate_args)
+    try:
+        rate_key = intersect_rate_args[0]
+    except IndexError:
+        rate_key = 'rate_percent'
+
     if kwargs['length_mode'] == 'imix': # several streams with given length
         streams_arr = []
         user_kwargs['length_mode'] = 'fixed'
         if kwargs['l3_imix1_size'] < 32 or kwargs['l3_imix2_size'] < 32 or kwargs['l3_imix3_size'] < 32 or kwargs['l3_imix4_size'] < 32:
             raise STLError('l3_imix*_size should be at least 32')
-        total_rate = kwargs['l3_imix1_ratio'] + kwargs['l3_imix2_ratio'] + kwargs['l3_imix3_ratio'] + kwargs['l3_imix4_ratio']
-        if total_rate == 0:
+        total_ratio = kwargs['l3_imix1_ratio'] + kwargs['l3_imix2_ratio'] + kwargs['l3_imix3_ratio'] + kwargs['l3_imix4_ratio']
+        if total_ratio == 0:
             raise STLError('Used length_mode imix, but all the ratios are 0')
         save_to_yaml = kwargs.get('save_to_yaml')
-        rate_pps = float(kwargs['rate_pps'])
+        total_rate = float(kwargs[rate_key])
         if kwargs['l3_imix1_ratio'] > 0:
             if save_to_yaml and type(save_to_yaml) is str:
                 user_kwargs['save_to_yaml'] = save_to_yaml.replace('.yaml', '_imix1.yaml')
             user_kwargs['frame_size'] = kwargs['l3_imix1_size']
-            user_kwargs['rate_pps'] = rate_pps * kwargs['l3_imix1_ratio'] / total_rate
+            user_kwargs[rate_key] = total_rate * kwargs['l3_imix1_ratio'] / total_ratio
             streams_arr.append(STLHltStream(**user_kwargs))
         if kwargs['l3_imix2_ratio'] > 0:
             if save_to_yaml and type(save_to_yaml) is str:
                 user_kwargs['save_to_yaml'] = save_to_yaml.replace('.yaml', '_imix2.yaml')
             user_kwargs['frame_size'] = kwargs['l3_imix2_size']
-            user_kwargs['rate_pps'] = rate_pps * kwargs['l3_imix2_ratio'] / total_rate
+            user_kwargs[rate_key] = total_rate * kwargs['l3_imix2_ratio'] / total_ratio
             streams_arr.append(STLHltStream(**user_kwargs))
         if kwargs['l3_imix3_ratio'] > 0:
             if save_to_yaml and type(save_to_yaml) is str:
                 user_kwargs['save_to_yaml'] = save_to_yaml.replace('.yaml', '_imix3.yaml')
             user_kwargs['frame_size'] = kwargs['l3_imix3_size']
-            user_kwargs['rate_pps'] = rate_pps * kwargs['l3_imix3_ratio'] / total_rate
+            user_kwargs[rate_key] = total_rate * kwargs['l3_imix3_ratio'] / total_ratio
             streams_arr.append(STLHltStream(**user_kwargs))
         if kwargs['l3_imix4_ratio'] > 0:
             if save_to_yaml and type(save_to_yaml) is str:
                 user_kwargs['save_to_yaml'] = save_to_yaml.replace('.yaml', '_imix4.yaml')
             user_kwargs['frame_size'] = kwargs['l3_imix4_size']
-            user_kwargs['rate_pps'] = rate_pps * kwargs['l3_imix4_ratio'] / total_rate
+            user_kwargs[rate_key] = total_rate * kwargs['l3_imix4_ratio'] / total_ratio
             streams_arr.append(STLHltStream(**user_kwargs))
         return streams_arr
 
     # packet generation
     packet = generate_packet(**user_kwargs)
     try:
+        # TODO: verify if bps is L1 or L2, use L2 for now
+        rate_types_dict = {'rate_pps': 'pps', 'rate_bps': 'bps_L2', 'rate_percent': 'percentage'}
+        rate_stateless = {rate_types_dict[rate_key]: float(kwargs[rate_key])}
         transmit_mode = kwargs['transmit_mode']
-        rate_pps = kwargs['rate_pps']
         pkts_per_burst = kwargs['pkts_per_burst']
         if transmit_mode == 'continuous':
-            transmit_mode_class = STLTXCont(pps = rate_pps)
+            transmit_mode_class = STLTXCont(**rate_stateless)
         elif transmit_mode == 'single_burst':
-            transmit_mode_class = STLTXSingleBurst(pps = rate_pps, total_pkts = pkts_per_burst)
+            transmit_mode_class = STLTXSingleBurst(total_pkts = pkts_per_burst, **rate_stateless)
         elif transmit_mode == 'multi_burst':
-            transmit_mode_class = STLTXMultiBurst(pps = rate_pps, total_pkts = pkts_per_burst,
-                                                  count = int(kwargs['burst_loop_count']), ibg = kwargs['inter_burst_gap'])
+            transmit_mode_class = STLTXMultiBurst(total_pkts = pkts_per_burst, count = int(kwargs['burst_loop_count']),
+                                                  ibg = kwargs['inter_burst_gap'], **rate_stateless)
         else:
             raise STLError('transmit_mode %s not supported/implemented')
     except Exception as e:
index f79d25c..df30db5 100644 (file)
@@ -64,9 +64,9 @@ class STLTXMode(object):
 # continuous mode
 class STLTXCont(STLTXMode):
 
-    def __init__ (self, pps = None, bps_L1 = None, bps_L2 = None, percentage = None):
+    def __init__ (self, **kwargs):
 
-        super(STLTXCont, self).__init__(pps, bps_L1, bps_L2, percentage)
+        super(STLTXCont, self).__init__(**kwargs)
 
         self.fields['type'] = 'continuous'
 
@@ -76,12 +76,12 @@ class STLTXCont(STLTXMode):
 # single burst mode
 class STLTXSingleBurst(STLTXMode):
 
-    def __init__ (self, total_pkts = 1, pps = None, bps_L1 = None, bps_L2 = None, percentage = None):
+    def __init__ (self, total_pkts = 1, **kwargs):
 
         if not isinstance(total_pkts, int):
             raise STLArgumentError('total_pkts', total_pkts)
 
-        super(STLTXSingleBurst, self).__init__(pps, bps_L1, bps_L2, percentage)
+        super(STLTXSingleBurst, self).__init__(**kwargs)
 
         self.fields['type'] = 'single_burst'
         self.fields['total_pkts'] = total_pkts
@@ -96,10 +96,7 @@ class STLTXMultiBurst(STLTXMode):
                   pkts_per_burst = 1,
                   ibg = 0.0,   # usec not SEC
                   count = 1,
-                  pps = None,
-                  bps_L1 = None,
-                  bps_L2 = None,
-                  percentage = None):
+                  **kwargs):
 
         if not isinstance(pkts_per_burst, int):
             raise STLArgumentError('pkts_per_burst', pkts_per_burst)
@@ -110,7 +107,7 @@ class STLTXMultiBurst(STLTXMode):
         if not isinstance(count, int):
             raise STLArgumentError('count', count)
 
-        super(STLTXMultiBurst, self).__init__(pps, bps_L1, bps_L2, percentage)
+        super(STLTXMultiBurst, self).__init__(**kwargs)
 
         self.fields['type'] = 'multi_burst'
         self.fields['pkts_per_burst'] = pkts_per_burst
index 54013ae..6c9a1cc 100644 (file)
Binary files a/scripts/exp/hlt_david1.pcap and b/scripts/exp/hlt_david1.pcap differ
index 8a75dd0..2c76a8a 100644 (file)
Binary files a/scripts/exp/hlt_david2.pcap and b/scripts/exp/hlt_david2.pcap differ
index 2044d2f..d7c43f2 100644 (file)
Binary files a/scripts/exp/hlt_david3.pcap and b/scripts/exp/hlt_david3.pcap differ
index 4699549..a28d8ab 100644 (file)
Binary files a/scripts/exp/hlt_david4.pcap and b/scripts/exp/hlt_david4.pcap differ
index 879ea52..922bb63 100755 (executable)
@@ -26,7 +26,7 @@ class STLS1(object):
                 mac_src = '00.00.c0.a8.00.03',
                 mac_src2 = '00.00.c0.a8.01.03',
                 pkts_per_burst = '200000',
-                #rate_percent = '0.4', # not supported yet
+                rate_percent = '0.4',
                 transmit_mode = 'continuous',
                 vlan_id = '1',
                 direction = direction,
index 01bf243..af41b3d 100755 (executable)
@@ -16,7 +16,7 @@ class STLS1(object):
                 ip_dst_count = 1,
                 l3_length = 474,
                 ip_dscp = 10,
-                #rate_bps = 256000000, # not supported yet
+                rate_bps = 256000000,
                 mac_src_mode = 'fixed',
                 mac_src_step = 1,
                 mac_src_count = 1,
index 31edc61..b720e1e 100755 (executable)
@@ -12,6 +12,7 @@ class STLS1(object):
                              tcp_dst_port = 1234,
                              name = 'test_tcp_ranges',
                              direction = direction,
+                             rate_pps = 1,
                              ),
                ]
 
index e7ee5b3..e8766da 100755 (executable)
@@ -11,6 +11,7 @@ class STLS1(object):
                              l4_protocol = 'udp',
                              udp_src_port = 1025,
                              udp_dst_port = 12,
+                             rate_pps = 1,
                              ),
                 STLHltStream(length_mode = 'decrement',
                              frame_size_max = 9*1024,
@@ -19,6 +20,7 @@ class STLS1(object):
                              l4_protocol = 'udp',
                              udp_src_port = 1025,
                              udp_dst_port = 12,
+                             rate_pps = 1,
                              )
                ]