aboutsummaryrefslogtreecommitdiffstats
path: root/vswitches/ovs_vanilla.py
diff options
context:
space:
mode:
authorMartin Klozik <martinx.klozik@intel.com>2016-02-23 09:54:43 +0000
committerMartin Klozik <martinx.klozik@intel.com>2016-03-21 14:18:56 +0000
commitb55c8beb6003f07f025fc0edbc08c3e0fcaed064 (patch)
tree435359b6ba1d382389dedc0d9bccc6964bcbb606 /vswitches/ovs_vanilla.py
parent8ee2450bd267c7dc173f62909a8a4ebe13feab84 (diff)
integration: Support of integration testcases
Generic support for integration testcases with first set of tests for vswitch testing. New test option "TestSteps" has been introduced to define test step by step directly in configuration file. In case that this concept will be accepted, there are plenty of possibilities for future improvements. For example: * use it also for performance tests without explicit call of validation methods * introduce step macros for repetitive scenarios, so new tests can be easily written * further generalization, which would go beyond usage of controllers and will operate directly with vswitch, vnf and trafficgen objects Change-Id: Ifad166c8ef9cfbda6694682fe6b3421e0e97bbf2 JIRA: VSPERF-212 Signed-off-by: Martin Klozik <martinx.klozik@intel.com> Reviewed-by: Maryam Tahhan <maryam.tahhan@intel.com> Reviewed-by: Al Morton <acmorton@att.com> Reviewed-by: Christian Trautman <ctrautma@redhat.com> Reviewed-by: Brian Castelli <brian.castelli@spirent.com>
Diffstat (limited to 'vswitches/ovs_vanilla.py')
-rw-r--r--vswitches/ovs_vanilla.py129
1 files changed, 15 insertions, 114 deletions
diff --git a/vswitches/ovs_vanilla.py b/vswitches/ovs_vanilla.py
index 078d7006..6a380b1b 100644
--- a/vswitches/ovs_vanilla.py
+++ b/vswitches/ovs_vanilla.py
@@ -17,15 +17,12 @@
import logging
from conf import settings
-from vswitches.vswitch import IVSwitch
-from src.ovs import VSwitchd, OFBridge, DPCtl
+from vswitches.ovs import IVSwitchOvs
+from src.ovs import VSwitchd, DPCtl
from tools.module_manager import ModuleManager
from tools import tasks
-_LOGGER = logging.getLogger(__name__)
-VSWITCHD_CONST_ARGS = ['--', '--log-file']
-
-class OvsVanilla(IVSwitch):
+class OvsVanilla(IVSwitchOvs):
""" Open vSwitch
This is wrapper for functionality implemented in src.ovs.
@@ -35,16 +32,16 @@ class OvsVanilla(IVSwitch):
see the interface definition.
"""
- _logger = logging.getLogger()
_ports = settings.getValue('VSWITCH_VANILLA_PHY_PORT_NAMES')
_current_id = 0
_vport_id = 0
def __init__(self):
- #vswitchd_args = VSWITCHD_CONST_ARGS
- vswitchd_args = ["unix:%s" % VSwitchd.get_db_sock_path()]
- vswitchd_args += settings.getValue('VSWITCHD_VANILLA_ARGS')
- self._vswitchd = VSwitchd(vswitchd_args=vswitchd_args,
+ super(OvsVanilla, self).__init__()
+ self._logger = logging.getLogger(__name__)
+ self._vswitchd_args = ["unix:%s" % VSwitchd.get_db_sock_path()]
+ self._vswitchd_args += settings.getValue('VSWITCHD_VANILLA_ARGS')
+ self._vswitchd = VSwitchd(vswitchd_args=self._vswitchd_args,
expected_cmd="db.sock: connected")
self._bridges = {}
self._module_manager = ModuleManager()
@@ -56,9 +53,7 @@ class OvsVanilla(IVSwitch):
"""
self._module_manager.insert_modules(
settings.getValue('VSWITCH_VANILLA_KERNEL_MODULES'))
- self._logger.info("Starting Vswitchd...")
- self._vswitchd.start()
- self._logger.info("Vswitchd...Started.")
+ super(OvsVanilla, self).start()
def stop(self):
"""See IVswitch for general description
@@ -70,32 +65,16 @@ class OvsVanilla(IVSwitch):
tapx = 'tap' + str(i)
tasks.run_task(['sudo', 'ip', 'tuntap', 'del',
tapx, 'mode', 'tap'],
- _LOGGER, 'Deleting ' + tapx, False)
+ self._logger, 'Deleting ' + tapx, False)
self._vport_id = 0
- self._vswitchd.kill()
+ super(OvsVanilla, self).stop()
dpctl = DPCtl()
dpctl.del_dp()
self._module_manager.remove_modules()
- def add_switch(self, switch_name, params=None):
- """See IVswitch for general description
- """
- bridge = OFBridge(switch_name)
- bridge.create(params)
- bridge.set_db_attribute('Open_vSwitch', '.',
- 'other_config:max-idle', '60000')
- self._bridges[switch_name] = bridge
-
- def del_switch(self, switch_name):
- """See IVswitch for general description
- """
- bridge = self._bridges[switch_name]
- self._bridges.pop(switch_name)
- bridge.destroy()
-
def add_phy_port(self, switch_name):
"""
Method adds port based on configured VSWITCH_VANILLA_PHY_PORT_NAMES
@@ -119,7 +98,7 @@ class OvsVanilla(IVSwitch):
# For PVP only
tasks.run_task(['sudo', 'ifconfig', port_name, '0'],
- _LOGGER, 'Remove IP', False)
+ self._logger, 'Remove IP', False)
of_port = bridge.add_port(port_name, params)
self._current_id += 1
@@ -137,95 +116,17 @@ class OvsVanilla(IVSwitch):
tasks.run_task(['sudo', 'ip', 'tuntap', 'del',
tap_name, 'mode', 'tap'],
- _LOGGER, 'Creating tap device...', False)
+ self._logger, 'Creating tap device...', False)
tasks.run_task(['sudo', 'ip', 'tuntap', 'add',
tap_name, 'mode', 'tap'],
- _LOGGER, 'Creating tap device...', False)
+ self._logger, 'Creating tap device...', False)
tasks.run_task(['sudo', 'ifconfig', tap_name, '0'],
- _LOGGER, 'Bring up ' + tap_name, False)
+ self._logger, 'Bring up ' + tap_name, False)
bridge = self._bridges[switch_name]
of_port = bridge.add_port(tap_name, [])
return (tap_name, of_port)
- 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
- 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):
- """See IVswitch for general description
- """
- bridge = self._bridges[switch_name]
- ports = list(bridge.get_ports().items())
- return [(name, of_port) for (name, (of_port, _)) in ports]
-
- def del_port(self, switch_name, port_name):
- """See IVswitch for general description
- """
- bridge = self._bridges[switch_name]
- bridge.del_port(port_name)
-
- def add_flow(self, switch_name, flow, cache='off'):
- """See IVswitch for general description
- """
- bridge = self._bridges[switch_name]
- bridge.add_flow(flow, cache=cache)
-
- def del_flow(self, switch_name, flow=None):
- """See IVswitch for general description
- """
- flow = flow or {}
- bridge = self._bridges[switch_name]
- bridge.del_flow(flow)
-
- def dump_flows(self, switch_name):
- """See IVswitch for general description
- """
- bridge = self._bridges[switch_name]
- bridge.dump_flows()
-
- def add_route(self, switch_name, network, destination):
- """See IVswitch for general description
- """
- bridge = self._bridges[switch_name]
- bridge.add_route(network, destination)
-
- def set_tunnel_arp(self, ip_addr, mac_addr, switch_name):
- """See IVswitch for general description
- """
- bridge = self._bridges[switch_name]
- bridge.set_tunnel_arp(ip_addr, mac_addr, switch_name)
-
- def _get_port_count(self, param):
- """Returns the number of ports having a certain parameter
-
- :param bridge: The src.ovs.ofctl.OFBridge on which to operate
- :param param: The parameter to search for
- :returns: Count of matches
- """
- cnt = 0
- for k in self._bridges:
- pparams = [c for (_, (_, c)) in list(self._bridges[k].get_ports().items())]
- phits = [i for i in pparams if param in i]
- cnt += len(phits)
-
- if cnt is None:
- cnt = 0
- return cnt
-