util.py
author Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
Tue, 08 Mar 2011 15:02:28 +0000
changeset 6876 9ac9bd55541d
parent 6857 d7db3cee241f
permissions -rw-r--r--
Make ns3_python_bindings skip bindings with warning if apidefs dir not found
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6857
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
     1
import os
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
     2
import sys
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
     3
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
     4
def fatal(msg):
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
     5
    print >> sys.stderr, msg
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
     6
    sys.exit(2)
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
     7
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
     8
def get_list_from_file(file_path, list_name):
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
     9
    '''Looks for a Python list called list_name in the file specified
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    10
    by file_path and returns it.
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    11
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    12
    If the file or list name aren't found, this function will return
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    13
    an empty list.
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    14
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    15
    '''
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    16
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    17
    list = []
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    18
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    19
    # Read in the file if it exists.
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    20
    if os.path.exists(file_path):
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    21
        file_in = open(file_path, "r")
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    22
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    23
        # Look for the list.
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    24
        list_string = ""
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    25
        parsing_multiline_list = False
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    26
        for line in file_in:
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    27
            if list_name in line or parsing_multiline_list:
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    28
                list_string += line
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    29
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    30
                # Handle multiline lists.
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    31
                if ']' not in list_string:
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    32
                    parsing_multiline_list = True
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    33
                else:
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    34
                    # Evaluate the list once its end is reached.
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    35
                    # Make the split function only split it once.
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    36
                    list = eval(list_string.split('=', 1)[1].strip())
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    37
                    break
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    38
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    39
        # Close the file
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    40
        file_in.close()
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    41
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    42
    return list
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    43
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    44
def read_config_file():
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    45
    '''Reads the NS-3 configuration file and returns a list of enabled modules.
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    46
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    47
    This function first looks for the ns3 configuration file (.ns3rc)
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    48
    in the current working directory and then looks in the ~
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    49
    directory.
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    50
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    51
    '''
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    52
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    53
    # See if the ns3 configuration file exists in the current working
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    54
    # directory and then look for it in the ~ directory.
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    55
    dot_ns3rc_name = '.ns3rc'
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    56
    dot_ns3rc_path = dot_ns3rc_name
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    57
    if not os.path.exists(dot_ns3rc_path):
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    58
        dot_ns3rc_path = os.path.expanduser('~/') + dot_ns3rc_name
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    59
        if not os.path.exists(dot_ns3rc_path):
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    60
            # Enable all modules if the .ns3rc file can't be found.
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    61
            return ['all_modules']
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    62
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    63
    # Read in the ns3 configuration file.
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    64
    modules_enabled = get_list_from_file(dot_ns3rc_path, 'modules_enabled')
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    65
    if not modules_enabled:
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    66
        # Enable all modules if the modules_enabled line can't be found.
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    67
        return ['all_modules']
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    68
d7db3cee241f Add parsing of ns-3 configuration file
Mitch Watrous <watrous@u.washington.edu>
parents:
diff changeset
    69
    return modules_enabled