From 26d5dcc91e9bbf92a28892382094022997d07b5a Mon Sep 17 00:00:00 2001 From: Dino Simeon Madarang Date: Tue, 26 Jan 2016 13:49:59 +0000 Subject: Add simple VxLAN decapsulation performance test Measure OVS DPDK VXLAN decapsulation performance. The DUT is configured as a VTEP (VXLAN Tunnel Endpoint) which performs decapsulation of frames and sends traffic to the 2nd traffic generator port. This test is unidirectional. Recent changes: * Userguide update * Move src/dstport from L2 to L4 (conf, TCL) * Fix 'TestCase' object has no attribute '_tunnel_operation' error when running non overlay tests * Fix merge conflict * Move doc to docs/userguide/integration.rst * Add setting of DUT_NIC1_MAC and setting of other variables to docs/userguide/integration.rst Change-Id: Ia44f8888ef727831543c80f5c98c866686c5c92c JIRA: VSPERF-190 Signed-off-by: Dino Simeon Madarang Signed-off-by: Robert Wojciechowicz Signed-off-by: Timo Puha Reviewed-by: Maryam Tahhan Reviewed-by: Billy O Mahony Reviewed-by: Martin Klozik Reviewed-by: Al Morton Reviewed-by: Brian Castelli 100755 tools/pkt_gen/ixnet/ixnet.py create mode 100755 tools/pkt_gen/ixnet/ixnetrfc2544v2.tcl diff --git a/conf/03_traffic.conf b/conf/03_traffic.conf index 7e3019a0..eb09bf09 100644 --- a/conf/03_traffic.conf +++ b/conf/03_traffic.conf @@ -59,6 +59,8 @@ TRAFFICGEN_IXNET_TESTER_RESULT_DIR = '' # as the previous one TRAFFICGEN_IXNET_DUT_RESULT_DIR = '' +TRAFFICGEN_IXNET_TCL_SCRIPT = 'ixnetrfc2544.tcl' + ########################################### # Spirent TestCenter Configuration -- BEGIN diff --git a/conf/integration/01_testcases.conf b/conf/integration/01_testcases.conf index 99154ad3..5e9fc66d 100644 --- a/conf/integration/01_testcases.conf +++ b/conf/integration/01_testcases.conf @@ -35,6 +35,7 @@ INTEGRATION_TESTS = [ "Deployment": "op2p", "biDirectional": False, "Tunnel Type": SUPPORTED_TUNNELING_PROTO[0], + "Tunnel Operation": "encapsulation", "Description": "Overlay Encapsulation Throughput RFC2544 Test", }, { @@ -43,7 +44,26 @@ INTEGRATION_TESTS = [ "Deployment": "op2p", "biDirectional": False, "Tunnel Type": SUPPORTED_TUNNELING_PROTO[0], + "Tunnel Operation": "encapsulation", "Description": "Overlay Encapsulation Continuous Stream", }, + { + "Name": "overlay_p2p_decap_tput", + "Traffic Type": "rfc2544", + "Deployment": "op2p", + "biDirectional": False, + "Tunnel Type": SUPPORTED_TUNNELING_PROTO[0], + "Tunnel Operation": "decapsulation", + "Description": "Overlay Decapsulation Throughput RFC2544 Test", + }, + { + "Name": "overlay_p2p_decap_cont", + "Traffic Type": "continuous", + "Deployment": "op2p", + "biDirectional": False, + "Tunnel Type": SUPPORTED_TUNNELING_PROTO[0], + "Tunnel Operation": "decapsulation", + "Description": "Overlay Decapsulation Continuous Stream", + }, ] diff --git a/conf/integration/02_vswitch.conf b/conf/integration/02_vswitch.conf index 20cec3e6..f2fa0a4c 100644 --- a/conf/integration/02_vswitch.conf +++ b/conf/integration/02_vswitch.conf @@ -22,3 +22,6 @@ TUNNEL_EXTERNAL_BRIDGE_IP = '192.168.240.1/24' # vxlan|gre|geneve TUNNEL_TYPE = 'vxlan' + +# The receiving NIC of VXLAN traffic +DUT_NIC1_MAC = '00:1b:21:b3:48:a9' diff --git a/conf/integration/03_traffic.conf b/conf/integration/03_traffic.conf index 8bef092a..b59a2d09 100644 --- a/conf/integration/03_traffic.conf +++ b/conf/integration/03_traffic.conf @@ -18,3 +18,55 @@ TRAFFICGEN_PORT2_MAC = '02:00:00:00:00:02' TRAFFICGEN_PORT1_IP = '1.1.1.1' TRAFFICGEN_PORT2_IP = '90.90.90.90' +# To test VXLAN set the ff to ixnetrfc2544v2.tcl +TRAFFICGEN_IXNET_TCL_SCRIPT = 'ixnetrfc2544v2.tcl' + +# VXLAN traffic item + +VXLAN_VNI = '99' +# TEST frame +# dstmac should be set to the MAC address of the DUT's receiving port +#VXLAN_FRAME_L2 = {'srcmac': +# '01:02:03:04:05:06', +# 'dstmac': +# '00:1b:21:b3:48:a9'} + +VXLAN_FRAME_L2 = {'srcmac': '', + 'dstmac': '', + } + +# FOR IXIA IxExplorer - VXLAN INNER FRAME +# The following lines can be removed if IXIA support will be dropped: +# 'protocolpad': 'true', +# 'protocolpadbytes': +# '080000000000630006050403020101020304050608004500002e000000004011095bc0a8000ac0a8f0090bb80bb9001a2e93000102030405060708090a0b0c0d0e0f1011', +# protocolpadbytes contains the following values: +# VxLAN header with VNI 99 (0x63) +# Inner SRC 01:02:03:04:05:06 +# Inner DST 06:05:04:03:02:01 +# IP SRC 192.168.0.2 +# IP DST 192.168.240.9 +# SRC port 3000 (0x0BB8) +# DST port 3001 (0x0BB9) +# length 26 +# UDP Checksum 0x2E93 + +VXLAN_FRAME_L3 = {'proto': 'udp', + 'packetsize': 64, + 'srcip': TRAFFICGEN_PORT1_IP, + 'dstip': '', + } + +VXLAN_FRAME_l4 = {'srcport': 4789, + 'dstport': 4789, + 'vni': VXLAN_VNI, + 'inner_srcmac': '', + 'inner_dstmac': '', + 'inner_srcip': '', + 'inner_dstip': '', + 'inner_proto': 'tcp', + 'inner_srcport': 3000, + 'inner_dstport': 3001, + 'protocolpad': '', + 'protocolpadbytes': '', + } diff --git a/core/component_factory.py b/core/component_factory.py index 1e5f2266..cb5af211 100644 --- a/core/component_factory.py +++ b/core/component_factory.py @@ -49,7 +49,8 @@ def create_traffic(traffic_type, trafficgen_class): return TrafficControllerRFC2544(trafficgen_class) -def create_vswitch(deployment_scenario, vswitch_class, traffic): +def create_vswitch(deployment_scenario, vswitch_class, traffic, + tunnel_operation=None): """Return a new IVSwitchController for the deployment_scenario. The returned controller is configured with the given vSwitch class. @@ -59,6 +60,7 @@ def create_vswitch(deployment_scenario, vswitch_class, traffic): :param deployment_scenario: The deployment scenario name :param vswitch_class: Reference to vSwitch class to be used. :param traffic: Dictionary with traffic specific details + :param tunnel_operation encapsulation/decapsulation or None :return: IVSwitchController for the deployment_scenario """ deployment_scenario = deployment_scenario.lower() @@ -69,7 +71,8 @@ def create_vswitch(deployment_scenario, vswitch_class, traffic): elif deployment_scenario.find("pvvp") >= 0: return VswitchControllerPVVP(vswitch_class, traffic) elif deployment_scenario.find("op2p") >= 0: - return VswitchControllerOP2P(vswitch_class, traffic) + return VswitchControllerOP2P(vswitch_class, traffic, tunnel_operation) + def create_vnf(deployment_scenario, vnf_class): """Return a new VnfController for the deployment_scenario. diff --git a/core/vnf_controller.py b/core/vnf_controller.py index e973bc51..39a63044 100644 --- a/core/vnf_controller.py +++ b/core/vnf_controller.py @@ -49,6 +49,8 @@ class VnfController(object): self._vnfs = [vnf_class(), vnf_class()] elif self._deployment_scenario == 'OP2P': self._vnfs = [] + else: + self._vnfs = [] self._logger.debug('__init__ ' + str(len(self._vnfs)) + ' VNF[s] with ' + ' '.join(map(str, self._vnfs))) diff --git a/core/vswitch_controller_op2p.py b/core/vswitch_controller_op2p.py index 69c88c35..ac817153 100644 --- a/core/vswitch_controller_op2p.py +++ b/core/vswitch_controller_op2p.py @@ -35,7 +35,7 @@ class VswitchControllerOP2P(IVswitchController): _deployment_scenario: A string describing the scenario to set-up in the constructor. """ - def __init__(self, vswitch_class, traffic): + def __init__(self, vswitch_class, traffic, tunnel_operation=None): """Initializes up the prerequisites for the OP2P deployment scenario. :vswitch_class: the vSwitch class to be used. @@ -45,10 +45,20 @@ class VswitchControllerOP2P(IVswitchController): self._vswitch = vswitch_class() self._deployment_scenario = "OP2P" self._traffic = traffic.copy() + self._tunnel_operation = tunnel_operation self._logger.debug('Creation using ' + str(self._vswitch_class)) def setup(self): - """ Sets up the switch for overlay P2P + """ Sets up the switch for overlay P2P (tunnel encap or decap) + """ + self._logger.debug('Setting up ' + str(self._tunnel_operation)) + if self._tunnel_operation == "encapsulation": + self._setup_encap() + else: + self._setup_decap() + + def _setup_encap(self): + """ Sets up the switch for overlay P2P encapsulation test Create 2 bridges br0 (integration bridge) and br-ext and a VXLAN port for encapsulation. @@ -95,7 +105,7 @@ class VswitchControllerOP2P(IVswitchController): if settings.getValue('VSWITCH').endswith('Vanilla'): tasks.run_task(['sudo', 'arp', '-s', vtep_ip2, tg_port2_mac], self._logger, - 'Set ' + bridge_ext + 'status to up') + 'Set ' + bridge_ext + ' status to up') else: self._vswitch.set_tunnel_arp(vtep_ip2, tg_port2_mac, @@ -111,6 +121,64 @@ class VswitchControllerOP2P(IVswitchController): self._vswitch.stop() raise + def _setup_decap(self): + """ Sets up the switch for overlay P2P decapsulation test + """ + self._logger.debug('Setup using ' + str(self._vswitch_class)) + + try: + self._vswitch.start() + bridge = settings.getValue('TUNNEL_INTEGRATION_BRIDGE') + bridge_ext = settings.getValue('TUNNEL_EXTERNAL_BRIDGE') + bridge_ext_ip = settings.getValue('TUNNEL_EXTERNAL_BRIDGE_IP') + tgen_ip1 = settings.getValue('TRAFFICGEN_PORT1_IP') + self._vswitch.add_switch(bridge) + + tasks.run_task(['sudo', 'ifconfig', bridge, + settings.getValue('VTEP_IP1')], + self._logger, 'Assign ' + + settings.getValue('VTEP_IP1') + ' to ' + bridge, False) + + tunnel_type = self._traffic['tunnel_type'] + + self._vswitch.add_switch(bridge_ext) + self._vswitch.add_phy_port(bridge) + (_, phy2_number) = self._vswitch.add_phy_port(bridge_ext) + vxlan_vni = 'options:key=' + settings.getValue('VXLAN_VNI') + (_, phy3_number) = self._vswitch.add_tunnel_port(bridge_ext, + tgen_ip1, + tunnel_type, + params=[vxlan_vni]) + + tasks.run_task(['sudo', 'ip', 'addr', 'add', + bridge_ext_ip, + 'dev', bridge_ext], + self._logger, 'Assign ' + + bridge_ext_ip + + ' to ' + bridge_ext) + + tasks.run_task(['sudo', 'ip', 'link', 'set', 'dev', bridge_ext, + 'up'], + self._logger, + 'Set ' + bridge_ext + ' status to up') + + self._vswitch.set_tunnel_arp(tgen_ip1, + settings.getValue('TRAFFICGEN_PORT1_MAC'), + bridge) + self._vswitch.set_tunnel_arp(bridge_ext_ip.split('/')[0], + settings.getValue('DUT_NIC1_MAC'), + bridge_ext) + + # Test is unidirectional for now + self._vswitch.del_flow(bridge_ext) + flow1 = add_ports_to_flow(_FLOW_TEMPLATE, phy3_number, + phy2_number) + self._vswitch.add_flow(bridge_ext, flow1) + + except: + self._vswitch.stop() + raise + def stop(self): """Tears down the switch created in setup(). """ diff --git a/docs/userguide/integration.rst b/docs/userguide/integration.rst index 65b86468..f4120e4e 100755 --- a/docs/userguide/integration.rst +++ b/docs/userguide/integration.rst @@ -95,3 +95,50 @@ To run OVS NATIVE tunnel tests (VXLAN/GRE/GENEVE): ./vsperf --conf-file user_settings.py --run-integration --test-param 'tunnel_type=vxlan' overlay_p2p_tput +Executing VXLAN decapsulation tests +------------------------------------ + +To run VXLAN decapsulation tests: + +1. Set the variables used in "Executing Tunnel encapsulation tests" + +2. Set IXNET_TCL_SCRIPT, VXLAN_FRAME_L2, VLXAN_FRAME_L3 and DUT_NIC1_MAC of your settings file to: + + .. code-block:: console + + IXNET_TCL_SCRIPT='ixnetrfc2544v2.tcl' + + VXLAN_FRAME_L2 = {'srcmac': + '01:02:03:04:05:06', + 'dstmac': + '', + } + + VXLAN_FRAME_L3 = {'proto': 'udp', + 'packetsize': 64, + 'srcip': '1.1.1.1', + 'dstip': '192.168.240.1', + } + + VXLAN_FRAME_L4 = {'srcport': 4789, + 'dstport': 4789, + 'vni': VXLAN_VNI, + 'inner_srcmac': '01:02:03:04:05:06', + 'inner_dstmac': '06:05:04:03:02:01', + 'inner_srcip': '192.168.0.10', + 'inner_dstip': '192.168.240.9', + 'inner_proto': 'udp', + 'inner_srcport': 3000, + 'inner_dstport': 3001, + } + + # The receiving NIC of VXLAN traffic + DUT_NIC1_MAC = '' + +3. Run test: + + .. code-block:: console + + ./vsperf --conf-file user_settings.py --run-integration overlay_p2p_decap_cont + + diff --git a/testcases/testcase.py b/testcases/testcase.py index 945b8537..0c64a34f 100644 --- a/testcases/testcase.py +++ b/testcases/testcase.py @@ -37,7 +37,7 @@ class TestCase(object): In this basic form runs RFC2544 throughput test """ - def __init__(self, cfg, results_dir): + def __init__(self, cfg, results_dir, performance_test=True): """Pull out fields from test config :param cfg: A dictionary of string-value pairs describing the test @@ -63,11 +63,17 @@ class TestCase(object): self.deployment = cfg['Deployment'] self._frame_mod = cfg.get('Frame Modification', None) + self._performance_test = performance_test tunnel_type = None - if 'Tunnel Type' in cfg: - tunnel_type = cfg['Tunnel Type'] - tunnel_type = get_test_param('tunnel_type', tunnel_type) + self._tunnel_operation = None + + if self.deployment == 'op2p': + self._tunnel_operation = cfg['Tunnel Operation'] + + if 'Tunnel Type' in cfg: + tunnel_type = cfg['Tunnel Type'] + tunnel_type = get_test_param('tunnel_type', tunnel_type) # identify guest loopback method, so it can be added into reports self.guest_loopback = [] @@ -138,15 +144,20 @@ class TestCase(object): if self.deployment == "op2p": self._traffic['l2'].update({'srcmac': - S.getValue('TRAFFICGEN_PORT1_MAC'), - 'dstmac': - S.getValue('TRAFFICGEN_PORT2_MAC')}) + S.getValue('TRAFFICGEN_PORT1_MAC'), + 'dstmac': + S.getValue('TRAFFICGEN_PORT2_MAC')}) self._traffic['l3'].update({'srcip': S.getValue('TRAFFICGEN_PORT1_IP'), 'dstip': S.getValue('TRAFFICGEN_PORT2_IP')}) + if self._tunnel_operation == "decapsulation": + self._traffic['l2'] = S.getValue('VXLAN_FRAME_L2') + self._traffic['l3'] = S.getValue('VXLAN_FRAME_L3') + self._traffic['l4'] = S.getValue('VXLAN_FRAME_L4') + self._logger.debug("Controllers:") loader = Loader() traffic_ctl = component_factory.create_traffic( @@ -163,7 +174,8 @@ class TestCase(object): vswitch_ctl = component_factory.create_vswitch( self.deployment, loader.get_vswitch_class(), - self._traffic) + self._traffic, + self._tunnel_operation) collector = component_factory.create_collector( loader.get_collector_class(), @@ -207,7 +219,7 @@ class TestCase(object): tc_results = self._append_results(traffic_ctl.get_results()) TestCase._write_result_to_file(tc_results, output_file) - report.generate(output_file, tc_results, collector.get_results()) + report.generate(output_file, tc_results, collector.get_results(), self._performance_test) def _append_results(self, results): """ diff --git a/tools/pkt_gen/ixia/pass_fail.tcl b/tools/pkt_gen/ixia/pass_fail.tcl index e10b393c..acb4443f 100755 --- a/tools/pkt_gen/ixia/pass_fail.tcl +++ b/tools/pkt_gen/ixia/pass_fail.tcl @@ -1,7 +1,7 @@ #!/usr/bin/env tclsh # Copyright (c) 2014, Ixia -# Copyright (c) 2015, Intel Corporation +# Copyright (c) 2015-2016, Intel Corporation # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -246,18 +246,24 @@ proc sendTraffic { flowSpec trafficSpec } { # extract nested dictionaries set trafficSpec_l2 [dict get $trafficSpec l2] set trafficSpec_l3 [dict get $trafficSpec l3] + set trafficSpec_l4 [dict get $trafficSpec l4] set trafficSpec_vlan [dict get $trafficSpec vlan] set frameSize [dict get $trafficSpec_l2 framesize] set srcMac [dict get $trafficSpec_l2 srcmac] set dstMac [dict get $trafficSpec_l2 dstmac] - set srcPort [dict get $trafficSpec_l2 srcport] - set dstPort [dict get $trafficSpec_l2 dstport] + set srcPort [dict get $trafficSpec_l4 srcport] + set dstPort [dict get $trafficSpec_l4 dstport] set proto [dict get $trafficSpec_l3 proto] set srcIp [dict get $trafficSpec_l3 srcip] set dstIp [dict get $trafficSpec_l3 dstip] + if {[dict exists $trafficSpec_l3 protocolpadbytes]} { + set protocolPad [dict get $trafficSpec_l4 protocolpad] + set protocolPadBytes [dict get $trafficSpec_l4 protocolpadbytes] + } + set vlanEnabled [dict get $trafficSpec_vlan enabled] if {$vlanEnabled == 1 } { # these keys won't exist if vlan wasn't enabled @@ -306,6 +312,10 @@ proc sendTraffic { flowSpec trafficSpec } { protocol config -enable802dot1qTag vlanSingle } + if {[info exists protocolPad]} { + protocol config -enableProtocolPad $protocolPad + } + ip setDefault ip config -ipProtocol ipV4Protocol[string totitle $proto] ip config -checksum "f6 75" @@ -328,6 +338,26 @@ proc sendTraffic { flowSpec trafficSpec } { errorMsg "Error calling $proto set $::chassis $::card $::port" } + if {[info exists protocolPad]} { + protocolPad setDefault + # VxLAN header with VNI 99 (0x63) + # Inner SRC 01:02:03:04:05:06 + # Inner DST 06:05:04:03:02:01 + # IP SRC 192.168.0.2 + # IP DST 192.168.240.9 + # SRC port 3000 (0x0BB8) + # DST port 3001 (0x0BB9) + # length 26 + # UDP Checksum 0x2E93 + + # From encap case capture + protocolPad config -dataBytes "$protocolPadBytes" + if {[protocolPad set $::chassis $::card $::port1]} { + errorMsg "Error calling protocolPad set $::chassis $::card $::port" + set retCode $::TCL_ERROR + } + } + if {$vlanEnabled == 1 } { vlan setDefault vlan config -vlanID $vlanId @@ -392,9 +422,15 @@ proc sendTraffic { flowSpec trafficSpec } { udp setDefault udp config -sourcePort $srcPort udp config -destPort $dstPort + set packetSize [dict get $trafficSpec_l3 packetsize] + stream config -framesize $packetSize if {[udp set $::chassis $::card $::port1]} { errorMsg "Error setting udp on port $::chassis.$::card.$::port1" } + errorMsg "frameSize: $frameSize, packetSize: $packetSize, srcMac: $srcMac, dstMac: $dstMac, srcPort: $srcPort, dstPort: $dstPort" + if {[info exists protocolPad]} { + errorMsg "protocolPad: $protocolPad, protocolPadBytes: $protocolPadBytes" + } } if {[stream set $::chassis $::card $::port1 $streamId]} { diff --git a/tools/pkt_gen/ixnet/ixnet.py b/tools/pkt_gen/ixnet/ixnet.py old mode 100644 new mode 100755 index b59d88a6..96936e14 --- a/tools/pkt_gen/ixnet/ixnet.py +++ b/tools/pkt_gen/ixnet/ixnet.py @@ -1,4 +1,4 @@ -# Copyright 2015 Intel Corporation. +# 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. @@ -153,7 +153,11 @@ class IxNet(trafficgen.ITrafficGenerator): Currently only the RFC2544 tests are implemented. """ - _script = os.path.join(os.path.dirname(__file__), 'ixnetrfc2544.tcl') + if settings.getValue('TRAFFICGEN_IXNET_TCL_SCRIPT') == '': + _script = os.path.join(os.path.dirname(__file__), 'ixnetrfc2544.tcl') + else: + _script = os.path.join(os.path.dirname(__file__), + settings.getValue('TRAFFICGEN_IXNET_TCL_SCRIPT')) _tclsh = tkinter.Tcl() _cfg = None _logger = logging.getLogger(__name__) @@ -359,7 +363,7 @@ class IxNet(trafficgen.ITrafficGenerator): tx_mbps = 'Unknown' if bool(results.get(ResultsConstants.THROUGHPUT_RX_FPS)) \ - == False: + is False: prev_percent_rx = 0.0 else: prev_percent_rx = \ diff --git a/tools/pkt_gen/ixnet/ixnetrfc2544.tcl b/tools/pkt_gen/ixnet/ixnetrfc2544.tcl index a74f2ef3..9ce3aed8 100644 --- a/tools/pkt_gen/ixnet/ixnetrfc2544.tcl +++ b/tools/pkt_gen/ixnet/ixnetrfc2544.tcl @@ -142,13 +142,14 @@ proc startRfc2544Test { testSpec trafficSpec } { # extract nested dictionaries set trafficSpec_l2 [dict get $trafficSpec l2] set trafficSpec_l3 [dict get $trafficSpec l3] + set trafficSpec_l4 [dict get $trafficSpec l4] set trafficSpec_vlan [dict get $trafficSpec vlan] set frameSize [dict get $trafficSpec_l2 framesize] set srcMac [dict get $trafficSpec_l2 srcmac] set dstMac [dict get $trafficSpec_l2 dstmac] - set srcPort [dict get $trafficSpec_l2 srcport] - set dstPort [dict get $trafficSpec_l2 dstport] + set srcPort [dict get $trafficSpec_l4 srcport] + set dstPort [dict get $trafficSpec_l4 dstport] set proto [dict get $trafficSpec_l3 proto] set srcIp [dict get $trafficSpec_l3 srcip] diff --git a/tools/pkt_gen/ixnet/ixnetrfc2544v2.tcl b/tools/pkt_gen/ixnet/ixnetrfc2544v2.tcl new file mode 100755 index 00000000..05899aa5 --- /dev/null +++ b/tools/pkt_gen/ixnet/ixnetrfc2544v2.tcl @@ -0,0 +1,3232 @@ +#!/usr/bin/env tclsh + +# Copyright (c) 2014, Ixia +# Copyright (c) 2015-2016, Intel Corporation +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +# This file is a modified version of a script generated by Ixia +# IxNetwork. + +lappend auto_path [list $lib_path] + +################################################################### +########################## Configuration ########################## +################################################################### + +# verify that the IXIA chassis spec is given + +set reqVars [list "machine" "port" "user" "chassis" "card" "port1" "port2" "output_dir" "bidir"] +set rfc2544test "" + +foreach var $reqVars { + set var_ns [namespace which -variable "$var"] + if { [string compare $var_ns ""] == 0 } { + errorMsg "The '$var' variable is undefined. Did you set it?" + return -1 + } +} + +# machine configuration + +set ::IxNserver $machine +set ::IxNport $port +set ::biDirect $bidir + +# change to windows path format and append directory +set output_dir [string map {"/" "\\"} $output_dir] +set output_dir "$output_dir\\rfctests" +puts "Output directory is $output_dir" + +proc startRfc2544Test { testSpec trafficSpec } { + # Start RFC2544 quicktest. + + # Configure global variables. See documentation on 'global' for more + # information on why this is necessary + # https://www.tcl.tk/man/tcl8.5/tutorial/Tcl13.html + global rfc2544test + global sg_rfc2544throughput + global sg_rfc2544back2back + + # flow spec + + set rfc2544TestType [dict get $testSpec rfc2544TestType] + + set binary [dict get $testSpec binary] + + set duration [dict get $testSpec duration] + + if {$binary} { + set numTrials [dict get $testSpec trials] + set frameRate 100 + set tolerance [dict get $testSpec lossrate] + set loadType binary + } else { + set numTrials 1 + set frameRate [dict get $testSpec framerate] + set tolerance 0.0 + set loadType custom + } + + set learningFrames True + + if {$learningFrames} { + set learningFrequency oncePerTest + set fastPathEnable True + } else { + set learningFrequency never + set fastPathEnable False + } + + set multipleStreams [dict get $testSpec multipleStreams] + if {($multipleStreams < 0)} { + set multipleStreams 0 + } + set numflows 64000 + + if {$multipleStreams} { + if {($multipleStreams > 65535)} { + set numflows 65535 + } else { + set numflows $multipleStreams + } + set multipleStreams increment + } else { + set multipleStreams singleValue + } + + set fastConvergence True + set convergenceDuration [expr $duration/10] + + # traffic spec + + # extract nested dictionaries + set trafficSpec_l2 [dict get $trafficSpec l2] + set trafficSpec_l3 [dict get $trafficSpec l3] + set trafficSpec_l4 [dict get $trafficSpec l4] + set trafficSpec_vlan [dict get $trafficSpec vlan] + + set frameSize [dict get $trafficSpec_l2 framesize] + set srcMac [dict get $trafficSpec_l2 srcmac] + set dstMac [dict get $trafficSpec_l2 dstmac] + + set srcPort [dict get $trafficSpec_l4 srcport] + set dstPort [dict get $trafficSpec_l4 dstport] + + set proto [dict get $trafficSpec_l3 proto] + set proto [string tolower $proto] + set srcIp [dict get $trafficSpec_l3 srcip] + set dstIp [dict get $trafficSpec_l3 dstip] + + # VXLAN + set vxlan_enabled [dict exists $trafficSpec_l4 vni] + if { $vxlan_enabled } { + puts "VXLAN is enabled. Setting VXLAN variables" + set vni [dict get $trafficSpec_l4 vni] + set inner_srcmac [dict get $trafficSpec_l4 inner_srcmac] + set inner_dstmac [dict get $trafficSpec_l4 inner_dstmac] + set inner_srcip [dict get $trafficSpec_l4 inner_srcip] + set inner_dstip [dict get $trafficSpec_l4 inner_dstip] + set inner_proto [dict get $trafficSpec_l4 inner_proto] + set inner_proto [string tolower $inner_proto] + set inner_srcport [dict get $trafficSpec_l4 inner_srcport] + set inner_dstport [dict get $trafficSpec_l4 inner_dstport] + } + + if {$frameSize < 68 } { + if {$rfc2544TestType == "back2back"} { + puts "WARNING: Packet size too small, packet size will be \ + increased to 68 for this test" + } + } + # constants + + set VERSION [package require IxTclNetwork] + + ################################################################### + ############################ Operation ############################ + ################################################################### + + puts "Connecting to IxNetwork machine..." + + ixNet connect $::IxNserver -port $::IxNport -version $VERSION + + puts "Connected to IxNetwork machine" + + puts "Configuring IxNetwork machine..." + + set ::_sg_cc 0 + proc sg_commit {} {ixNet commit} + + ixNet rollback + ixNet setSessionParameter version 6.30.701.16 + ixNet execute newConfig + set ixNetSG_Stack(0) [ixNet getRoot] + + # + # setting global options + # + set sg_top [ixNet getRoot] + ixNet setMultiAttrs $sg_top/availableHardware \ + -offChassisHwM {} \ + -isOffChassis False + ixNet setMultiAttrs $sg_top/globals/preferences \ + -connectPortsOnLoadConfig True \ + -rebootPortsOnConnect False + ixNet setMultiAttrs $sg_top/globals/interfaces \ + -arpOnLinkup True \ + -nsOnLinkup True \ + -sendSingleArpPerGateway True \ + -sendSingleNsPerGateway True + ixNet setMultiAttrs $sg_top/impairment/defaultProfile/checksums \ + -dropRxL2FcsErrors False \ + -correctTxL2FcsErrors False \ + -alwaysCorrectWhenModifying True \ + -correctTxChecksumOverIp False \ + -correctTxIpv4Checksum False + ixNet setMultiAttrs $sg_top/impairment/defaultProfile/rxRateLimit \ + -enabled False \ + -value 8 \ + -units {kKilobitsPerSecond} + ixNet setMultiAttrs $sg_top/impairment/defaultProfile/drop \ + -enabled False \ + -clusterSize 1 \ + -percentRate 0 + ixNet setMultiAttrs $sg_top/impairment/defaultProfile/reorder \ + -enabled False \ + -clusterSize 1 \ + -percentRate 0 \ + -skipCount 1 + ixNet setMultiAttrs $sg_top/impairment/defaultProfile/duplicate \ + -enabled False \ + -clusterSize 1 \ + -percentRate 0 \ + -duplicateCount 1 + ixNet setMultiAttrs $sg_top/impairment/defaultProfile/bitError \ + -enabled False \ + -logRate 3 \ + -skipEndOctets 0 \ + -skipStartOctets 0 + ixNet setMultiAttrs $sg_top/impairment/defaultProfile/delay \ + -enabled False \ + -value 300 \ + -units {kMicroseconds} + ixNet setMultiAttrs $sg_top/impairment/defaultProfile/delayVariation \ + -uniformSpread 0 \ + -enabled False \ + -units {kMicroseconds} \ + -distribution {kUniform} \ + -exponentialMeanArrival 0 \ + -gaussianStandardDeviation 0 + ixNet setMultiAttrs $sg_top/impairment/defaultProfile/customDelayVariation \ + -enabled False \ + -name {} + ixNet setMultiAttrs $sg_top/statistics \ + -additionalFcoeStat2 fcoeInvalidFrames \ + -csvLogPollIntervalMultiplier 1 \ + -pollInterval 2 \ + -guardrailEnabled True \ + -enableCsvLogging False \ + -dataStorePollingIntervalMultiplier 1 \ + -maxNumberOfStatsPerCustomGraph 16 \ + -additionalFcoeStat1 fcoeInvalidDelimiter \ + -timestampPrecision 3 \ + -enableDataCenterSharedStats False \ + -timeSynchronization syncTimeToTestStart \ + -enableAutoDataStore False + ixNet setMultiAttrs $sg_top/statistics/measurementMode \ + -measurementMode mixedMode + ixNet setMultiAttrs $sg_top/eventScheduler \ + -licenseServerLocation {127.0.0.1} + ixNet setMultiAttrs $sg_top/traffic \ + -destMacRetryCount 1 \ + -maxTrafficGenerationQueries 500 \ + -enableStaggeredTransmit False \ + -learningFrameSize $frameSize \ + -useTxRxSync True \ + -enableDestMacRetry True \ + -enableMulticastScalingFactor False \ + -destMacRetryDelay 5 \ + -largeErrorThreshhold 2 \ + -refreshLearnedInfoBeforeApply False \ + -enableMinFrameSize False \ + -macChangeOnFly False \ + -waitTime 1 \ + -enableInstantaneousStatsSupport False \ + -learningFramesCount 10 \ + -globalStreamControl continuous \ + -displayMplsCurrentLabelValue False \ + -mplsLabelLearningTimeout 30 \ + -enableStaggeredStartDelay True \ + -enableDataIntegrityCheck False \ + -enableSequenceChecking False \ + -globalStreamControlIterations 1 \ + -enableStreamOrdering False \ + -frameOrderingMode none \ + -learningFramesRate 100 + ixNet setMultiAttrs $sg_top/traffic/statistics/latency \ + -enabled True \ + -mode storeForward + ixNet setMultiAttrs $sg_top/traffic/statistics/interArrivalTimeRate \ + -enabled False + ixNet setMultiAttrs $sg_top/traffic/statistics/delayVariation \ + -enabled False \ + -statisticsMode rxDelayVariationErrorsAndRate \ + -latencyMode storeForward \ + -largeSequenceNumberErrorThreshold 2 + ixNet setMultiAttrs $sg_top/traffic/statistics/sequenceChecking \ + -enabled False \ + -sequenceMode rxThreshold + ixNet setMultiAttrs $sg_top/traffic/statistics/advancedSequenceChecking \ + -enabled False \ + -advancedSequenceThreshold 1 + ixNet setMultiAttrs $sg_top/traffic/statistics/cpdpConvergence \ + -enabled False \ + -dataPlaneJitterWindow 10485760 \ + -dataPlaneThreshold 95 \ + -enableDataPlaneEventsRateMonitor False \ + -enableControlPlaneEvents False + ixNet setMultiAttrs $sg_top/traffic/statistics/packetLossDuration \ + -enabled False + ixNet setMultiAttrs $sg_top/traffic/statistics/dataIntegrity \ + -enabled False + ixNet setMultiAttrs $sg_top/traffic/statistics/errorStats \ + -enabled False + ixNet setMultiAttrs $sg_top/traffic/statistics/prbs \ + -enabled False + ixNet setMultiAttrs $sg_top/traffic/statistics/iptv \ + -enabled False + ixNet setMultiAttrs $sg_top/traffic/statistics/l1Rates \ + -enabled False + ixNet setMultiAttrs $sg_top/quickTest/globals \ + -productLabel {Your switch/router name here} \ + -serialNumber {Your switch/router serial number here} \ + -version {Your firmware version here} \ + -comments {} \ + -titlePageComments {} \ + -maxLinesToDisplay 100 \ + -enableCheckLinkState False \ + -enableAbortIfLinkDown False \ + -enableSwitchToStats True \ + -enableCapture False \ + -enableSwitchToResult True \ + -enableGenerateReportAfterRun False \ + -enableRebootCpu False \ + -saveCaptureBeforeRun False \ + -linkDownTimeout 5 \ + -sleepTimeAfterReboot 10 \ + -useDefaultRootPath False \ + -outputRootPath $::output_dir + sg_commit + set sg_top [lindex [ixNet remapIds $sg_top] 0] + set ixNetSG_Stack(0) $sg_top + + ### + ### /vport area + ### + + # + # configuring the object that corresponds to /vport:1 + # + set sg_vport [ixNet add $ixNetSG_Stack(0) vport] + ixNet setMultiAttrs $sg_vport \ + -transmitIgnoreLinkStatus False \ + -txGapControlMode averageMode \ + -type tenGigLan \ + -connectedTo ::ixNet::OBJ-null \ + -txMode interleaved \ + -isPullOnly False \ + -rxMode captureAndMeasure \ + -name {10GE LAN - 001} + ixNet setMultiAttrs $sg_vport/l1Config \ + -currentType tenGigLan + ixNet setMultiAttrs $sg_vport/l1Config/tenGigLan \ + -ppm 0 \ + -flowControlDirectedAddress "01 80 C2 00 00 01" \ + -enablePPM False \ + -autoInstrumentation endOfFrame \ + -transmitClocking internal \ + -txIgnoreRxLinkFaults False \ + -loopback False \ + -enableLASIMonitoring False \ + -enabledFlowControl True + ixNet setMultiAttrs $sg_vport/l1Config/tenGigLan/oam \ + -tlvType {00} \ + -linkEvents False \ + -enabled False \ + -vendorSpecificInformation {00 00 00 00} \ + -macAddress "00:00:00:00:00:00" \ + -loopback False \ + -idleTimer 5 \ + -tlvValue {00} \ + -enableTlvOption False \ + -maxOAMPDUSize 64 \ + -organizationUniqueIdentifier {000000} + ixNet setMultiAttrs $sg_vport/l1Config/tenGigLan/fcoe \ + -supportDataCenterMode False \ + -priorityGroupSize priorityGroupSize-8 \ + -pfcPauseDelay 1 \ + -pfcPriorityGroups {0 1 2 3 4 5 6 7} \ + -flowControlType ieee802.1Qbb \ + -enablePFCPauseDelay False + ixNet setMultiAttrs $sg_vport/l1Config/fortyGigLan \ + -ppm 0 \ + -flowControlDirectedAddress "01 80 C2 00 00 01" \ + -enablePPM False \ + -autoInstrumentation endOfFrame \ + -transmitClocking internal \ + -txIgnoreRxLinkFaults False \ + -loopback False \ + -enableLASIMonitoring False \ + -enabledFlowControl False + ixNet setMultiAttrs $sg_vport/l1Config/fortyGigLan/fcoe \ + -supportDataCenterMode False \ + -priorityGroupSize priorityGroupSize-8 \ + -pfcPauseDelay 1 \ + -pfcPriorityGroups {0 1 2 3 4 5 6 7} \ + -flowControlType ieee802.1Qbb \ + -enablePFCPauseDelay False + ixNet setMultiAttrs $sg_vport/l1Config/OAM \ + -tlvType {00} \ + -linkEvents False \ + -enabled False \ + -vendorSpecificInformation {00 00 00 00} \ + -macAddress "00:00:00:00:00:00" \ + -loopback False \ + -idleTimer 5 \ + -tlvValue {00} \ + -enableTlvOption False \ + -maxOAMPDUSize 64 \ + -organizationUniqueIdentifier {000000} + ixNet setMultiAttrs $sg_vport/l1Config/rxFilters/filterPalette \ + -sourceAddress1Mask {00:00:00:00:00:00} \ + -destinationAddress1Mask {00:00:00:00:00:00} \ + -sourceAddress2 {00:00:00:00:00:00} \ + -pattern2OffsetType fromStartOfFrame \ + -pattern2Offset 20 \ + -pattern1Mask {00} \ + -sourceAddress2Mask {00:00:00:00:00:00} \ + -destinationAddress2 {00:00:00:00:00:00} \ + -destinationAddress1 {00:00:00:00:00:00} \ + -sourceAddress1 {00:00:00:00:00:00} \ + -pattern1 {00} \ + -destinationAddress2Mask {00:00:00:00:00:00} \ + -pattern2Mask {00} \ + -pattern1Offset 20 \ + -pattern2 {00} \ + -pattern1OffsetType fromStartOfFrame + ixNet setMultiAttrs $sg_vport/protocols/arp \ + -enabled False + ixNet setMultiAttrs $sg_vport/protocols/bfd \ + -enabled False \ + -intervalValue 0 \ + -packetsPerInterval 0 + ixNet setMultiAttrs $sg_vport/protocols/bgp \ + -autoFillUpDutIp False \ + -disableReceivedUpdateValidation False \ + -enableAdVplsPrefixLengthInBits False \ + -enableExternalActiveConnect True \ + -enableInternalActiveConnect True \ + -enableVpnLabelExchangeOverLsp True \ + -enabled False \ + -externalRetries 0 \ + -externalRetryDelay 120 \ + -internalRetries 0 \ + -internalRetryDelay 120 \ + -mldpP2mpFecType 6 \ + -triggerVplsPwInitiation False + ixNet setMultiAttrs $sg_vport/protocols/cfm \ + -enableOptionalLmFunctionality False \ + -enableOptionalTlvValidation True \ + -enabled False \ + -receiveCcm True \ + -sendCcm True \ + -suppressErrorsOnAis True + ixNet setMultiAttrs $sg_vport/protocols/eigrp \ + -enabled False + ixNet setMultiAttrs $sg_vport/protocols/elmi \ + -enabled False + ixNet setMultiAttrs $sg_vport/protocols/igmp \ + -enabled False \ + -numberOfGroups 0 \ + -numberOfQueries 0 \ + -queryTimePeriod 0 \ + -sendLeaveOnStop True \ + -statsEnabled False \ + -timePeriod 0 + ixNet setMultiAttrs $sg_vport/protocols/isis \ + -allL1RbridgesMac "01:80:c2:00:00:40" \ + -emulationType isisL3Routing \ + -enabled False \ + -helloMulticastMac "01:80:c2:00:00:41" \ + -lspMgroupPdusPerInterval 0 \ + -nlpId 192 \ + -rateControlInterval 0 \ + -sendP2PHellosToUnicastMac True \ + -spbAllL1BridgesMac "09:00:2b:00:00:05" \ + -spbHelloMulticastMac "09:00:2b:00:00:05" \ + -spbNlpId 192 + ixNet setMultiAttrs $sg_vport/protocols/lacp \ + -enablePreservePartnerInfo False \ + -enabled False + ixNet setMultiAttrs $sg_vport/protocols/ldp \ + -enableDiscardSelfAdvFecs False \ + -enableHelloJitter True \ + -enableVpnLabelExchangeOverLsp True \ + -enabled False \ + -helloHoldTime 15 \ + -helloInterval 5 \ + -keepAliveHoldTime 30 \ + -keepAliveInterval 10 \ + -p2mpCapabilityParam 1288 \ + -p2mpFecType 6 \ + -targetedHelloInterval 15 \ + -targetedHoldTime 45 \ + -useTransportLabelsForMplsOam False + ixNet setMultiAttrs $sg_vport/protocols/linkOam \ + -enabled False + ixNet setMultiAttrs $sg_vport/protocols/lisp \ + -burstIntervalInMs 0 \ + -enabled False \ + -ipv4MapRegisterPacketsPerBurst 0 \ + -ipv4MapRequestPacketsPerBurst 0 \ + -ipv4SmrPacketsPerBurst 0 \ + -ipv6MapRegisterPacketsPerBurst 0 \ + -ipv6MapRequestPacketsPerBurst 0 \ + -ipv6SmrPacketsPerBurst 0 + ixNet setMultiAttrs $sg_vport/protocols/mld \ + -enableDoneOnStop True \ + -enabled False \ + -mldv2Report type143 \ + -numberOfGroups 0 \ + -numberOfQueries 0 \ + -queryTimePeriod 0 \ + -timePeriod 0 + ixNet setMultiAttrs $sg_vport/protocols/mplsOam \ + -enabled False + ixNet setMultiAttrs $sg_vport/protocols/mplsTp \ + -apsChannelType {00 02 } \ + -bfdCcChannelType {00 07 } \ + -delayManagementChannelType {00 05 } \ + -enableHighPerformanceMode True \ + -enabled False \ + -faultManagementChannelType {00 58 } \ + -lossMeasurementChannelType {00 04 } \ + -onDemandCvChannelType {00 09 } \ + -pwStatusChannelType {00 0B } \ + -y1731ChannelType {7F FA } + ixNet setMultiAttrs $sg_vport/protocols/ospf \ + -enableDrOrBdr False \ + -enabled False \ + -floodLinkStateUpdatesPerInterval 0 \ + -rateControlInterval 0 + ixNet setMultiAttrs $sg_vport/protocols/ospfV3 \ + -enabled False + ixNet setMultiAttrs $sg_vport/protocols/pimsm \ + -bsmFramePerInterval 0 \ + -crpFramePerInterval 0 \ + -dataMdtFramePerInterval 0 \ + -denyGrePimIpPrefix {0.0.0.0/32} \ + -enableDiscardJoinPruneProcessing False \ + -enableRateControl False \ + -enabled False \ + -helloMsgsPerInterval 0 \ + -interval 0 \ + -joinPruneMessagesPerInterval 0 \ + -registerMessagesPerInterval 0 \ + -registerStopMessagesPerInterval 0 + ixNet setMultiAttrs $sg_vport/protocols/ping \ + -enabled False + ixNet setMultiAttrs $sg_vport/protocols/rip \ + -enabled False + ixNet setMultiAttrs $sg_vport/protocols/ripng \ + -enabled False + ixNet setMultiAttrs $sg_vport/protocols/rsvp \ + -enableControlLspInitiationRate False \ + -enableShowTimeValue False \ + -enableVpnLabelExchangeOverLsp True \ + -enabled False \ + -maxLspInitiationsPerSec 400 \ + -useTransportLabelsForMplsOam False + ixNet setMultiAttrs $sg_vport/protocols/stp \ + -enabled False + ixNet setMultiAttrs $sg_vport/rateControlParameters \ + -maxRequestsPerBurst 1 \ + -maxRequestsPerSec 250 \ + -minRetryInterval 10 \ + -retryCount 3 \ + -sendInBursts False \ + -sendRequestsAsFastAsPossible False + ixNet setMultiAttrs $sg_vport/capture \ + -controlCaptureTrigger {} \ + -controlCaptureFilter {} \ + -hardwareEnabled False \ + -softwareEnabled False \ + -displayFiltersDataCapture {} \ + -displayFiltersControlCapture {} \ + -controlBufferSize 30 \ + -controlBufferBehaviour bufferLiveNonCircular + ixNet setMultiAttrs $sg_vport/protocolStack/options \ + -routerSolicitationDelay 1 \ + -routerSolicitationInterval 4 \ + -routerSolicitations 3 \ + -retransTime 1000 \ + -dadTransmits 1 \ + -dadEnabled True \ + -ipv4RetransTime 3000 \ + -ipv4McastSolicit 4 + sg_commit + set sg_vport [lindex [ixNet remapIds $sg_vport] 0] + set ixNetSG_ref(2) $sg_vport + set ixNetSG_Stack(1) $sg_vport + + # + # configuring the object that corresponds to /vport:1/l1Config/rxFilters/uds:1 + # + set sg_uds $ixNetSG_Stack(1)/l1Config/rxFilters/uds:1 + ixNet setMultiAttrs $sg_uds \ + -destinationAddressSelector anyAddr \ + -customFrameSizeTo 0 \ + -customFrameSizeFrom 0 \ + -error errAnyFrame \ + -patternSelector anyPattern \ + -sourceAddressSelector anyAddr \ + -isEnabled True \ + -frameSizeType any + sg_commit + set sg_uds [lindex [ixNet remapIds $sg_uds] 0] + + # + # configuring the object that corresponds to /vport:1/l1Config/rxFilters/uds:2 + # + set sg_uds $ixNetSG_Stack(1)/l1Config/rxFilters/uds:2 + ixNet setMultiAttrs $sg_uds \ + -destinationAddressSelector anyAddr \ + -customFrameSizeTo 0 \ + -customFrameSizeFrom 0 \ + -error errAnyFrame \ + -patternSelector anyPattern \ + -sourceAddressSelector anyAddr \ + -isEnabled True \ + -frameSizeType any + sg_commit + set sg_uds [lindex [ixNet remapIds $sg_uds] 0] + + # + # configuring the object that corresponds to /vport:1/l1Config/rxFilters/uds:3 + # + set sg_uds $ixNetSG_Stack(1)/l1Config/rxFilters/uds:3 + ixNet setMultiAttrs $sg_uds \ + -destinationAddressSelector anyAddr \ + -customFrameSizeTo 0 \ + -customFrameSizeFrom 0 \ + -error errAnyFrame \ + -patternSelector anyPattern \ + -sourceAddressSelector anyAddr \ + -isEnabled True \ + -frameSizeType any + sg_commit + set sg_uds [lindex [ixNet remapIds $sg_uds] 0] + + # + # configuring the object that corresponds to /vport:1/l1Config/rxFilters/uds:4 + # + set sg_uds $ixNetSG_Stack(1)/l1Config/rxFilters/uds:4 + ixNet setMultiAttrs $sg_uds \ + -destinationAddressSelector anyAddr \ + -customFrameSizeTo 0 \ + -customFrameSizeFrom 0 \ + -error errAnyFrame \ + -patternSelector anyPattern \ + -sourceAddressSelector anyAddr \ + -isEnabled True \ + -frameSizeType any + sg_commit + set sg_uds [lindex [ixNet remapIds $sg_uds] 0] + + # + # configuring the object that corresponds to /vport:1/l1Config/rxFilters/uds:5 + # + set sg_uds $ixNetSG_Stack(1)/l1Config/rxFilters/uds:5 + ixNet setMultiAttrs $sg_uds \ + -destinationAddressSelector anyAddr \ + -customFrameSizeTo 0 \ + -customFrameSizeFrom 0 \ + -error errAnyFrame \ + -patternSelector anyPattern \ + -sourceAddressSelector anyAddr \ + -isEnabled True \ + -frameSizeType any + sg_commit + set sg_uds [lindex [ixNet remapIds $sg_uds] 0] + + # + # configuring the object that corresponds to /vport:1/l1Config/rxFilters/uds:6 + # + set sg_uds $ixNetSG_Stack(1)/l1Config/rxFilters/uds:6 + ixNet setMultiAttrs $sg_uds \ + -destinationAddressSelector anyAddr \ + -customFrameSizeTo 0 \ + -customFrameSizeFrom 0 \ + -error errAnyFrame \ + -patternSelector anyPattern \ + -sourceAddressSelector anyAddr \ + -isEnabled True \ + -frameSizeType any + sg_commit + set sg_uds [lindex [ixNet remapIds $sg_uds] 0] + + # + # configuring the object that corresponds to /vport:1/protocols/static/lan:1 + # + set sg_lan [ixNet add $ixNetSG_Stack(1)/protocols/static lan] + ixNet setMultiAttrs $sg_lan \ + -atmEncapsulation ::ixNet::OBJ-null \ + -count 1 \ + -countPerVc 1 \ + -enableIncrementMac False \ + -enableIncrementVlan False \ + -enableSiteId False \ + -enableVlan False \ + -enabled True \ + -frEncapsulation ::ixNet::OBJ-null \ + -incrementPerVcVlanMode noIncrement \ + -incrementVlanMode noIncrement \ + -mac $srcMac \ + -macRangeMode normal \ + -numberOfVcs 1 \ + -siteId 0 \ + -skipVlanIdZero True \ + -tpid {0x8100} \ + -trafficGroupId ::ixNet::OBJ-null \ + -vlanCount 1 \ + -vlanId {1} \ + -vlanPriority {0} + sg_commit + set sg_lan [lindex [ixNet remapIds $sg_lan] 0] + + # + # configuring the object that corresponds to /vport:2 + # + set sg_vport [ixNet add $ixNetSG_Stack(0) vport] + ixNet setMultiAttrs $sg_vport \ + -transmitIgnoreLinkStatus False \ + -txGapControlMode averageMode \ + -type tenGigLan \ + -connectedTo ::ixNet::OBJ-null \ + -txMode interleaved \ + -isPullOnly False \ + -rxMode captureAndMeasure \ + -name {10GE LAN - 002} + ixNet setMultiAttrs $sg_vport/l1Config \ + -currentType tenGigLan + ixNet setMultiAttrs $sg_vport/l1Config/tenGigLan \ + -ppm 0 \ + -flowControlDirectedAddress "01 80 C2 00 00 01" \ + -enablePPM False \ + -autoInstrumentation endOfFrame \ + -transmitClocking internal \ + -txIgnoreRxLinkFaults False \ + -loopback False \ + -enableLASIMonitoring False \ + -enabledFlowControl False + ixNet setMultiAttrs $sg_vport/l1Config/tenGigLan/oam \ + -tlvType {00} \ + -linkEvents False \ + -enabled False \ + -vendorSpecificInformation {00 00 00 00} \ + -macAddress "00:00:00:00:00:00" \ + -loopback False \ + -idleTimer 5 \ + -tlvValue {00} \ + -enableTlvOption False \ + -maxOAMPDUSize 64 \ + -organizationUniqueIdentifier {000000} + ixNet setMultiAttrs $sg_vport/l1Config/tenGigLan/fcoe \ + -supportDataCenterMode False \ + -priorityGroupSize priorityGroupSize-8 \ + -pfcPauseDelay 1 \ + -pfcPriorityGroups {0 1 2 3 4 5 6 7} \ + -flowControlType ieee802.1Qbb \ + -enablePFCPauseDelay False + ixNet setMultiAttrs $sg_vport/l1Config/fortyGigLan \ + -ppm 0 \ + -flowControlDirectedAddress "01 80 C2 00 00 01" \ + -enablePPM False \ + -autoInstrumentation endOfFrame \ + -transmitClocking internal \ + -txIgnoreRxLinkFaults False \ + -loopback False \ + -enableLASIMonitoring False \ + -enabledFlowControl False + ixNet setMultiAttrs $sg_vport/l1Config/fortyGigLan/fcoe \ + -supportDataCenterMode False \ + -priorityGroupSize priorityGroupSize-8 \ + -pfcPauseDelay 1 \ + -pfcPriorityGroups {0 1 2 3 4 5 6 7} \ + -flowControlType ieee802.1Qbb \ + -enablePFCPauseDelay False + ixNet setMultiAttrs $sg_vport/l1Config/OAM \ + -tlvType {00} \ + -linkEvents False \ + -enabled False \ + -vendorSpecificInformation {00 00 00 00} \ + -macAddress "00:00:00:00:00:00" \ + -loopback False \ + -idleTimer 5 \ + -tlvValue {00} \ + -enableTlvOption False \ + -maxOAMPDUSize 64 \ + -organizationUniqueIdentifier {000000} + ixNet setMultiAttrs $sg_vport/l1Config/rxFilters/filterPalette \ + -sourceAddress1Mask {00:00:00:00:00:00} \ + -destinationAddress1Mask {00:00:00:00:00:00} \ + -sourceAddress2 {00:00:00:00:00:00} \ + -pattern2OffsetType fromStartOfFrame \ + -pattern2Offset 20 \ + -pattern1Mask {00} \ + -sourceAddress2Mask {00:00:00:00:00:00} \ + -destinationAddress2 {00:00:00:00:00:00} \ + -destinationAddress1 {00:00:00:00:00:00} \ + -sourceAddress1 {00:00:00:00:00:00} \ + -pattern1 {00} \ + -destinationAddress2Mask {00:00:00:00:00:00} \ + -pattern2Mask {00} \ + -pattern1Offset 20 \ + -pattern2 {00} \ + -pattern1OffsetType fromStartOfFrame + ixNet setMultiAttrs $sg_vport/protocols/arp \ + -enabled False + ixNet setMultiAttrs $sg_vport/protocols/bfd \ + -enabled False \ + -intervalValue 0 \ + -packetsPerInterval 0 + ixNet setMultiAttrs $sg_vport/protocols/bgp \ + -autoFillUpDutIp False \ + -disableReceivedUpdateValidation False \ + -enableAdVplsPrefixLengthInBits False \ + -enableExternalActiveConnect True \ + -enableInternalActiveConnect True \ + -enableVpnLabelExchangeOverLsp True \ + -enabled False \ + -externalRetries 0 \ + -externalRetryDelay 120 \ + -internalRetries 0 \ + -internalRetryDelay 120 \ + -mldpP2mpFecType 6 \ + -triggerVplsPwInitiation False + ixNet setMultiAttrs $sg_vport/protocols/cfm \ + -enableOptionalLmFunctionality False \ + -enableOptionalTlvValidation True \ + -enabled False \ + -receiveCcm True \ + -sendCcm True \ + -suppressErrorsOnAis True + ixNet setMultiAttrs $sg_vport/protocols/eigrp \ + -enabled False + ixNet setMultiAttrs $sg_vport/protocols/elmi \ + -enabled False + ixNet setMultiAttrs $sg_vport/protocols/igmp \ + -enabled False \ + -numberOfGroups 0 \ + -numberOfQueries 0 \ + -queryTimePeriod 0 \ + -sendLeaveOnStop True \ + -statsEnabled False \ + -timePeriod 0 + ixNet setMultiAttrs $sg_vport/protocols/isis \ + -allL1RbridgesMac "01:80:c2:00:00:40" \ + -emulationType isisL3Routing \ + -enabled False \ + -helloMulticastMac "01:80:c2:00:00:41" \ + -lspMgroupPdusPerInterval 0 \ + -nlpId 192 \ + -rateControlInterval 0 \ + -sendP2PHellosToUnicastMac True \ + -spbAllL1BridgesMac "09:00:2b:00:00:05" \ + -spbHelloMulticastMac "09:00:2b:00:00:05" \ + -spbNlpId 192 + ixNet setMultiAttrs $sg_vport/protocols/lacp \ + -enablePreservePartnerInfo False \ + -enabled False + ixNet setMultiAttrs $sg_vport/protocols/ldp \ + -enableDiscardSelfAdvFecs False \ + -enableHelloJitter True \ + -enableVpnLabelExchangeOverLsp True \ + -enabled False \ + -helloHoldTime 15 \ + -helloInterval 5 \ + -keepAliveHoldTime 30 \ + -keepAliveInterval 10 \ + -p2mpCapabilityParam 1288 \ + -p2mpFecType 6 \ + -targetedHelloInterval 15 \ + -targetedHoldTime 45 \ + -useTransportLabelsForMplsOam False + ixNet setMultiAttrs $sg_vport/protocols/linkOam \ + -enabled False + ixNet setMultiAttrs $sg_vport/protocols/lisp \ + -burstIntervalInMs 0 \ + -enabled False \ + -ipv4MapRegisterPacketsPerBurst 0 \ + -ipv4MapRequestPacketsPerBurst 0 \ + -ipv4SmrPacketsPerBurst 0 \ + -ipv6MapRegisterPacketsPerBurst 0 \ + -ipv6MapRequestPacketsPerBurst 0 \ + -ipv6SmrPacketsPerBurst 0 + ixNet setMultiAttrs $sg_vport/protocols/mld \ + -enableDoneOnStop True \ + -enabled False \ + -mldv2Report type143 \ + -numberOfGroups 0 \ + -numberOfQueries 0 \ + -queryTimePeriod 0 \ + -timePeriod 0 + ixNet setMultiAttrs $sg_vport/protocols/mplsOam \ + -enabled False + ixNet setMultiAttrs $sg_vport/protocols/mplsTp \ + -apsChannelType {00 02 } \ + -bfdCcChannelType {00 07 } \ + -delayManagementChannelType {00 05 } \ + -enableHighPerformanceMode True \ + -enabled False \ + -faultManagementChannelType {00 58 } \ + -lossMeasurementChannelType {00 04 } \ + -onDemandCvChannelType {00 09 } \ + -pwStatusChannelType {00 0B } \ + -y1731ChannelType {7F FA } + ixNet setMultiAttrs $sg_vport/protocols/ospf \ + -enableDrOrBdr False \ + -enabled False \ + -floodLinkStateUpdatesPerInterval 0 \ + -rateControlInterval 0 + ixNet setMultiAttrs $sg_vport/protocols/ospfV3 \ + -enabled False + ixNet setMultiAttrs $sg_vport/protocols/pimsm \ + -bsmFramePerInterval 0 \ + -crpFramePerInterval 0 \ + -dataMdtFramePerInterval 0 \ + -denyGrePimIpPrefix {0.0.0.0/32} \ + -enableDiscardJoinPruneProcessing False \ + -enableRateControl False \ + -enabled False \ + -helloMsgsPerInterval 0 \ + -interval 0 \ + -joinPruneMessagesPerInterval 0 \ + -registerMessagesPerInterval 0 \ + -registerStopMessagesPerInterval 0 + ixNet setMultiAttrs $sg_vport/protocols/ping \ + -enabled False + ixNet setMultiAttrs $sg_vport/protocols/rip \ + -enabled False + ixNet setMultiAttrs $sg_vport/protocols/ripng \ + -enabled False + ixNet setMultiAttrs $sg_vport/protocols/rsvp \ + -enableControlLspInitiationRate False \ + -enableShowTimeValue False \ + -enableVpnLabelExchangeOverLsp True \ + -enabled False \ + -maxLspInitiationsPerSec 400 \ + -useTransportLabelsForMplsOam False + ixNet setMultiAttrs $sg_vport/protocols/stp \ + -enabled False + ixNet setMultiAttrs $sg_vport/rateControlParameters \ + -maxRequestsPerBurst 1 \ + -maxRequestsPerSec 250 \ + -minRetryInterval 10 \ + -retryCount 3 \ + -sendInBursts False \ + -sendRequestsAsFastAsPossible False + ixNet setMultiAttrs $sg_vport/capture \ + -controlCaptureTrigger {} \ + -controlCaptureFilter {} \ + -hardwareEnabled False \ + -softwareEnabled False \ + -displayFiltersDataCapture {} \ + -displayFiltersControlCapture {} \ + -controlBufferSize 30 \ + -controlBufferBehaviour bufferLiveNonCircular + ixNet setMultiAttrs $sg_vport/protocolStack/options \ + -routerSolicitationDelay 1 \ + -routerSolicitationInterval 4 \ + -routerSolicitations 3 \ + -retransTime 1000 \ + -dadTransmits 1 \ + -dadEnabled True \ + -ipv4RetransTime 3000 \ + -ipv4McastSolicit 4 + sg_commit + set sg_vport [lindex [ixNet remapIds $sg_vport] 0] + set ixNetSG_ref(10) $sg_vport + set ixNetSG_Stack(1) $sg_vport + + # + # configuring the object that corresponds to /vport:2/l1Config/rxFilters/uds:1 + # + set sg_uds $ixNetSG_Stack(1)/l1Config/rxFilters/uds:1 + ixNet setMultiAttrs $sg_uds \ + -destinationAddressSelector anyAddr \ + -customFrameSizeTo 0 \ + -customFrameSizeFrom 0 \ + -error errAnyFrame \ + -patternSelector anyPattern \ + -sourceAddressSelector anyAddr \ + -isEnabled True \ + -frameSizeType any + sg_commit + set sg_uds [lindex [ixNet remapIds $sg_uds] 0] + + # + # configuring the object that corresponds to /vport:2/l1Config/rxFilters/uds:2 + # + set sg_uds $ixNetSG_Stack(1)/l1Config/rxFilters/uds:2 + ixNet setMultiAttrs $sg_uds \ + -destinationAddressSelector anyAddr \ + -customFrameSizeTo 0 \ + -customFrameSizeFrom 0 \ + -error errAnyFrame \ + -patternSelector anyPattern \ + -sourceAddressSelector anyAddr \ + -isEnabled True \ + -frameSizeType any + sg_commit + set sg_uds [lindex [ixNet remapIds $sg_uds] 0] + + # + # configuring the object that corresponds to /vport:2/l1Config/rxFilters/uds:3 + # + set sg_uds $ixNetSG_Stack(1)/l1Config/rxFilters/uds:3 + ixNet setMultiAttrs $sg_uds \ + -destinationAddressSelector anyAddr \ + -customFrameSizeTo 0 \ + -customFrameSizeFrom 0 \ + -error errAnyFrame \ + -patternSelector anyPattern \ + -sourceAddressSelector anyAddr \ + -isEnabled True \ + -frameSizeType any + sg_commit + set sg_uds [lindex [ixNet remapIds $sg_uds] 0] + + # + # configuring the object that corresponds to /vport:2/l1Config/rxFilters/uds:4 + # + set sg_uds $ixNetSG_Stack(1)/l1Config/rxFilters/uds:4 + ixNet setMultiAttrs $sg_uds \ + -destinationAddressSelector anyAddr \ + -customFrameSizeTo 0 \ + -customFrameSizeFrom 0 \ + -error errAnyFrame \ + -patternSelector anyPattern \ + -sourceAddressSelector anyAddr \ + -isEnabled True \ + -frameSizeType any + sg_commit + set sg_uds [lindex [ixNet remapIds $sg_uds] 0] + + # + # configuring the object that corresponds to /vport:2/l1Config/rxFilters/uds:5 + # + set sg_uds $ixNetSG_Stack(1)/l1Config/rxFilters/uds:5 + ixNet setMultiAttrs $sg_uds \ + -destinationAddressSelector anyAddr \ + -customFrameSizeTo 0 \ + -customFrameSizeFrom 0 \ + -error errAnyFrame \ + -patternSelector anyPattern \ + -sourceAddressSelector anyAddr \ + -isEnabled True \ + -frameSizeType any + sg_commit + set sg_uds [lindex [ixNet remapIds $sg_uds] 0] + + # + # configuring the object that corresponds to /vport:2/l1Config/rxFilters/uds:6 + # + set sg_uds $ixNetSG_Stack(1)/l1Config/rxFilters/uds:6 + ixNet setMultiAttrs $sg_uds \ + -destinationAddressSelector anyAddr \ + -customFrameSizeTo 0 \ + -customFrameSizeFrom 0 \ + -error errAnyFrame \ + -patternSelector anyPattern \ + -sourceAddressSelector anyAddr \ + -isEnabled True \ + -frameSizeType any + sg_commit + set sg_uds [lindex [ixNet remapIds $sg_uds] 0] + + # + # configuring the object that corresponds to /vport:2/protocols/static/lan:1 + # + set sg_lan [ixNet add $ixNetSG_Stack(1)/protocols/static lan] + ixNet setMultiAttrs $sg_lan \ + -atmEncapsulation ::ixNet::OBJ-null \ + -count 1 \ + -countPerVc 1 \ + -enableIncrementMac False \ + -enableIncrementVlan False \ + -enableSiteId False \ + -enableVlan False \ + -enabled True \ + -frEncapsulation ::ixNet::OBJ-null \ + -incrementPerVcVlanMode noIncrement \ + -incrementVlanMode noIncrement \ + -mac $dstMac \ + -macRangeMode normal \ + -numberOfVcs 1 \ + -siteId 0 \ + -skipVlanIdZero True \ + -tpid {0x8100} \ + -trafficGroupId ::ixNet::OBJ-null \ + -vlanCount 1 \ + -vlanId {1} \ + -vlanPriority {0} + sg_commit + set sg_lan [lindex [ixNet remapIds $sg_lan] 0] + + ### + ### /availableHardware area + ### + + # + # configuring the object that corresponds to /availableHardware/chassis" + # + set sg_chassis [ixNet add $ixNetSG_Stack(0)/availableHardware chassis] + ixNet setMultiAttrs $sg_chassis \ + -masterChassis {} \ + -sequenceId 1 \ + -cableLength 0 \ + -hostname $::chassis + sg_commit + set sg_chassis [lindex [ixNet remapIds $sg_chassis] 0] + set ixNetSG_Stack(1) $sg_chassis + + # + # configuring the object that corresponds to /availableHardware/chassis/card + # + set sg_card $ixNetSG_Stack(1)/card:$::card + ixNet setMultiAttrs $sg_card \ + -aggregationMode normal + sg_commit + set sg_card [lindex [ixNet remapIds $sg_card] 0] + set ixNetSG_ref(19) $sg_card + set ixNetSG_Stack(2) $sg_card + + # + # configuring the object that corresponds to /availableHardware/chassis/card/aggregation:1 + # + set sg_aggregation $ixNetSG_Stack(2)/aggregation:1 + ixNet setMultiAttrs $sg_aggregation \ + -mode normal + sg_commit + set sg_aggregation [lindex [ixNet remapIds $sg_aggregation] 0] + + # + # configuring the object that corresponds to /availableHardware/chassis/card/aggregation:2 + # + set sg_aggregation $ixNetSG_Stack(2)/aggregation:2 + ixNet setMultiAttrs $sg_aggregation \ + -mode normal + sg_commit + set sg_aggregation [lindex [ixNet remapIds $sg_aggregation] 0] + + # + # configuring the object that corresponds to /availableHardware/chassis/card/aggregation:3 + # + set sg_aggregation $ixNetSG_Stack(2)/aggregation:3 + ixNet setMultiAttrs $sg_aggregation \ + -mode normal + sg_commit + set sg_aggregation [lindex [ixNet remapIds $sg_aggregation] 0] + + # + # configuring the object that corresponds to /availableHardware/chassis/card/aggregation:4 + # + set sg_aggregation $ixNetSG_Stack(2)/aggregation:4 + ixNet setMultiAttrs $sg_aggregation \ + -mode normal + sg_commit + set sg_aggregation [lindex [ixNet remapIds $sg_aggregation] 0] + ixNet setMultiAttrs $ixNetSG_ref(2) \ + -connectedTo $ixNetSG_ref(19)/port:$::port1 + sg_commit + ixNet setMultiAttrs $ixNetSG_ref(10) \ + -connectedTo $ixNetSG_ref(19)/port:$::port2 + sg_commit + sg_commit + + ### + ### /impairment area + ### + + # + # configuring the object that corresponds to /impairment/profile:3 + # + set sg_profile [ixNet add $ixNetSG_Stack(0)/impairment profile] + ixNet setMultiAttrs $sg_profile \ + -enabled False \ + -name {Impairment Profile 1} \ + -links {} \ + -allLinks True \ + -priority 1 + ixNet setMultiAttrs $sg_profile/checksums \ + -dropRxL2FcsErrors False \ + -correctTxL2FcsErrors False \ + -alwaysCorrectWhenModifying True \ + -correctTxChecksumOverIp False \ + -correctTxIpv4Checksum False + ixNet setMultiAttrs $sg_profile/rxRateLimit \ + -enabled False \ + -value 8 \ + -units {kKilobitsPerSecond} + ixNet setMultiAttrs $sg_profile/drop \ + -enabled True \ + -clusterSize 1 \ + -percentRate 0 + ixNet setMultiAttrs $sg_profile/reorder \ + -enabled False \ + -clusterSize 1 \ + -percentRate 0 \ + -skipCount 1 + ixNet setMultiAttrs $sg_profile/duplicate \ + -enabled False \ + -clusterSize 1 \ + -percentRate 0 \ + -duplicateCount 1 + ixNet setMultiAttrs $sg_profile/bitError \ + -enabled False \ + -logRate 3 \ + -skipEndOctets 0 \ + -skipStartOctets 0 + ixNet setMultiAttrs $sg_profile/delay \ + -enabled True \ + -value 300 \ + -units {kMicroseconds} + ixNet setMultiAttrs $sg_profile/delayVariation \ + -uniformSpread 0 \ + -enabled False \ + -units {kMicroseconds} \ + -distribution {kUniform} \ + -exponentialMeanArrival 0 \ + -gaussianStandardDeviation 0 + ixNet setMultiAttrs $sg_profile/customDelayVariation \ + -enabled False \ + -name {} + sg_commit + set sg_profile [lindex [ixNet remapIds $sg_profile] 0] + set ixNetSG_Stack(1) $sg_profile + + # + # configuring the object that corresponds to /impairment/profile:3/fixedClassifier:1 + # + set sg_fixedClassifier [ixNet add $ixNetSG_Stack(1) fixedClassifier] + sg_commit + set sg_fixedClassifier [lindex [ixNet remapIds $sg_fixedClassifier] 0] + + ### + ### /traffic area + ### + + # + # configuring the object that corresponds to /traffic/trafficItem:1 + # + set sg_trafficItem [ixNet add $ixNetSG_Stack(0)/traffic trafficItem] + ixNet setMultiAttrs $sg_trafficItem \ + -transportRsvpTePreference one \ + -trafficItemType l2L3 \ + -biDirectional $::biDirect \ + -mergeDestinations True \ + -hostsPerNetwork 1 \ + -transmitMode interleaved \ + -ordinalNo 0 \ + -trafficType {ethernetVlan} \ + -interAsLdpPreference two \ + -allowSelfDestined False \ + -enabled True \ + -maxNumberOfVpnLabelStack 2 \ + -interAsBgpPreference one \ + -suspend False \ + -transportLdpPreference two \ + -egressEnabled False \ + -enableDynamicMplsLabelValues False \ + -routeMesh oneToOne \ + -name {Traffic Item 1} \ + -srcDestMesh oneToOne + sg_commit + set sg_trafficItem [lindex [ixNet remapIds $sg_trafficItem] 0] + set ixNetSG_ref(26) $sg_trafficItem + set ixNetSG_Stack(1) $sg_trafficItem + + # + # configuring the object that corresponds to /traffic/trafficItem:1/endpointSet:1 + # + set sg_endpointSet [ixNet add $ixNetSG_Stack(1) endpointSet] + ixNet setMultiAttrs $sg_endpointSet \ + -destinations [list $ixNetSG_ref(10)/protocols] \ + -destinationFilter {} \ + -sourceFilter {} \ + -trafficGroups {} \ + -sources [list $ixNetSG_ref(2)/protocols] \ + -name {EndpointSet-1} + sg_commit + set sg_endpointSet [lindex [ixNet remapIds $sg_endpointSet] 0] + + # + # configuring the object that corresponds to /traffic/trafficItem:1/configElement:1 + # + set sg_configElement $ixNetSG_Stack(1)/configElement:1 + ixNet setMultiAttrs $sg_configElement \ + -crc goodCrc \ + -preambleCustomSize 8 \ + -enableDisparityError False \ + -preambleFrameSizeMode auto \ + -destinationMacMode manual + ixNet setMultiAttrs $sg_configElement/frameSize \ + -weightedPairs {} \ + -fixedSize 64 \ + -incrementFrom 64 \ + -randomMin 64 \ + -randomMax 1518 \ + -quadGaussian {} \ + -type fixed \ + -presetDistribution cisco \ + -incrementStep 1 \ + -incrementTo 1518 + ixNet setMultiAttrs $sg_configElement/frameRate \ + -bitRateUnitsType bitsPerSec \ + -rate 10 \ + -enforceMinimumInterPacketGap 0 \ + -type percentLineRate \ + -interPacketGapUnitsType nanoseconds + ixNet setMultiAttrs $sg_configElement/framePayload \ + -type incrementByte \ + -customRepeat True \ + -customPattern {} + ixNet setMultiAttrs $sg_configElement/frameRateDistribution \ + -streamDistribution applyRateToAll \ + -portDistribution applyRateToAll + ixNet setMultiAttrs $sg_configElement/transmissionControl \ + -frameCount 1 \ + -minGapBytes 12 \ + -interStreamGap 0 \ + -interBurstGap 0 \ + -interBurstGapUnits nanoseconds \ + -type continuous \ + -duration 1 \ + -repeatBurst 1 \ + -enableInterStreamGap False \ + -startDelayUnits bytes \ + -iterationCount 1 \ + -burstPacketCount 1 \ + -enableInterBurstGap False \ + -startDelay 0 + sg_commit + set sg_configElement [lindex [ixNet remapIds $sg_configElement] 0] + set ixNetSG_Stack(2) $sg_configElement + + # + # configuring the object that corresponds to /traffic/trafficItem:1/configElement:1/stack:"ethernet-1" + # + set sg_stack $ixNetSG_Stack(2)/stack:"ethernet-1" + sg_commit + set sg_stack [lindex [ixNet remapIds $sg_stack] 0] + set ixNetSG_Stack(3) $sg_stack + + # + # configuring the object that corresponds to /traffic/trafficItem:1/configElement:1/stack:"ethernet-1"/field:"ethernet.header.destinationAddress-1" + # + set sg_field $ixNetSG_Stack(3)/field:"ethernet.header.destinationAddress-1" + ixNet setMultiAttrs $sg_field \ + -singleValue {00:00:00:00:00:00} \ + -seed {1} \ + -optionalEnabled True \ + -fullMesh False \ + -valueList {{00:00:00:00:00:00}} \ + -stepValue {00:00:00:00:00:00} \ + -fixedBits {00:00:00:00:00:00} \ + -fieldValue {00:00:00:00:00:00} \ + -auto False \ + -randomMask {00:00:00:00:00:00} \ + -trackingEnabled False \ + -valueType singleValue \ + -activeFieldChoice False \ + -startValue {00:00:00:00:00:00} \ + -countValue {1} + sg_commit + set sg_field [lindex [ixNet remapIds $sg_field] 0] + + # + # configuring the object that corresponds to /traffic/trafficItem:1/configElement:1/stack:"ethernet-1"/field:"ethernet.header.sourceAddress-2" + # + set sg_field $ixNetSG_Stack(3)/field:"ethernet.header.sourceAddress-2" + ixNet setMultiAttrs $sg_field \ + -singleValue {00:00:00:00:00:00} \ + -seed {1} \ + -optionalEnabled True \ + -fullMesh False \ + -valueList {{00:00:00:00:00:00}} \ + -stepValue {00:00:00:00:00:00} \ + -fixedBits {00:00:00:00:00:00} \ + -fieldValue {00:00:00:00:00:00} \ + -auto False \ + -randomMask {00:00:00:00:00:00} \ + -trackingEnabled False \ + -valueType singleValue \ + -activeFieldChoice False \ + -startValue {00:00:00:00:00:00} \ + -countValue {1} + sg_commit + set sg_field [lindex [ixNet remapIds $sg_field] 0] + + # + # configuring the object that corresponds to /traffic/trafficItem:1/configElement:1/stack:"ethernet-1"/field:"ethernet.header.etherType-3" + # + set sg_field $ixNetSG_Stack(3)/field:"ethernet.header.etherType-3" + ixNet setMultiAttrs $sg_field \ + -singleValue {800} \ + -seed {1} \ + -optionalEnabled True \ + -fullMesh False \ + -valueList {{0xFFFF}} \ + -stepValue {0xFFFF} \ + -fixedBits {0xFFFF} \ + -fieldValue {800} \ + -auto True \ + -randomMask {0xFFFF} \ + -trackingEnabled False \ + -valueType singleValue \ + -activeFieldChoice False \ + -startValue {0xFFFF} \ + -countValue {1} + sg_commit + set sg_field [lindex [ixNet remapIds $sg_field] 0] + + # + # configuring the object that corresponds to /traffic/trafficItem:1/configElement:1/stack:"ipv4-2" + # + set sg_stack $ixNetSG_Stack(2)/stack:"ipv4-2" + sg_commit + set sg_stack [lindex [ixNet remapIds $sg_stack] 0] + set ixNetSG_Stack(3) $sg_stack + + # + # configuring the object that corresponds to /traffic/trafficItem:1/configElement:1/stack:"ipv4-2"/field:"ipv4.header.version-1" + # + set sg_field $ixNetSG_Stack(3)/field:"ipv4.header.version-1" + ixNet setMultiAttrs $sg_field \ + -singleValue {4} \ + -seed {1} \ + -optionalEnabled True \ + -fullMesh False \ + -valueList {{4}} \ + -stepValue {4} \ + -fixedBits {4} \ + -fieldValue {4} \ + -auto False \ + -randomMask {4} \ + -trackingEnabled False \ + -valueType singleValue \ + -activeFieldChoice False \ + -startValue {4} \ + -countValue {1} + + # + # configuring the object that corresponds to /traffic/trafficItem:1/configElement:1/stack:"ipv4-2"/field:"ipv4.header.protocol-25" + # + set sg_field $ixNetSG_Stack(3)/field:"ipv4.header.protocol-25" + ixNet setMultiAttrs $sg_field \ + -singleValue {17} \ + -seed {1} \ + -optionalEnabled True \ + -fullMesh False \ + -valueList {{61}} \ + -stepValue {61} \ + -fixedBits {61} \ + -fieldValue {$proto} \ + -auto True \ + -randomMask {61} \ + -trackingEnabled False \ + -valueType singleValue \ + -activeFieldChoice False \ + -startValue {61} \ + -countValue {1} + + # + # configuring the object that corresponds to /traffic/trafficItem:1/configElement:1/stack:"ipv4-2"/field:"ipv4.header.checksum-26" + # + set sg_field $ixNetSG_Stack(3)/field:"ipv4.header.checksum-26" + ixNet setMultiAttrs $sg_field \ + -singleValue {0} \ + -seed {1} \ + -optionalEnabled True \ + -fullMesh False \ + -valueList {{0}} \ + -stepValue {0} \ + -fixedBits {0} \ + -fieldValue {0} \ + -auto True \ + -randomMask {0} \ + -trackingEnabled False \ + -valueType singleValue \ + -activeFieldChoice False \ + -startValue {0} \ + -countValue {1} + + # + # configuring the object that corresponds to /traffic/trafficItem:1/configElement:1/stack:"ipv4-2"/field:"ipv4.header.srcIp-27" + # + set sg_field $ixNetSG_Stack(3)/field:"ipv4.header.srcIp-27" + ixNet setMultiAttrs $sg_field \ + -singleValue $srcIp \ + -seed {1} \ + -optionalEnabled True \ + -fullMesh False \ + -valueList {{0.0.0.0}} \ + -stepValue {0.0.0.0} \ + -fixedBits {0.0.0.0} \ + -fieldValue $srcIp \ + -auto False \ + -randomMask {0.0.0.0} \ + -trackingEnabled False \ + -valueType singleValue \ + -activeFieldChoice False \ + -startValue {0.0.0.0} \ + -countValue {1} + + # + # configuring the object that corresponds to /traffic/trafficItem:1/configElement:1/stack:"ipv4-2"/field:"ipv4.header.dstIp-28" + # + set sg_field $ixNetSG_Stack(3)/field:"ipv4.header.dstIp-28" + ixNet setMultiAttrs $sg_field \ + -singleValue $dstIp \ + -seed {1} \ + -optionalEnabled True \ + -fullMesh False \ + -valueList {{0.0.0.0}} \ + -stepValue {0.0.0.0} \ + -fixedBits {0.0.0.0} \ + -fieldValue $dstIp \ + -auto False \ + -randomMask {0.0.0.0} \ + -trackingEnabled False \ + -valueType singleValue \ + -activeFieldChoice False \ + -startValue {0.0.0.0} \ + -countValue {1} + #sg_commit + #set sg_field [lindex [ixNet remapIds $sg_field] 0] + + # + # configuring the object that corresponds to /traffic/trafficItem:1/configElement:1/stack:"ipv4-2"/field:"ipv4.header.options.pad-58" + # + set sg_field $ixNetSG_Stack(3)/field:"ipv4.header.options.pad-58" + ixNet setMultiAttrs $sg_field \ + -singleValue {0} \ + -seed {1} \ + -optionalEnabled False \ + -fullMesh False \ + -valueList {{0}} \ + -stepValue {0} \ + -fixedBits {0} \ + -fieldValue {0} \ + -auto True \ + -randomMask {0} \ + -trackingEnabled False \ + -valueType singleValue \ + -activeFieldChoice False \ + -startValue {0} \ + -countValue {1} + + + if { [string compare $proto "udp"] == 0 } { + # configuring the object that corresponds to /traffic/trafficItem:1/configElement:1/stack:"udp-3" + # + set sg_stack $ixNetSG_Stack(2)/stack:"udp-3" + sg_commit + set sg_stack [lindex [ixNet remapIds $sg_stack] 0] + set ixNetSG_Stack(3) $sg_stack + + # + # configuring the object that corresponds to /traffic/trafficItem:1/configElement:1/stack:"udp-3"/field:"udp.header.srcPort-1" + # + set sg_field $ixNetSG_Stack(3)/field:"udp.header.srcPort-1" + ixNet setMultiAttrs $sg_field \ + -singleValue $srcPort \ + -seed {1} \ + -optionalEnabled True \ + -fullMesh False \ + -valueList {{63}} \ + -stepValue {63} \ + -fixedBits {63} \ + -fieldValue {$srcPort} \ + -auto True \ + -randomMask {63} \ + -trackingEnabled False \ + -valueType singleValue \ + -activeFieldChoice False \ + -startValue {63} \ + -countValue {1} + + # + # configuring the object that corresponds to /traffic/trafficItem:1/configElement:1/stack:"udp-3"/field:"udp.header.dstPort-2" + # + set sg_field $ixNetSG_Stack(3)/field:"udp.header.dstPort-2" + ixNet setMultiAttrs $sg_field \ + -singleValue $dstPort \ + -seed {1} \ + -optionalEnabled True \ + -fullMesh False \ + -valueList {{63}} \ + -stepValue {1} \ + -fixedBits {63} \ + -fieldValue $dstPort \ + -auto False \ + -randomMask {63} \ + -trackingEnabled False \ + -valueType $multipleStreams \ + -activeFieldChoice False \ + -startValue {0} \ + -countValue $numflows + + # + # configuring the object that corresponds to /traffic/trafficItem:1/configElement:1/stack:"udp-3"/field:"udp.header.length-3" + # + set sg_field $ixNetSG_Stack(3)/field:"udp.header.length-3" + ixNet setMultiAttrs $sg_field \ + -singleValue {26} \ + -seed {1} \ + -optionalEnabled True \ + -fullMesh False \ + -valueList {{8}} \ + -stepValue {8} \ + -fixedBits {8} \ + -fieldValue {26} \ + -auto True \ + -randomMask {8} \ + -trackingEnabled False \ + -valueType singleValue \ + -activeFieldChoice False \ + -startValue {8} \ + -countValue {1} + + # + # configuring the object that corresponds to /traffic/trafficItem:1/configElement:1/stack:"udp-3"/field:"udp.header.checksum-4" + # + set sg_field $ixNetSG_Stack(3)/field:"udp.header.checksum-4" + ixNet setMultiAttrs $sg_field \ + -singleValue {0} \ + -seed {1} \ + -optionalEnabled True \ + -fullMesh False \ + -valueList {{0}} \ + -stepValue {0} \ + -fixedBits {0} \ + -fieldValue {0} \ + -auto True \ + -randomMask {0} \ + -trackingEnabled False \ + -valueType singleValue \ + -activeFieldChoice False \ + -startValue {0} \ + -countValue {1} + } else { + # TCP + set sg_field $ixNetSG_Stack(2)/stack:"tcp-3"/field:"tcp.header.srcPort-1" + ixNet setMultiAttrs $sg_field \ + -singleValue $srcPort \ + -seed 1 \ + -optionalEnabled true \ + -fullMesh false \ + -valueList [list $srcPort] \ + -stepValue 60 \ + -fixedBits 60 \ + -fieldValue $srcPort \ + -auto false \ + -randomMask 60 \ + -trackingEnabled false \ + -valueType singleValue \ + -activeFieldChoice false \ + -startValue 60 \ + -countValue 1 + + set sg_field $ixNetSG_Stack(2)/stack:"tcp-3"/field:"tcp.header.dstPort-2" + ixNet setMultiAttrs $sg_field \ + -singleValue $dstPort \ + -seed 1 \ + -optionalEnabled true \ + -fullMesh false \ + -valueList [list $dstPort] \ + -stepValue 60 \ + -fixedBits 60 \ + -fieldValue $dstPort \ + -auto false \ + -randomMask 60 \ + -trackingEnabled false \ + -valueType singleValue \ + -activeFieldChoice false \ + -startValue 60 \ + -countValue 1 + + set sg_field $ixNetSG_Stack(2)/stack:"tcp-3"/field:"tcp.header.sequenceNumber-3" + ixNet setMultiAttrs $sg_field \ + -singleValue 0 \ + -seed 1 \ + -optionalEnabled true \ + -fullMesh false \ + -valueList [list 0x00000000] \ + -stepValue 0x00000000 \ + -fixedBits 0x00000000 \ + -fieldValue 0 \ + -auto false \ + -randomMask 0x00000000 \ + -trackingEnabled false \ + -valueType singleValue \ + -activeFieldChoice false \ + -startValue 0x00000000 \ + -countValue 1 + + set sg_field $ixNetSG_Stack(2)/stack:"tcp-3"/field:"tcp.header.acknowledgementNumber-4" + ixNet setMultiAttrs $sg_field \ + -singleValue 0 \ + -seed 1 \ + -optionalEnabled true \ + -fullMesh false \ + -valueList [list 0x00000000] \ + -stepValue 0x00000000 \ + -fixedBits 0x00000000 \ + -fieldValue 0 \ + -auto false \ + -randomMask 0x00000000 \ + -trackingEnabled false \ + -valueType singleValue \ + -activeFieldChoice false \ + -startValue 0x00000000 \ + -countValue 1 + + set sg_field $ixNetSG_Stack(2)/stack:"tcp-3"/field:"tcp.header.dataOffset-5" + ixNet setMultiAttrs $sg_field \ + -singleValue 5 \ + -seed 1 \ + -optionalEnabled true \ + -fullMesh false \ + -valueList [list 5] \ + -stepValue 5 \ + -fixedBits 5 \ + -fieldValue 5 \ + -auto true \ + -randomMask 5 \ + -trackingEnabled false \ + -valueType singleValue \ + -activeFieldChoice false \ + -startValue 5 \ + -countValue 1 + + set sg_field $ixNetSG_Stack(2)/stack:"tcp-3"/field:"tcp.header.reserved-6" + ixNet setMultiAttrs $sg_field \ + -singleValue 0 \ + -seed 1 \ + -optionalEnabled true \ + -fullMesh false \ + -valueList [list 0] \ + -stepValue 0 \ + -fixedBits 0 \ + -fieldValue 0 \ + -auto false \ + -randomMask 0 \ + -trackingEnabled false \ + -valueType singleValue \ + -activeFieldChoice false \ + -startValue 0 \ + -countValue 1 + + set sg_field $ixNetSG_Stack(2)/stack:"tcp-3"/field:"tcp.header.ecn.nsBit-7" + ixNet setMultiAttrs $sg_field \ + -singleValue 0 \ + -seed 1 \ + -optionalEnabled true \ + -fullMesh false \ + -valueList [list 0] \ + -stepValue 0 \ + -fixedBits 0 \ + -fieldValue 0 \ + -auto false \ + -randomMask 0 \ + -trackingEnabled false \ + -valueType singleValue \ + -activeFieldChoice false \ + -startValue 0 \ + -countValue 1 + + set sg_field $ixNetSG_Stack(2)/stack:"tcp-3"/field:"tcp.header.ecn.cwrBit-8" + ixNet setMultiAttrs $sg_field \ + -singleValue 0 \ + -seed 1 \ + -optionalEnabled true \ + -fullMesh false \ + -valueList [list 0] \ + -stepValue 0 \ + -fixedBits 0 \ + -fieldValue 0 \ + -auto false \ + -randomMask 0 \ + -trackingEnabled false \ + -valueType singleValue \ + -activeFieldChoice false \ + -startValue 0 \ + -countValue 1 + + set sg_field $ixNetSG_Stack(2)/stack:"tcp-3"/field:"tcp.header.ecn.ecnEchoBit-9" + ixNet setMultiAttrs $sg_field \ + -singleValue 0 \ + -seed 1 \ + -optionalEnabled true \ + -fullMesh false \ + -valueList [list 0] \ + -stepValue 0 \ + -fixedBits 0 \ + -fieldValue 0 \ + -auto false \ + -randomMask 0 \ + -trackingEnabled false \ + -valueType singleValue \ + -activeFieldChoice false \ + -startValue 0 \ + -countValue 1 + + set sg_field $ixNetSG_Stack(2)/stack:"tcp-3"/field:"tcp.header.controlBits.urgBit-10" + ixNet setMultiAttrs $sg_field \ + -singleValue 0 \ + -seed 1 \ + -optionalEnabled true \ + -fullMesh false \ + -valueList [list 0] \ + -stepValue 0 \ + -fixedBits 0 \ + -fieldValue 0 \ + -auto false \ + -randomMask 0 \ + -trackingEnabled false \ + -valueType singleValue \ + -activeFieldChoice false \ + -startValue 0 \ + -countValue 1 + + set sg_field $ixNetSG_Stack(2)/stack:"tcp-3"/field:"tcp.header.controlBits.ackBit-11" + ixNet setMultiAttrs $sg_field \ + -singleValue 0 \ + -seed 1 \ + -optionalEnabled true \ + -fullMesh false \ + -valueList [list 0] \ + -stepValue 0 \ + -fixedBits 0 \ + -fieldValue 0 \ + -auto false \ + -randomMask 0 \ + -trackingEnabled false \ + -valueType singleValue \ + -activeFieldChoice false \ + -startValue 0 \ + -countValue 1 + + set sg_field $ixNetSG_Stack(2)/stack:"tcp-3"/field:"tcp.header.controlBits.pshBit-12" + ixNet setMultiAttrs $sg_field \ + -singleValue 0 \ + -seed 1 \ + -optionalEnabled true \ + -fullMesh false \ + -valueList [list 0] \ + -stepValue 0 \ + -fixedBits 0 \ + -fieldValue 0 \ + -auto false \ + -randomMask 0 \ + -trackingEnabled false \ + -valueType singleValue \ + -activeFieldChoice false \ + -startValue 0 \ + -countValue 1 + + set sg_field $ixNetSG_Stack(2)/stack:"tcp-3"/field:"tcp.header.controlBits.rstBit-13" + ixNet setMultiAttrs $sg_field \ + -singleValue 0 \ + -seed 1 \ + -optionalEnabled true \ + -fullMesh false \ + -valueList [list 0] \ + -stepValue 0 \ + -fixedBits 0 \ + -fieldValue 0 \ + -auto false \ + -randomMask 0 \ + -trackingEnabled false \ + -valueType singleValue \ + -activeFieldChoice false \ + -startValue 0 \ + -countValue 1 + + set sg_field $ixNetSG_Stack(2)/stack:"tcp-3"/field:"tcp.header.controlBits.synBit-14" + ixNet setMultiAttrs $sg_field \ + -singleValue 0 \ + -seed 1 \ + -optionalEnabled true \ + -fullMesh false \ + -valueList [list 0] \ + -stepValue 0 \ + -fixedBits 0 \ + -fieldValue 0 \ + -auto false \ + -randomMask 0 \ + -trackingEnabled false \ + -valueType singleValue \ + -activeFieldChoice false \ + -startValue 0 \ + -countValue 1 + + set sg_field $ixNetSG_Stack(2)/stack:"tcp-3"/field:"tcp.header.controlBits.finBit-15" + ixNet setMultiAttrs $sg_field \ + -singleValue 0 \ + -seed 1 \ + -optionalEnabled true \ + -fullMesh false \ + -valueList [list 0] \ + -stepValue 0 \ + -fixedBits 0 \ + -fieldValue 0 \ + -auto false \ + -randomMask 0 \ + -trackingEnabled false \ + -valueType singleValue \ + -activeFieldChoice false \ + -startValue 0 \ + -countValue 1 + + set sg_field $ixNetSG_Stack(2)/stack:"tcp-3"/field:"tcp.header.window-16" + ixNet setMultiAttrs $sg_field \ + -singleValue 0 \ + -seed 1 \ + -optionalEnabled true \ + -fullMesh false \ + -valueList [list 0x0000] \ + -stepValue 0x0000 \ + -fixedBits 0x0000 \ + -fieldValue 0 \ + -auto false \ + -randomMask 0x0000 \ + -trackingEnabled false \ + -valueType singleValue \ + -activeFieldChoice false \ + -startValue 0x0000 \ + -countValue 1 + + set sg_field $ixNetSG_Stack(2)/stack:"tcp-3"/field:"tcp.header.checksum-17" + ixNet setMultiAttrs $sg_field \ + -singleValue 0 \ + -seed 1 \ + -optionalEnabled true \ + -fullMesh false \ + -valueList [list 0x0000] \ + -stepValue 0x0000 \ + -fixedBits 0x0000 \ + -fieldValue 0 \ + -auto true \ + -randomMask 0x0000 \ + -trackingEnabled false \ + -valueType singleValue \ + -activeFieldChoice false \ + -startValue 0x0000 \ + -countValue 1 + + set sg_field $ixNetSG_Stack(2)/stack:"tcp-3"/field:"tcp.header.urgentPtr-18" + ixNet setMultiAttrs $sg_field \ + -singleValue 0 \ + -seed 1 \ + -optionalEnabled true \ + -fullMesh false \ + -valueList [list 0x0000] \ + -stepValue 0x0000 \ + -fixedBits 0x0000 \ + -fieldValue 0 \ + -auto false \ + -randomMask 0x0000 \ + -trackingEnabled false \ + -valueType singleValue \ + -activeFieldChoice false \ + -startValue 0x0000 \ + -countValue 1 + sg_commit + set sg_field [lindex [ixNet remapIds $sg_field] 0] + } + + if { $vxlan_enabled } { + # VXLAN START + # + # configuring the object that corresponds to /traffic/trafficItem:1/configElement:1/stack:"vxlan-4" + # + set sg_stack $ixNetSG_Stack(2)/stack:"vxlan-4" + sg_commit + set sg_stack [lindex [ixNet remapIds $sg_stack] 0] + set ixNetSG_Stack(3) $sg_stack + + # + # configuring the object that corresponds to /traffic/trafficItem:1/configElement:1/stack:"vxlan-4"/field:"vxlan.header.flags-1 + # + set sg_field $ixNetSG_Stack(3)/field:"vxlan.header.flags-1" + ixNet setMultiAttrs $sg_field \ + -singleValue 8 \ + -seed 1 \ + -optionalEnabled true \ + -valueList [list 0x08] \ + -stepValue 0x08 \ + -fixedBits 0x08 \ + -fieldValue 8 \ + -randomMask 0x08 \ + -startValue 0x08 + + # + # configuring the object that corresponds to /traffic/trafficItem:1/configElement:1/stack:"vxlan-4"/field:"vxlan.header.reserved-2 + # + set sg_field $ixNetSG_Stack(3)/field:"vxlan.header.reserved-2" + ixNet setMultiAttrs $sg_field \ + -singleValue 0 \ + -seed 1 \ + -optionalEnabled true \ + -valueList [list 0] \ + -stepValue 0 \ + -fixedBits 0 \ + -fieldValue 0 \ + -randomMask 0 \ + -startValue 0 + + # + # configuring the object that corresponds to /traffic/trafficItem:1/configElement:1/stack:"vxlan-4"/field:"vxlan.header.vni-3" + # + set sg_field $ixNetSG_Stack(3)/field:"vxlan.header.vni-3" + ixNet setMultiAttrs $sg_field \ + -singleValue $vni \ + -seed 1 \ + -optionalEnabled true \ + -valueList [list 1234] \ + -stepValue 1234 \ + -fixedBits 1234 \ + -fieldValue $vni \ + -randomMask 1234 \ + -startValue 1234 + + # + # configuring the object that corresponds to /traffic/trafficItem:1/configElement:1/stack:"vxlan-4"/field:"vxlan.header.reserved8-4" + # + set sg_field $ixNetSG_Stack(3)/field:"vxlan.header.reserved8-4" + ixNet setMultiAttrs $sg_field \ + -singleValue 0 \ + -seed 1 \ + -optionalEnabled true \ + -valueList [list 0] \ + -stepValue 0 \ + -fixedBits 0 \ + -fieldValue 0 \ + -randomMask 0 \ + -startValue 0 + + # configuring the object that corresponds to /traffic/trafficItem:1/configElement:1/stack:"ethernetNoFCS-5"/field:"ethernetNoFCS.header.destinationAddress-1" + set sg_field $ixNetSG_Stack(2)/stack:"ethernetNoFCS-5"/field:"ethernetNoFCS.header.destinationAddress-1" + ixNet setMultiAttrs $sg_field \ + -singleValue $inner_dstmac \ + -seed 1 \ + -optionalEnabled true \ + -valueList [list 00:00:00:00:00:00] \ + -stepValue 00:00:00:00:00:00 \ + -fixedBits 00:00:00:00:00:00 \ + -fieldValue $inner_dstmac \ + -randomMask 00:00:00:00:00:00 \ + -startValue 00:00:00:00:00:00 + + set sg_field $ixNetSG_Stack(2)/stack:"ethernetNoFCS-5"/field:"ethernetNoFCS.header.sourceAddress-2" + ixNet setMultiAttrs $sg_field \ + -singleValue $inner_srcmac \ + -seed 1 \ + -optionalEnabled true \ + -valueList [list 00:00:00:00:00:00] \ + -stepValue 00:00:00:00:00:00 \ + -fixedBits 00:00:00:00:00:00 \ + -fieldValue $inner_srcmac \ + -randomMask 00:00:00:00:00:00 \ + -startValue 00:00:00:00:00:00 + + set sg_field $ixNetSG_Stack(2)/stack:"ethernetNoFCS-5"/field:"ethernetNoFCS.header.etherType-3" + ixNet setMultiAttrs $sg_field \ + -singleValue 800 \ + -seed 1 \ + -optionalEnabled true \ + -valueList [list 0xFFFF] \ + -stepValue 0xFFFF \ + -fixedBits 0xFFFF \ + -fieldValue 800 \ + -auto true \ + -randomMask 0xFFFF \ + -startValue 0xFFFF + + set sg_stack $ixNetSG_Stack(2)/stack:"ipv4-6" + sg_commit + set sg_stack [lindex [ixNet remapIds $sg_stack] 0] + set ixNetSG_Stack(3) $sg_stack + + # + # configuring the object that corresponds to /traffic/trafficItem:1/configElement:1/stack:"ipv4-6"/field:"ipv4.header.version-1"/ + set sg_field $ixNetSG_Stack(3)/field:"ipv4.header.version-1" + ixNet setMultiAttrs $sg_field \ + -singleValue 4 \ + -seed 1 \ + -optionalEnabled true \ + -valueList [list 4] \ + -stepValue 4 \ + -fixedBits 4 \ + -fieldValue 4 \ + -randomMask 4 \ + -startValue 4 + + set sg_field $ixNetSG_Stack(3)/field:"ipv4.header.headerLength-2" + ixNet setMultiAttrs $sg_field \ + -singleValue 5 \ + -seed 1 \ + -optionalEnabled true \ + -valueList [list 0] \ + -stepValue 0 \ + -fixedBits 0 \ + -fieldValue 5 \ + -auto true \ + -randomMask 0 \ + -startValue 0 + + set sg_field $ixNetSG_Stack(3)/field:"ipv4.header.priority.raw-3" + ixNet setMultiAttrs $sg_field \ + -singleValue 0 \ + -seed 1 \ + -optionalEnabled true \ + -valueList [list 0] \ + -stepValue 0 \ + -fixedBits 0 \ + -fieldValue 0 \ + -randomMask 0 \ + -startValue 0 + + set sg_field $ixNetSG_Stack(3)/field:"ipv4.header.priority.tos.precedence-4" + ixNet setMultiAttrs $sg_field \ + -singleValue 0 \ + -seed 1 \ + -optionalEnabled true \ + -valueList [list 0] \ + -stepValue 0 \ + -fixedBits 0 \ + -fieldValue "000\ Routine" \ + -randomMask 0 \ + -activeFieldChoice true \ + -startValue 0 + + set sg_field $ixNetSG_Stack(3)/field:"ipv4.header.priority.tos.delay-5" + ixNet setMultiAttrs $sg_field \ + -singleValue 0 \ + -seed 1 \ + -optionalEnabled true \ + -valueList [list 0] \ + -stepValue 0 \ + -fixedBits 0 \ + -fieldValue Normal \ + -randomMask 0 \ + -activeFieldChoice true \ + -startValue 0 + + set sg_field $ixNetSG_Stack(3)/field:"ipv4.header.priority.tos.throughput-6" + ixNet setMultiAttrs $sg_field \ + -singleValue 0 \ + -seed 1 \ + -optionalEnabled true \ + -valueList [list 0] \ + -stepValue 0 \ + -fixedBits 0 \ + -fieldValue Normal \ + -randomMask 0 \ + -activeFieldChoice true \ + -startValue 0 + + set sg_field $ixNetSG_Stack(3)/field:"ipv4.header.priority.tos.reliability-7" + ixNet setMultiAttrs $sg_field \ + -singleValue 0 \ + -seed 1 \ + -optionalEnabled true \ + -valueList [list 0] \ + -stepValue 0 \ + -fixedBits 0 \ + -fieldValue Normal \ + -randomMask 0 \ + -activeFieldChoice true \ + -startValue 0 + + set sg_field $ixNetSG_Stack(3)/field:"ipv4.header.priority.tos.monetary-8" + ixNet setMultiAttrs $sg_field \ + -singleValue 0 \ + -seed 1 \ + -optionalEnabled true \ + -valueList [list 0] \ + -stepValue 0 \ + -fixedBits 0 \ + -fieldValue Normal \ + -randomMask 0 \ + -activeFieldChoice true \ + -startValue 0 + + set sg_field $ixNetSG_Stack(3)/field:"ipv4.header.priority.tos.unused-9" + ixNet setMultiAttrs $sg_field \ + -singleValue 0 \ + -seed 1 \ + -optionalEnabled true \ + -valueList [list 0] \ + -stepValue 0 \ + -fixedBits 0 \ + -fieldValue 0 \ + -randomMask 0 \ + -activeFieldChoice true \ + -startValue 0 + + set sg_field $ixNetSG_Stack(3)/field:"ipv4.header.totalLength-18" + ixNet setMultiAttrs $sg_field \ + -singleValue 28 \ + -seed 1 \ + -optionalEnabled true \ + -valueList [list 20] \ + -stepValue 20 \ + -fixedBits 20 \ + -fieldValue 28 \ + -auto true \ + -randomMask 20 \ + -startValue 20 + + set sg_field $ixNetSG_Stack(3)/field:"ipv4.header.identification-19" + ixNet setMultiAttrs $sg_field \ + -singleValue 0 \ + -seed 1 \ + -optionalEnabled true \ + -valueList [list 0] \ + -stepValue 0 \ + -fixedBits 0 \ + -fieldValue 0 \ + -randomMask 0 \ + -startValue 0 + + set sg_field $ixNetSG_Stack(3)/field:"ipv4.header.flags.reserved-20" + ixNet setMultiAttrs $sg_field \ + -singleValue 0 \ + -seed 1 \ + -optionalEnabled true \ + -valueList [list 0] \ + -stepValue 0 \ + -fixedBits 0 \ + -fieldValue 0 \ + -randomMask 0 \ + -startValue 0 + + set sg_field $ixNetSG_Stack(3)/field:"ipv4.header.flags.fragment-21" + ixNet setMultiAttrs $sg_field \ + -singleValue 0 \ + -seed 1 \ + -optionalEnabled true \ + -valueList [list 0] \ + -stepValue 0 \ + -fixedBits 0 \ + -fieldValue "May\ fragment" \ + -randomMask 0 \ + -startValue 0 + + set sg_field $ixNetSG_Stack(3)/field:"ipv4.header.flags.lastFragment-22" + ixNet setMultiAttrs $sg_field \ + -singleValue 0 \ + -seed 1 \ + -optionalEnabled true \ + -valueList [list 0] \ + -stepValue 0 \ + -fixedBits 0 \ + -fieldValue "Last\ fragment" \ + -randomMask 0 \ + -startValue 0 + + set sg_field $ixNetSG_Stack(3)/field:"ipv4.header.fragmentOffset-23" + ixNet setMultiAttrs $sg_field \ + -singleValue 0 \ + -seed 1 \ + -optionalEnabled true \ + -valueList [list 0] \ + -stepValue 0 \ + -fixedBits 0 \ + -fieldValue 0 \ + -randomMask 0 \ + -startValue 0 + + set sg_field $ixNetSG_Stack(3)/field:"ipv4.header.ttl-24" + ixNet setMultiAttrs $sg_field \ + -singleValue 64 \ + -seed 1 \ + -optionalEnabled true \ + -valueList [list 64] \ + -stepValue 64 \ + -fixedBits 64 \ + -fieldValue 64 \ + -randomMask 64 \ + -startValue 64 + + set sg_field $ixNetSG_Stack(3)/field:"ipv4.header.protocol-25" + ixNet setMultiAttrs $sg_field \ + -singleValue 17 \ + -seed 1 \ + -optionalEnabled true \ + -valueList [list 61] \ + -stepValue 61 \ + -fixedBits 61 \ + -fieldValue $inner_proto \ + -auto true \ + -randomMask 61 \ + -startValue 61 + + set sg_field $ixNetSG_Stack(3)/field:"ipv4.header.checksum-26" + ixNet setMultiAttrs $sg_field \ + -singleValue 63355 \ + -seed 1 \ + -optionalEnabled true \ + -valueList [list 0] \ + -stepValue 0 \ + -fixedBits 0 \ + -fieldValue 63355 \ + -auto true \ + -randomMask 0 \ + -startValue 0 + + set sg_field $ixNetSG_Stack(3)/field:"ipv4.header.srcIp-27" + ixNet setMultiAttrs $sg_field \ + -singleValue $inner_srcip \ + -seed 1 \ + -optionalEnabled true \ + -valueList [list 0.0.0.0] \ + -stepValue 0.0.0.0 \ + -fixedBits 0.0.0.0 \ + -fieldValue $inner_srcip \ + -randomMask 0.0.0.0 \ + -startValue 0.0.0.0 + + set sg_field $ixNetSG_Stack(3)/field:"ipv4.header.dstIp-28" + ixNet setMultiAttrs $sg_field \ + -singleValue $inner_dstip \ + -seed 1 \ + -optionalEnabled true \ + -valueList [list 0.0.0.0] \ + -stepValue 0.0.0.0 \ + -fixedBits 0.0.0.0 \ + -fieldValue $inner_dstip \ + -randomMask 0.0.0.0 \ + -startValue 0.0.0.0 + + set sg_field $ixNetSG_Stack(3)/field:"ipv4.header.options.pad-58" + ixNet setMultiAttrs $sg_field \ + -singleValue 0 \ + -seed 1 \ + -valueList [list 0] \ + -stepValue 0 \ + -fixedBits 0 \ + -fieldValue 0 \ + -auto true \ + -randomMask 0 \ + -startValue 0 + sg_commit + set sg_field [lindex [ixNet remapIds $sg_field] 0] + + if { [string compare $inner_proto "udp"] == 0 } { + # INNER UDP + set sg_stack $ixNetSG_Stack(2)/stack:"udp-7" + sg_commit + set sg_stack [lindex [ixNet remapIds $sg_stack] 0] + set ixNetSG_Stack(3) $sg_stack + + set sg_field $ixNetSG_Stack(3)/field:"udp.header.srcPort-1" + ixNet setMultiAttrs $sg_field \ + -singleValue $inner_srcport \ + -seed 1 \ + -optionalEnabled true \ + -valueList [list 63] \ + -stepValue 63 \ + -fixedBits 63 \ + -fieldValue $inner_srcport \ + -auto true \ + -randomMask 63 \ + -startValue 63 + + set sg_field $ixNetSG_Stack(3)/field:"udp.header.dstPort-2" + ixNet setMultiAttrs $sg_field \ + -singleValue $inner_dstport \ + -seed 1 \ + -optionalEnabled true \ + -valueList [list 63] \ + -stepValue 63 \ + -fixedBits 63 \ + -fieldValue $inner_dstport \ + -auto true \ + -randomMask 63 \ + -startValue 63 + + set sg_field $ixNetSG_Stack(3)/field:"udp.header.length-3" + ixNet setMultiAttrs $sg_field \ + -singleValue 8 \ + -seed 1 \ + -optionalEnabled true \ + -valueList [list 8] \ + -stepValue 8 \ + -fixedBits 8 \ + -fieldValue 8 \ + -auto true \ + -randomMask 8 \ + -startValue 8 + + set sg_field $ixNetSG_Stack(3)/field:"udp.header.checksum-4" + ixNet setMultiAttrs $sg_field \ + -singleValue 0 \ + -seed 1 \ + -optionalEnabled true \ + -valueList [list 0] \ + -stepValue 0 \ + -fixedBits 0 \ + -fieldValue 0 \ + -auto true \ + -randomMask 0 \ + -startValue 0 + sg_commit + set sg_field [lindex [ixNet remapIds $sg_field] 0] + } else { + + # INNER TCP + set sg_field $ixNetSG_Stack(2)/stack:"tcp-7"/field:"tcp.header.srcPort-1" + ixNet setMultiAttrs $sg_field \ + -singleValue $inner_srcport \ + -seed 1 \ + -optionalEnabled true \ + -fullMesh false \ + -valueList [list $inner_srcport] \ + -stepValue 60 \ + -fixedBits 60 \ + -fieldValue $inner_srcport \ + -auto false \ + -randomMask 60 \ + -trackingEnabled false \ + -valueType singleValue \ + -activeFieldChoice false \ + -startValue 60 \ + -countValue 1 + + set sg_field $ixNetSG_Stack(2)/stack:"tcp-7"/field:"tcp.header.dstPort-2" + ixNet setMultiAttrs $sg_field \ + -singleValue $inner_dstport \ + -seed 1 \ + -optionalEnabled true \ + -fullMesh false \ + -valueList [list $inner_dstport] \ + -stepValue 60 \ + -fixedBits 60 \ + -fieldValue $inner_dstport \ + -auto false \ + -randomMask 60 \ + -trackingEnabled false \ + -valueType singleValue \ + -activeFieldChoice false \ + -startValue 60 \ + -countValue 1 + + set sg_field $ixNetSG_Stack(2)/stack:"tcp-7"/field:"tcp.header.sequenceNumber-3" + ixNet setMultiAttrs $sg_field \ + -singleValue 0 \ + -seed 1 \ + -optionalEnabled true \ + -fullMesh false \ + -valueList [list 0x00000000] \ + -stepValue 0x00000000 \ + -fixedBits 0x00000000 \ + -fieldValue 0 \ + -auto true \ + -randomMask 0x00000000 \ + -trackingEnabled false \ + -valueType singleValue \ + -activeFieldChoice false \ + -startValue 0x00000000 \ + -countValue 1 + + set sg_field $ixNetSG_Stack(2)/stack:"tcp-7"/field:"tcp.header.acknowledgementNumber-4" + ixNet setMultiAttrs $sg_field \ + -singleValue 0 \ + -seed 1 \ + -optionalEnabled true \ + -fullMesh false \ + -valueList [list 0x00000000] \ + -stepValue 0x00000000 \ + -fixedBits 0x00000000 \ + -fieldValue 0 \ + -auto false \ + -randomMask 0x00000000 \ + -trackingEnabled false \ + -valueType singleValue \ + -activeFieldChoice false \ + -startValue 0x00000000 \ + -countValue 1 + + set sg_field $ixNetSG_Stack(2)/stack:"tcp-7"/field:"tcp.header.dataOffset-5" + ixNet setMultiAttrs $sg_field \ + -singleValue 5 \ + -seed 1 \ + -optionalEnabled true \ + -fullMesh false \ + -valueList [list 5] \ + -stepValue 5 \ + -fixedBits 5 \ + -fieldValue 5 \ + -auto true \ + -randomMask 5 \ + -trackingEnabled false \ + -valueType singleValue \ + -activeFieldChoice false \ + -startValue 5 \ + -countValue 1 + + set sg_field $ixNetSG_Stack(2)/stack:"tcp-7"/field:"tcp.header.reserved-6" + ixNet setMultiAttrs $sg_field \ + -singleValue 0 \ + -seed 1 \ + -optionalEnabled true \ + -fullMesh false \ + -valueList [list 0] \ + -stepValue 0 \ + -fixedBits 0 \ + -fieldValue 0 \ + -auto false \ + -randomMask 0 \ + -trackingEnabled false \ + -valueType singleValue \ + -activeFieldChoice false \ + -startValue 0 \ + -countValue 1 + + set sg_field $ixNetSG_Stack(2)/stack:"tcp-7"/field:"tcp.header.ecn.nsBit-7" + ixNet setMultiAttrs $sg_field \ + -singleValue 0 \ + -seed 1 \ + -optionalEnabled true \ + -fullMesh false \ + -valueList [list 0] \ + -stepValue 0 \ + -fixedBits 0 \ + -fieldValue 0 \ + -auto false \ + -randomMask 0 \ + -trackingEnabled false \ + -valueType singleValue \ + -activeFieldChoice false \ + -startValue 0 \ + -countValue 1 + + set sg_field $ixNetSG_Stack(2)/stack:"tcp-7"/field:"tcp.header.ecn.cwrBit-8" + ixNet setMultiAttrs $sg_field \ + -singleValue 0 \ + -seed 1 \ + -optionalEnabled true \ + -fullMesh false \ + -valueList [list 0] \ + -stepValue 0 \ + -fixedBits 0 \ + -fieldValue 0 \ + -auto false \ + -randomMask 0 \ + -trackingEnabled false \ + -valueType singleValue \ + -activeFieldChoice false \ + -startValue 0 \ + -countValue 1 + + set sg_field $ixNetSG_Stack(2)/stack:"tcp-7"/field:"tcp.header.ecn.ecnEchoBit-9" + ixNet setMultiAttrs $sg_field \ + -singleValue 0 \ + -seed 1 \ + -optionalEnabled true \ + -fullMesh false \ + -valueList [list 0] \ + -stepValue 0 \ + -fixedBits 0 \ + -fieldValue 0 \ + -auto false \ + -randomMask 0 \ + -trackingEnabled false \ + -valueType singleValue \ + -activeFieldChoice false \ + -startValue 0 \ + -countValue 1 + + set sg_field $ixNetSG_Stack(2)/stack:"tcp-7"/field:"tcp.header.controlBits.urgBit-10" + ixNet setMultiAttrs $sg_field \ + -singleValue 0 \ + -seed 1 \ + -optionalEnabled true \ + -fullMesh false \ + -valueList [list 0] \ + -stepValue 0 \ + -fixedBits 0 \ + -fieldValue 0 \ + -auto false \ + -randomMask 0 \ + -trackingEnabled false \ + -valueType singleValue \ + -activeFieldChoice false \ + -startValue 0 \ + -countValue 1 + + set sg_field $ixNetSG_Stack(2)/stack:"tcp-7"/field:"tcp.header.controlBits.ackBit-11" + ixNet setMultiAttrs $sg_field \ + -singleValue 0 \ + -seed 1 \ + -optionalEnabled true \ + -fullMesh false \ + -valueList [list 0] \ + -stepValue 0 \ + -fixedBits 0 \ + -fieldValue 0 \ + -auto false \ + -randomMask 0 \ + -trackingEnabled false \ + -valueType singleValue \ + -activeFieldChoice false \ + -startValue 0 \ + -countValue 1 + + set sg_field $ixNetSG_Stack(2)/stack:"tcp-7"/field:"tcp.header.controlBits.pshBit-12" + ixNet setMultiAttrs $sg_field \ + -singleValue 0 \ + -seed 1 \ + -optionalEnabled true \ + -fullMesh false \ + -valueList [list 0] \ + -stepValue 0 \ + -fixedBits 0 \ + -fieldValue 0 \ + -auto false \ + -randomMask 0 \ + -trackingEnabled false \ + -valueType singleValue \ + -activeFieldChoice false \ + -startValue 0 \ + -countValue 1 + + set sg_field $ixNetSG_Stack(2)/stack:"tcp-7"/field:"tcp.header.controlBits.rstBit-13" + ixNet setMultiAttrs $sg_field \ + -singleValue 0 \ + -seed 1 \ + -optionalEnabled true \ + -fullMesh false \ + -valueList [list 0] \ + -stepValue 0 \ + -fixedBits 0 \ + -fieldValue 0 \ + -auto false \ + -randomMask 0 \ + -trackingEnabled false \ + -valueType singleValue \ + -activeFieldChoice false \ + -startValue 0 \ + -countValue 1 + + set sg_field $ixNetSG_Stack(2)/stack:"tcp-7"/field:"tcp.header.controlBits.synBit-14" + ixNet setMultiAttrs $sg_field \ + -singleValue 0 \ + -seed 1 \ + -optionalEnabled true \ + -fullMesh false \ + -valueList [list 0] \ + -stepValue 0 \ + -fixedBits 0 \ + -fieldValue 0 \ + -auto false \ + -randomMask 0 \ + -trackingEnabled false \ + -valueType singleValue \ + -activeFieldChoice false \ + -startValue 0 \ + -countValue 1 + + set sg_field $ixNetSG_Stack(2)/stack:"tcp-7"/field:"tcp.header.controlBits.finBit-15" + ixNet setMultiAttrs $sg_field \ + -singleValue 0 \ + -seed 1 \ + -optionalEnabled true \ + -fullMesh false \ + -valueList [list 0] \ + -stepValue 0 \ + -fixedBits 0 \ + -fieldValue 0 \ + -auto false \ + -randomMask 0 \ + -trackingEnabled false \ + -valueType singleValue \ + -activeFieldChoice false \ + -startValue 0 \ + -countValue 1 + + set sg_field $ixNetSG_Stack(2)/stack:"tcp-7"/field:"tcp.header.window-16" + ixNet setMultiAttrs $sg_field \ + -singleValue 0 \ + -seed 1 \ + -optionalEnabled true \ + -fullMesh false \ + -valueList [list 0x0000] \ + -stepValue 0x0000 \ + -fixedBits 0x0000 \ + -fieldValue 0 \ + -auto false \ + -randomMask 0x0000 \ + -trackingEnabled false \ + -valueType singleValue \ + -activeFieldChoice false \ + -startValue 0x0000 \ + -countValue 1 + + set sg_field $ixNetSG_Stack(2)/stack:"tcp-7"/field:"tcp.header.checksum-17" + ixNet setMultiAttrs $sg_field \ + -singleValue 0 \ + -seed 1 \ + -optionalEnabled true \ + -fullMesh false \ + -valueList [list 0x0000] \ + -stepValue 0x0000 \ + -fixedBits 0x0000 \ + -fieldValue 0 \ + -auto true \ + -randomMask 0x0000 \ + -trackingEnabled false \ + -valueType singleValue \ + -activeFieldChoice false \ + -startValue 0x0000 \ + -countValue 1 + + set sg_field $ixNetSG_Stack(2)/stack:"tcp-7"/field:"tcp.header.urgentPtr-18" + ixNet setMultiAttrs $sg_field \ + -singleValue 0 \ + -seed 1 \ + -optionalEnabled true \ + -fullMesh false \ + -valueList [list 0x0000] \ + -stepValue 0x0000 \ + -fixedBits 0x0000 \ + -fieldValue 0 \ + -auto false \ + -randomMask 0x0000 \ + -trackingEnabled false \ + -valueType singleValue \ + -activeFieldChoice false \ + -startValue 0x0000 \ + -countValue 1 + sg_commit + set sg_field [lindex [ixNet remapIds $sg_field] 0] + + } + + + set sg_field $ixNetSG_Stack(2)/stack:"fcs-8"/field:"ethernet.fcs-1" + ixNet setMultiAttrs $sg_field \ + -singleValue 0 \ + -seed 1 \ + -optionalEnabled true \ + -valueList [list 0] \ + -stepValue 0 \ + -fixedBits 0 \ + -fieldValue 0 \ + -auto true \ + -randomMask 0 \ + -startValue 0 + + # VXLAN END + } else { + # configuring the object that corresponds to /traffic/trafficItem:1/configElement:1/stack:"fcs-4" + # + set sg_stack $ixNetSG_Stack(2)/stack:"fcs-4" + sg_commit + set sg_stack [lindex [ixNet remapIds $sg_stack] 0] + set ixNetSG_Stack(3) $sg_stack + + # + # configuring the object that corresponds to /traffic/trafficItem:1/configElement:1/stack:"fcs-4"/field:"ethernet.fcs-1" + # + set sg_field $ixNetSG_Stack(3)/field:"ethernet.fcs-1" + ixNet setMultiAttrs $sg_field \ + -singleValue {0} \ + -seed {1} \ + -optionalEnabled True \ + -fullMesh False \ + -valueList {{0}} \ + -stepValue {0} \ + -fixedBits {0} \ + -fieldValue {0} \ + -auto True \ + -randomMask {0} \ + -trackingEnabled False \ + -valueType singleValue \ + -activeFieldChoice False \ + -startValue {0} \ + -countValue {1} + sg_commit + set sg_field [lindex [ixNet remapIds $sg_field] 0] + } + + # configuring the object that corresponds to /traffic/trafficItem:1/configElement:1/transmissionDistribution + # + set sg_transmissionDistribution $ixNetSG_Stack(2)/transmissionDistribution + ixNet setMultiAttrs $sg_transmissionDistribution \ + -distributions {} + sg_commit + set sg_transmissionDistribution [lindex [ixNet remapIds $sg_transmissionDistribution] 0] + + # + # configuring the object that corresponds to /traffic/trafficItem:1/transmissionDistribution + # + set sg_transmissionDistribution $ixNetSG_Stack(1)/transmissionDistribution + ixNet setMultiAttrs $sg_transmissionDistribution \ + -distributions {} + sg_commit + sg_commit + set sg_transmissionDistribution [lindex [ixNet remapIds $sg_transmissionDistribution] 0] + + # + # configuring the object that corresponds to /traffic/trafficItem:1/tracking + # + set sg_tracking $ixNetSG_Stack(1)/tracking + ixNet setMultiAttrs $sg_tracking \ + -offset 0 \ + -oneToOneMesh False \ + -trackBy {} \ + -values {} \ + -fieldWidth thirtyTwoBits \ + -protocolOffset {Root.0} + ixNet setMultiAttrs $sg_tracking/egress \ + -offset {Outer VLAN Priority (3 bits)} \ + -enabled False \ + -customOffsetBits 0 \ + -encapsulation {Ethernet} \ + -customWidthBits 0 + ixNet setMultiAttrs $sg_tracking/latencyBin \ + -enabled False \ + -binLimits {1 1.42 2 2.82 4 5.66 8 11.32} \ + -numberOfBins 8 + sg_commit + set sg_tracking [lindex [ixNet remapIds $sg_tracking] 0] + set ixNetSG_Stack(2) $sg_tracking + + # EGRESS START + # Note: The scriptgen generated egress code were removed because we are not using + # flow tracking in our tests. + # Insert EGRESS lines here if needed + # EGRESS END + + # + # configuring the object that corresponds to /traffic/trafficItem:1/dynamicUpdate + # + set sg_dynamicUpdate $ixNetSG_Stack(1)/dynamicUpdate + ixNet setMultiAttrs $sg_dynamicUpdate \ + -enabledSessionAwareTrafficFields {} \ + -enabledDynamicUpdateFields {} + sg_commit + set sg_dynamicUpdate [lindex [ixNet remapIds $sg_dynamicUpdate] 0] + + ### + ### /quickTest area + ### + + # + # configuring the object that corresponds to /quickTest/rfc2544throughput:1 + # + if {$rfc2544TestType == "throughput"} { + set sg_rfc2544throughput [ixNet add $ixNetSG_Stack(0)/quickTest rfc2544throughput] + ixNet setMultiAttrs $sg_rfc2544throughput \ + -name {QuickTest1} \ + -mode existingMode \ + -inputParameters {{}} + ixNet setMultiAttrs $sg_rfc2544throughput/testConfig \ + -protocolItem {} \ + -enableMinFrameSize False \ + -framesize $frameSize \ + -reportTputRateUnit mbps \ + -duration $duration \ + -numtrials $numTrials \ + -trafficType constantLoading \ + -burstSize 1 \ + -framesPerBurstGap 1 \ + -tolerance 0 \ + -frameLossUnit {0} \ + -staggeredStart False \ + -framesizeList $frameSize \ + -frameSizeMode custom \ + -rateSelect percentMaxRate \ + -percentMaxRate 100 \ + -resolution 0.01 \ + -forceRegenerate False \ + -reportSequenceError False \ + -ipv4rate 50 \ + -ipv6rate 50 \ + -loadRateList $frameRate \ + -fixedLoadUnit percentMaxRate \ + -loadRateValue 80 \ + -incrementLoadUnit percentMaxRate \ + -initialIncrementLoadRate 10 \ + -stepIncrementLoadRate 10 \ + -maxIncrementLoadRate 100 \ + -randomLoadUnit percentMaxRate \ + -minRandomLoadRate 10 \ + -maxRandomLoadRate 80 \ + -countRandomLoadRate 1 \ + -minFpsRate 1000 \ + -minKbpsRate 64 \ + -txDelay 2 \ + -delayAfterTransmit 2 \ + -minRandomFrameSize 64 \ + -maxRandomFrameSize 1518 \ + -countRandomFrameSize 1 \ + -minIncrementFrameSize 64 \ + -stepIncrementFrameSize 64 \ + -maxIncrementFrameSize 1518 \ + -calculateLatency True \ + -latencyType storeForward \ + -calculateJitter False \ + -enableDataIntegrity False \ + -enableBackoffIteration False \ + -enableSaturationIteration False \ + -enableStopTestOnHighLoss False \ + -enableBackoffUseAs% False \ + -backoffIteration 1 \ + -saturationIteration 1 \ + -stopTestOnHighLoss 0 \ + -loadType $loadType \ + -stepLoadUnit percentMaxRate \ + -customLoadUnit percentMaxRate \ + -comboLoadUnit percentMaxRate \ + -binaryLoadUnit percentMaxRate \ + -initialBinaryLoadRate 100 \ + -minBinaryLoadRate 1 \ + -maxBinaryLoadRate 100 \ + -binaryResolution 1 \ + -binaryBackoff 50 \ + -binaryTolerance $tolerance \ + -binaryFrameLossUnit % \ + -comboFrameLossUnit % \ + -stepFrameLossUnit % \ + -initialStepLoadRate 10 \ + -maxStepLoadRate 100 \ + -stepStepLoadRate 10 \ + -stepTolerance 0 \ + -initialComboLoadRate 10 \ + -maxComboLoadRate 100 \ + -minComboLoadRate 10 \ + -stepComboLoadRate 10 \ + -comboResolution 1 \ + -comboBackoff 50 \ + -comboTolerance 0 \ + -binarySearchType linear \ + -unchangedValueList {0} \ + -enableFastConvergence $fastConvergence \ + -fastConvergenceDuration $convergenceDuration \ + -fastConvergenceThreshold 10 \ + -framesizeFixedValue $frameSize \ + -gap 3 \ + -unchangedInitial False \ + -generateTrackingOptionAggregationFiles False \ + -enableExtraIterations False \ + -extraIterationOffsets {10, -10} \ + -usePercentOffsets False \ + -imixDistribution weight \ + -imixAdd {0} \ + -imixDelete {0} \ + -imixData {{{{64}{{TOS S:0 S:0 S:0 S:0 S:0} S:0}{1 40}}{{128}{{TOS S:0 S:0 S:0 S:0 S:0} S:0}{1 30}}{{256}{{TOS S:0 S:0 S:0 S:0 S:0} S:0}{1 30}}}} \ + -imixEnabled False \ + -imixTemplates none \ + -framesizeImixList $frameSize \ + -imixTrafficType {UNCHNAGED} \ + -mapType {oneToOne} \ + -supportedTrafficTypes {mac,ipv4,ipv6,ipmix} + ixNet setMultiAttrs $sg_rfc2544throughput/learnFrames \ + -learnFrequency $learningFrequency \ + -learnNumFrames 10 \ + -learnRate 100 \ + -learnWaitTime 1000 \ + -learnFrameSize $frameSize \ + -fastPathLearnFrameSize $frameSize \ + -learnWaitTimeBeforeTransmit 0 \ + -learnSendMacOnly False \ + -learnSendRouterSolicitation False \ + -fastPathEnable $fastPathEnable \ + -fastPathRate 100 \ + -fastPathNumFrames 10 + ixNet setMultiAttrs $sg_rfc2544throughput/passCriteria \ + -passCriteriaLoadRateMode average \ + -passCriteriaLoadRateValue 100 \ + -passCriteriaLoadRateScale mbps \ + -enablePassFail False \ + -enableRatePassFail False \ + -enableLatencyPassFail False \ + -enableStandardDeviationPassFail False \ + -latencyThresholdValue 10 \ + -latencyThresholdScale us \ + -latencyThresholdMode average \ + -latencyVariationThresholdValue 0 \ + -latencyVariationThresholdScale us \ + -latencyVarThresholdMode average \ + -enableSequenceErrorsPassFail False \ + -seqErrorsThresholdValue 0 \ + -seqErrorsThresholdMode average \ + -enableDataIntegrityPassFail False \ + -dataErrorThresholdValue 0 \ + -dataErrorThresholdMode average + sg_commit + set sg_rfc2544throughput [lindex [ixNet remapIds $sg_rfc2544throughput] 0] + set ixNetSG_Stack(1) $sg_rfc2544throughput + + # + # configuring the object that corresponds to /quickTest/rfc2544throughput:1/protocols + # + set sg_protocols $ixNetSG_Stack(1)/protocols + ixNet setMultiAttrs $sg_protocols \ + -protocolState default \ + -waitAfterStart 120 \ + -waitAfterStop 30 + sg_commit + set sg_protocols [lindex [ixNet remapIds $sg_protocols] 0] + + # + # configuring the object that corresponds to /quickTest/rfc2544throughput:1/trafficSelection:1 + # + set sg_trafficSelection [ixNet add $ixNetSG_Stack(1) trafficSelection] + ixNet setMultiAttrs $sg_trafficSelection \ + -id $ixNetSG_ref(26) \ + -includeMode inTest \ + -itemType trafficItem + sg_commit + set sg_trafficSelection [lindex [ixNet remapIds $sg_trafficSelection] 0] + ixNet commit + + } elseif {$rfc2544TestType == "back2back"} { + # + # configuring the object that corresponds to /quickTest/rfc2544back2back:2 + # + set sg_rfc2544back2back [ixNet add $ixNetSG_Stack(0)/quickTest rfc2544back2back] + ixNet setMultiAttrs $sg_rfc2544back2back \ + -name {B2B} \ + -mode existingMode \ + -inputParameters {{}} + ixNet setMultiAttrs $sg_rfc2544back2back/testConfig \ + -protocolItem {} \ + -framesize $frameSize \ + -reportTputRateUnit mbps \ + -rfc2544ImixDataQoS False \ + -detailedResultsEnabled True \ + -rfc2889ordering noOrdering \ + -floodedFramesEnabled False \ + -duration $duration \ + -numtrials $numTrials \ + -trafficType constantLoading \ + -burstSize 1 \ + -framesPerBurstGap 1 \ + -tolerance 0 \ + -frameLossUnit {0} \ + -staggeredStart False \ + -framesizeList $frameSize \ + -frameSizeMode custom \ + -rateSelect percentMaxRate \ + -percentMaxRate 100 \ + -resolution 0.01 \ + -forceRegenerate False \ + -reportSequenceError False \ + -ipv4rate 50 \ + -ipv6rate 50 \ + -loadRateList $frameRate \ + -minFpsRate 1000 \ + -minKbpsRate 64 \ + -txDelay 2 \ + -delayAfterTransmit 2 \ + -minRandomFrameSize 64 \ + -maxRandomFrameSize 1518 \ + -countRandomFrameSize 1 \ + -minIncrementFrameSize 64 \ + -stepIncrementFrameSize 64 \ + -maxIncrementFrameSize 1518 \ + -calculateLatency False \ + -calibrateLatency False \ + -latencyType cutThrough \ + -calculateJitter False \ + -enableDataIntegrity False \ + -loadType $loadType \ + -binaryFrameLossUnit % \ + -loadUnit percentMaxRate \ + -customLoadUnit percentMaxRate \ + -randomLoadUnit percentMaxRate \ + -incrementLoadUnit percentMaxRate \ + -binaryResolution 100 \ + -binaryBackoff 50 \ + -binaryTolerance $tolerance \ + -initialIncrementLoadRate 100 \ + -stepIncrementLoadRate 10 \ + -maxIncrementLoadRate 100 \ + -minRandomLoadRate 10 \ + -maxRandomLoadRate 80 \ + -countRandomLoadRate 1 \ + -numFrames {100000} \ + -loadRate 100 \ + -enableMinFrameSize False \ + -gap 3 \ + -generateTrackingOptionAggregationFiles False \ + -sendFullyMeshed False \ + -imixDistribution weight \ + -imixAdd {0} \ + -imixDelete {0} \ + -imixData {{{{64}{{TOS S:0 S:0 S:0 S:0 S:0} S:0}{1 40}}{{128}{{TOS S:0 S:0 S:0 S:0 S:0} S:0}{1 30}}{{256}{{TOS S:0 S:0 S:0 S:0 S:0} S:0}{1 30}}}} \ + -imixEnabled False \ + -imixTemplates none \ + -framesizeImixList $frameSize \ + -imixTrafficType {UNCHNAGED} \ + -ipRatioMode fixed \ + -ipv4RatioList {10,25,50,75,90} \ + -ipv6RatioList {90,75,50,25,10} \ + -minIncrementIpv4Ratio {10} \ + -stepIncrementIpv4Ratio {10} \ + -maxIncrementIpv4Ratio {90} \ + -minIncrementIpv6Ratio {90} \ + -stepIncrementIpv6Ratio {-10} \ + -maxIncrementIpv6Ratio {10} \ + -minRandomIpv4Ratio {10} \ + -maxRandomIpv4Ratio {90} \ + -minRandomIpv6Ratio {90} \ + -maxRandomIpv6Ratio {10} \ + -countRandomIpRatio 1 \ + -mapType {oneToOne|manyToMany|fullMesh} \ + -supportedTrafficTypes {mac,ipv4,ipv6,ipmix} + ixNet setMultiAttrs $sg_rfc2544back2back/learnFrames \ + -learnFrequency $learningFrequency \ + -learnNumFrames 10 \ + -learnRate 100 \ + -learnWaitTime 1000 \ + -learnFrameSize 64 \ + -fastPathLearnFrameSize 64 \ + -learnWaitTimeBeforeTransmit 0 \ + -learnSendMacOnly False \ + -learnSendRouterSolicitation False \ + -fastPathEnable $fastPathEnable \ + -fastPathRate 100 \ + -fastPathNumFrames 10 + ixNet setMultiAttrs $sg_rfc2544back2back/passCriteria \ + -passCriteriaLoadRateMode average \ + -passCriteriaLoadRateValue 100 \ + -passCriteriaLoadRateScale mbps \ + -enablePassFail False \ + -enableRatePassFail False \ + -enableLatencyPassFail False \ + -enableStandardDeviationPassFail False \ + -latencyThresholdValue 10 \ + -latencyThresholdScale us \ + -latencyThresholdMode average \ + -latencyVariationThresholdValue 0 \ + -latencyVariationThresholdScale us \ + -latencyVarThresholdMode average \ + -enableSequenceErrorsPassFail False \ + -seqErrorsThresholdValue 0 \ + -seqErrorsThresholdMode average \ + -enableDataIntegrityPassFail False \ + -dataErrorThresholdValue 0 \ + -dataErrorThresholdMode average \ + -enableFrameCountPassFail False \ + -passCriteriaFrameCountValue 100 \ + -passCriteriaFrameCountMode average + sg_commit + set sg_rfc2544back2back [lindex [ixNet remapIds $sg_rfc2544back2back] 0] + set ixNetSG_Stack(1) $sg_rfc2544back2back + + # + # configuring the object that corresponds to /quickTest/rfc2544back2back:2/protocols + # + set sg_protocols $ixNetSG_Stack(1)/protocols + ixNet setMultiAttrs $sg_protocols \ + -protocolState default \ + -waitAfterStart 120 \ + -waitAfterStop 30 + sg_commit + set sg_protocols [lindex [ixNet remapIds $sg_protocols] 0] + + # + # configuring the object that corresponds to /quickTest/rfc2544back2back:2/trafficSelection:1 + # + set sg_trafficSelection [ixNet add $ixNetSG_Stack(1) trafficSelection] + ixNet setMultiAttrs $sg_trafficSelection \ + -id $ixNetSG_ref(26) \ + -includeMode inTest \ + -itemType trafficItem + sg_commit + set sg_trafficSelection [lindex [ixNet remapIds $sg_trafficSelection] 0] + ixNet commit + } + + # + # getting and applying the RFC2544 test + # + set root [ixNet getRoot] + foreach traf_item [ixNet getList $root/traffic trafficItem] { + ixNet exec generate $traf_item + } + + set qt [ixNet getList $root quickTest] + if {$rfc2544TestType == "throughput"} { + set rfc2544test [ixNet getList $qt rfc2544throughput] + } elseif {$rfc2544TestType == "back2back"} { + set rfc2544test [ixNet getList $qt rfc2544back2back] + } + ixNet exec apply $rfc2544test + after 5000 + + # + # starting the RFC2544 Throughput test + # + puts "Starting test..." + ixNet exec start $rfc2544test +} + +proc waitForRfc2544Test { } { + # Wait for- and return results of- RFC2544 quicktest. + + global rfc2544test + + puts "Waiting for test to complete..." + set result [ixNet exec waitForTest $rfc2544test] + puts "Finished Test" + + return "$result" +} diff --git a/tools/pkt_gen/trafficgen/trafficgenhelper.py b/tools/pkt_gen/trafficgen/trafficgenhelper.py index 8577da26..f5ac539d 100644 --- a/tools/pkt_gen/trafficgen/trafficgenhelper.py +++ b/tools/pkt_gen/trafficgen/trafficgenhelper.py @@ -25,14 +25,16 @@ TRAFFIC_DEFAULTS = { 'framesize': 64, 'srcmac': '00:00:00:00:00:00', 'dstmac': '00:00:00:00:00:00', - 'srcport': 3000, - 'dstport': 3001, }, 'l3': { 'proto': 'udp', 'srcip': '1.1.1.1', 'dstip': '90.90.90.90', }, + 'l4': { + 'srcport': 3000, + 'dstport': 3001, + }, 'vlan': { 'enabled': False, 'id': 0, diff --git a/tools/report/report.py b/tools/report/report.py index 16ef0eb3..92463f26 100644 --- a/tools/report/report.py +++ b/tools/report/report.py @@ -70,7 +70,7 @@ def _get_env(result): return env -def generate(input_file, tc_results, tc_stats): +def generate(input_file, tc_results, tc_stats, performance_test=True): """Generate actual report. Generate a Markdown-formatted file using results of tests and some @@ -89,10 +89,16 @@ def generate(input_file, tc_results, tc_stats): try: for result in tc_results: test_config = {} - for tc_conf in S.getValue('PERFORMANCE_TESTS'): - if tc_conf['Name'] == result[ResultsConstants.ID]: - test_config = tc_conf - break + if performance_test: + for tc_conf in S.getValue('PERFORMANCE_TESTS'): + if tc_conf['Name'] == result[ResultsConstants.ID]: + test_config = tc_conf + break + else: + for tc_conf in S.getValue('INTEGRATION_TESTS'): + if tc_conf['Name'] == result[ResultsConstants.ID]: + test_config = tc_conf + break # pass test results, env details and configuration to template tests.append({ diff --git a/vsperf b/vsperf index 71ca2eb0..63913c77 100755 --- a/vsperf +++ b/vsperf @@ -326,8 +326,11 @@ def main(): settings.load_from_dir('conf') + performance_test = True + # Load non performance/integration tests if args['run_integration']: + performance_test = False settings.load_from_dir('conf/integration') # load command line parameters first in case there are settings files @@ -466,7 +469,7 @@ def main(): all_tests = [] for cfg in testcases: try: - all_tests.append(TestCase(cfg, results_path)) + all_tests.append(TestCase(cfg, results_path, performance_test)) except (Exception) as _: logger.exception("Failed to create test: %s", cfg.get('Name', '')) diff --git a/vswitches/ovs_dpdk_vhost.py b/vswitches/ovs_dpdk_vhost.py index 074e15f8..447ce097 100644 --- a/vswitches/ovs_dpdk_vhost.py +++ b/vswitches/ovs_dpdk_vhost.py @@ -135,15 +135,20 @@ class OvsDpdkVhost(IVSwitch): return (port_name, of_port) - def add_tunnel_port(self, switch_name, remote_ip, tunnel_type='vxlan'): + def add_tunnel_port(self, switch_name, remote_ip, tunnel_type='vxlan', params=None): """Creates tunneling port """ bridge = self._bridges[switch_name] pcount = str(self._get_port_count('type=' + tunnel_type)) port_name = tunnel_type + pcount - params = ['--', 'set', 'Interface', port_name, 'type=' + tunnel_type, - 'options:remote_ip=' + remote_ip] - of_port = bridge.add_port(port_name, params) + local_params = ['--', 'set', 'Interface', port_name, + 'type=' + tunnel_type, + 'options:remote_ip=' + remote_ip] + + if params is not None: + local_params = local_params + params + + of_port = bridge.add_port(port_name, local_params) return (port_name, of_port) def get_ports(self, switch_name): -- cgit 1.2.3-korg