diff options
author | Ross Brattain <ross.b.brattain@intel.com> | 2017-08-23 21:03:45 +0000 |
---|---|---|
committer | Gerrit Code Review <gerrit@opnfv.org> | 2017-08-23 21:03:45 +0000 |
commit | c894c814d62f0c839d381b7370f3d20bf02db0b0 (patch) | |
tree | 4122dd4b649b0d12708ecb47d31810bde45cb6ff /yardstick | |
parent | 44d2cbdc16b543980d95e0d49456d48868d088d7 (diff) | |
parent | 952defd326974e7ae74ce366c6b5d32793d8d70c (diff) |
Merge "Re-define the framesize and flow dynamic define in testcase"
Diffstat (limited to 'yardstick')
-rw-r--r-- | yardstick/benchmark/scenarios/networking/vnf_generic.py | 49 | ||||
-rw-r--r-- | yardstick/network_services/traffic_profile/traffic_profile.py | 69 |
2 files changed, 79 insertions, 39 deletions
diff --git a/yardstick/benchmark/scenarios/networking/vnf_generic.py b/yardstick/benchmark/scenarios/networking/vnf_generic.py index dcc372b8d..18a75d070 100644 --- a/yardstick/benchmark/scenarios/networking/vnf_generic.py +++ b/yardstick/benchmark/scenarios/networking/vnf_generic.py @@ -17,10 +17,14 @@ from __future__ import absolute_import import logging import errno + +import ipaddress import os import re from itertools import chain + +import six from operator import itemgetter from collections import defaultdict @@ -126,19 +130,50 @@ class NetworkServiceTestCase(base.Scenario): self.collector = None self.traffic_profile = None + def _get_ip_flow_range(self, ip_start_range): + + node_name, range_or_interface = next(iter(ip_start_range.items()), (None, '0.0.0.0')) + if node_name is not None: + node = self.context_cfg["nodes"].get(node_name, {}) + try: + # the ip_range is the interface name + interface = node.get("interfaces", {})[range_or_interface] + except KeyError: + ip = "0.0.0.0" + mask = "255.255.255.0" + else: + ip = interface["local_ip"] + # we can't default these values, they must both exist to be valid + mask = interface["netmask"] + + ipaddr = ipaddress.ip_network(six.text_type('{}/{}'.format(ip, mask)), strict=False) + hosts = list(ipaddr.hosts()) + ip_addr_range = "{}-{}".format(hosts[0], hosts[-1]) + else: + # we are manually specifying the range + ip_addr_range = range_or_interface + return ip_addr_range + def _get_traffic_flow(self): + flow = {} try: - with open(self.scenario_cfg["traffic_options"]["flow"]) as fflow: - flow = yaml_load(fflow) - except (KeyError, IOError, OSError): + fflow = self.scenario_cfg["options"]["flow"] + for index, src in enumerate(fflow.get("src_ip", [])): + flow["src_ip{}".format(index)] = self._get_ip_flow_range(src) + + for index, dst in enumerate(fflow.get("dst_ip", [])): + flow["dst_ip{}".format(index)] = self._get_ip_flow_range(dst) + + for index, publicip in enumerate(fflow.get("publicip", [])): + flow["public_ip{}".format(index)] = publicip + except KeyError: flow = {} - return flow + return {"flow": flow} def _get_traffic_imix(self): try: - with open(self.scenario_cfg["traffic_options"]["imix"]) as fimix: - imix = yaml_load(fimix) - except (KeyError, IOError, OSError): + imix = {"imix": self.scenario_cfg['options']['framesize']} + except KeyError: imix = {} return imix diff --git a/yardstick/network_services/traffic_profile/traffic_profile.py b/yardstick/network_services/traffic_profile/traffic_profile.py index 3e1f8d89f..fcec04fed 100644 --- a/yardstick/network_services/traffic_profile/traffic_profile.py +++ b/yardstick/network_services/traffic_profile/traffic_profile.py @@ -26,6 +26,7 @@ from stl.trex_stl_lib.trex_stl_streams import STLFlowLatencyStats from stl.trex_stl_lib.trex_stl_streams import STLTXCont from stl.trex_stl_lib.trex_stl_streams import STLProfile from stl.trex_stl_lib.trex_stl_packet_builder_scapy import STLVmWrFlowVar +from stl.trex_stl_lib.trex_stl_packet_builder_scapy import STLVmFlowVarRepeatableRandom from stl.trex_stl_lib.trex_stl_packet_builder_scapy import STLVmFlowVar from stl.trex_stl_lib.trex_stl_packet_builder_scapy import STLPktBuilder from stl.trex_stl_lib.trex_stl_packet_builder_scapy import STLScVmRaw @@ -132,7 +133,7 @@ class TrexProfile(TrafficProfile): pkt_offset='Ether.dst') self.vm_flow_vars.append(stl_vm_wr_flow_var) - def set_src_ip4(self, src_ip4): + def set_src_ip4(self, src_ip4, count=1): """ set source ipv4 address fields """ src_ips = src_ip4.split('-') min_value = src_ips[0] @@ -141,12 +142,13 @@ class TrexProfile(TrafficProfile): src_ip4 = min_value self._set_ip_fields(src=src_ip4) else: - stl_vm_flow_var = STLVmFlowVar(name="ip4_src", - min_value=min_value, - max_value=max_value, - size=4, - op='random', - step=1) + stl_vm_flow_var = \ + STLVmFlowVarRepeatableRandom(name="ip4_src", + min_value=min_value, + max_value=max_value, + size=4, + limit=int(count), + seed=0x1235) self.vm_flow_vars.append(stl_vm_flow_var) stl_vm_wr_flow_var = STLVmWrFlowVar(fv_name='ip4_src', pkt_offset='IP.src') @@ -154,7 +156,7 @@ class TrexProfile(TrafficProfile): stl_vm_fix_ipv4 = STLVmFixIpv4(offset="IP") self.vm_flow_vars.append(stl_vm_fix_ipv4) - def set_dst_ip4(self, dst_ip4): + def set_dst_ip4(self, dst_ip4, count=1): """ set destination ipv4 address fields """ dst_ips = dst_ip4.split('-') min_value = dst_ips[0] @@ -163,12 +165,13 @@ class TrexProfile(TrafficProfile): dst_ip4 = min_value self._set_ip_fields(dst=dst_ip4) else: - stl_vm_flow_var = STLVmFlowVar(name="dst_ip4", - min_value=min_value, - max_value=max_value, - size=4, - op='random', - step=1) + stl_vm_flow_var = \ + STLVmFlowVarRepeatableRandom(name="dst_ip4", + min_value=min_value, + max_value=max_value, + size=4, + limit=int(count), + seed=0x1235) self.vm_flow_vars.append(stl_vm_flow_var) stl_vm_wr_flow_var = STLVmWrFlowVar(fv_name='dst_ip4', pkt_offset='IP.dst') @@ -240,7 +243,7 @@ class TrexProfile(TrafficProfile): pkt_offset='IP.tos') self.vm_flow_vars.append(stl_vm_wr_flow_var) - def set_src_port(self, src_port): + def set_src_port(self, src_port, count=1): """ set packet source port """ src_ports = str(src_port).split('-') min_value = int(src_ports[0]) @@ -250,18 +253,19 @@ class TrexProfile(TrafficProfile): self._set_udp_fields(sport=src_port) else: max_value = int(src_ports[1]) - stl_vm_flow_var = STLVmFlowVar(name="port_src", - min_value=min_value, - max_value=max_value, - size=2, - op='random', - step=1) + stl_vm_flow_var = \ + STLVmFlowVarRepeatableRandom(name="port_src", + min_value=min_value, + max_value=max_value, + size=2, + limit=int(count), + seed=0x1235) self.vm_flow_vars.append(stl_vm_flow_var) stl_vm_wr_flow_var = STLVmWrFlowVar(fv_name='port_src', pkt_offset=self.udp_sport) self.vm_flow_vars.append(stl_vm_wr_flow_var) - def set_dst_port(self, dst_port): + def set_dst_port(self, dst_port, count=1): """ set packet destnation port """ dst_ports = str(dst_port).split('-') min_value = int(dst_ports[0]) @@ -271,12 +275,13 @@ class TrexProfile(TrafficProfile): self._set_udp_fields(dport=dst_port) else: max_value = int(dst_ports[1]) - stl_vm_flow_var = STLVmFlowVar(name="port_dst", - min_value=min_value, - max_value=max_value, - size=2, - op='random', - step=1) + stl_vm_flow_var = \ + STLVmFlowVarRepeatableRandom(name="port_dst", + min_value=min_value, + max_value=max_value, + size=2, + limit=int(count), + seed=0x1235) self.vm_flow_vars.append(stl_vm_flow_var) stl_vm_wr_flow_var = STLVmWrFlowVar(fv_name='port_dst', pkt_offset=self.udp_dport) @@ -335,9 +340,9 @@ class TrexProfile(TrafficProfile): if 'dscp' in outer_l3v4: self.set_dscp(outer_l3v4['dscp']) if 'srcip4' in outer_l3v4: - self.set_src_ip4(outer_l3v4['srcip4']) + self.set_src_ip4(outer_l3v4['srcip4'], outer_l3v4['count']) if 'dstip4' in outer_l3v4: - self.set_dst_ip4(outer_l3v4['dstip4']) + self.set_dst_ip4(outer_l3v4['dstip4'], outer_l3v4['count']) def set_outer_l3v6_fields(self, outer_l3v6): """ setup outer l3v6 fields from traffic profile """ @@ -367,9 +372,9 @@ class TrexProfile(TrafficProfile): def set_outer_l4_fields(self, outer_l4): """ setup outer l4 fields from traffic profile """ if 'srcport' in outer_l4: - self.set_src_port(outer_l4['srcport']) + self.set_src_port(outer_l4['srcport'], outer_l4['count']) if 'dstport' in outer_l4: - self.set_dst_port(outer_l4['dstport']) + self.set_dst_port(outer_l4['dstport'], outer_l4['count']) def generate_imix_data(self, packet_definition): """ generate packet size for a given traffic profile """ |