From 76aba6f4fcb5e2a030893c01a3103bf8e94aa288 Mon Sep 17 00:00:00 2001 From: Dino Simeon Madarang Date: Fri, 8 Jan 2016 15:31:36 +0000 Subject: vswitches: Remove datapath after stopping OVS Remove the datapath that OVS creates, ovs-system, (can be viewed by ip link) after running OVS vanilla tests. Change-Id: I087c7b3f5afa546258227939ffcb38f0192f0d98 JIRA: VSPERF-175 Signed-off-by: Dino Simeon Madarang Reviewed-by: Maryam Tahhan Reviewed-by: Martin Klozik Reviewed-by: Al Morton Reviewed-by: Brian Castelli --- src/ovs/__init__.py | 1 + src/ovs/dpctl.py | 71 ++++++++++++++++++++++++++++++++++++++++++++++++ vswitches/ovs_vanilla.py | 5 +++- 3 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 src/ovs/dpctl.py diff --git a/src/ovs/__init__.py b/src/ovs/__init__.py index 1a31ea2e..8c157006 100644 --- a/src/ovs/__init__.py +++ b/src/ovs/__init__.py @@ -23,3 +23,4 @@ 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/dpctl.py b/src/ovs/dpctl.py new file mode 100644 index 00000000..8ecac6dc --- /dev/null +++ b/src/ovs/dpctl.py @@ -0,0 +1,71 @@ +# Copyright 2016 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. + +"""Wrapper for an OVS dpctl (``ovs-dpctl``) for managing datapaths. + +""" + +import os +import logging +import string + +from tools import tasks +from conf import settings + +_OVS_DPCTL_BIN = os.path.join(settings.getValue('OVS_DIR'), 'utilities', + 'ovs-dpctl') + +_OVS_LOCAL_DATAPATH = 'ovs-system' + +class DPCtl(object): + """remove/show datapaths using ``ovs-dpctl``. + """ + def __init__(self, timeout=10): + """Initialise logger. + + :param timeout: Timeout to be used for each command + + :returns: None + """ + self.logger = logging.getLogger(__name__) + self.timeout = timeout + + # helpers + + def run_dpctl(self, args, check_error=False): + """Run ``ovs-dpctl`` with supplied arguments. + + :param args: Arguments to pass to ``ovs-dpctl`` + :param check_error: Throw exception on error + + :return: None + """ + cmd = ['sudo', _OVS_DPCTL_BIN, + '--timeout', + str(self.timeout)] + args + return tasks.run_task( + cmd, self.logger, 'Running ovs-dpctl ..', check_error) + + # datapath management + + def del_dp(self, dp_name=_OVS_LOCAL_DATAPATH): + """Delete local datapath (ovs-dpctl). + + :param br_name: Name of bridge + + :return: None + """ + self.logger.debug('delete datapath ' + dp_name) + self.run_dpctl(['del-dp', dp_name]) + diff --git a/vswitches/ovs_vanilla.py b/vswitches/ovs_vanilla.py index 04058d97..c6617404 100644 --- a/vswitches/ovs_vanilla.py +++ b/vswitches/ovs_vanilla.py @@ -18,7 +18,7 @@ import logging from conf import settings from vswitches.vswitch import IVSwitch -from src.ovs import VSwitchd, OFBridge +from src.ovs import VSwitchd, OFBridge, DPCtl from tools.module_manager import ModuleManager from tools import tasks @@ -74,6 +74,9 @@ class OvsVanilla(IVSwitch): self._vport_id = 0 self._vswitchd.kill() + dpctl = DPCtl() + dpctl.del_dp() + self._module_manager.remove_modules() -- cgit 1.2.3-korg