CSIT-395 Update TRex version to v2.09
[csit.git] / resources / libraries / python / TrafficGenerator.py
index a640c1d..307a28f 100644 (file)
@@ -47,9 +47,6 @@ class TGDropRateSearchImpl(DropRateSearch):
             tg_instance.trex_stl_start_remote_exec(self.get_duration(),
                                                    unit_rate, frame_size,
                                                    traffic_type)
-            # Get latency stats from stream
-            self._latency_stats = tg_instance.get_latency()
-
             loss = tg_instance.get_loss()
             sent = tg_instance.get_sent()
             if self.loss_acceptance_type_is_percentage():
@@ -66,6 +63,16 @@ class TGDropRateSearchImpl(DropRateSearch):
         else:
             raise NotImplementedError("TG subtype not supported")
 
+    def get_latency(self):
+        """Return min/avg/max latency.
+
+        :return: Latency stats.
+        :rtype: list
+        """
+
+        tg_instance = BuiltIn().get_library_instance(
+            'resources.libraries.python.TrafficGenerator')
+        return tg_instance.get_latency_int()
 
 class TrafficGenerator(object):
     """Traffic Generator."""
@@ -107,8 +114,8 @@ class TrafficGenerator(object):
         """
         return self._received
 
-    def get_latency(self):
-        """Return min/avg/max latency.
+    def get_latency_int(self):
+        """Return rounded min/avg/max latency.
 
         :return: Latency stats.
         :rtype: list
@@ -148,13 +155,13 @@ class TrafficGenerator(object):
         self._node = tg_node
 
         if tg_node['subtype'] == NodeSubTypeTG.TREX:
-            trex_path = "/opt/trex-core-2.06"
+            trex_path = "/opt/trex-core-2.09"
 
             ssh = SSH()
             ssh.connect(tg_node)
 
             (ret, stdout, stderr) = ssh.exec_command(
-                "sudo sh -c '{}/resources/tools/t-rex/"
+                "sudo -E sh -c '{}/resources/tools/t-rex/"
                 "t-rex-installer.sh'".format(Constants.REMOTE_FW_DIR),
                 timeout=1800)
             if int(ret) != 0:
@@ -208,18 +215,20 @@ class TrafficGenerator(object):
                 .format(stdout + stderr))
                 raise RuntimeError('trex config generation error')
 
-            (ret, stdout, stderr) = ssh.exec_command(
-                "sh -c 'cd {0}/scripts/ && sudo ./trex-cfg'".format(trex_path))
-            if int(ret) != 0:
-                logger.error('trex-cfg failed: {0}'.format(stdout + stderr))
-                raise RuntimeError('trex-cfg failed')
-
             max_startup_retries = 3
             while max_startup_retries > 0:
                 # kill T-rex only if it is already running
                 (ret, _, _) = ssh.exec_command(
                     "sh -c 'pgrep t-rex && sudo pkill t-rex'")
 
+                # configure T-rex
+                (ret, stdout, stderr) = ssh.exec_command(
+                    "sh -c 'cd {0}/scripts/ && sudo ./trex-cfg'"\
+                    .format(trex_path))
+                if int(ret) != 0:
+                    logger.error('trex-cfg failed: {0}'.format(stdout + stderr))
+                    raise RuntimeError('trex-cfg failed')
+
                 # start T-rex
                 (ret, _, _) = ssh.exec_command(
                     "sh -c 'cd {0}/scripts/ && "
@@ -406,6 +415,51 @@ class TrafficGenerator(object):
                                                     _p0, _p1, _async, _latency,
                                                     warmup_time),
                 timeout=int(duration)+60)
+        elif traffic_type in ["3-node-IPv6-dst-10000"]:
+            (ret, stdout, stderr) = ssh.exec_command(
+                "sh -c '{0}/resources/tools/t-rex/t-rex-stateless.py "
+                "--duration={1} -r {2} -s {3} -6 "
+                "--p{4}_src_start_ip 2001:1::1 "
+                "--p{4}_dst_start_ip 2001:2::0 "
+                "--p{4}_dst_end_ip 2001:2::270F "
+                "--p{5}_src_start_ip 2001:2::1 "
+                "--p{5}_dst_start_ip 2001:1::0 "
+                "--p{5}_dst_end_ip 2001:1::270F "
+                "{6} {7} --warmup_time={8}'".format(Constants.REMOTE_FW_DIR,
+                                                    duration, rate, framesize,
+                                                    _p0, _p1, _async, _latency,
+                                                    warmup_time),
+                timeout=int(duration)+60)
+        elif traffic_type in ["3-node-IPv6-dst-100000"]:
+            (ret, stdout, stderr) = ssh.exec_command(
+                "sh -c '{0}/resources/tools/t-rex/t-rex-stateless.py "
+                "--duration={1} -r {2} -s {3} -6 "
+                "--p{4}_src_start_ip 2001:1::1 "
+                "--p{4}_dst_start_ip 2001:2::0 "
+                "--p{4}_dst_end_ip 2001:2::1:869F "
+                "--p{5}_src_start_ip 2001:2::1 "
+                "--p{5}_dst_start_ip 2001:1::0 "
+                "--p{5}_dst_end_ip 2001:1::1:869F "
+                "{6} {7} --warmup_time={8}'".format(Constants.REMOTE_FW_DIR,
+                                                    duration, rate, framesize,
+                                                    _p0, _p1, _async, _latency,
+                                                    warmup_time),
+                timeout=int(duration)+60)
+        elif traffic_type in ["3-node-IPv6-dst-1000000"]:
+            (ret, stdout, stderr) = ssh.exec_command(
+                "sh -c '{0}/resources/tools/t-rex/t-rex-stateless.py "
+                "--duration={1} -r {2} -s {3} -6 "
+                "--p{4}_src_start_ip 2001:1::1 "
+                "--p{4}_dst_start_ip 2001:2::0 "
+                "--p{4}_dst_end_ip 2001:2::F:423F "
+                "--p{5}_src_start_ip 2001:2::1 "
+                "--p{5}_dst_start_ip 2001:1::0 "
+                "--p{5}_dst_end_ip 2001:1::F:423F "
+                "{6} {7} --warmup_time={8}'".format(Constants.REMOTE_FW_DIR,
+                                                    duration, rate, framesize,
+                                                    _p0, _p1, _async, _latency,
+                                                    warmup_time),
+                timeout=int(duration)+60)
         else:
             raise NotImplementedError('Unsupported traffic type')
 
@@ -431,6 +485,7 @@ class TrafficGenerator(object):
             self._received = self._result.split(', ')[1].split('=')[1]
             self._sent = self._result.split(', ')[2].split('=')[1]
             self._loss = self._result.split(', ')[3].split('=')[1]
+
             self._latency = []
             self._latency.append(self._result.split(', ')[4].split('=')[1])
             self._latency.append(self._result.split(', ')[5].split('=')[1])