super(TGDropRateSearchImpl, self).__init__()
def measure_loss(self, rate, frame_size, loss_acceptance,
- loss_acceptance_type, traffic_type):
+ loss_acceptance_type, traffic_type, skip_warmup=False):
"""Runs the traffic and evaluate the measured results.
:param rate: Offered traffic load.
:param loss_acceptance: Permitted drop ratio or frames count.
:param loss_acceptance_type: Type of permitted loss.
:param traffic_type: Traffic profile ([2,3]-node-L[2,3], ...).
+ :param skip_warmup: Start TRex without warmup traffic if true.
:type rate: int
:type frame_size: str
:type loss_acceptance: float
:type loss_acceptance_type: LossAcceptanceType
:type traffic_type: str
+ :type skip_warmup: bool
:returns: Drop threshold exceeded? (True/False)
:rtype: bool
:raises: NotImplementedError if TG is not supported.
raise RuntimeError('TG subtype not defined')
elif tg_instance.node['subtype'] == NodeSubTypeTG.TREX:
unit_rate = str(rate) + self.get_rate_type_str()
- tg_instance.trex_stl_start_remote_exec(self.get_duration(),
- unit_rate, frame_size,
- traffic_type)
+ if skip_warmup:
+ tg_instance.trex_stl_start_remote_exec(self.get_duration(),
+ unit_rate, frame_size,
+ traffic_type,
+ warmup_time=0)
+ else:
+ tg_instance.trex_stl_start_remote_exec(self.get_duration(),
+ unit_rate, frame_size,
+ traffic_type)
loss = tg_instance.get_loss()
sent = tg_instance.get_sent()
if self.loss_acceptance_type_is_percentage():
ssh.connect(tg_node)
(ret, _, _) = ssh.exec_command(
- "sudo -E sh -c '{}/resources/tools/trex/"
- "trex_installer.sh'".format(Constants.REMOTE_FW_DIR),
+ "sudo -E sh -c '{0}/resources/tools/trex/"
+ "trex_installer.sh {1}'".format(Constants.REMOTE_FW_DIR,
+ Constants.TREX_INSTALL_VERSION),
timeout=1800)
if int(ret) != 0:
raise RuntimeError('TRex installation failed.')
# critical error occurred
raise RuntimeError('t-rex-64 startup failed')
+ @staticmethod
+ def is_trex_running(node):
+ """Check if TRex is running using pidof.
+
+ :param node: Traffic generator node.
+ :type node: dict
+ :returns: True if TRex is running otherwise False.
+ :rtype: bool
+ :raises: RuntimeError if node type is not a TG.
+ """
+ if node['type'] != NodeType.TG:
+ raise RuntimeError('Node type is not a TG')
+
+ ssh = SSH()
+ ssh.connect(node)
+ ret, _, _ = ssh.exec_command_sudo("pidof t-rex")
+ return bool(int(ret) == 0)
+
@staticmethod
def teardown_traffic_generator(node):
"""TG teardown.