X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=yardstick%2Fnetwork_services%2Fvnf_generic%2Fvnf%2Ftg_trex.py;h=4250cb7a62ec13e3ad50e26a5c7edb236f5b3787;hb=7085a190cefad8c72774925dab690683d76695da;hp=fe435f63e56c1418b252ad7cf9dde3bf8e50fb92;hpb=430c1a1da2510ed0b985fdb3cd1a1104b82e64bb;p=yardstick.git diff --git a/yardstick/network_services/vnf_generic/vnf/tg_trex.py b/yardstick/network_services/vnf_generic/vnf/tg_trex.py index fe435f63e..4250cb7a6 100644 --- a/yardstick/network_services/vnf_generic/vnf/tg_trex.py +++ b/yardstick/network_services/vnf_generic/vnf/tg_trex.py @@ -14,8 +14,6 @@ """ Trex acts as traffic generation and vnf definitions based on IETS Spec """ from __future__ import absolute_import -from __future__ import print_function - import logging import os @@ -48,35 +46,60 @@ class TrexResourceHelper(ClientResourceHelper): ASYNC_PORT = 4500 SYNC_PORT = 4501 + def __init__(self, setup_helper): + super(TrexResourceHelper, self).__init__(setup_helper) + self.port_map = {} + self.dpdk_to_trex_port_map = {} + def generate_cfg(self): - ext_intf = self.vnfd_helper.interfaces + port_names = self.vnfd_helper.port_pairs.all_ports vpci_list = [] port_list = [] - trex_cfg = { - 'interfaces': vpci_list, - 'port_info': port_list, - "port_limit": len(ext_intf), - "version": '2', - } - cfg_file = [trex_cfg] + self.port_map = {} + self.dpdk_to_trex_port_map = {} - for interface in ext_intf: + sorted_ports = sorted((self.vnfd_helper.port_num(port_name), port_name) for port_name in + port_names) + for index, (port_num, port_name) in enumerate(sorted_ports): + interface = self.vnfd_helper.find_interface(name=port_name) virtual_interface = interface['virtual-interface'] - vpci_list.append(virtual_interface["vpci"]) dst_mac = virtual_interface["dst_mac"] + # this is to check for unused ports, all ports in the topology + # will always have dst_mac if not dst_mac: continue - + # TRex ports are in logical order roughly based on DPDK port number sorting + vpci_list.append(virtual_interface["vpci"]) local_mac = virtual_interface["local_mac"] port_list.append({ "src_mac": mac_address_to_hex_list(local_mac), "dest_mac": mac_address_to_hex_list(dst_mac), }) + self.port_map[port_name] = index + self.dpdk_to_trex_port_map[port_num] = index + trex_cfg = { + 'interfaces': vpci_list, + 'port_info': port_list, + "port_limit": len(port_names), + "version": '2', + } + cfg_file = [trex_cfg] cfg_str = yaml.safe_dump(cfg_file, default_flow_style=False, explicit_start=True) self.ssh_helper.upload_config_file(os.path.basename(self.CONF_FILE), cfg_str) + def _build_ports(self): + super(TrexResourceHelper, self)._build_ports() + # override with TRex logic port number + self.uplink_ports = [self.dpdk_to_trex_port_map[p] for p in self.uplink_ports] + self.downlink_ports = [self.dpdk_to_trex_port_map[p] for p in self.downlink_ports] + self.all_ports = [self.dpdk_to_trex_port_map[p] for p in self.all_ports] + + def port_num(self, intf): + # return logical TRex port + return self.port_map[intf] + def check_status(self): status, _, _ = self.ssh_helper.execute("sudo lsof -i:%s" % self.SYNC_PORT) return status @@ -166,8 +189,8 @@ class TrexTrafficGen(SampleVNFTrafficGen): def scale(self, flavor=""): pass - def listen_traffic(self, traffic_profile): - pass - def terminate(self): self.resource_helper.terminate() + + def wait_for_instantiate(self): + return self._wait_for_process()