diff options
author | Martin Klozik <martinx.klozik@intel.com> | 2017-01-17 11:37:49 +0000 |
---|---|---|
committer | Gerrit Code Review <gerrit@opnfv.org> | 2017-01-17 11:37:49 +0000 |
commit | 8b75ee19407e542fa4b4153e3b6b23f678507575 (patch) | |
tree | be0d19f3b7e41a5e65833cdca6e93ffac38f0392 /tools | |
parent | 7ed7b9683a2cc4c81fcabdffc945bf352263437f (diff) | |
parent | 4481df385ac03ece015ccb429201f96189dc5ae2 (diff) |
Merge "traffic: Configurable traffic details"
Diffstat (limited to 'tools')
-rwxr-xr-x | tools/pkt_gen/dummy/dummy.py | 11 | ||||
-rwxr-xr-x | tools/pkt_gen/ixia/ixia.py | 5 | ||||
-rwxr-xr-x | tools/pkt_gen/ixnet/ixnet.py | 8 | ||||
-rw-r--r-- | tools/pkt_gen/moongen/moongen.py | 18 | ||||
-rwxr-xr-x | tools/pkt_gen/trafficgen/__init__.py | 1 | ||||
-rwxr-xr-x | tools/pkt_gen/trafficgen/trafficgen.py | 14 | ||||
-rw-r--r-- | tools/pkt_gen/trafficgen/trafficgenhelper.py | 94 | ||||
-rwxr-xr-x | tools/pkt_gen/xena/xena.py | 21 |
8 files changed, 27 insertions, 145 deletions
diff --git a/tools/pkt_gen/dummy/dummy.py b/tools/pkt_gen/dummy/dummy.py index 528b5902..7a4daab6 100755 --- a/tools/pkt_gen/dummy/dummy.py +++ b/tools/pkt_gen/dummy/dummy.py @@ -26,6 +26,7 @@ own. import json from conf import settings +from conf import merge_spec from tools.pkt_gen import trafficgen from core.results.results_constants import ResultsConstants @@ -116,7 +117,7 @@ class Dummy(trafficgen.ITrafficGenerator): result = {} if traffic: - traffic_ = trafficgen.merge_spec(traffic_, traffic) + traffic_ = merge_spec(traffic_, traffic) results = get_user_traffic( 'burst', @@ -135,7 +136,7 @@ class Dummy(trafficgen.ITrafficGenerator): result[ResultsConstants.PAYLOAD_ERR] = results[1] result[ResultsConstants.SEQ_ERR] = results[2] - return trafficgen.BurstResult(*results) + return results def send_cont_traffic(self, traffic=None, duration=30): """ @@ -145,7 +146,7 @@ class Dummy(trafficgen.ITrafficGenerator): result = {} if traffic: - traffic_ = trafficgen.merge_spec(traffic_, traffic) + traffic_ = merge_spec(traffic_, traffic) results = get_user_traffic( 'continuous', @@ -182,7 +183,7 @@ class Dummy(trafficgen.ITrafficGenerator): result = {} if traffic: - traffic_ = trafficgen.merge_spec(traffic_, traffic) + traffic_ = merge_spec(traffic_, traffic) results = get_user_traffic( 'throughput', @@ -219,7 +220,7 @@ class Dummy(trafficgen.ITrafficGenerator): result = {} if traffic: - traffic_ = trafficgen.merge_spec(traffic_, traffic) + traffic_ = merge_spec(traffic_, traffic) results = get_user_traffic( 'back2back', diff --git a/tools/pkt_gen/ixia/ixia.py b/tools/pkt_gen/ixia/ixia.py index 5c5fb3df..ed947e70 100755 --- a/tools/pkt_gen/ixia/ixia.py +++ b/tools/pkt_gen/ixia/ixia.py @@ -42,6 +42,7 @@ from collections import OrderedDict from tools import systeminfo from tools.pkt_gen import trafficgen from conf import settings +from conf import merge_spec from core.results.results_constants import ResultsConstants _ROOT_DIR = os.path.dirname(os.path.realpath(__file__)) @@ -203,7 +204,7 @@ class Ixia(trafficgen.ITrafficGenerator): params['traffic'] = self.traffic_defaults.copy() if traffic: - params['traffic'] = trafficgen.merge_spec( + params['traffic'] = merge_spec( params['traffic'], traffic) for cmd in _build_set_cmds(params): @@ -268,7 +269,7 @@ class Ixia(trafficgen.ITrafficGenerator): params['traffic'] = self.traffic_defaults.copy() if traffic: - params['traffic'] = trafficgen.merge_spec( + params['traffic'] = merge_spec( params['traffic'], traffic) for cmd in _build_set_cmds(params): diff --git a/tools/pkt_gen/ixnet/ixnet.py b/tools/pkt_gen/ixnet/ixnet.py index 6262a10a..f84ab668 100755 --- a/tools/pkt_gen/ixnet/ixnet.py +++ b/tools/pkt_gen/ixnet/ixnet.py @@ -88,6 +88,7 @@ import csv from collections import OrderedDict from tools.pkt_gen import trafficgen from conf import settings +from conf import merge_spec from core.results.results_constants import ResultsConstants _ROOT_DIR = os.path.dirname(os.path.realpath(__file__)) @@ -155,6 +156,7 @@ class IxNet(trafficgen.ITrafficGenerator): def __init__(self): """Initialize IXNET members """ + super().__init__() self._script = os.path.join(settings.getValue('TRAFFICGEN_IXIA_3RD_PARTY'), settings.getValue('TRAFFICGEN_IXNET_TCL_SCRIPT')) self._tclsh = tkinter.Tcl() @@ -227,7 +229,7 @@ class IxNet(trafficgen.ITrafficGenerator): self._params['traffic'] = self.traffic_defaults.copy() if traffic: - self._params['traffic'] = trafficgen.merge_spec( + self._params['traffic'] = merge_spec( self._params['traffic'], traffic) self._cfg['bidir'] = self._bidir @@ -281,7 +283,7 @@ class IxNet(trafficgen.ITrafficGenerator): self._params['traffic'] = self.traffic_defaults.copy() if traffic: - self._params['traffic'] = trafficgen.merge_spec( + self._params['traffic'] = merge_spec( self._params['traffic'], traffic) self._cfg['bidir'] = self._bidir @@ -418,7 +420,7 @@ class IxNet(trafficgen.ITrafficGenerator): self._params['traffic'] = self.traffic_defaults.copy() if traffic: - self._params['traffic'] = trafficgen.merge_spec( + self._params['traffic'] = merge_spec( self._params['traffic'], traffic) self._cfg['bidir'] = self._bidir diff --git a/tools/pkt_gen/moongen/moongen.py b/tools/pkt_gen/moongen/moongen.py index 7fd67661..9d604db2 100644 --- a/tools/pkt_gen/moongen/moongen.py +++ b/tools/pkt_gen/moongen/moongen.py @@ -28,19 +28,17 @@ import subprocess # VSPerf imports from conf import settings +from conf import merge_spec from core.results.results_constants import ResultsConstants -from tools.pkt_gen.trafficgen.trafficgenhelper import ( - TRAFFIC_DEFAULTS, - merge_spec) from tools.pkt_gen.trafficgen.trafficgen import ITrafficGenerator class Moongen(ITrafficGenerator): """Moongen Traffic generator wrapper.""" - _traffic_defaults = TRAFFIC_DEFAULTS.copy() _logger = logging.getLogger(__name__) def __init__(self): """Moongen class constructor.""" + super().__init__() self._logger.info("In moongen __init__ method") self._params = {} self._moongen_host_ip_addr = ( @@ -57,18 +55,6 @@ class Moongen(ITrafficGenerator): 'MOONGEN: Invalid line speed in configuration ' + \ 'file (today 10Gbps supported)') - @property - def traffic_defaults(self): - """Default traffic values. - - These can be expected to be constant across traffic generators, - so no setter is provided. Changes to the structure or contents - will likely break traffic generator implementations or tests - respectively. - """ - self._logger.info("In Moongen traffic_defaults method") - return self._traffic_defaults - def create_moongen_cfg_file(self, traffic, duration=60, acceptable_loss_pct=1, one_shot=0): """Create the Moongen configuration file from VSPERF's traffic profile diff --git a/tools/pkt_gen/trafficgen/__init__.py b/tools/pkt_gen/trafficgen/__init__.py index 2a3b9bd3..34d8ebe1 100755 --- a/tools/pkt_gen/trafficgen/__init__.py +++ b/tools/pkt_gen/trafficgen/__init__.py @@ -16,4 +16,3 @@ """ from tools.pkt_gen.trafficgen.trafficgen import * -from tools.pkt_gen.trafficgen.trafficgenhelper import * diff --git a/tools/pkt_gen/trafficgen/trafficgen.py b/tools/pkt_gen/trafficgen/trafficgen.py index fb40cd92..262df71d 100755 --- a/tools/pkt_gen/trafficgen/trafficgen.py +++ b/tools/pkt_gen/trafficgen/trafficgen.py @@ -15,16 +15,18 @@ This is an abstract class for traffic generators. """ +import copy +from conf import settings -#TODO update Back2Back method description when Result implementation will -#be ready. - -from tools.pkt_gen.trafficgen.trafficgenhelper import TRAFFIC_DEFAULTS +CMD_PREFIX = 'gencmd : ' class ITrafficGenerator(object): """Model of a traffic generator device. """ - _traffic_defaults = TRAFFIC_DEFAULTS.copy() + def __init__(self): + """Initialization of interface + """ + self._default_traffic = copy.deepcopy(settings.getValue('TRAFFIC')) @property def traffic_defaults(self): @@ -35,7 +37,7 @@ class ITrafficGenerator(object): will likely break traffic generator implementations or tests respectively. """ - return self._traffic_defaults + return self._default_traffic def __enter__(self): """Connect to the traffic generator. diff --git a/tools/pkt_gen/trafficgen/trafficgenhelper.py b/tools/pkt_gen/trafficgen/trafficgenhelper.py deleted file mode 100644 index 47f8b262..00000000 --- a/tools/pkt_gen/trafficgen/trafficgenhelper.py +++ /dev/null @@ -1,94 +0,0 @@ -# Copyright 2015-2016 Intel Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -"""Helper methods collection. - -Collection of helper methods used by traffic generators -implementation. -""" - -from collections import namedtuple - -CMD_PREFIX = 'gencmd : ' -TRAFFIC_DEFAULTS = { - 'traffic_type' : 'rfc2544_throughput', - 'frame_rate' : 100, - 'bidir' : 'False', # will be passed as string in title format to tgen - 'multistream' : 0, - 'stream_type' : 'L4', - 'pre_installed_flows' : 'No', # used by vswitch implementation - 'flow_type' : 'port', # used by vswitch implementation - - 'l2': { - 'framesize': 64, - 'srcmac': '00:00:00:00:00:00', - 'dstmac': '00:00:00:00:00:00', - }, - 'l3': { - 'proto': 'udp', - 'srcip': '1.1.1.1', - 'dstip': '90.90.90.90', - }, - 'l4': { - 'srcport': 3000, - 'dstport': 3001, - }, - 'vlan': { - 'enabled': False, - 'id': 0, - 'priority': 0, - 'cfi': 0, - }, -} - -#TODO remove namedtuples and implement results through IResult interface found -#in core/results - -BurstResult = namedtuple( - 'BurstResult', - 'frames_tx frames_rx bytes_tx bytes_rx payload_err seq_err') -Back2BackResult = namedtuple( - 'Back2BackResult', - 'rx_fps rx_mbps tx_percent rx_percent tx_count b2b_frames ' - 'frame_loss_frames frame_loss_percent') - - -def merge_spec(orig, new): - """Merges ``new`` dict with ``orig`` dict, and return orig. - - This takes into account nested dictionaries. Example: - - >>> old = {'foo': 1, 'bar': {'foo': 2, 'bar': 3}} - >>> new = {'foo': 6, 'bar': {'foo': 7}} - >>> merge_spec(old, new) - {'foo': 6, 'bar': {'foo': 7, 'bar': 3}} - - You'll notice that ``bar.bar`` is not removed. This is the desired result. - """ - for key in orig: - if key not in new: - continue - - # Not allowing derived dictionary types for now - # pylint: disable=unidiomatic-typecheck - if type(orig[key]) == dict: - orig[key] = merge_spec(orig[key], new[key]) - else: - orig[key] = new[key] - - for key in new: - if key not in orig: - orig[key] = new[key] - - return orig - diff --git a/tools/pkt_gen/xena/xena.py b/tools/pkt_gen/xena/xena.py index 798bb832..20577e8d 100755 --- a/tools/pkt_gen/xena/xena.py +++ b/tools/pkt_gen/xena/xena.py @@ -36,10 +36,8 @@ import scapy.layers.inet as inet # VSPerf imports from conf import settings +from conf import merge_spec from core.results.results_constants import ResultsConstants -from tools.pkt_gen.trafficgen.trafficgenhelper import ( - TRAFFIC_DEFAULTS, - merge_spec) from tools.pkt_gen.trafficgen.trafficgen import ITrafficGenerator # Xena module imports @@ -56,10 +54,10 @@ class Xena(ITrafficGenerator): """ Xena Traffic generator wrapper class """ - _traffic_defaults = TRAFFIC_DEFAULTS.copy() _logger = logging.getLogger(__name__) def __init__(self): + super().__init__() self.mono_pipe = None self.xmanager = None self._params = {} @@ -71,7 +69,7 @@ class Xena(ITrafficGenerator): user_home = os.path.expanduser('~') self._log_path = '{}/Xena/Xena2544-2G/Logs/xena2544.log'.format( - user_home) + user_home) # make the folder and log file if they doesn't exist if not os.path.exists(self._log_path): @@ -80,18 +78,6 @@ class Xena(ITrafficGenerator): # empty the file contents open(self._log_path, 'w').close() - - @property - def traffic_defaults(self): - """Default traffic values. - - These can be expected to be constant across traffic generators, - so no setter is provided. Changes to the structure or contents - will likely break traffic generator implementations or tests - respectively. - """ - return self._traffic_defaults - @staticmethod def _create_throughput_result(root): """ @@ -703,4 +689,3 @@ class Xena(ITrafficGenerator): if __name__ == "__main__": pass - |