diff options
Diffstat (limited to 'yardstick')
4 files changed, 53 insertions, 40 deletions
diff --git a/yardstick/network_services/traffic_profile/traffic_profile.py b/yardstick/network_services/traffic_profile/traffic_profile.py index 3feb92bb6..2f97945c0 100644 --- a/yardstick/network_services/traffic_profile/traffic_profile.py +++ b/yardstick/network_services/traffic_profile/traffic_profile.py @@ -19,6 +19,7 @@ import socket import logging from random import SystemRandom import six +import ipaddress from yardstick.network_services.traffic_profile.base import TrafficProfile from trex_stl_lib.trex_stl_client import STLStream @@ -44,6 +45,8 @@ SRC_PORT = 'sport' DST_PORT = 'dport' TYPE_OF_SERVICE = 'tos' +LOG = logging.getLogger(__name__) + class TrexProfile(TrafficProfile): """ This class handles Trex Traffic profile generation and execution """ @@ -66,7 +69,7 @@ class TrexProfile(TrafficProfile): return f def _ethernet_range_action_partial(self, direction, _): - def partial(min_value, max_value): + def partial(min_value, max_value, count): stl_vm_flow_var = STLVmFlowVar(name="mac_{}".format(direction), min_value=1, max_value=30, @@ -80,7 +83,15 @@ class TrexProfile(TrafficProfile): return partial def _ip_range_action_partial(self, direction, count=1): - def partial(min_value, max_value): + def partial(min_value, max_value, count): + ip1 = int(ipaddress.IPv4Address(min_value)) + ip2 = int(ipaddress.IPv4Address(max_value)) + actual_count = (ip2 - ip1) + if not actual_count: + count = 1 + elif actual_count < int(count): + count = actual_count + stl_vm_flow_var = STLVmFlowVarRepeatableRandom(name="ip4_{}".format(direction), min_value=min_value, max_value=max_value, @@ -96,7 +107,7 @@ class TrexProfile(TrafficProfile): return partial def _ip6_range_action_partial(self, direction, _): - def partial(min_value, max_value): + def partial(min_value, max_value, count): min_value, max_value = self._get_start_end_ipv6(min_value, max_value) stl_vm_flow_var = STLVmFlowVar(name="ip6_{}".format(direction), min_value=min_value, @@ -112,7 +123,7 @@ class TrexProfile(TrafficProfile): return partial def _dscp_range_action_partial(self, *_): - def partial(min_value, max_value): + def partial(min_value, max_value, count): stl_vm_flow_var = STLVmFlowVar(name="dscp", min_value=min_value, max_value=max_value, @@ -125,7 +136,13 @@ class TrexProfile(TrafficProfile): self.vm_flow_vars.append(stl_vm_wr_flow_var) def _udp_range_action_partial(self, field, count=1): - def partial(min_value, max_value): + def partial(min_value, max_value, count): + actual_count = int(max_value) - int(min_value) + if not actual_count: + count = 1 + elif int(count) > actual_count: + count = actual_count + stl_vm_flow_var = STLVmFlowVarRepeatableRandom(name="port_{}".format(field), min_value=min_value, max_value=max_value, @@ -205,13 +222,14 @@ class TrexProfile(TrafficProfile): except StopIteration: single_action(min_value) else: - range_action(min_value=min_value, max_value=max_value) + range_action(min_value=min_value, max_value=max_value, count=count) def _set_proto_addr(self, protocol, field, address, count=1): single_action, range_action, to_int = self._map_proto_actions[protocol] self._call_on_range(address, single_action(field), range_action(field, count), + count=count, to_int=to_int, ) diff --git a/yardstick/network_services/vnf_generic/vnf/cgnapt_vnf.py b/yardstick/network_services/vnf_generic/vnf/cgnapt_vnf.py index b5072c194..53f73b4d7 100644 --- a/yardstick/network_services/vnf_generic/vnf/cgnapt_vnf.py +++ b/yardstick/network_services/vnf_generic/vnf/cgnapt_vnf.py @@ -14,6 +14,7 @@ from __future__ import absolute_import import logging +import time from yardstick.network_services.vnf_generic.vnf.sample_vnf import SampleVNF, DpdkVnfSetupEnvHelper @@ -64,14 +65,12 @@ class CgnaptApproxSetupEnvHelper(DpdkVnfSetupEnvHelper): def scale(self, flavor=""): raise NotImplementedError - def _get_cgnapt_config(self, interfaces=None): - # TODO: static CGNAPT is broken, don't use it - if interfaces is None: - interfaces = self.vnfd_helper.interfaces - + def _get_cgnapt_config(self): # fixme: Get private port and gateway from port list uplink_ports = self.vnfd_helper.port_pairs.uplink_ports - return [self._get_ports_gateway(intf["name"]) for intf in uplink_ports] + return \ + [self.vnfd_helper.find_interface(name=intf)["virtual-interface"]['dst_ip'] + for intf in uplink_ports] class CgnaptApproxVnf(SampleVNF): @@ -98,23 +97,26 @@ class CgnaptApproxVnf(SampleVNF): if self.scenario_helper.options.get('napt', 'static') != 'static': return - # ip_iter = self.setup_helper._generate_ip_from_pool("152.16.40.10") - # gw_ips = self.setup_helper._get_cgnapt_config() - # if self.scenario_helper.vnf_cfg.get("lb_config", "SW") == 'HW': - # pipeline = self.setup_helper.HW_DEFAULT_CORE - # offset = 3 - # else: - # pipeline = self.setup_helper.SW_DEFAULT_CORE - 1 - # offset = 0 - # - # worker_threads = int(self.scenario_helper.vnf_cfg["worker_threads"]) - # # p <pipeline id> entry addm <prv_ipv4/6> prvport> <pub_ip> <pub_port> <phy_port> <ttl> - # # <no_of_entries> <end_prv_port> <end_pub_port> - # cmd_template = "p {0} entry addm {1} 1 {2} 1 0 32 65535 65535 65535" - # for gw, ip in zip(gw_ips, ip_iter): - # cmd = cmd_template.format(pipeline, gw, ip) - # pipeline += worker_threads - # pipeline += offset - # self.vnf_execute(cmd) - # - # time.sleep(WAIT_FOR_STATIC_NAPT) + flow = self.scenario_helper.all_options.get('flow', {}) + public_ip = flow.get('public_ip', ['152.16.40.10']).pop() + ip_iter = self.setup_helper._generate_ip_from_pool(public_ip) + gw_ips = self.setup_helper._get_cgnapt_config() + if self.scenario_helper.vnf_cfg.get("lb_config", "SW") == 'HW': + pipeline = self.setup_helper.HW_DEFAULT_CORE + offset = 3 + else: + pipeline = self.setup_helper.SW_DEFAULT_CORE - 1 + offset = 0 + + worker_threads = int(self.scenario_helper.vnf_cfg["worker_threads"]) + # p <pipeline id> entry addm <prv_ipv4/6> prvport> <pub_ip> <pub_port> <phy_port> <ttl> + # <no_of_entries> <end_prv_port> <end_pub_port> + cmd_template = "p {0} entry addm {1} 1 {2} 1 0 32 65535 65535 65535" + for gw, ip in zip(gw_ips, ip_iter): + cmd = cmd_template.format(pipeline, gw, ip) + pipeline += worker_threads + pipeline += offset + LOG.info(cmd) + self.vnf_execute(cmd) + + time.sleep(WAIT_FOR_STATIC_NAPT) diff --git a/yardstick/network_services/vnf_generic/vnf/prox_vnf.py b/yardstick/network_services/vnf_generic/vnf/prox_vnf.py index 3bfca19aa..24712dd27 100644 --- a/yardstick/network_services/vnf_generic/vnf/prox_vnf.py +++ b/yardstick/network_services/vnf_generic/vnf/prox_vnf.py @@ -90,7 +90,7 @@ class ProxApproxVnf(SampleVNF): result = { "packets_in": tx_total, - "packets_dropped": (tx_total - rx_total), + "packets_dropped": abs(rx_total - tx_total), "packets_fwd": rx_total, # we share ProxResourceHelper with TG, but we want to collect # collectd KPIs here and not TG KPIs, so use a different method name diff --git a/yardstick/network_services/vnf_generic/vnf/sample_vnf.py b/yardstick/network_services/vnf_generic/vnf/sample_vnf.py index 06f259685..b5cf03477 100644 --- a/yardstick/network_services/vnf_generic/vnf/sample_vnf.py +++ b/yardstick/network_services/vnf_generic/vnf/sample_vnf.py @@ -108,13 +108,6 @@ class SetupEnvHelper(object): self.ssh_helper = ssh_helper self.scenario_helper = scenario_helper - def _get_ports_gateway(self, name): - routing_table = self.vnfd_helper.vdu0.get('routing_table', []) - for route in routing_table: - if name == route['if']: - return route['gateway'] - return None - def build_config(self): raise NotImplementedError |