X-Git-Url: https://gerrit.fd.io/r/gitweb?p=csit.git;a=blobdiff_plain;f=resources%2Flibraries%2Fpython%2FTrafficGenerator.py;h=0f25ebe42e52d7f0eaa53110cd2f36c0969e2079;hp=8fb91910637e50048d5b6043d72556f038a6d86d;hb=b92b5be7d4bbbf523812f774bb2e539ab2081cf6;hpb=78e999f1203dc8b7c29c24b0178bb8c23edf4c52 diff --git a/resources/libraries/python/TrafficGenerator.py b/resources/libraries/python/TrafficGenerator.py index 8fb9191063..0f25ebe42e 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): @@ -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") @@ -283,7 +283,7 @@ 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 @@ -319,7 +319,7 @@ class TrafficGenerator(object): ssh = SSH() ssh.connect(node) - (ret, stdout, stderr) = ssh.exec_command( + (ret, _, _) = ssh.exec_command( "sh -c '{}/resources/tools/t-rex/" "t-rex-stateless-stop.py'".format(Constants.REMOTE_FW_DIR)) @@ -340,395 +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-1"]: - (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.0.0 " - "--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.0.0 " - "{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-100"]: - (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.0.99 " - "--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.0.99 " - "{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-1000"]: - (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.3.231 " - "--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.3.231 " - "{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-SNAT-1u-1p"]: - (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 20.0.0.0 " - "--p{4}_src_end_ip 20.0.0.0 " - "--p{4}_dst_start_ip 12.0.0.2 " - "--p{5}_src_start_ip 12.0.0.2 " - "--p{5}_src_end_ip 12.0.0.2 " - "--p{5}_dst_start_ip 200.0.0.0 " - "--p{4}_src_start_udp_port 1024 " - "--p{4}_src_end_udp_port 1024 " - "--p{4}_dst_start_udp_port 1024 " - "--p{5}_src_start_udp_port 1024 " - "--p{5}_dst_start_udp_port 1028 " - "--p{5}_dst_end_udp_port 1028 " - "{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-SNAT-1u-15p"]: - (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 20.0.0.0 " - "--p{4}_src_end_ip 20.0.0.0 " - "--p{4}_dst_start_ip 12.0.0.2 " - "--p{5}_src_start_ip 12.0.0.2 " - "--p{5}_src_end_ip 12.0.0.2 " - "--p{5}_dst_start_ip 200.0.0.0 " - "--p{4}_src_start_udp_port 1024 " - "--p{4}_src_end_udp_port 1038 " - "--p{4}_dst_start_udp_port 1024 " - "--p{5}_src_start_udp_port 1024 " - "--p{5}_dst_start_udp_port 1024 " - "--p{5}_dst_end_udp_port 1038 " - "{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-SNAT-10u-15p"]: - (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 20.0.0.0 " - "--p{4}_src_end_ip 20.0.0.9 " - "--p{4}_dst_start_ip 12.0.0.2 " - "--p{5}_src_start_ip 12.0.0.2 " - "--p{5}_src_end_ip 12.0.0.2 " - "--p{5}_dst_start_ip 200.0.0.0 " - "--p{4}_src_start_udp_port 1024 " - "--p{4}_src_end_udp_port 1038 " - "--p{4}_dst_start_udp_port 1024 " - "--p{5}_src_start_udp_port 1024 " - "--p{5}_dst_start_udp_port 1024 " - "--p{5}_dst_end_udp_port 1173 " - "{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-SNAT-100u-15p"]: - (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 20.0.0.0 " - "--p{4}_src_end_ip 20.0.0.99 " - "--p{4}_dst_start_ip 12.0.0.2 " - "--p{5}_src_start_ip 12.0.0.2 " - "--p{5}_src_end_ip 12.0.0.2 " - "--p{5}_dst_start_ip 200.0.0.0 " - "--p{4}_src_start_udp_port 1024 " - "--p{4}_src_end_udp_port 1038 " - "--p{4}_dst_start_udp_port 1024 " - "--p{5}_src_start_udp_port 1024 " - "--p{5}_dst_start_udp_port 1024 " - "--p{5}_dst_end_udp_port 2523 " - "{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-SNAT-1000u-15p"]: - (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 20.0.0.0 " - "--p{4}_src_end_ip 20.0.3.231 " - "--p{4}_dst_start_ip 12.0.0.2 " - "--p{5}_src_start_ip 12.0.0.2 " - "--p{5}_src_end_ip 12.0.0.2 " - "--p{5}_dst_start_ip 200.0.0.0 " - "--p{4}_src_start_udp_port 1024 " - "--p{4}_src_end_udp_port 1038 " - "--p{4}_dst_start_udp_port 1024 " - "--p{5}_src_start_udp_port 1024 " - "--p{5}_dst_start_udp_port 1024 " - "--p{5}_dst_end_udp_port 16023 " - "{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-SNAT-2000u-15p"]: - (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 20.0.0.0 " - "--p{4}_src_end_ip 20.0.7.207 " - "--p{4}_dst_start_ip 12.0.0.2 " - "--p{5}_src_start_ip 12.0.0.2 " - "--p{5}_src_end_ip 12.0.0.2 " - "--p{5}_dst_start_ip 200.0.0.0 " - "--p{4}_src_start_udp_port 1024 " - "--p{4}_src_end_udp_port 1038 " - "--p{4}_dst_start_udp_port 1024 " - "--p{5}_src_start_udp_port 1024 " - "--p{5}_dst_start_udp_port 1024 " - "--p{5}_dst_end_udp_port 31022 " - "{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-SNAT-4000u-15p"]: - (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 20.0.0.0 " - "--p{4}_src_end_ip 20.0.15.159 " - "--p{4}_dst_start_ip 12.0.0.2 " - "--p{5}_src_start_ip 12.0.0.2 " - "--p{5}_src_end_ip 12.0.0.2 " - "--p{5}_dst_start_ip 200.0.0.0 " - "--p{4}_src_start_udp_port 1024 " - "--p{4}_src_end_udp_port 1038 " - "--p{4}_dst_start_udp_port 1024 " - "--p{5}_src_start_udp_port 1024 " - "--p{5}_dst_start_udp_port 1024 " - "--p{5}_dst_end_udp_port 61022 " - "{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) - elif traffic_type in ["3-node-IPv4-l3fwd"]: - # add for the DPDK l3fwd routing test - # please make sure the TG port 0 connect to the DUT port 0 - (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}_dst_start_ip 2.1.1.2 " - "--p{4}_dst_end_ip 2.1.1.254 " - "--p{4}_src_start_ip 20.20.20.2 " - "--p{5}_dst_start_ip 1.1.1.2 " - "--p{5}_dst_end_ip 1.1.1.254 " - "--p{5}_src_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') + _p0, _p1 = (2, 1) if self._ifaces_reordered else (1, 2) + + profile_path = ("{0}/resources/tools/t-rex/stream_profiles/" + "{1}.py".format(Constants.REMOTE_FW_DIR, + traffic_type)) + (ret, stdout, _) = ssh.exec_command( + "sh -c " + "'{0}/resources/tools/t-rex/t-rex-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') @@ -800,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: