diff options
author | Abhijit Sinha <abhijit.sinha@intel.com> | 2018-10-17 09:09:12 +0000 |
---|---|---|
committer | Gerrit Code Review <gerrit@opnfv.org> | 2018-10-17 09:09:12 +0000 |
commit | d63664d5cea2b9f3e609158d983f2033e60e7ec9 (patch) | |
tree | 8a9f1d692bdc311d6be33e20df73097901814429 /yardstick/network_services | |
parent | 622a85f72bea2679ef4849abb083616bff3da0e7 (diff) | |
parent | dcf8aa87f04ffd14f0cab5b39fa1915627824cad (diff) |
Merge "Added traffic update capability to Ixload TG"
Diffstat (limited to 'yardstick/network_services')
3 files changed, 130 insertions, 12 deletions
diff --git a/yardstick/network_services/traffic_profile/http.py b/yardstick/network_services/traffic_profile/http.py index 2d00fb849..31ab17ef7 100644 --- a/yardstick/network_services/traffic_profile/http.py +++ b/yardstick/network_services/traffic_profile/http.py @@ -24,6 +24,10 @@ class TrafficProfileGenericHTTP(TrafficProfile): def __init__(self, TrafficProfile): super(TrafficProfileGenericHTTP, self).__init__(TrafficProfile) + def get_links_param(self): + return {k: v for k, v in self.params.items() if + "uplink" in k or "downlink" in k} + def execute(self, traffic_generator): ''' send run traffic for a selected traffic generator''' pass diff --git a/yardstick/network_services/traffic_profile/http_ixload.py b/yardstick/network_services/traffic_profile/http_ixload.py index 6cbdb8ab2..3ccec637d 100644 --- a/yardstick/network_services/traffic_profile/http_ixload.py +++ b/yardstick/network_services/traffic_profile/http_ixload.py @@ -106,8 +106,10 @@ class IXLOADHttpTest(object): self.chassis = None self.card = None self.ports_to_reassign = None + self.links_param = None self.test_input = jsonutils.loads(test_input) self.parse_run_test() + self.test = None @staticmethod def format_ports_for_reassignment(ports): @@ -171,6 +173,90 @@ class IXLOADHttpTest(object): LOG.error('Error: IxLoad config file not found: %s', config_file) raise + def update_network_address(self, net_traffic, address, gateway, prefix): + """Update ip address and gateway for net_traffic object + + This function update field which configure source addresses for + traffic which is described by net_traffic object. + Do not return anything + + :param net_traffic: (IxLoadObjectProxy) proxy obj to tcl net_traffic object + :param address: (str) Ipv4 range start address + :param gateway: (str) Ipv4 address of gateway + :param prefix: (int) subnet prefix + :return: + """ + try: + ethernet = net_traffic.network.getL1Plugin() + ix_net_l2_ethernet_plugin = ethernet.childrenList[0] + ix_net_ip_v4_v6_plugin = ix_net_l2_ethernet_plugin.childrenList[0] + ix_net_ip_v4_v6_range = ix_net_ip_v4_v6_plugin.rangeList[0] + + ix_net_ip_v4_v6_range.config( + prefix=prefix, + ipAddress=address, + gatewayAddress=gateway) + except Exception: + raise exceptions.InvalidRxfFile + + def update_network_mac_address(self, net_traffic, mac): + """Update MACaddress for net_traffic object + + This function update field which configure MACaddresses for + traffic which is described by net_traffic object. + If mac == "auto" then will be configured auto generated mac + Do not return anything. + + :param net_traffic: (IxLoadObjectProxy) proxy obj to tcl net_traffic object + :param mac: (str) MAC + :return: + """ + try: + ethernet = net_traffic.network.getL1Plugin() + ix_net_l2_ethernet_plugin = ethernet.childrenList[0] + ix_net_ip_v4_v6_plugin = ix_net_l2_ethernet_plugin.childrenList[0] + ix_net_ip_v4_v6_range = ix_net_ip_v4_v6_plugin.rangeList[0] + + if str(mac).lower() == "auto": + ix_net_ip_v4_v6_range.config(autoMacGeneration=True) + else: + ix_net_ip_v4_v6_range.config(autoMacGeneration=False) + mac_range = ix_net_ip_v4_v6_range.getLowerRelatedRange( + "MacRange") + mac_range.config(mac=mac) + except Exception: + raise exceptions.InvalidRxfFile + + def update_network_param(self, net_traffic, param): + """Update net_traffic by parameters specified in param""" + + self.update_network_address(net_traffic, param["address"], + param["gateway"], param["subnet_prefix"]) + + self.update_network_mac_address(net_traffic, param["mac"]) + + def update_config(self): + """Update some fields by parameters from traffic profile""" + + net_traffics = {} + # self.test.communityList is a IxLoadObjectProxy to some tcl object + # which contain all net_traffic objects in scenario. + # net_traffic item has a name in format "activity_name@item_name" + try: + for item in self.test.communityList: + net_traffics[item.name.split('@')[1]] = item + except Exception: # pylint: disable=broad-except + pass + + for name, net_traffic in net_traffics.items(): + try: + param = self.links_param[name] + except KeyError: + LOG.debug('There is no param for net_traffic %s', name) + continue + + self.update_network_param(net_traffic, param["ip"]) + def start_http_test(self): self.ix_load = IxLoad() @@ -197,16 +283,18 @@ class IXLOADHttpTest(object): # Get the first test on the testList test_name = repository.testList[0].cget("name") - test = repository.testList.getItem(test_name) + self.test = repository.testList.getItem(test_name) self.set_results_dir(test_controller, self.results_on_windows) - test.config(statsRequired=1, enableResetPorts=1, csvInterval=2, - enableForceOwnership=True) + self.test.config(statsRequired=1, enableResetPorts=1, csvInterval=2, + enableForceOwnership=True) + + self.update_config() # ---- Remap ports ---- try: - self.reassign_ports(test, repository, self.ports_to_reassign) + self.reassign_ports(self.test, repository, self.ports_to_reassign) except Exception: # pylint: disable=broad-except LOG.exception("Exception occurred during reassign_ports") @@ -246,7 +334,7 @@ class IXLOADHttpTest(object): self.stat_utils.StartCollector(self.IxL_StatCollectorCommand) - test_controller.run(test) + test_controller.run(self.test) self.ix_load.waitForTestFinish() test_controller.releaseConfigWaitFinish() @@ -258,7 +346,7 @@ class IXLOADHttpTest(object): test_controller.generateReport(detailedReport=1, format="PDF;HTML") test_controller.releaseConfigWaitFinish() - self.ix_load.delete(test) + self.ix_load.delete(self.test) self.ix_load.delete(test_controller) self.ix_load.delete(logger) self.ix_load.delete(log_engine) @@ -296,6 +384,9 @@ class IXLOADHttpTest(object): LOG.debug("Ports to be reassigned: %s", self.ports_to_reassign) + self.links_param = self.test_input["links_param"] + LOG.debug("Links param to be applied: %s", self.links_param) + def main(args): # Get the args from cmdline and parse and run the test diff --git a/yardstick/network_services/vnf_generic/vnf/tg_ixload.py b/yardstick/network_services/vnf_generic/vnf/tg_ixload.py index e0fc47dbf..d25402740 100644 --- a/yardstick/network_services/vnf_generic/vnf/tg_ixload.py +++ b/yardstick/network_services/vnf_generic/vnf/tg_ixload.py @@ -20,9 +20,11 @@ import os import shutil import subprocess +from oslo_serialization import jsonutils + from yardstick.common import utils -from yardstick.network_services.vnf_generic.vnf.sample_vnf import SampleVNFTrafficGen -from yardstick.network_services.vnf_generic.vnf.sample_vnf import ClientResourceHelper +from yardstick.network_services.vnf_generic.vnf import sample_vnf + LOG = logging.getLogger(__name__) @@ -43,7 +45,8 @@ IXLOAD_CONFIG_TEMPLATE = '''\ }, "remote_server": "%s", "result_dir": "%s", - "ixload_cfg": "C:/Results/%s" + "ixload_cfg": "C:/Results/%s", + "links_param": %s }''' IXLOAD_CMD = "{ixloadpy} {http_ixload} {args}" @@ -59,7 +62,7 @@ class ResourceDataHelper(list): } -class IxLoadResourceHelper(ClientResourceHelper): +class IxLoadResourceHelper(sample_vnf.ClientResourceHelper): RESULTS_MOUNT = "/mnt/Results" @@ -121,7 +124,7 @@ class IxLoadResourceHelper(ClientResourceHelper): LOG.debug(self.result[key]) -class IxLoadTrafficGen(SampleVNFTrafficGen): +class IxLoadTrafficGen(sample_vnf.SampleVNFTrafficGen): def __init__(self, name, vnfd, task_id, setup_env_helper_type=None, resource_helper_type=None): @@ -132,6 +135,21 @@ class IxLoadTrafficGen(SampleVNFTrafficGen): name, vnfd, task_id, setup_env_helper_type, resource_helper_type) self._result = {} + def update_gateways(self, links): + for name in links: + try: + gateway = next(intf["virtual-interface"]["dst_ip"] for intf in + self.setup_helper.vnfd_helper["vdu"][0][ + "external-interface"] if + intf["virtual-interface"]["vld_id"] == name) + + links[name]["ip"]["gateway"] = gateway + except StopIteration: + LOG.debug("Cant find gateway for link %s", name) + links[name]["ip"]["gateway"] = "0.0.0.0" + + return links + def run_traffic(self, traffic_profile): ports = [] card = None @@ -143,11 +161,16 @@ class IxLoadTrafficGen(SampleVNFTrafficGen): for csv_file in glob.iglob(self.ssh_helper.join_bin_path('*.csv')): os.unlink(csv_file) + links_param = self.update_gateways( + traffic_profile.get_links_param()) + ixia_config = self.vnfd_helper.mgmt_interface["tg-config"] ixload_config = IXLOAD_CONFIG_TEMPLATE % ( ixia_config["ixchassis"], ports, card, self.vnfd_helper.mgmt_interface["ip"], self.ssh_helper.bin_path, - os.path.basename(self.resource_helper.resource_file_name)) + os.path.basename(self.resource_helper.resource_file_name), + jsonutils.dumps(links_param) + ) http_ixload_path = os.path.join(VNF_PATH, "../../traffic_profile") |