Merge "Prohibit the importation of a list of libraries"
[yardstick.git] / yardstick / network_services / traffic_profile / ixia_rfc2544.py
index cb8a347..7f04722 100644 (file)
@@ -14,9 +14,8 @@
 
 from __future__ import absolute_import
 import logging
-import json
 
-from yardstick.network_services.traffic_profile.traffic_profile import \
+from yardstick.network_services.traffic_profile.trex_traffic_profile import \
     TrexProfile
 
 LOG = logging.getLogger(__name__)
@@ -24,59 +23,63 @@ LOG = logging.getLogger(__name__)
 
 class IXIARFC2544Profile(TrexProfile):
 
-    def _get_ixia_traffic_profile(self, profile_data, mac=None, xfile=None, static_traffic=None):
+    UPLINK = 'uplink'
+    DOWNLINK = 'downlink'
+
+    def _get_ixia_traffic_profile(self, profile_data, mac=None):
         if mac is None:
             mac = {}
 
-        if static_traffic is None:
-            static_traffic = {}
-
         result = {}
-        if xfile:
-            with open(xfile) as stream:
+        for traffickey, values in profile_data.items():
+            if not traffickey.startswith((self.UPLINK, self.DOWNLINK)):
+                continue
+
+            try:
+                # values should be single-item dict, so just grab the first item
+                try:
+                    key, value = next(iter(values.items()))
+                except StopIteration:
+                    result[traffickey] = {}
+                    continue
+
+                port_id = value.get('id', 1)
+                port_index = port_id - 1
                 try:
-                    static_traffic = json.load(stream)
-                except Exception as exc:
-                    LOG.debug(exc)
-
-        for traffickey, trafficvalue in static_traffic.items():
-            traffic = static_traffic[traffickey]
-            # outer_l2
-            index = 0
-            for key, value in profile_data[traffickey].items():
-                framesize = value['outer_l2']['framesize']
-                traffic['outer_l2']['framesize'] = framesize
-                traffic['framesPerSecond'] = True
-                traffic['bidir'] = False
-                traffic['outer_l2']['srcmac'] = \
-                    mac["src_mac_{}".format(traffic['id'])]
-                traffic['outer_l2']['dstmac'] = \
-                    mac["dst_mac_{}".format(traffic['id'])]
-
-                # outer_l3
-                if "outer_l3v6" in list(value.keys()):
-                    traffic['outer_l3'] = value['outer_l3v6']
-                    srcip4 = value['outer_l3v6']['srcip6']
-                    traffic['outer_l3']['srcip4'] = srcip4.split("-")[0]
-                    dstip4 = value['outer_l3v6']['dstip6']
-                    traffic['outer_l3']['dstip4'] = dstip4.split("-")[0]
+                    ip = value['outer_l3v6']
+                except KeyError:
+                    ip = value['outer_l3v4']
+                    src_key, dst_key = 'srcip4', 'dstip4'
                 else:
-                    traffic['outer_l3'] = value['outer_l3v4']
-                    srcip4 = value['outer_l3v4']['srcip4']
-                    traffic['outer_l3']['srcip4'] = srcip4.split("-")[0]
-                    dstip4 = value['outer_l3v4']['dstip4']
-                    traffic['outer_l3']['dstip4'] = dstip4.split("-")[0]
-
-                traffic['outer_l3']['type'] = key
-                traffic['outer_l3']['count'] = value['outer_l3v4']['count']
-                # outer_l4
-                traffic['outer_l4'] = value['outer_l4']
-                index = index + 1
-            result.update({traffickey: traffic})
+                    src_key, dst_key = 'srcip6', 'dstip6'
+
+                result[traffickey] = {
+                    'bidir': False,
+                    'iload': '100',
+                    'id': port_id,
+                    'outer_l2': {
+                        'framesize': value['outer_l2']['framesize'],
+                        'framesPerSecond': True,
+                        'srcmac': mac['src_mac_{}'.format(port_index)],
+                        'dstmac': mac['dst_mac_{}'.format(port_index)],
+                    },
+                    'outer_l3': {
+                        'count': ip['count'],
+                        'dscp': ip['dscp'],
+                        'ttl': ip['ttl'],
+                        src_key: ip[src_key].split("-")[0],
+                        dst_key: ip[dst_key].split("-")[0],
+                        'type': key,
+                        'proto': ip['proto'],
+                    },
+                    'outer_l4': value['outer_l4'],
+                }
+            except KeyError:
+                continue
 
         return result
 
-    def _ixia_traffic_generate(self, traffic_generator, traffic, ixia_obj):
+    def _ixia_traffic_generate(self, traffic, ixia_obj):
         for key, value in traffic.items():
             if key.startswith((self.UPLINK, self.DOWNLINK)):
                 value["iload"] = str(self.rate)
@@ -103,33 +106,37 @@ class IXIARFC2544Profile(TrexProfile):
 
         self.ports = [port for port in port_generator()]
 
-    def execute_traffic(self, traffic_generator, ixia_obj, mac={}, xfile=None):
+    def execute_traffic(self, traffic_generator, ixia_obj, mac=None):
+        if mac is None:
+            mac = {}
         if self.first_run:
             self.full_profile = {}
             self.pg_id = 0
             self.update_traffic_profile(traffic_generator)
             traffic = \
-                self._get_ixia_traffic_profile(self.full_profile, mac, xfile)
+                self._get_ixia_traffic_profile(self.full_profile, mac)
             self.max_rate = self.rate
             self.min_rate = 0
             self.get_multiplier()
-            self._ixia_traffic_generate(traffic_generator, traffic, ixia_obj)
+            self._ixia_traffic_generate(traffic, ixia_obj)
 
     def get_multiplier(self):
         self.rate = round((self.max_rate + self.min_rate) / 2.0, 2)
         multiplier = round(self.rate / self.pps, 2)
         return str(multiplier)
 
-    def start_ixia_latency(self, traffic_generator, ixia_obj,
-                           mac={}, xfile=None):
+    def start_ixia_latency(self, traffic_generator, ixia_obj, mac=None):
+        if mac is None:
+            mac = {}
         self.update_traffic_profile(traffic_generator)
         traffic = \
-            self._get_ixia_traffic_profile(self.full_profile, mac, xfile)
-        self._ixia_traffic_generate(traffic_generator, traffic,
-                                    ixia_obj, xfile)
+            self._get_ixia_traffic_profile(self.full_profile, mac)
+        self._ixia_traffic_generate(traffic, ixia_obj)
 
-    def get_drop_percentage(self, traffic_generator, samples, tol_min,
-                            tolerance, ixia_obj, mac={}, xfile=None):
+    def get_drop_percentage(self, samples, tol_min, tolerance, ixia_obj,
+                            mac=None):
+        if mac is None:
+            mac = {}
         status = 'Running'
         drop_percent = 100
         in_packets = sum([samples[iface]['in_packets'] for iface in samples])
@@ -171,6 +178,6 @@ class IXIARFC2544Profile(TrexProfile):
             samples['DropPercentage'] = drop_percent
             return status, samples
         self.get_multiplier()
-        traffic = self._get_ixia_traffic_profile(self.full_profile, mac, xfile)
-        self._ixia_traffic_generate(traffic_generator, traffic, ixia_obj)
+        traffic = self._get_ixia_traffic_profile(self.full_profile, mac)
+        self._ixia_traffic_generate(traffic, ixia_obj)
         return status, samples