aboutsummaryrefslogtreecommitdiffstats
path: root/yardstick/network_services/vnf_generic
diff options
context:
space:
mode:
authorMartin Banszel <martinx.banszel@intel.com>2017-07-19 19:35:02 +0000
committerRoss Brattain <ross.b.brattain@intel.com>2017-09-05 17:48:02 -0700
commitd3ee35dc0015e073b7138f3b02508b40fc6288b1 (patch)
treed5350f427a7ba6dcea8d36b00ae217d0074f0511 /yardstick/network_services/vnf_generic
parent79e811f096f8640189fc75862535f1f0cc4773c5 (diff)
Add fixes for heat deployed UDP_Replay and TRex
- Added a PROTOCOL_MAP to map the protocol names to codes -- the scapy requires the code, it fails if the proto is set e.g. to 'udp' - ip addresses must be str, not unicode -- explicit conversion to str added - removed unittest for setup_vnf_environment in test_tg_trex.py as it is the same function as already tested in test_sample_vnf.py - traffic_profile refactored -- code repetition decreased, unittest adapted Known issues: - there is a an attempt to stop already stopped trex. It fires an exception that stop command is issued on the disconnected client. Change-Id: I87e9029630f48b30e8f5b4f9d88ab3b25fd65f03 Signed-off-by: Martin Banszel <martinx.banszel@intel.com>
Diffstat (limited to 'yardstick/network_services/vnf_generic')
-rw-r--r--yardstick/network_services/vnf_generic/vnf/sample_vnf.py10
-rw-r--r--yardstick/network_services/vnf_generic/vnf/tg_trex.py19
-rw-r--r--yardstick/network_services/vnf_generic/vnf/udp_replay.py65
3 files changed, 69 insertions, 25 deletions
diff --git a/yardstick/network_services/vnf_generic/vnf/sample_vnf.py b/yardstick/network_services/vnf_generic/vnf/sample_vnf.py
index 9a7d39913..1b2533aad 100644
--- a/yardstick/network_services/vnf_generic/vnf/sample_vnf.py
+++ b/yardstick/network_services/vnf_generic/vnf/sample_vnf.py
@@ -680,19 +680,19 @@ class ScenarioHelper(object):
@property
def task_path(self):
- return self.scenario_cfg["task_path"]
+ return self.scenario_cfg['task_path']
@property
def nodes(self):
- return self.scenario_cfg['nodes']
+ return self.scenario_cfg.get('nodes')
@property
def all_options(self):
- return self.scenario_cfg["options"]
+ return self.scenario_cfg.get('options', {})
@property
def options(self):
- return self.all_options[self.name]
+ return self.all_options.get(self.name, {})
@property
def vnf_cfg(self):
@@ -742,7 +742,6 @@ class SampleVNF(GenericVNF):
self.q_out = Queue()
self.queue_wrapper = None
self.run_kwargs = {}
- self.scenario_cfg = None
self.tg_port_pairs = None
self.used_drivers = {}
self.vnf_port_pairs = None
@@ -937,7 +936,6 @@ class SampleVNFTrafficGen(GenericTrafficGen):
def instantiate(self, scenario_cfg, context_cfg):
self.scenario_helper.scenario_cfg = scenario_cfg
self.resource_helper.generate_cfg()
- self.setup_helper.setup_vnf_environment()
self.resource_helper.setup()
LOG.info("Starting %s server...", self.APP_NAME)
diff --git a/yardstick/network_services/vnf_generic/vnf/tg_trex.py b/yardstick/network_services/vnf_generic/vnf/tg_trex.py
index 616b331ba..1fe790f08 100644
--- a/yardstick/network_services/vnf_generic/vnf/tg_trex.py
+++ b/yardstick/network_services/vnf_generic/vnf/tg_trex.py
@@ -25,10 +25,19 @@ from yardstick.common.utils import mac_address_to_hex_list
from yardstick.network_services.utils import get_nsb_option
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.sample_vnf import DpdkVnfSetupEnvHelper
LOG = logging.getLogger(__name__)
+class TrexDpdkVnfSetupEnvHelper(DpdkVnfSetupEnvHelper):
+ APP_NAME = "t-rex-64"
+ CFG_CONFIG = ""
+ CFG_SCRIPT = ""
+ PIPELINE_COMMAND = ""
+ VNF_TYPE = "TG"
+
+
class TrexResourceHelper(ClientResourceHelper):
CONF_FILE = '/tmp/trex_cfg.yaml'
@@ -36,16 +45,14 @@ class TrexResourceHelper(ClientResourceHelper):
RESOURCE_WORD = 'trex'
RUN_DURATION = 0
- SYNC_PORT = 4500
- ASYNC_PORT = 4501
+ ASYNC_PORT = 4500
+ SYNC_PORT = 4501
def generate_cfg(self):
ext_intf = self.vnfd_helper.interfaces
vpci_list = []
port_list = []
trex_cfg = {
- 'port_limit': 0,
- 'version': '2',
'interfaces': vpci_list,
'port_info': port_list,
"port_limit": len(ext_intf),
@@ -79,6 +86,7 @@ class TrexResourceHelper(ClientResourceHelper):
DISABLE_DEPLOY = True
def setup(self):
+ super(TrexResourceHelper, self).setup()
if self.DISABLE_DEPLOY:
return
@@ -130,6 +138,9 @@ class TrexTrafficGen(SampleVNFTrafficGen):
if resource_helper_type is None:
resource_helper_type = TrexResourceHelper
+ if setup_env_helper_type is None:
+ setup_env_helper_type = TrexDpdkVnfSetupEnvHelper
+
super(TrexTrafficGen, self).__init__(name, vnfd, setup_env_helper_type,
resource_helper_type)
diff --git a/yardstick/network_services/vnf_generic/vnf/udp_replay.py b/yardstick/network_services/vnf_generic/vnf/udp_replay.py
index 6e206f2b2..a9bc204d5 100644
--- a/yardstick/network_services/vnf_generic/vnf/udp_replay.py
+++ b/yardstick/network_services/vnf_generic/vnf/udp_replay.py
@@ -16,6 +16,8 @@ from __future__ import absolute_import
import logging
from yardstick.network_services.vnf_generic.vnf.sample_vnf import SampleVNF
+from yardstick.network_services.vnf_generic.vnf.sample_vnf import DpdkVnfSetupEnvHelper
+from yardstick.network_services.vnf_generic.vnf.sample_vnf import ClientResourceHelper
LOG = logging.getLogger(__name__)
@@ -27,38 +29,65 @@ REPLAY_PIPELINE_COMMAND = (
# {tool_path} -p {ports_len_hex} -f {cfg_file} -s {script}'
+class UdpReplaySetupEnvHelper(DpdkVnfSetupEnvHelper):
+
+ APP_NAME = "UDP_Replay"
+
+
+class UdpReplayResourceHelper(ClientResourceHelper):
+ pass
+
+
class UdpReplayApproxVnf(SampleVNF):
APP_NAME = "UDP_Replay"
APP_WORD = "UDP_Replay"
- PIPELINE_COMMAND = REPLAY_PIPELINE_COMMAND
VNF_PROMPT = 'Replay>'
- CSUM_MAP = {
- 'baremetal': '',
- 'sriov': '',
- }
+ VNF_TYPE = 'UdpReplay'
+
+ HW_OFFLOADING_NFVI_TYPES = {'baremetal', 'sriov'}
+
+ PIPELINE_COMMAND = REPLAY_PIPELINE_COMMAND
+
+ def __init__(self, name, vnfd, setup_env_helper_type=None, resource_helper_type=None):
+ if resource_helper_type is None:
+ resource_helper_type = UdpReplayResourceHelper
+
+ if setup_env_helper_type is None:
+ setup_env_helper_type = UdpReplaySetupEnvHelper
+
+ super(UdpReplayApproxVnf, self).__init__(name, vnfd, setup_env_helper_type,
+ resource_helper_type)
+
+ def _start_server(self):
+ super(UdpReplayApproxVnf, self)._start_server()
+ self.resource_helper.start()
def scale(self, flavor=""):
""" scale vnfbased on flavor input """
raise NotImplementedError
- def _build_config(self):
- pass
-
def _deploy(self):
self.generate_port_pairs()
super(UdpReplayApproxVnf, self)._deploy()
def _build_pipeline_kwargs(self):
- tool_path = self.ssh_helper.provision_tool(self.APP_NAME)
- ports_mask = 2 ** len(self.all_ports) - 1
+ all_ports = [i for i, _ in enumerate(self.vnfd_helper.interfaces)]
+ number_of_ports = len(all_ports)
+
+ tool_path = self.ssh_helper.provision_tool(tool_file=self.APP_NAME)
+ ports_mask = 2 ** number_of_ports - 1
ports_mask_hex = hex(ports_mask)
- cpu_mask_hex = hex(ports_mask * 2)
- hw_csum = self.CSUM_MAP.get(self.nfvi_type, "--no-hw-csum")
- config_value = "".join(str((port, 0, port + 1)) for port in self.all_ports)
+ cpu_mask_hex = hex(2 ** (number_of_ports + 1) - 1)
+ hw_csum = ""
+ if (not self.scenario_helper.options.get('hw_csum', False) or
+ self.nfvi_context.attrs.get('nfvi_type') not in self.HW_OFFLOADING_NFVI_TYPES):
+ hw_csum = '--no-hw-csum'
+
+ config_value = "".join(str((port, 0, port + 1)) for port in all_ports)
- whitelist = " -w ".join(self.bound_pci)
+ whitelist = " -w ".join(self.setup_helper.bound_pci)
self.pipeline_kwargs = {
'ports_len_hex': ports_mask_hex,
'tool_path': tool_path,
@@ -68,13 +97,19 @@ class UdpReplayApproxVnf(SampleVNF):
'config': config_value,
}
+ def _build_config(self):
+ self._build_pipeline_kwargs()
+ return self.PIPELINE_COMMAND.format(**self.pipeline_kwargs)
+
def collect_kpi(self):
def get_sum(offset):
return sum(int(i) for i in split_stats[offset::5])
+ number_of_ports = len(self.vnfd_helper.interfaces)
+
stats = self.get_stats()
stats_words = stats.split()
- split_stats = stats_words[stats_words.index('0'):][:len(self.all_ports) * 5]
+ split_stats = stats_words[stats_words.index('0'):][:number_of_ports * 5]
result = {
"packets_in": get_sum(1),
"packets_fwd": get_sum(2),