self._received = None
self._node = None
# T-REX interface order mapping
- self._ifaces_reordered = 0
+ self._ifaces_reordered = False
@property
def node(self):
self._node = tg_node
if tg_node['subtype'] == NodeSubTypeTG.TREX:
- trex_path = "/opt/trex-core-2.22"
+ 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')
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")
# 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:
# 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.
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')
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')
: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')
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: