diff options
Diffstat (limited to 'conf')
-rw-r--r-- | conf/00_common.conf | 3 | ||||
-rw-r--r-- | conf/03_traffic.conf | 43 | ||||
-rw-r--r-- | conf/05_collector.conf | 26 | ||||
-rw-r--r-- | conf/08_llcmanagement.conf | 62 | ||||
-rw-r--r-- | conf/10_custom.conf | 13 | ||||
-rw-r--r-- | conf/__init__.py | 13 | ||||
-rw-r--r-- | conf/integration/01_testcases.conf | 159 |
7 files changed, 310 insertions, 9 deletions
diff --git a/conf/00_common.conf b/conf/00_common.conf index 4c25b0b8..279c67b4 100644 --- a/conf/00_common.conf +++ b/conf/00_common.conf @@ -90,6 +90,9 @@ PATHS = {} # shell command to use when running commands through Pexpect SHELL_CMD = ['/bin/bash', '-c'] +# internal list to keep track of PIDs of jobs executed by vsperf +_EXECUTED_PIDS = [] + # ############################ # Logging configuration # ############################ diff --git a/conf/03_traffic.conf b/conf/03_traffic.conf index a88e4bcc..67318893 100644 --- a/conf/03_traffic.conf +++ b/conf/03_traffic.conf @@ -147,6 +147,30 @@ LOG_FILE_TRAFFIC_GEN = 'traffic-gen.log' # congestion (DEI header field). # Data type: int (NOTE: must fit to 1 bit) # Default value: 0 +# 'capture' - A dictionary with traffic capture configuration. +# NOTE: It is supported only by T-Rex traffic generator. +# 'enabled' - Specifies if traffic should be captured +# Data type: bool +# Default value: False +# 'tx_ports' - A list of ports, where frames transmitted towards DUT will +# be captured. Ports have numbers 0 and 1. TX packet capture +# is disabled if list of ports is empty. +# Data type: list +# Default value: [0] +# 'rx_ports' - A list of ports, where frames received from DUT will +# be captured. Ports have numbers 0 and 1. RX packet capture +# is disabled if list of ports is empty. +# Data type: list +# Default value: [1] +# 'count' - A number of frames to be captured. The same count value +# is applied to both TX and RX captures. +# Data type: int +# Default value: 1 +# 'filter' - An expression used to filter TX and RX packets. It uses the same +# syntax as pcap library. See pcap-filter man page for additional +# details. +# Data type: str +# Default value: '' TRAFFIC = { 'traffic_type' : 'rfc2544_throughput', 'frame_rate' : 100, @@ -179,6 +203,13 @@ TRAFFIC = { 'priority': 0, 'cfi': 0, }, + 'capture': { + 'enabled': False, + 'tx_ports' : [0], + 'rx_ports' : [1], + 'count': 1, + 'filter': '', + }, } #path to traffic generators directory. @@ -451,11 +482,11 @@ TRAFFICGEN_TREX_RFC2544_TPUT_THRESHOLD = 0.05 # Parameter below defines frequency of packets used for latency measurement in PPS. # Value 0 will disable latency specific streams. TRAFFICGEN_TREX_LATENCY_PPS = 1000 -# Example 10 Gbps: TRAFFICGEN_TREXINE_SPEED_GBPS = '10' -# Today only 10 Gbps is supported -TRAFFICGEN_TREX_LINE_SPEED_GBPS = '10' +# Enablement of learning packets before sending test traffic +TRAFFICGEN_TREX_LEARNING_MODE = True +TRAFFICGEN_TREX_LEARNING_DURATION = 5 # FOR SR-IOV or multistream layer 2 tests to work with T-Rex enable Promiscuous mode -TRAFFICGEN_TREX_PROMISCUOUS=False +TRAFFICGEN_TREX_PROMISCUOUS = False PATHS['trafficgen'] = { 'Trex': { 'type' : 'src', @@ -464,5 +495,9 @@ PATHS['trafficgen'] = { } } } +# TRex validation option for RFC2544 +TRAFFICGEN_TREX_VERIFICATION_MODE = False +TRAFFICGEN_TREX_VERIFICATION_DURATION = 60 +TRAFFICGEN_TREX_MAXIMUM_VERIFICATION_TRIALS = 10 # TREX Configuration and Connection Info-- END ############################################## diff --git a/conf/05_collector.conf b/conf/05_collector.conf index 9fd2558c..a1bb41f8 100644 --- a/conf/05_collector.conf +++ b/conf/05_collector.conf @@ -1,4 +1,4 @@ -# Copyright 2015 Intel Corporation. +# Copyright 2015-2018 Intel Corporation, Spirent Communications # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -31,3 +31,27 @@ PIDSTAT_SAMPLE_INTERVAL = 1 # prefix of pidstat's log file; separate log file is created # for each testcase in the directory with results LOG_FILE_PIDSTAT = 'pidstat' + +########################################## +# Collectd Specific configuration +########################################## +COLLECTD_IP = "127.0.0.1" +COLLECTD_PORT = 25826 +COLLECTD_SECURITY_LEVEL = 0 +COLLECTD_AUTH_FILE = '' +LOG_FILE_COLLECTD = 'collectd' + +# Configure filters - Interested (KEYS), Not-Interested (XKEYS) +COLLECTD_CPU_KEYS = ['system', 'idle'] +COLLECTD_PROCESSES_KEYS = ['user', 'system'] +COLLECTD_INTERFACE_KEYS = ['dropped'] +COLLECTD_OVSSTAT_KEYS = ['dropped', 'broadcast'] +COLLECTD_DPDKSTAT_KEYS = ['dropped'] +COLLECTD_INTELRDT_KEYS = ['llc'] + +# Interface types to exclude +COLLECTD_INTERFACE_XKEYS = ['docker', 'lo'] +# Core-Ids to Exclude from +# Provide individual core-ids or range of core-ids. +# The range is specified using '-' +COLLECTD_INTELRDT_XKEYS = [ ] diff --git a/conf/08_llcmanagement.conf b/conf/08_llcmanagement.conf new file mode 100644 index 00000000..92e6367c --- /dev/null +++ b/conf/08_llcmanagement.conf @@ -0,0 +1,62 @@ +# Copyright 2017-2018 Spirent Communications. +# +# 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. + +################################## +# LLC Management Configuration # +################################## + +#################################################################### +# Specify how the policy is defined. +# Select any one of the following: COS, CUSTOM. +#################################################################### +POLICY_TYPE = 'COS' + +#################################################################### +# Policy Definition by COS +# Choose any one class of service among Gold, Silver and Bronze. +# The min-cache and max-cache for these 3 services vary. +# gold - has the maximum with 'guaranteed' allocation. +# sliver-bf- lower than gold, and best effort. +# bronze-shared - least and shared. +# This value will be used for "policy" variable in the REST call. +#################################################################### +VSWITCH_COS = "silver-bf" +VNF_COS = "silver-bf" +PMD_COS = "gold" +NOISEVM_COS = "bronze-shared" + +#################################################################### +# CUSTOM Policy Definition +# Specify Minimum and Maximum Cache Values each workload +# [mincache, maxcache] +#################################################################### +VSWITCH_CA = [10, 18] +VNF_CA = [8, 10] +PMD_CA = [10, 16] +NOISEVM_CA = [1, 1] + +#################################################################### +# Intel RMD Server Specific Configuration +# Port: 8081 (Debug) 8888 (normal) +# Version: v1 +# IP: only localhost. +#################################################################### +RMD_PORT = 8081 +RMD_SERVER_IP = '127.0.0.1' +RMD_API_VERSION = 'v1' + +#################################################################### +# LLC Allocation Control. +#################################################################### +LLC_ALLOCATION = False diff --git a/conf/10_custom.conf b/conf/10_custom.conf index 8020bb93..917d16b4 100644 --- a/conf/10_custom.conf +++ b/conf/10_custom.conf @@ -133,11 +133,15 @@ TRAFFICGEN_TREX_PORT2 = '' # Parameter below defines frequency of packets used for latency measurement in PPS. # Value 0 will disable latency specific streams. TRAFFICGEN_TREX_LATENCY_PPS = 1000 -# Example 10 Gbps: TRAFFICGEN_TREXINE_SPEED_GBPS = '10' -# Today only 10 Gbps is supported -TRAFFICGEN_TREX_LINE_SPEED_GBPS = '10' +# Enablement of learning packets before sending test traffic +TRAFFICGEN_TREX_LEARNING_MODE = True +TRAFFICGEN_TREX_LEARNING_DURATION = 5 # FOR SR-IOV or multistream layer 2 tests to work with T-Rex enable Promiscuous mode -TRAFFICGEN_TREX_PROMISCUOUS=False +TRAFFICGEN_TREX_PROMISCUOUS = False +# TRex validation option for RFC2544 +TRAFFICGEN_TREX_VERIFICATION_MODE = False +TRAFFICGEN_TREX_VERIFICATION_DURATION = 60 +TRAFFICGEN_TREX_MAXIMUM_VERIFICATION_TRIALS = 10 # TREX Configuration and Connection Info-- END #################################################### @@ -161,3 +165,4 @@ PACKAGE_LIST = "src/package-list.mk" # 'openvswitch'] #PATHS['vswitch']['OvsVanilla']['type'] = 'bin' + diff --git a/conf/__init__.py b/conf/__init__.py index a7c0ee5d..d5d26757 100644 --- a/conf/__init__.py +++ b/conf/__init__.py @@ -124,6 +124,13 @@ class Settings(object): if name is not None and value is not None: super(Settings, self).__setattr__(name, value) + def resetValue(self, attr): + """If parameter was overridden by TEST_PARAMS, then it will + be set to its original value. + """ + if attr in self.__dict__['TEST_PARAMS']: + self.__dict__['TEST_PARAMS'].pop(attr) + def load_from_file(self, path): """Update ``settings`` with values found in module at ``path``. """ @@ -324,6 +331,12 @@ class Settings(object): assert value == self.__dict__[name] return True + def validate_resetValue(self, dummy_result, attr): + """Verifies, that value was correctly reset + """ + return 'TEST_PARAMS' not in self.__dict__ or \ + attr not in self.__dict__['TEST_PARAMS'] + settings = Settings() def get_test_param(key, default=None): diff --git a/conf/integration/01_testcases.conf b/conf/integration/01_testcases.conf index dfc8a4c2..bb2809b8 100644 --- a/conf/integration/01_testcases.conf +++ b/conf/integration/01_testcases.conf @@ -1000,6 +1000,165 @@ INTEGRATION_TESTS = [ # END of VPP tests used by VERIFY and MERGE jobs by OPNFV Jenkins # + # + # Examples of functional testcases with traffic capture validation + # + # Capture Example 1 - Traffic capture inside VM (PVP scenario) + # This TestCase will modify VLAN ID set by the traffic generator to the new value. + # Correct VLAN ID settings is verified by inspection of captured frames. + { + "Name": "capture_pvp_modify_vid", + "Deployment": "pvp", + "Description": "Test and verify VLAN ID modification by Open vSwitch", + "Parameters" : { + "VSWITCH" : "OvsDpdkVhost", # works also for Vanilla OVS + "TRAFFICGEN_DURATION" : 5, + "TRAFFIC" : { + "traffic_type" : "rfc2544_continuous", + "frame_rate" : 100, + 'vlan': { + 'enabled': True, + 'id': 8, + 'priority': 1, + 'cfi': 0, + }, + }, + "GUEST_LOOPBACK" : ['linux_bridge'], + }, + "TestSteps": [ + # replace original flows with vlan ID modification + ['!vswitch', 'add_flow', 'br0', {'in_port': '1', 'actions': ['mod_vlan_vid:4','output:3']}], + ['!vswitch', 'add_flow', 'br0', {'in_port': '2', 'actions': ['mod_vlan_vid:4','output:4']}], + ['vswitch', 'dump_flows', 'br0'], + # verify that received frames have modified vlan ID + ['VNF0', 'execute_and_wait', 'tcpdump -i eth0 -c 5 -w dump.pcap vlan 4 &'], + ['trafficgen', 'send_traffic',{}], + ['!VNF0', 'execute_and_wait', 'tcpdump -qer dump.pcap vlan 4 2>/dev/null | wc -l','|^(\d+)$'], + ['tools', 'assert', '#STEP[-1][0] == 5'], + ], + }, +] +# Capture Example 2 - Setup with 2 NICs, where traffic is captured after it is +# processed by NIC under the test (2nd NIC). See documentation for further details. +# This TestCase will strip VLAN headers from traffic sent by the traffic generator. +# The removal of VLAN headers is verified by inspection of captured frames. +# +# NOTE: This setup expects a DUT with two NICs with two ports each. First NIC is +# connected to the traffic generator (standard VSPERF setup). Ports of a second NIC +# are interconnected by a patch cable. PCI addresses of all four ports have to be +# properly configured in the WHITELIST_NICS parameter. +_CAPTURE_P2P2P_OVS_ACTION = '' +_CAPTURE_P2P2P_SETUP = [ + # restore original NICS configuration, so we can refer to NICS elements + ['settings', 'resetValue', 'WHITELIST_NICS'], + ['settings', 'resetValue', 'NICS'], + # create and configure two bridges to forward traffic through NIC under + # the test and back to the traffic generator + # 1st bridge: + ['vswitch', 'add_switch', 'br0'], + ['tools', 'exec_shell', 'sudo ip addr flush dev $NICS[0]["device"]'], + ['tools', 'exec_shell', 'sudo ip link set dev $NICS[0]["device"] up'], + ['tools', 'exec_shell', '$TOOLS["ovs-vsctl"] add-port br0 $NICS[0]["device"]'], + ['tools', 'exec_shell', 'sudo $TOOLS["bind-tool"] --bind igb_uio $NICS[3]["pci"]'], + ['tools', 'exec_shell', '$TOOLS["ovs-vsctl"] add-port br0 dpdk0 -- ' + 'set Interface dpdk0 type=dpdk options:dpdk-devargs=$NICS[3]["pci"]'], + ['tools', 'exec_shell', '$TOOLS["ovs-ofctl"] add-flow br0 in_port=1,action=' + '$_CAPTURE_P2P2P_OVS_ACTION,output:2'], + # 2nd bridge: + ['vswitch', 'add_switch', 'br1'], + ['tools', 'exec_shell', 'sudo ip addr flush dev $NICS[2]["device"]'], + ['tools', 'exec_shell', 'sudo ip link set dev $NICS[2]["device"] up'], + ['tools', 'exec_shell', '$TOOLS["ovs-vsctl"] add-port br1 $NICS[2]["device"]'], + ['tools', 'exec_shell', 'sudo ip addr flush dev $NICS[1]["device"]'], + ['tools', 'exec_shell', 'sudo ip link set dev $NICS[1]["device"] up'], + ['tools', 'exec_shell', '$TOOLS["ovs-vsctl"] add-port br1 $NICS[1]["device"]'], + ['vswitch', 'add_flow', 'br1', {'in_port': '1', 'actions': ['output:2']}], + # log flow details + ['vswitch', 'dump_flows', 'br0'], + ['vswitch', 'dump_flows', 'br1'], +] +INTEGRATION_TESTS += [ + { + "Name": "capture_p2p2p_strip_vlan_ovs", + "Deployment": "clean", + "Description": "P2P Continuous Stream", + "Parameters" : { + "_CAPTURE_P2P2P_OVS_ACTION" : 'strip_vlan', + "TRAFFIC" : { + "bidir" : "False", + "traffic_type" : "rfc2544_continuous", + "frame_rate" : 100, + 'l2': { + 'srcmac': "ca:fe:00:00:00:00", + 'dstmac': "00:00:00:00:00:01" + }, + 'vlan': { + 'enabled': True, + 'id': 8, + 'priority': 1, + 'cfi': 0, + }, + }, + # suppress DPDK configuration, so physical interfaces are not bound to DPDK driver + 'WHITELIST_NICS' : [], + 'NICS' : [], + }, + "TestSteps": _CAPTURE_P2P2P_SETUP + [ + # capture traffic after processing by NIC under the test (after possible egress HW offloading) + ['tools', 'exec_shell_background', 'tcpdump -i $NICS[2]["device"] -c 5 -w capture.pcap ' + 'ether src $TRAFFIC["l2"]["srcmac"]'], + ['trafficgen', 'send_traffic', {}], + ['vswitch', 'dump_flows', 'br0'], + ['vswitch', 'dump_flows', 'br1'], + # there must be 5 captured frames... + ['tools', 'exec_shell', 'tcpdump -r capture.pcap | wc -l', '|^(\d+)$'], + ['tools', 'assert', '#STEP[-1][0] == 5'], + # ...but no vlan headers + ['tools', 'exec_shell', 'tcpdump -r capture.pcap vlan | wc -l', '|^(\d+)$'], + ['tools', 'assert', '#STEP[-1][0] == 0'], + ], + }, + # Capture Example 3 - Traffic capture by traffic generator. + # This TestCase uses OVS flow to add VLAN tag with given ID into every + # frame send by traffic generator. Correct frame modificaiton is verified by + # inspection of packet capture received by T-Rex. + { + "Name": "capture_p2p_add_vlan_ovs_trex", + "Deployment": "clean", + "Description": "OVS: Test VLAN tag modification and verify it by traffic capture", + "vSwitch" : "OvsDpdkVhost", # works also for Vanilla OVS + "Parameters" : { + "TRAFFICGEN" : "Trex", + "TRAFFICGEN_DURATION" : 5, + "TRAFFIC" : { + "traffic_type" : "rfc2544_continuous", + "frame_rate" : 100, + # enable capture of five RX frames + 'capture': { + 'enabled': True, + 'tx_ports' : [], + 'rx_ports' : [1], + 'count' : 5, + }, + }, + }, + "TestSteps" : STEP_VSWITCH_P2P_INIT + [ + # replace standard L2 flows by flows, which will add VLAN tag with ID 3 + ['!vswitch', 'add_flow', 'int_br0', {'in_port': '1', 'actions': ['mod_vlan_vid:3','output:2']}], + ['!vswitch', 'add_flow', 'int_br0', {'in_port': '2', 'actions': ['mod_vlan_vid:3','output:1']}], + ['vswitch', 'dump_flows', 'int_br0'], + ['trafficgen', 'send_traffic', {}], + ['trafficgen', 'get_results'], + # verify that captured frames have vlan tag with ID 3 + ['tools', 'exec_shell', 'tcpdump -qer $RESULTS_PATH/#STEP[-1][0]["capture_rx"] vlan 3 ' + '2>/dev/null | wc -l', '|^(\d+)$'], + # number of received frames with expected VLAN id must match the number of captured frames + ['tools', 'assert', '#STEP[-1][0] == 5'], + ] + STEP_VSWITCH_P2P_FINIT, + }, + # + # End of examples of functional testcases with traffic capture validation + # ] # Example of TC definition with exact vSwitch, VNF and TRAFFICGEN values. |