+ 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')
+
+ if int(ret) != 0:
+ raise RuntimeError('T-rex stateless runtime error')
+ elif async_call:
+ #no result
+ self._received = None
+ self._sent = None
+ self._loss = None
+ self._latency = None
+ else:
+ # last line from console output
+ line = stdout.splitlines()[-1]
+
+ self._result = line
+ logger.info('TrafficGen result: {0}'.format(self._result))
+
+ 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])
+
+ def stop_traffic_on_tg(self):
+ """Stop all traffic on TG.
+
+ :returns: Nothing
+ :raises: RuntimeError if TG is not set.
+ """
+ if self._node is None:
+ raise RuntimeError("TG is not set")
+ if self._node['subtype'] == NodeSubTypeTG.TREX:
+ self.trex_stl_stop_remote_exec(self._node)
+
+ def send_traffic_on_tg(self, duration, rate, framesize,
+ traffic_type, warmup_time=5, async_call=False,
+ latency=True):
+ """Send traffic from all configured interfaces on TG.
+
+ :param duration: Duration of test traffic generation in seconds.
+ :param rate: Offered load per interface (e.g. 1%, 3gbps, 4mpps, ...).
+ :param framesize: Frame size (L2) in Bytes.
+ :param traffic_type: Traffic profile.
+ :param warmup_time: Warmup phase in seconds.
+ :param async_call: Async mode.
+ :param latency: With latency measurement.
+ :type duration: str
+ :type rate: str
+ :type framesize: str
+ :type traffic_type: str
+ :type warmup_time: int
+ :type async_call: bool
+ :type latency: bool
+ :returns: TG output.
+ :rtype: str
+ :raises: RuntimeError if TG is not set.
+ :raises: RuntimeError if node is not TG or subtype is not specified.
+ :raises: NotImplementedError if TG is not supported.
+ """
+
+ node = self._node
+ if node is None:
+ raise RuntimeError("TG is not set")
+
+ if node['type'] != NodeType.TG:
+ raise RuntimeError('Node type is not a TG')
+
+ 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,
+ traffic_type, async_call, latency,
+ warmup_time=warmup_time)
+ else:
+ raise NotImplementedError("TG subtype not supported")