aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMartin Klozik <martinx.klozik@intel.com>2016-05-05 14:59:32 +0100
committerMartin Klozik <martinx.klozik@intel.com>2016-05-06 10:06:11 +0100
commitfdfd540284e31d9349173285619f5927aa8fc057 (patch)
tree93426222eb2e4de0095cc6c965e411539b69420e /src
parent22ffe5b07adeb514572dc3db8b435ef4107e348b (diff)
dpdk: Support new way of DPDK configuration in ovs-vswitchd
Configuration of DPDK options in ovs-vswitchd has changed. Previously used option --dpdk was deprecated and all DPDK related options have to be configured through ovsdb via ovs-vsctl calls. VSPERF was modified to detect and use correct version of DPDK configuration. New configuration options should be put into VSWITCHD_DPDK_CONFIG dictionary. VSPERF classes specific to OVS were refactored. Change-Id: Ia3fad5906221439f477638f1f9734289dbf737bb JIRA: VSPERF-291 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 'src')
-rw-r--r--src/ovs/__init__.py1
-rw-r--r--src/ovs/daemon.py163
-rw-r--r--src/ovs/ofctl.py8
3 files changed, 7 insertions, 165 deletions
diff --git a/src/ovs/__init__.py b/src/ovs/__init__.py
index 8c157006..77592ea3 100644
--- a/src/ovs/__init__.py
+++ b/src/ovs/__init__.py
@@ -21,6 +21,5 @@ and external setup of vswitchd-external process, kernel modules etc.
"""
-from src.ovs.daemon import *
from src.ovs.ofctl import *
from src.ovs.dpctl import *
diff --git a/src/ovs/daemon.py b/src/ovs/daemon.py
deleted file mode 100644
index f9b037b2..00000000
--- a/src/ovs/daemon.py
+++ /dev/null
@@ -1,163 +0,0 @@
-# Copyright 2015 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.
-
-"""Class wrapper for controlling an OVS instance.
-
-Wraps a pair of ``ovs-vswitchd`` and ``ovsdb-server`` processes.
-"""
-
-import os
-import logging
-import pexpect
-
-from conf import settings
-from tools import tasks
-
-_OVS_VAR_DIR = settings.getValue('OVS_VAR_DIR')
-_OVS_ETC_DIR = settings.getValue('OVS_ETC_DIR')
-
-_LOG_FILE_VSWITCHD = os.path.join(
- settings.getValue('LOG_DIR'), settings.getValue('LOG_FILE_VSWITCHD'))
-
-class VSwitchd(tasks.Process):
- """Class wrapper for controlling an OVS instance.
-
- Wraps a pair of ``ovs-vswitchd`` and ``ovsdb-server`` processes.
- """
- _ovsdb_pid = None
- _logfile = _LOG_FILE_VSWITCHD
- _ovsdb_pidfile_path = os.path.join(settings.getValue('LOG_DIR'), "ovsdb_pidfile.pid")
- _vswitchd_pidfile_path = os.path.join(settings.getValue('LOG_DIR'), "vswitchd_pidfile.pid")
- _proc_name = 'ovs-vswitchd'
-
- def __init__(self, timeout=30, vswitchd_args=None, expected_cmd=None):
- """Initialise the wrapper with a specific start timeout and extra
- parameters.
-
- :param timeout: Timeout to wait for application to start.
- :param vswitchd_args: Command line parameters for vswitchd.
-
- :returns: None
- """
- self._logger = logging.getLogger(__name__)
- self._timeout = timeout
- self._expect = expected_cmd
- vswitchd_args = vswitchd_args or []
- ovs_vswitchd_bin = os.path.join(
- settings.getValue('OVS_DIR'), 'vswitchd', 'ovs-vswitchd')
- sep = ['--'] if '--dpdk' in vswitchd_args else []
- self._cmd = ['sudo', '-E', ovs_vswitchd_bin] + vswitchd_args + sep + \
- ['--pidfile=' + self._vswitchd_pidfile_path, '--overwrite-pidfile',
- '--log-file=' + self._logfile]
-
- # startup/shutdown
-
- def start(self):
- """ Start ``ovsdb-server`` and ``ovs-vswitchd`` instance.
-
- :returns: None
- :raises: pexpect.EOF, pexpect.TIMEOUT
- """
-
- self._reset_ovsdb()
- self._start_ovsdb() # this has to be started first
-
- try:
- super(VSwitchd, self).start()
- self.relinquish()
- except (pexpect.EOF, pexpect.TIMEOUT) as exc:
- logging.error("Exception during VSwitch start.")
- self._kill_ovsdb()
- raise exc
-
- def kill(self, signal='-15', sleep=10):
- """Kill ``ovs-vswitchd`` instance if it is alive.
-
- :returns: None
- """
- self._logger.info('Killing ovs-vswitchd...')
- with open(self._vswitchd_pidfile_path, "r") as pidfile:
- vswitchd_pid = pidfile.read().strip()
- tasks.terminate_task(vswitchd_pid, logger=self._logger)
-
- self._kill_ovsdb() # ovsdb must be killed after vswitchd
-
- # just for case, that sudo envelope has not terminated
- super(VSwitchd, self).kill(signal, sleep)
-
- # helper functions
-
- def _reset_ovsdb(self):
- """Reset system for 'ovsdb'.
-
- :returns: None
- """
- self._logger.info('Resetting system after last run...')
-
- tasks.run_task(['sudo', 'rm', '-rf', _OVS_VAR_DIR], self._logger)
- tasks.run_task(['sudo', 'mkdir', '-p', _OVS_VAR_DIR], self._logger)
- tasks.run_task(['sudo', 'rm', '-rf', _OVS_ETC_DIR], self._logger)
- tasks.run_task(['sudo', 'mkdir', '-p', _OVS_ETC_DIR], self._logger)
-
- tasks.run_task(['sudo', 'rm', '-f',
- os.path.join(_OVS_ETC_DIR, 'conf.db')],
- self._logger)
-
- self._logger.info('System reset after last run.')
-
- def _start_ovsdb(self):
- """Start ``ovsdb-server`` instance.
-
- :returns: None
- """
- ovsdb_tool_bin = os.path.join(
- settings.getValue('OVS_DIR'), 'ovsdb', 'ovsdb-tool')
- tasks.run_task(['sudo', ovsdb_tool_bin, 'create',
- os.path.join(_OVS_ETC_DIR, 'conf.db'),
- os.path.join(settings.getValue('OVS_DIR'), 'vswitchd',
- 'vswitch.ovsschema')],
- self._logger,
- 'Creating ovsdb configuration database...')
-
- ovsdb_server_bin = os.path.join(
- settings.getValue('OVS_DIR'), 'ovsdb', 'ovsdb-server')
-
- tasks.run_background_task(
- ['sudo', ovsdb_server_bin,
- '--remote=punix:%s' % os.path.join(_OVS_VAR_DIR, 'db.sock'),
- '--remote=db:Open_vSwitch,Open_vSwitch,manager_options',
- '--pidfile=' + self._ovsdb_pidfile_path, '--overwrite-pidfile'],
- self._logger,
- 'Starting ovsdb-server...')
-
- def _kill_ovsdb(self):
- """Kill ``ovsdb-server`` instance.
-
- :returns: None
- """
- with open(self._ovsdb_pidfile_path, "r") as pidfile:
- ovsdb_pid = pidfile.read().strip()
-
- self._logger.info("Killing ovsdb with pid: " + ovsdb_pid)
-
- if ovsdb_pid:
- tasks.terminate_task(ovsdb_pid, logger=self._logger)
-
- @staticmethod
- def get_db_sock_path():
- """Method returns location of db.sock file
-
- :returns: path to db.sock file.
- """
- return os.path.join(_OVS_VAR_DIR, 'db.sock')
diff --git a/src/ovs/ofctl.py b/src/ovs/ofctl.py
index 93894889..1ee48133 100644
--- a/src/ovs/ofctl.py
+++ b/src/ovs/ofctl.py
@@ -57,12 +57,18 @@ class OFBase(object):
def run_vsctl(self, args, check_error=False):
"""Run ``ovs-vsctl`` with supplied arguments.
+ In case that timeout is set to -1, then ovs-vsctl
+ will be called with --no-wait option.
+
:param args: Arguments to pass to ``ovs-vsctl``
:param check_error: Throw exception on error
:return: None
"""
- cmd = ['sudo', _OVS_VSCTL_BIN, '--timeout', str(self.timeout)] + args
+ if self.timeout == -1:
+ cmd = ['sudo', _OVS_VSCTL_BIN, '--no-wait'] + args
+ else:
+ cmd = ['sudo', _OVS_VSCTL_BIN, '--timeout', str(self.timeout)] + args
return tasks.run_task(
cmd, self.logger, 'Running ovs-vsctl...', check_error)