summaryrefslogtreecommitdiffstats
path: root/core/vswitch_controller_op2p.py
diff options
context:
space:
mode:
authorDino Simeon Madarang <dino.simeonx.madarang@intel.com>2015-10-19 14:55:06 +0100
committerMaryam Tahhan <maryam.tahhan@intel.com>2016-02-03 10:17:04 +0000
commitf463c563912abb806fe0d2fe85a4cf6825f416cc (patch)
tree0c588b1390b3333ecf262b4e39460ca2fc9d1d21 /core/vswitch_controller_op2p.py
parent9685088224d2fe542026a6ecbc31a212e3dca3e9 (diff)
Add OVS tunnel encapsulation performance test
Measure OVS DPDK and native VXLAN/GRE/GENEVE encapsulation performance. This patch creates a new deployment scenario, Overlay_P2P. The DUT is configured as a TEP (Tunnel Endpoint) which performs encapsulation of frames and sends traffic to the 2nd traffic generator port. The traffic generator in this case receives an encapsulated frame. No decapsulation is performed in this testcase. Introduce a vsperf param, --run-integration, to filter tests to integration tests. When running integration tests, variables defined in the directory conf/integration/*conf as well as the conf/*.conf are available. This test case requires DPDK 2.1.0 and OVS master - 6bb4a18 or newer. Change-Id: Ide2f418909d647119388df9b30d0d0a3656b4e53 JIRA: VSPERF-180 Signed-off-by: Dino Simeon Madarang <dino.simeonx.madarang@intel.com> Reviewed-by: Maryam Tahhan <maryam.tahhan@intel.com> Reviewed-by: Al Morton <acmorton@att.com>
Diffstat (limited to 'core/vswitch_controller_op2p.py')
-rw-r--r--core/vswitch_controller_op2p.py140
1 files changed, 140 insertions, 0 deletions
diff --git a/core/vswitch_controller_op2p.py b/core/vswitch_controller_op2p.py
new file mode 100644
index 00000000..69c88c35
--- /dev/null
+++ b/core/vswitch_controller_op2p.py
@@ -0,0 +1,140 @@
+# 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.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""VSwitch controller for Physical to Tunnel Endpoint to Physical deployment
+"""
+
+import logging
+
+from core.vswitch_controller import IVswitchController
+from vswitches.utils import add_ports_to_flow
+from conf import settings
+from tools import tasks
+
+_FLOW_TEMPLATE = {
+ 'idle_timeout': '0'
+}
+
+class VswitchControllerOP2P(IVswitchController):
+ """VSwitch controller for OP2P deployment scenario.
+
+ Attributes:
+ _vswitch_class: The vSwitch class to be used.
+ _vswitch: The vSwitch object controlled by this controller
+ _deployment_scenario: A string describing the scenario to set-up in the
+ constructor.
+ """
+ def __init__(self, vswitch_class, traffic):
+ """Initializes up the prerequisites for the OP2P deployment scenario.
+
+ :vswitch_class: the vSwitch class to be used.
+ """
+ self._logger = logging.getLogger(__name__)
+ self._vswitch_class = vswitch_class
+ self._vswitch = vswitch_class()
+ self._deployment_scenario = "OP2P"
+ self._traffic = traffic.copy()
+ self._logger.debug('Creation using ' + str(self._vswitch_class))
+
+ def setup(self):
+ """ Sets up the switch for overlay P2P
+
+ Create 2 bridges br0 (integration bridge) and br-ext and a VXLAN port
+ for encapsulation.
+ """
+ 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')
+ tg_port2_mac = settings.getValue('TRAFFICGEN_PORT2_MAC')
+ vtep_ip2 = settings.getValue('VTEP_IP2')
+ 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)
+ (_, phy1_number) = self._vswitch.add_phy_port(bridge)
+ (_, phy2_number) = self._vswitch.add_tunnel_port(bridge,
+ vtep_ip2,
+ tunnel_type)
+ self._vswitch.add_phy_port(bridge_ext)
+
+ 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.add_route(bridge,
+ settings.getValue('VTEP_IP2_SUBNET'),
+ bridge_ext)
+
+ 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')
+ else:
+ self._vswitch.set_tunnel_arp(vtep_ip2,
+ tg_port2_mac,
+ bridge_ext)
+
+ # Test is unidirectional for now
+ self._vswitch.del_flow(bridge)
+ flow1 = add_ports_to_flow(_FLOW_TEMPLATE, phy1_number,
+ phy2_number)
+ self._vswitch.add_flow(bridge, flow1)
+
+ except:
+ self._vswitch.stop()
+ raise
+
+ def stop(self):
+ """Tears down the switch created in setup().
+ """
+ self._logger.debug('Stop using ' + str(self._vswitch_class))
+ self._vswitch.stop()
+
+ def __enter__(self):
+ self.setup()
+
+ def __exit__(self, type_, value, traceback):
+ self.stop()
+
+ def get_vswitch(self):
+ """See IVswitchController for description
+ """
+ return self._vswitch
+
+ def get_ports_info(self):
+ """See IVswitchController for description
+ """
+ self._logger.debug('get_ports_info using ' + str(self._vswitch_class))
+ return self._vswitch.get_ports(settings.getValue('VSWITCH_BRIDGE_NAME'))
+
+ def dump_vswitch_flows(self):
+ """See IVswitchController for description
+ """
+ self._vswitch.dump_flows(settings.getValue('VSWITCH_BRIDGE_NAME'))