diff options
author | Martin Klozik <martinx.klozik@intel.com> | 2016-02-23 09:54:43 +0000 |
---|---|---|
committer | Martin Klozik <martinx.klozik@intel.com> | 2016-03-21 14:18:56 +0000 |
commit | b55c8beb6003f07f025fc0edbc08c3e0fcaed064 (patch) | |
tree | 435359b6ba1d382389dedc0d9bccc6964bcbb606 /vswitches/ovs_dpdk_vhost.py | |
parent | 8ee2450bd267c7dc173f62909a8a4ebe13feab84 (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_dpdk_vhost.py')
-rw-r--r-- | vswitches/ovs_dpdk_vhost.py | 130 |
1 files changed, 17 insertions, 113 deletions
diff --git a/vswitches/ovs_dpdk_vhost.py b/vswitches/ovs_dpdk_vhost.py index 2ace64a2..9d29c9d1 100644 --- a/vswitches/ovs_dpdk_vhost.py +++ b/vswitches/ovs_dpdk_vhost.py @@ -17,13 +17,11 @@ import logging from conf import settings -from vswitches.vswitch import IVSwitch -from src.ovs import VSwitchd, OFBridge +from vswitches.ovs import IVSwitchOvs +from src.ovs import VSwitchd from src.dpdk import dpdk -_VSWITCHD_CONST_ARGS = ['--', '--pidfile', '--log-file'] - -class OvsDpdkVhost(IVSwitch): +class OvsDpdkVhost(IVSwitchOvs): """ Open vSwitch with DPDK support Generic OVS wrapper functionality in src.ovs is maximally used. This @@ -35,21 +33,19 @@ class OvsDpdkVhost(IVSwitch): see the interface. """ - _logger = logging.getLogger() - def __init__(self): - vswitchd_args = ['--dpdk'] - vswitchd_args += settings.getValue('VSWITCHD_DPDK_ARGS') - vswitchd_args += _VSWITCHD_CONST_ARGS + super(OvsDpdkVhost, self).__init__() + self._logger = logging.getLogger(__name__) + self._vswitchd_args = ['--dpdk'] + self._vswitchd_args += settings.getValue('VSWITCHD_DPDK_ARGS') if settings.getValue('VNF').endswith('Cuse'): self._logger.info("Inserting VHOST Cuse modules into kernel...") dpdk.insert_vhost_modules() - self._vswitchd = VSwitchd(vswitchd_args=vswitchd_args, + self._vswitchd = VSwitchd(vswitchd_args=self._vswitchd_args, expected_cmd= r'EAL: Master l*core \d+ is ready') - self._bridges = {} def start(self): """See IVswitch for general description @@ -57,47 +53,32 @@ class OvsDpdkVhost(IVSwitch): Activates DPDK kernel modules, ovsdb and vswitchd. """ dpdk.init() - self._vswitchd.start() + super(OvsDpdkVhost, self).start() def stop(self): """See IVswitch for general description Kills ovsdb and vswitchd and removes DPDK kernel modules. """ - self._vswitchd.kill() + super(OvsDpdkVhost, self).stop() dpdk.cleanup() dpdk.remove_vhost_modules() def add_switch(self, switch_name, params=None): """See IVswitch for general description """ - bridge = OFBridge(switch_name) - if params is None: - bridge.create(['--', 'set', 'bridge', switch_name, - 'datapath_type=netdev']) - else: - bridge.create(['--', 'set', 'bridge', switch_name, - 'datapath_type=netdev'] + params) + switch_params = ['--', 'set', 'bridge', switch_name, 'datapath_type=netdev'] + if params: + switch_params = switch_params + params - bridge.set_db_attribute('Open_vSwitch', '.', - 'other_config:max-idle', - settings.getValue('VSWITCH_FLOW_TIMEOUT')) + super(OvsDpdkVhost, self).add_switch(switch_name, switch_params) if settings.getValue('VSWITCH_AFFINITIZATION_ON') == 1: # Sets the PMD core mask to VSWITCH_PMD_CPU_MASK # for CPU core affinitization - bridge.set_db_attribute('Open_vSwitch', '.', - 'other_config:pmd-cpu-mask', - settings.getValue('VSWITCH_PMD_CPU_MASK')) - - 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() + self._bridges[switch_name].set_db_attribute('Open_vSwitch', '.', + 'other_config:pmd-cpu-mask', + settings.getValue('VSWITCH_PMD_CPU_MASK')) def add_phy_port(self, switch_name): """See IVswitch for general description @@ -134,80 +115,3 @@ class OvsDpdkVhost(IVSwitch): of_port = bridge.add_port(port_name, params) return (port_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 |