summaryrefslogtreecommitdiffstats
path: root/tools/pkt_gen
diff options
context:
space:
mode:
authorMartin Klozik <martinx.klozik@intel.com>2017-01-17 11:37:49 +0000
committerGerrit Code Review <gerrit@opnfv.org>2017-01-17 11:37:49 +0000
commit8b75ee19407e542fa4b4153e3b6b23f678507575 (patch)
treebe0d19f3b7e41a5e65833cdca6e93ffac38f0392 /tools/pkt_gen
parent7ed7b9683a2cc4c81fcabdffc945bf352263437f (diff)
parent4481df385ac03ece015ccb429201f96189dc5ae2 (diff)
Merge "traffic: Configurable traffic details"
Diffstat (limited to 'tools/pkt_gen')
-rwxr-xr-xtools/pkt_gen/dummy/dummy.py11
-rwxr-xr-xtools/pkt_gen/ixia/ixia.py5
-rwxr-xr-xtools/pkt_gen/ixnet/ixnet.py8
-rw-r--r--tools/pkt_gen/moongen/moongen.py18
-rwxr-xr-xtools/pkt_gen/trafficgen/__init__.py1
-rwxr-xr-xtools/pkt_gen/trafficgen/trafficgen.py14
-rw-r--r--tools/pkt_gen/trafficgen/trafficgenhelper.py94
-rwxr-xr-xtools/pkt_gen/xena/xena.py21
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
-