aboutsummaryrefslogtreecommitdiffstats
path: root/yardstick
diff options
context:
space:
mode:
Diffstat (limited to 'yardstick')
-rw-r--r--yardstick/network_services/traffic_profile/traffic_profile.py30
-rw-r--r--yardstick/network_services/vnf_generic/vnf/cgnapt_vnf.py54
-rw-r--r--yardstick/network_services/vnf_generic/vnf/prox_vnf.py2
-rw-r--r--yardstick/network_services/vnf_generic/vnf/sample_vnf.py7
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