From 06468e123bdcbf5930abdf9d5d9e2432a7159839 Mon Sep 17 00:00:00 2001 From: Michal Weglicki Date: Fri, 24 Jul 2015 10:42:38 +0100 Subject: 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 Reviewed-by: Eugene Snider Reviewed-by: Gurpreet Singh Reviewed-by: Tv Rao Reviewed-by: Martin Klozik Reviewed-by: Billy O Mahony Reviewed-by: Maryam Tahhan --- tools/module_manager.py | 97 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 tools/module_manager.py (limited to 'tools/module_manager.py') 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 -- cgit 1.2.3-korg