diff options
author | Michal Weglicki <michalx.weglicki@intel.com> | 2015-07-24 10:42:38 +0100 |
---|---|---|
committer | Maryam Tahhan <maryam.tahhan@intel.com> | 2015-08-06 09:40:55 +0000 |
commit | 06468e123bdcbf5930abdf9d5d9e2432a7159839 (patch) | |
tree | ffb137fcace56e1fec6b3f064ffe0d609e56f807 /tools | |
parent | cb5400b079ec8aacfd6dac73cbf59b74bbcb4e1e (diff) |
Vanilla OVS support implementation
JIRA: VSPERF-57
This patch implements Vanilla OVS support.It contains:
* New IVswitch implementation: OvsVanilla,
* New configuration contants,
* New mandatory configuration variable: VSWITCH_VANILLA_PHY_PORT_NAMES
for Vanilla OVS has been added,
* Virtual ports are not yet implemented,
* Some kernel modules wrapping methods has been moved from dpdk.py to
tools.
* Fixed bug where ovsdb hasn't been killed at the end of test case run on
some platforms.
Change-Id: I21a0d84dbc4004aae564d5547387a2563f2d1e5b
Signed-off-by: Michal Weglicki <michalx.weglicki@intel.com>
Reviewed-by: Eugene Snider <Eugene.Snider@huawei.com>
Reviewed-by: Gurpreet Singh <gurpreet.singh@spirent.com>
Reviewed-by: Tv Rao <tv.rao@freescale.com>
Reviewed-by: Martin Klozik <martinx.klozik@intel.com>
Reviewed-by: Billy O Mahony <billy.o.mahony@intel.com>
Reviewed-by: Maryam Tahhan <maryam.tahhan@intel.com>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/module_manager.py | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/tools/module_manager.py b/tools/module_manager.py new file mode 100644 index 00000000..6ed80e93 --- /dev/null +++ b/tools/module_manager.py @@ -0,0 +1,97 @@ +# 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. + +"""Simple kernel module manager implementation. +""" + +import subprocess +import logging +from tools import tasks + +class KernelModuleInsertMode(object): + """Module manager type of insert definition. + """ + MODPROBE = 1 + INSMOD = 2 #NOT IMPLEMENTED + +class ModuleManager(object): + """Simple module manager which acts as system wrapper for Kernel Modules. + """ + + _logger = logging.getLogger(__name__) + + def __init__(self, insert_mode=KernelModuleInsertMode.MODPROBE): + """Initializes data and sets insert mode. + + :param insert_mode: insert mode defines how modules are going to + be inserted in system. + """ + self._modules = None + self._insert_mode = insert_mode + + def insert_modules(self, modules): + """Method inserts list of modules using defined insert mode. + + :param modules: list of modules to be inserted. Each element on + list should represent format which is expected + by KernelModuleInsertMode (e.g. for MODPROBE it + would be module name). + + :returns: None + """ + self._modules = modules + for module in modules: + if ModuleManager.is_module_inserted(module): + continue + + try: + if self._insert_mode == KernelModuleInsertMode.MODPROBE: + tasks.run_task(['sudo', 'modprobe', module], self._logger, + 'Inserting module \'%s\'...' % module, True) + else: + self._logger.error( + "Kernel module insert mode NOT IMPLEMENTED.") + raise + + except subprocess.CalledProcessError: + self._logger.error('Unable to insert module \'%s\'.', module) + raise # fail catastrophically + + def remove_modules(self): + """Removes all modules that have been previously instereted. + """ + for module in self._modules: + # first check if module is loaded + if not ModuleManager.is_module_inserted(module): + continue + + try: + tasks.run_task(['sudo', 'rmmod', module], self._logger, + 'Removing module \'%s\'...' % module, True) + except subprocess.CalledProcessError: + self._logger.error('Unable to remove module \'%s\'.', module) + continue + + @staticmethod + def is_module_inserted(module): + """Check if a module is inserted on system. + """ + with open('/proc/modules') as mod_file: + loaded_mods = mod_file.readlines() + + # first check if module is loaded + for line in loaded_mods: + if line.startswith(module): + return True + return False |