vswitches: Remove datapath after stopping OVS 77/6177/3
authorDino Simeon Madarang <dino.simeonx.madarang@intel.com>
Fri, 8 Jan 2016 15:31:36 +0000 (15:31 +0000)
committerMaryam Tahhan <maryam.tahhan@intel.com>
Tue, 12 Jan 2016 12:38:59 +0000 (12:38 +0000)
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 <dino.simeonx.madarang@intel.com>
Reviewed-by: Maryam Tahhan <maryam.tahhan@intel.com>
Reviewed-by: Martin Klozik <martinx.klozik@intel.com>
Reviewed-by: Al Morton <acmorton@att.com>
Reviewed-by: Brian Castelli <brian.castelli@spirent.com>
src/ovs/__init__.py
src/ovs/dpctl.py [new file with mode: 0644]
vswitches/ovs_vanilla.py

index 1a31ea2..8c15700 100644 (file)
@@ -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 (file)
index 0000000..8ecac6d
--- /dev/null
@@ -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])
+
index 04058d9..c661740 100644 (file)
@@ -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()