]> git.proxmox.com Git - mirror_frr.git/commitdiff
lib: check presence of mpls modules, not exitcode of modprobe
authorChristian Franke <nobody@nowhere.ws>
Fri, 23 Mar 2018 19:36:56 +0000 (20:36 +0100)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Wed, 28 Nov 2018 01:22:14 +0000 (20:22 -0500)
Signed-off-by: Christian Franke <nobody@nowhere.ws>
tests/topotests/lib/topogen.py
tests/topotests/lib/topotest.py

index 52b3353f32a101060b09943b7538b2eb8e726fe8..8340d9187bbad98092a9a62f0cdce7ee03046e62 100644 (file)
@@ -132,9 +132,9 @@ class Topogen(object):
 
         # Test for MPLS Kernel modules available
         self.hasmpls = False
-        if os.system('/sbin/modprobe mpls-router') != 0:
+        if not topotest.module_present('mpls-router'):
             logger.info('MPLS tests will not run (missing mpls-router kernel module)')
-        elif os.system('/sbin/modprobe mpls-iptunnel') != 0:
+        elif not topotest.module_present('mpls-iptunnel'):
             logger.info('MPLS tests will not run (missing mpls-iptunnel kernel module)')
         else:
             self.hasmpls = True
@@ -1039,9 +1039,9 @@ def diagnose_env():
         logger.info('LDPd tests will not run (have kernel "{}", but it requires 4.5)'.format(krel))
 
     # Test for MPLS Kernel modules available
-    if os.system('/sbin/modprobe -n mpls-router') != 0:
+    if not topotest.module_present('mpls-router', load=False) != 0:
         logger.info('LDPd tests will not run (missing mpls-router kernel module)')
-    if os.system('/sbin/modprobe -n mpls-iptunnel') != 0:
+    if not topotest.module_present('mpls-iptunnel', load=False) != 0:
         logger.info('LDPd tests will not run (missing mpls-iptunnel kernel module)')
 
     # TODO remove me when we start supporting exabgp >= 4
index b8177660486037976801040a8e6e9b6c2ec7fb9f..11e2a572193d45461a6a3aeca103870bbab5c8ee 100644 (file)
@@ -265,6 +265,22 @@ def normalize_text(text):
     text = re.sub(r'\r', '', text)
     return text
 
+def module_present(module, load=True):
+    """
+    Returns whether `module` is present.
+
+    If `load` is true, it will try to load it via modprobe.
+    """
+    with open('/proc/modules', 'r') as modules_file:
+        if module.replace('-','_') in modules_file.read():
+            return True
+    cmd = '/sbin/modprobe {}{}'.format('' if load else '-n ',
+                                       module)
+    if os.system(cmd) != 0:
+        return False
+    else:
+        return True
+
 def version_cmp(v1, v2):
     """
     Compare two version strings and returns:
@@ -673,9 +689,9 @@ class Router(Node):
             else:
                 # Test for MPLS Kernel modules available
                 self.hasmpls = False
-                if os.system('/sbin/modprobe mpls-router') != 0:
+                if not module_present('mpls-router'):
                     logger.info('MPLS tests will not run (missing mpls-router kernel module)')
-                elif os.system('/sbin/modprobe mpls-iptunnel') != 0:
+                elif not module_present('mpls-iptunnel'):
                     logger.info('MPLS tests will not run (missing mpls-iptunnel kernel module)')
                 else:
                     self.hasmpls = True
@@ -884,12 +900,12 @@ class Router(Node):
         if (daemon == 'ldpd'):
             if version_cmp(platform.release(), '4.5') < 0:
                 return False
-            if self.cmd('/sbin/modprobe -n mpls-router' ) != "":
+            if not module_present('mpls-router', load=False):
                 return False
-            if self.cmd('/sbin/modprobe -n mpls-iptunnel') != "":
+            if not module_present('mpls-iptunnel', load=False):
                 return False
-
         return True
+
     def get_routertype(self):
         "Return the type of Router (frr or quagga)"