aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoss Brattain <ross.b.brattain@intel.com>2017-09-20 17:33:34 -0700
committerRoss Brattain <ross.b.brattain@intel.com>2017-09-20 17:34:39 -0700
commit133f90ad75679ce0c51b9c1b714ee1039928c896 (patch)
treed786bc7ffd3ec24afecf64899123f270f013d511
parent173c6ad6f464c514185efc0b5a608ceb6cc118ae (diff)
tg_rfc2544_ixia: use traffic id from JSON to update mac
we were using raw sort index of the interfaces to set the MAC address, but we should be using the traffic id from the static JSON instead. Change-Id: I13284db04abb3eaf8c9826974a9e5aa1c37b3891 Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
-rw-r--r--tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_ixia.py9
-rw-r--r--yardstick/network_services/traffic_profile/ixia_rfc2544.py15
-rw-r--r--yardstick/network_services/vnf_generic/vnf/tg_rfc2544_ixia.py73
3 files changed, 55 insertions, 42 deletions
diff --git a/tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_ixia.py b/tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_ixia.py
index 0e303dc3b..0c3520c44 100644
--- a/tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_ixia.py
+++ b/tests/unit/network_services/vnf_generic/vnf/test_tg_rfc2544_ixia.py
@@ -252,7 +252,7 @@ class TestIXIATrafficGen(unittest.TestCase):
mock_traffic_profile = mock.Mock(autospec=TrafficProfile)
mock_traffic_profile.get_traffic_definition.return_value = "64"
mock_traffic_profile.params = self.TRAFFIC_PROFILE
- mock_traffic_profile.ports = [0, 1]
+ mock_traffic_profile.ports = ["xe0", "xe1"]
mock_ssh_instance = mock.Mock(autospec=mock_ssh.SSH)
mock_ssh_instance.execute.return_value = 0, "", ""
@@ -348,6 +348,7 @@ class TestIXIATrafficGen(unittest.TestCase):
with mock.patch('yardstick.benchmark.scenarios.networking.vnf_generic.open',
create=True) as mock_open:
- mock_open.return_value = mock.MagicMock()
- result = sut._traffic_runner(mock_traffic_profile)
- self.assertIsNone(result)
+ with mock.patch('yardstick.network_services.vnf_generic.vnf.tg_rfc2544_ixia.open',
+ create=True) as mock_ixia_open:
+ result = sut._traffic_runner(mock_traffic_profile)
+ self.assertIsNone(result)
diff --git a/yardstick/network_services/traffic_profile/ixia_rfc2544.py b/yardstick/network_services/traffic_profile/ixia_rfc2544.py
index cb8a34796..ee58172d8 100644
--- a/yardstick/network_services/traffic_profile/ixia_rfc2544.py
+++ b/yardstick/network_services/traffic_profile/ixia_rfc2544.py
@@ -103,7 +103,9 @@ 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, xfile=None):
+ if mac is None:
+ mac = {}
if self.first_run:
self.full_profile = {}
self.pg_id = 0
@@ -121,15 +123,18 @@ class IXIARFC2544Profile(TrexProfile):
return str(multiplier)
def start_ixia_latency(self, traffic_generator, ixia_obj,
- mac={}, xfile=None):
+ mac=None, xfile=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._ixia_traffic_generate(traffic_generator, traffic, ixia_obj)
def get_drop_percentage(self, traffic_generator, samples, tol_min,
- tolerance, ixia_obj, mac={}, xfile=None):
+ tolerance, ixia_obj, mac=None, xfile=None):
+ if mac is None:
+ mac = {}
status = 'Running'
drop_percent = 100
in_packets = sum([samples[iface]['in_packets'] for iface in samples])
diff --git a/yardstick/network_services/vnf_generic/vnf/tg_rfc2544_ixia.py b/yardstick/network_services/vnf_generic/vnf/tg_rfc2544_ixia.py
index 449f22296..cd9553d12 100644
--- a/yardstick/network_services/vnf_generic/vnf/tg_rfc2544_ixia.py
+++ b/yardstick/network_services/vnf_generic/vnf/tg_rfc2544_ixia.py
@@ -13,6 +13,8 @@
# limitations under the License.
from __future__ import absolute_import
+
+import json
import time
import os
import logging
@@ -79,31 +81,29 @@ class IxiaResourceHelper(ClientResourceHelper):
latency = stats[0]
samples = {}
- for interface in self.vnfd_helper.interfaces:
+ for port_name in ports:
try:
- name = interface["name"]
# this is not DPDK port num, but this is whatever number we gave
# when we selected ports and programmed the profile
- port = self.vnfd_helper.port_num(name)
- if port in ports:
- samples[name] = {
- "rx_throughput_kps": float(last_result["Rx_Rate_Kbps"][port]),
- "tx_throughput_kps": float(last_result["Tx_Rate_Kbps"][port]),
- "rx_throughput_mbps": float(last_result["Rx_Rate_Mbps"][port]),
- "tx_throughput_mbps": float(last_result["Tx_Rate_Mbps"][port]),
- "in_packets": int(last_result["Valid_Frames_Rx"][port]),
- "out_packets": int(last_result["Frames_Tx"][port]),
- "RxThroughput": int(last_result["Valid_Frames_Rx"][port]) / 30,
- "TxThroughput": int(last_result["Frames_Tx"][port]) / 30,
- }
- if key:
- avg_latency = latency["Store-Forward_Avg_latency_ns"][port]
- min_latency = latency["Store-Forward_Min_latency_ns"][port]
- max_latency = latency["Store-Forward_Max_latency_ns"][port]
- samples[name][key] = \
- {"Store-Forward_Avg_latency_ns": avg_latency,
- "Store-Forward_Min_latency_ns": min_latency,
- "Store-Forward_Max_latency_ns": max_latency}
+ port_num = self.vnfd_helper.port_num(port_name)
+ samples[port_name] = {
+ "rx_throughput_kps": float(last_result["Rx_Rate_Kbps"][port_num]),
+ "tx_throughput_kps": float(last_result["Tx_Rate_Kbps"][port_num]),
+ "rx_throughput_mbps": float(last_result["Rx_Rate_Mbps"][port_num]),
+ "tx_throughput_mbps": float(last_result["Tx_Rate_Mbps"][port_num]),
+ "in_packets": int(last_result["Valid_Frames_Rx"][port_num]),
+ "out_packets": int(last_result["Frames_Tx"][port_num]),
+ "RxThroughput": int(last_result["Valid_Frames_Rx"][port_num]) / 30,
+ "TxThroughput": int(last_result["Frames_Tx"][port_num]) / 30,
+ }
+ if key:
+ avg_latency = latency["Store-Forward_Avg_latency_ns"][port_num]
+ min_latency = latency["Store-Forward_Min_latency_ns"][port_num]
+ max_latency = latency["Store-Forward_Max_latency_ns"][port_num]
+ samples[port_name][key] = \
+ {"Store-Forward_Avg_latency_ns": avg_latency,
+ "Store-Forward_Min_latency_ns": min_latency,
+ "Store-Forward_Max_latency_ns": max_latency}
except IndexError:
pass
@@ -128,19 +128,27 @@ class IxiaResourceHelper(ClientResourceHelper):
self.client.ix_assign_ports()
+ ixia_file = find_relative_file("ixia_traffic.cfg",
+ self.scenario_helper.scenario_cfg["task_path"])
+
+ static_traffic = {}
+ with open(ixia_file) as stream:
+ try:
+ static_traffic = json.load(stream)
+ except Exception:
+ LOG.exception("")
mac = {}
- # TODO: shouldn't this index map to port number we used to generate the profile
- for index, interface in enumerate(self.vnfd_helper.interfaces, 1):
- virt_intf = interface["virtual-interface"]
- mac.update({
- "src_mac_{}".format(index): virt_intf.get("local_mac", default),
- "dst_mac_{}".format(index): virt_intf.get("dst_mac", default),
- })
+ for vld_id, traffic in static_traffic.items():
+ intfs = self.vnfd_helper.port_pairs.networks.get(vld_id, [])
+ interface = next(intfs, None)
+ if interface:
+ virt_intf = interface["virtual-interface"]
+ # we only know static traffic id by reading the json
+ # this is used by _get_ixia_traffic_profile
+ mac["src_mac_{}".format(traffic["id"])] = virt_intf.get("local_mac", default)
+ mac["dst_mac_{}".format(traffic["id"])] = virt_intf.get("dst_mac", default)
samples = {}
-
- ixia_file = find_relative_file("ixia_traffic.cfg",
- self.scenario_helper.scenario_cfg["task_path"])
# Generate ixia traffic config...
try:
while not self._terminated.value:
@@ -162,7 +170,6 @@ class IxiaResourceHelper(ClientResourceHelper):
self._queue.put(samples)
except Exception:
LOG.info("Run Traffic terminated")
- pass
if not self.rfc_helper.is_done():
self._terminated.value = 1