Statistics
| Branch: | Tag: | Revision:

mininet / mininet / moduledeps.py @ edf60032

History | View | Annotate | Download (2.39 KB)

1
"Module dependency utility functions for Mininet."
2

    
3
from mininet.util import quietRun
4
from mininet.log import info, error, debug
5
from os import environ
6

    
7
def lsmod():
8
    "Return output of lsmod."
9
    return quietRun( 'lsmod' )
10

    
11
def rmmod( mod ):
12
    """Return output of lsmod.
13
       mod: module string"""
14
    return quietRun( [ 'rmmod', mod ] )
15

    
16
def modprobe( mod ):
17
    """Return output of modprobe
18
       mod: module string"""
19
    return quietRun( [ 'modprobe', mod ] )
20

    
21
OF_KMOD = 'ofdatapath'
22
OVS_KMOD = 'openvswitch_mod'  # Renamed 'openvswitch' in OVS 1.7+/Linux 3.5+
23
TUN = 'tun'
24

    
25
def moduleDeps( subtract=None, add=None ):
26
    """Handle module dependencies.
27
       subtract: string or list of module names to remove, if already loaded
28
       add: string or list of module names to add, if not already loaded"""
29
    subtract = subtract if subtract is not None else []
30
    add = add if add is not None else []
31
    if type( subtract ) is str:
32
        subtract = [ subtract ]
33
    if type( add ) is str:
34
        add = [ add ]
35
    for mod in subtract:
36
        if mod in lsmod():
37
            info( '*** Removing ' + mod + '\n' )
38
            rmmodOutput = rmmod( mod )
39
            if rmmodOutput:
40
                error( 'Error removing ' + mod + ': "%s">\n' % rmmodOutput )
41
                exit( 1 )
42
            if mod in lsmod():
43
                error( 'Failed to remove ' + mod + '; still there!\n' )
44
                exit( 1 )
45
    for mod in add:
46
        if mod not in lsmod():
47
            info( '*** Loading ' + mod + '\n' )
48
            modprobeOutput = modprobe( mod )
49
            if modprobeOutput:
50
                error( 'Error inserting ' + mod +
51
                       ' - is it installed and available via modprobe?\n' +
52
                       'Error was: "%s"\n' % modprobeOutput )
53
            if mod not in lsmod():
54
                error( 'Failed to insert ' + mod + ' - quitting.\n' )
55
                exit( 1 )
56
        else:
57
            debug( '*** ' + mod + ' already loaded\n' )
58

    
59

    
60
def pathCheck( *args, **kwargs ):
61
    "Make sure each program in *args can be found in $PATH."
62
    moduleName = kwargs.get( 'moduleName', 'it' )
63
    for arg in args:
64
        if not quietRun( 'which ' + arg ):
65
            error( 'Cannot find required executable %s.\n' % arg +
66
                   'Please make sure that %s is installed ' % moduleName +
67
                   'and available in your $PATH:\n(%s)\n' % environ[ 'PATH' ] )
68
            exit( 1 )