X-Git-Url: https://gerrit.fd.io/r/gitweb?p=csit.git;a=blobdiff_plain;f=resources%2Flibraries%2Fpython%2FTrafficGenerator.py;h=168043862533953ea8af248f5a436b7ea4dfc827;hp=47008bc22aef1fcc4380ff62e444e35a3d6a7082;hb=fb81da5916284fd47d4564e70ce92b8b4c819469;hpb=b468094f7c9e2ecd32712fde46de46eeef4acc8f diff --git a/resources/libraries/python/TrafficGenerator.py b/resources/libraries/python/TrafficGenerator.py index 47008bc22a..1680438625 100644 --- a/resources/libraries/python/TrafficGenerator.py +++ b/resources/libraries/python/TrafficGenerator.py @@ -103,7 +103,7 @@ class TrafficGenerator(object): self._received = None self._node = None # T-REX interface order mapping - self._ifaces_reordered = 0 + self._ifaces_reordered = False @property def node(self): @@ -184,17 +184,17 @@ class TrafficGenerator(object): self._node = tg_node if tg_node['subtype'] == NodeSubTypeTG.TREX: - trex_path = "/opt/trex-core-2.17" + trex_path = "/opt/trex-core-2.29" ssh = SSH() ssh.connect(tg_node) (ret, stdout, stderr) = ssh.exec_command( - "sudo -E sh -c '{}/resources/tools/t-rex/" - "t-rex-installer.sh'".format(Constants.REMOTE_FW_DIR), + "sudo -E sh -c '{}/resources/tools/trex/" + "trex_installer.sh'".format(Constants.REMOTE_FW_DIR), timeout=1800) if int(ret) != 0: - logger.error('trex installation failed: {0}'.format( + logger.error('TRex installation failed: {0}'.format( stdout + stderr)) raise RuntimeError('Installation of TG failed') @@ -222,7 +222,7 @@ class TrafficGenerator(object): if1_mac, if2_mac = if2_mac, if1_mac if1_pci, if2_pci = if2_pci, if1_pci if1_adj_mac, if2_adj_mac = if2_adj_mac, if1_adj_mac - self._ifaces_reordered = 1 + self._ifaces_reordered = True if1_mac_hex = "0x"+if1_mac.replace(":", ",0x") if2_mac_hex = "0x"+if2_mac.replace(":", ",0x") @@ -273,7 +273,8 @@ class TrafficGenerator(object): # get T-rex server info (ret, _, _) = ssh.exec_command( - "sh -c '{0}/resources/tools/t-rex/t-rex-server-info.py'"\ + "sh -c 'sleep 3; " + "{0}/resources/tools/trex/trex_server_info.py'"\ .format(Constants.REMOTE_FW_DIR), timeout=120) if int(ret) == 0: @@ -282,10 +283,9 @@ class TrafficGenerator(object): # try again max_startup_retries -= 1 # after max retries T-rex is still not responding to API - # critical error occured + # critical error occurred raise RuntimeError('t-rex-64 startup failed') - @staticmethod def teardown_traffic_generator(node): """TG teardown. @@ -302,7 +302,7 @@ class TrafficGenerator(object): ssh = SSH() ssh.connect(node) (ret, stdout, stderr) = ssh.exec_command( - "sh -c 'sudo pkill t-rex'") + "sh -c 'sudo pkill t-rex && sleep 3'") if int(ret) != 0: logger.error('pkill t-rex failed: {0}'.format(stdout + stderr)) raise RuntimeError('pkill t-rex failed') @@ -319,12 +319,9 @@ class TrafficGenerator(object): ssh = SSH() ssh.connect(node) - (ret, stdout, stderr) = ssh.exec_command( - "sh -c '{}/resources/tools/t-rex/" - "t-rex-stateless-stop.py'".format(Constants.REMOTE_FW_DIR)) - logger.trace(ret) - logger.trace(stdout) - logger.trace(stderr) + (ret, _, _) = ssh.exec_command( + "sh -c '{}/resources/tools/trex/" + "trex_stateless_stop.py'".format(Constants.REMOTE_FW_DIR)) if int(ret) != 0: raise RuntimeError('T-rex stateless runtime error') @@ -343,182 +340,39 @@ class TrafficGenerator(object): :param warmup_time: Warmup time period. :type duration: int :type rate: str - :type framesize: int + :type framesize: str :type traffic_type: str :type async_call: bool :type latency: bool :type warmup_time: int :returns: Nothing - :raises: NotImplementedError if traffic type is not supported. :raises: RuntimeError in case of TG driver issue. """ ssh = SSH() ssh.connect(self._node) - _p0 = 1 - _p1 = 2 _async = "--async" if async_call else "" _latency = "--latency" if latency else "" - - if self._ifaces_reordered != 0: - _p0, _p1 = _p1, _p0 - - if traffic_type in ["3-node-xconnect", "3-node-bridge"]: - (ret, stdout, stderr) = ssh.exec_command( - "sh -c '{0}/resources/tools/t-rex/t-rex-stateless.py " - "--duration={1} -r {2} -s {3} " - "--p{4}_src_start_ip 10.10.10.1 " - "--p{4}_src_end_ip 10.10.10.254 " - "--p{4}_dst_start_ip 20.20.20.1 " - "--p{5}_src_start_ip 20.20.20.1 " - "--p{5}_src_end_ip 20.20.20.254 " - "--p{5}_dst_start_ip 10.10.10.1 " - "{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-IPv4"]: - (ret, stdout, stderr) = ssh.exec_command( - "sh -c '{0}/resources/tools/t-rex/t-rex-stateless.py " - "--duration={1} -r {2} -s {3} " - "--p{4}_src_start_ip 10.10.10.2 " - "--p{4}_src_end_ip 10.10.10.254 " - "--p{4}_dst_start_ip 20.20.20.2 " - "--p{5}_src_start_ip 20.20.20.2 " - "--p{5}_src_end_ip 20.20.20.254 " - "--p{5}_dst_start_ip 10.10.10.2 " - "{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-IPv4-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} " - "--p{4}_src_start_ip 10.0.0.1 " - "--p{4}_dst_start_ip 20.0.0.0 " - "--p{4}_dst_end_ip 20.0.39.15 " - "--p{5}_src_start_ip 20.0.0.1 " - "--p{5}_dst_start_ip 10.0.0.0 " - "--p{5}_dst_end_ip 10.0.39.15 " - "{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-IPv4-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} " - "--p{4}_src_start_ip 10.0.0.1 " - "--p{4}_dst_start_ip 20.0.0.0 " - "--p{4}_dst_end_ip 20.1.134.159 " - "--p{5}_src_start_ip 20.0.0.1 " - "--p{5}_dst_start_ip 10.0.0.0 " - "--p{5}_dst_end_ip 10.1.134.159 " - "{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-IPv4-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} " - "--p{4}_src_start_ip 10.0.0.1 " - "--p{4}_dst_start_ip 20.0.0.0 " - "--p{4}_dst_end_ip 20.15.66.63 " - "--p{5}_src_start_ip 20.0.0.1 " - "--p{5}_dst_start_ip 10.0.0.0 " - "--p{5}_dst_end_ip 10.15.66.63 " - "{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"]: - (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::2 " - "--p{4}_src_end_ip 2001:1::FE " - "--p{4}_dst_start_ip 2001:2::2 " - "--p{5}_src_start_ip 2001:2::2 " - "--p{5}_src_end_ip 2001:2::FE " - "--p{5}_dst_start_ip 2001:1::2 " - "{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-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) - elif traffic_type in ["2-node-bridge"]: - (ret, stdout, stderr) = ssh.exec_command( - "sh -c '{0}/resources/tools/t-rex/t-rex-stateless.py " - "--duration={1} -r {2} -s {3} " - "--p{4}_src_start_ip 10.10.10.2 " - "--p{4}_src_end_ip 10.10.10.254 " - "--p{4}_dst_start_ip 20.20.20.2 " - "--p{5}_src_start_ip 20.20.20.2 " - "--p{5}_src_end_ip 20.20.20.254 " - "--p{5}_dst_start_ip 10.10.10.2 " - "{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') - - logger.trace(ret) - logger.trace(stdout) - logger.trace(stderr) + _p0, _p1 = (2, 1) if self._ifaces_reordered else (1, 2) + + profile_path = ("{0}/resources/traffic_profiles/trex/" + "{1}.py".format(Constants.REMOTE_FW_DIR, + traffic_type)) + (ret, stdout, _) = ssh.exec_command( + "sh -c " + "'{0}/resources/tools/trex/trex_stateless_profile.py " + "--profile {1} " + "--duration {2} " + "--frame_size {3} " + "--rate {4} " + "--warmup_time {5} " + "--port_0 {6} " + "--port_1 {7} " + "{8} " # --async + "{9}'". # --latency + format(Constants.REMOTE_FW_DIR, profile_path, duration, framesize, + rate, warmup_time, _p0 - 1, _p1 - 1, _async, _latency), + timeout=int(duration) + 60) if int(ret) != 0: raise RuntimeError('T-rex stateless runtime error') @@ -590,7 +444,7 @@ class TrafficGenerator(object): if node['subtype'] is None: raise RuntimeError('TG subtype not defined') elif node['subtype'] == NodeSubTypeTG.TREX: - self.trex_stl_start_remote_exec(duration, rate, framesize, + self.trex_stl_start_remote_exec(int(duration), rate, framesize, traffic_type, async_call, latency, warmup_time=warmup_time) else: