- :returns: Nothing
- :raises RuntimeError: In case of TG driver issue.
- """
- ssh = SSH()
- ssh.connect(self._node)
-
- _async = "--async" if async_call else ""
- _latency = "--latency" if latency else ""
- _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=float(duration) + 60)
-
- if int(ret) != 0:
- raise RuntimeError('TRex 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 trex_stl_start_unidirection(
- self, duration, rate, framesize, traffic_type, async_call=False,
- latency=False, warmup_time=5.0, tx_port=0, rx_port=1):
- """Execute script on remote node over ssh to start unidirection traffic.
- The purpose of this function is to support performance test that need to
- measure unidirectional traffic, e.g. Load balancer maglev mode and l3dsr
- mode test.
-
- :param duration: Time expresed in seconds for how long to send traffic.
- :param rate: Traffic rate expressed with units (pps, %)
- :param framesize: L2 frame size to send (without padding and IPG).
- :param traffic_type: Module name as a traffic type identifier.
- See resources/traffic_profiles/trex for implemented modules.
- :param latency: With latency measurement.
- :param async_call: If enabled then don't wait for all incomming trafic.
- :param warmup_time: Warmup time period.
- :param tx_port: Traffic generator transmit port.
- :param rx_port: Traffic generator receive port.
- :type duration: float
- :type rate: str
- :type framesize: str
- :type traffic_type: str
- :type latency: bool
- :type async_call: bool
- :type warmup_time: float
- :type tx_port: integer
- :type rx_port: integer