+ if1_pci = Topology().get_interface_pci_addr(tg_node, tg_if1)
+ if2_pci = Topology().get_interface_pci_addr(tg_node, tg_if2)
+ if1_addr = Topology().get_interface_mac(tg_node, tg_if1)
+ if2_addr = Topology().get_interface_mac(tg_node, tg_if2)
+
+ if test_type == 'L2':
+ if1_adj_addr = if2_addr
+ if2_adj_addr = if1_addr
+ elif test_type == 'L3':
+ if1_adj_addr = Topology().get_interface_mac(tg_if1_adj_node,
+ tg_if1_adj_if)
+ if2_adj_addr = Topology().get_interface_mac(tg_if2_adj_node,
+ tg_if2_adj_if)
+ elif test_type == 'L7':
+ if1_addr = Topology().get_interface_ip4(tg_node, tg_if1)
+ if2_addr = Topology().get_interface_ip4(tg_node, tg_if2)
+ if1_adj_addr = Topology().get_interface_ip4(tg_if1_adj_node,
+ tg_if1_adj_if)
+ if2_adj_addr = Topology().get_interface_ip4(tg_if2_adj_node,
+ tg_if2_adj_if)
+ else:
+ raise ValueError("Unknown Test Type")
+
+ # in case of switched environment we can override MAC addresses
+ if tg_if1_dst_mac is not None and tg_if2_dst_mac is not None:
+ if1_adj_addr = tg_if1_dst_mac
+ if2_adj_addr = tg_if2_dst_mac
+
+ if min(if1_pci, if2_pci) != if1_pci:
+ if1_pci, if2_pci = if2_pci, if1_pci
+ if1_addr, if2_addr = if2_addr, if1_addr
+ if1_adj_addr, if2_adj_addr = if2_adj_addr, if1_adj_addr
+ self._ifaces_reordered = True
+
+ if test_type == 'L2' or test_type == 'L3':
+ (ret, _, _) = ssh.exec_command(
+ "sudo sh -c 'cat << EOF > /etc/trex_cfg.yaml\n"
+ "- port_limit: 2\n"
+ " version: 2\n"
+ " interfaces: [\"{0}\",\"{1}\"]\n"
+ " port_info:\n"
+ " - dest_mac: [{2}]\n"
+ " src_mac: [{3}]\n"
+ " - dest_mac: [{4}]\n"
+ " src_mac: [{5}]\n"
+ "EOF'"\
+ .format(if1_pci, if2_pci,
+ "0x"+if1_adj_addr.replace(":", ",0x"),
+ "0x"+if1_addr.replace(":", ",0x"),
+ "0x"+if2_adj_addr.replace(":", ",0x"),
+ "0x"+if2_addr.replace(":", ",0x")))
+ elif test_type == 'L7':
+ (ret, _, _) = ssh.exec_command(
+ "sudo sh -c 'cat << EOF > /etc/trex_cfg.yaml\n"
+ "- port_limit: 2\n"
+ " version: 2\n"
+ " interfaces: [\"{0}\",\"{1}\"]\n"
+ " port_info:\n"
+ " - ip: [{2}]\n"
+ " default_gw: [{3}]\n"
+ " - ip: [{4}]\n"
+ " default_gw: [{5}]\n"
+ "EOF'"\
+ .format(if1_pci, if2_pci,
+ if1_addr, if1_adj_addr,
+ if2_addr, if2_adj_addr))
+ else:
+ raise ValueError("Unknown Test Type")
+ if int(ret) != 0:
+ raise RuntimeError('TRex config generation error')
+
+ for _ in range(0, 3):
+ # kill TRex only if it is already running
+ ssh.exec_command(
+ "sh -c 'pgrep t-rex && sudo pkill t-rex && sleep 3'")
+
+ # configure TRex
+ (ret, _, _) = ssh.exec_command(
+ "sh -c 'cd {0}/scripts/ && sudo ./trex-cfg'"\
+ .format(Constants.TREX_INSTALL_DIR))
+ if int(ret) != 0:
+ raise RuntimeError('trex-cfg failed')
+
+ # start TRex
+ if test_type == 'L2' or test_type == 'L3':
+ (ret, _, _) = ssh.exec_command(
+ "sh -c 'cd {0}/scripts/ && "
+ "sudo nohup ./t-rex-64 -i -c 7 --iom 0 > /tmp/trex.log "
+ "2>&1 &' > /dev/null"\
+ .format(Constants.TREX_INSTALL_DIR))
+ elif test_type == 'L7':
+ (ret, _, _) = ssh.exec_command(
+ "sh -c 'cd {0}/scripts/ && "
+ "sudo nohup ./t-rex-64 --astf -i -c 7 --iom 0 > "
+ "/tmp/trex.log 2>&1 &' > /dev/null"\
+ .format(Constants.TREX_INSTALL_DIR))
+ else:
+ raise ValueError("Unknown Test Type")
+ if int(ret) != 0:
+ ssh.exec_command("sh -c 'cat /tmp/trex.log'")
+ raise RuntimeError('t-rex-64 startup failed')
+
+ # get TRex server info
+ (ret, _, _) = ssh.exec_command(
+ "sh -c 'sleep 3; "
+ "{0}/resources/tools/trex/trex_server_info.py'"\
+ .format(Constants.REMOTE_FW_DIR),
+ timeout=120)
+ if int(ret) == 0:
+ # If we get info TRex is running
+ return
+ # after max retries TRex is still not responding to API
+ # critical error occurred
+ raise RuntimeError('t-rex-64 startup failed')