src/internet-stack/wscript
author Qasim Javed <qasimj@gmail.com>
Thu Aug 06 01:55:49 2009 +0600 (2009-08-06)
changeset 4638 19aa5f9b4bdf
parent 4637 0882bb6eac0b
permissions -rw-r--r--
Source NAT working! Run (examples/netfilter-example.cc)
gjcarneiro@537
     1
## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
fw@3579
     2
import os
gjc@4245
     3
import sys
fw@3579
     4
gjc@4064
     5
import Options
gjc@4064
     6
import Logs
gjc@4064
     7
import Utils
gjc@4064
     8
import Task
gjc@4064
     9
gjc@4078
    10
# Required NSC version
gjc@4078
    11
NSC_RELEASE_NAME = "nsc-0.5.0"
gjc@4078
    12
gjc@4078
    13
gjc@3628
    14
def set_options(opt):
gjc@4033
    15
    opt.add_option('--with-nsc',
gjc@4033
    16
                   help=('Use Network Simulation Cradle, given by the indicated path,'
gjc@4033
    17
                         ' to allow the use of real-world network stacks'),
gjc@4033
    18
                   default='', dest='with_nsc')
gjc@4033
    19
gjc@3628
    20
fw@3579
    21
def configure(conf):
gjc@3977
    22
    conf.env['ENABLE_NSC'] = False
gjc@3977
    23
fw@3579
    24
    # checks for flex and bison, which is needed to build NSCs globaliser
gjc@4077
    25
    # TODO: how to move these checks into the allinone scripts?
gjc@4077
    26
    #def check_nsc_buildutils():
gjc@4077
    27
    #    import flex
gjc@4077
    28
    #    import bison
gjc@4077
    29
    #    conf.check_tool('flex bison')
gjc@4077
    30
    #    conf.check(lib='fl', mandatory=True)
fw@3579
    31
gjc@4117
    32
    # Check for the location of NSC
gjc@4117
    33
    if Options.options.with_nsc:
gjc@4117
    34
        if os.path.isdir(Options.options.with_nsc):
gjc@4117
    35
            conf.check_message("NSC location", '', True, ("%s (given)" % Options.options.with_nsc))
gjc@4117
    36
            conf.env['WITH_NSC'] = os.path.abspath(Options.options.with_nsc)
gjc@4117
    37
    else:
gjc@4117
    38
        nsc_dir = os.path.join('..', "nsc")
gjc@4117
    39
        if os.path.isdir(nsc_dir):
gjc@4117
    40
            conf.check_message("NSC location", '', True, ("%s (guessed)" % nsc_dir))
gjc@4117
    41
            conf.env['WITH_NSC'] = os.path.abspath(nsc_dir)
gjc@4117
    42
        del nsc_dir
gjc@4117
    43
    if not conf.env['WITH_NSC']:
gjc@4117
    44
        conf.check_message("NSC location", '', False)
gjc@3625
    45
        conf.report_optional_feature("nsc", "Network Simulation Cradle", False,
gjc@4117
    46
                                     "NSC not found (see option --with-nsc)")
fw@3579
    47
	return
gjc@4245
    48
    
gjc@4245
    49
    if sys.platform in ['linux2']:
gjc@4245
    50
        arch = os.uname()[4]
gjc@4245
    51
    else:
gjc@4245
    52
        arch = None
fw@3579
    53
    ok = False
fw@3579
    54
    if arch == 'x86_64' or arch == 'i686' or arch == 'i586' or arch == 'i486' or arch == 'i386':
fw@3579
    55
        conf.env['NSC_ENABLED'] = 'yes'
craigdo@3669
    56
        conf.env.append_value('CXXDEFINES', 'NETWORK_SIMULATION_CRADLE')
gjc@4065
    57
        conf.check(mandatory=True, lib='dl', define_name='HAVE_DL', uselib='DL')
fw@3579
    58
        ok = True
fw@3579
    59
    conf.check_message('NSC supported architecture', arch, ok)
gjc@3625
    60
    conf.report_optional_feature("nsc", "Network Simulation Cradle", ok,
gjc@3625
    61
                                 "architecture %r not supported" % arch)
gjcarneiro@537
    62
gjc@4074
    63
    # append the NSC kernel dirs to the module path so that these dirs
gjc@4074
    64
    # will end up in the LD_LIBRARY_PATH, thus allowing the NSC NS-3
gjc@4074
    65
    # module to find the necessary NSC shared libraries.
gjc@4074
    66
    for nsc_module in ['linux-2.6.18', 'linux-2.6.26']:
gjc@4074
    67
        conf.env.append_value('NS3_MODULE_PATH',
gjc@4074
    68
                              os.path.abspath(os.path.join(conf.env['WITH_NSC'], nsc_module)))
gjc@4074
    69
gjcarneiro@537
    70
gjc@3628
    71
gjcarneiro@537
    72
def build(bld):
mathieu@3260
    73
    obj = bld.create_ns3_module('internet-stack', ['node'])
gjcarneiro@537
    74
    obj.source = [
tomh@4472
    75
        'tcp-test.cc',
tomh@4472
    76
        'udp-test.cc',
tomh@4571
    77
        'ipv4-test.cc',
gjcarneiro@537
    78
        'ipv4-l4-protocol.cc',
gjcarneiro@537
    79
        'udp-header.cc',
raj@2224
    80
        'tcp-header.cc',
gjcarneiro@537
    81
        'ipv4-checksum.cc',
gjcarneiro@537
    82
        'ipv4-interface.cc',
gjc@760
    83
        'ipv4-l3-protocol.cc',
gjcarneiro@537
    84
        'ipv4-end-point.cc',
gjc@760
    85
        'udp-l4-protocol.cc',
raj@2224
    86
        'tcp-l4-protocol.cc',
gjcarneiro@537
    87
        'arp-header.cc',
gjcarneiro@537
    88
        'arp-cache.cc',
gjc@760
    89
        'arp-l3-protocol.cc',
tomh@3130
    90
        'udp-socket-impl.cc',
tomh@3131
    91
        'tcp-socket-impl.cc',
gjcarneiro@537
    92
        'ipv4-end-point-demux.cc',
tomh@3126
    93
        'udp-socket-factory-impl.cc',
tomh@3133
    94
        'tcp-socket-factory-impl.cc',
raj@2224
    95
        'pending-data.cc',
raj@2224
    96
        'sequence-number.cc',
raj@2224
    97
        'rtt-estimator.cc',
craigdo@3820
    98
        'ipv4-raw-socket-factory-impl.cc',
craigdo@3820
    99
        'ipv4-raw-socket-impl.cc',
craigdo@3820
   100
        'icmpv4.cc',
craigdo@3820
   101
        'icmpv4-l4-protocol.cc',
tomh@4472
   102
        'loopback-net-device.cc',
qasimj@4634
   103
        'ipv4-netfilter.cc',
qasimj@4634
   104
        'ipv4-netfilter-hook.cc',
qasimj@4634
   105
        'netfilter-callback-chain.cc',
qasimj@4634
   106
        'netfilter-conntrack-tuple.cc',
qasimj@4634
   107
        'ip-conntrack-info.cc',
qasimj@4634
   108
        'ipv4-conntrack-l3-protocol.cc',
qasimj@4634
   109
        'tcp-conntrack-l4-protocol.cc',
qasimj@4634
   110
        'udp-conntrack-l4-protocol.cc',
qasimj@4637
   111
        'icmpv4-conntrack-l4-protocol.cc',
qasimj@4638
   112
        'nat-rule.cc',
qasimj@4638
   113
#'network-address-translation.cc',
gjcarneiro@537
   114
        ]
gjcarneiro@537
   115
gjc@4064
   116
    headers = bld.new_task_gen('ns3header')
mathieu@3260
   117
    headers.module = 'internet-stack'
gjcarneiro@537
   118
    headers.source = [
mathieu@1244
   119
        'udp-header.h',
raj@2224
   120
        'tcp-header.h',
gjc@2321
   121
        'sequence-number.h',
craigdo@3820
   122
        'icmpv4.h',
qasimj@4634
   123
        'ipv4-netfilter.h',
qasimj@4634
   124
        'ipv4-netfilter-hook.h',
qasimj@4634
   125
        'netfilter-callback-chain.h',
qasimj@4634
   126
        'netfilter-conntrack-l3-protocol.h',
qasimj@4634
   127
        'netfilter-conntrack-l4-protocol.h',
qasimj@4634
   128
        'netfilter-conntrack-tuple.h',
qasimj@4634
   129
        'netfilter-tuple-hash.h',
qasimj@4634
   130
        'ip-conntrack-info.h',
qasimj@4634
   131
        'ipv4-conntrack-l3-protocol.h',
qasimj@4634
   132
        'tcp-conntrack-l4-protocol.h',
qasimj@4634
   133
        'udp-conntrack-l4-protocol.h',
qasimj@4637
   134
        'icmpv4-conntrack-l4-protocol.h',
qasimj@4638
   135
#        'network-address-translation.h',
qasimj@4638
   136
        'nat-rule.h',
qasimj@4638
   137
        'ipv4-l3-protocol.h',
qasimj@4634
   138
#'jhash.h',
gjcarneiro@537
   139
        ]
fw@3579
   140
gjc@4245
   141
    if bld.env['NSC_ENABLED']:
mathieu@3651
   142
        obj.source.append ('nsc-tcp-socket-impl.cc')
mathieu@3651
   143
        obj.source.append ('nsc-tcp-l4-protocol.cc')
mathieu@3651
   144
        obj.source.append ('nsc-tcp-socket-factory-impl.cc')
mathieu@3651
   145
        obj.source.append ('nsc-sysctl.cc')
mathieu@3651
   146
        obj.uselib = 'DL'