Files
unison/src/internet/wscript
Natale Patriciello 51e94e52f0 Removed TcpReno from ns-3 mainline
TcpNewReno is introduced in RFC 2582. The most recent RFC on this is
the RFC 6582. Since its introduction, Tcp NewReno is the RECOMMENDED
algorithm by the Internet Engineering Task Force. The main difference
between Reno and New Reno is in the Fast retransmit algorithm, in order
to recover more quickly when multiple packet losses occur in a single
window. NewReno introduces the concept of Partial acknowledgments. Since
the intention is to merge fast retransmit and fast recovery into
TcpSocketBase, there isn't the possibility to maintain TcpReno as
separate class. However, its behavior could be introduced again with one
conditional attribute in TcpSocketBase itself.
2015-10-16 10:38:39 -07:00

356 lines
14 KiB
Python

## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
import os
import sys
from waflib import Options, Logs, Utils, Task
# Required NSC version
NSC_RELEASE_NAME = "nsc-0.5.3"
def options(opt):
opt.add_option('--with-nsc',
help=('Use Network Simulation Cradle, given by the indicated path,'
' to allow the use of real-world network stacks'),
default='', dest='with_nsc')
opt.add_option('--disable-nsc',
help=('Disable Network Simulation Cradle support'),
dest='disable_nsc', default=False, action="store_true")
def configure(conf):
conf.env['ENABLE_NSC'] = False
if Options.options.disable_nsc:
conf.report_optional_feature("nsc", "Network Simulation Cradle", False,
"disabled by user request")
return
# checks for flex and bison, which is needed to build NSCs globaliser
# TODO: how to move these checks into the allinone scripts?
#def check_nsc_buildutils():
# import flex
# import bison
# conf.check_tool('flex bison')
# conf.check(lib='fl', mandatory=True)
# Check for the location of NSC
lib_to_check = 'liblinux2.6.26.so'
if Options.options.with_nsc:
if os.path.isdir(Options.options.with_nsc):
conf.msg("Checking for NSC location", ("%s (given)" % Options.options.with_nsc))
conf.env['WITH_NSC'] = os.path.abspath(Options.options.with_nsc)
else:
# bake.py uses ../../build, while ns-3-dev uses ../nsc,
# and ns-3 release uses ../NSC_RELEASE_NAME
nsc_bake_build_dir = os.path.join('..', '..', 'build')
nsc_bake_lib_dir = os.path.join(nsc_bake_build_dir, 'lib')
nsc_dir = os.path.join('..', "nsc")
nsc_release_dir = os.path.join('..', NSC_RELEASE_NAME)
if os.path.exists(os.path.join(nsc_bake_lib_dir, lib_to_check)):
conf.msg("Checking for NSC location",("%s (guessed)" % nsc_bake_build_dir))
conf.env['WITH_NSC'] = os.path.abspath(nsc_bake_build_dir)
elif os.path.isdir(nsc_dir):
conf.msg("Checking for NSC location",("%s (guessed)" % nsc_dir))
conf.env['WITH_NSC'] = os.path.abspath(nsc_dir)
elif os.path.isdir(nsc_release_dir):
conf.msg("Checking for NSC location", ("%s (guessed)" % nsc_release_dir))
conf.env['WITH_NSC'] = os.path.abspath(nsc_release_dir)
del nsc_bake_build_dir
del nsc_bake_lib_dir
del nsc_dir
del nsc_release_dir
if not conf.env['WITH_NSC']:
conf.msg("Checking for NSC location", False)
conf.report_optional_feature("nsc", "Network Simulation Cradle", False,
"NSC not found (see option --with-nsc)")
return
if Options.platform in ['linux', 'freebsd']:
arch = os.uname()[4]
else:
arch = None
ok = False
if arch in ('amd64', 'x86_64', 'i686', 'i586', 'i486', 'i386'):
conf.env['NSC_ENABLED'] = True
conf.env.append_value('CXXDEFINES', 'NETWORK_SIMULATION_CRADLE')
conf.check_nonfatal(mandatory=True, lib='dl', define_name='HAVE_DL', uselib_store='DL')
ok = True
conf.msg('Checking for NSC supported architecture ' + (arch or ''), ok)
if not ok:
conf.env['NSC_ENABLED'] = False
conf.report_optional_feature("nsc", "Network Simulation Cradle", False,
"architecture %r not supported" % arch)
return
found = False
for path in ['.', 'lib', 'lib64', 'linux-2.6.26']:
if os.path.exists(os.path.join(conf.env['WITH_NSC'], path, lib_to_check)):
# append the NSC kernel dir to the module path so that this dir
# will end up in the LD_LIBRARY_PATH, thus allowing the NSC NS-3
# module to find the necessary NSC shared libraries.
found = True
conf.env.append_value('NS3_MODULE_PATH',
os.path.abspath(os.path.join(conf.env['WITH_NSC'], path)))
if not found:
conf.env['NSC_ENABLED'] = False
conf.report_optional_feature("nsc", "Network Simulation Cradle", False,
"NSC library %s is missing: NSC has not been built?" % lib_to_check)
else:
conf.report_optional_feature("nsc", "Network Simulation Cradle", True, "")
def build(bld):
# bridge and mpi dependencies are due to global routing
obj = bld.create_ns3_module('internet', ['bridge', 'mpi', 'network', 'core'])
obj.source = [
'model/ip-l4-protocol.cc',
'model/udp-header.cc',
'model/tcp-header.cc',
'model/ipv4-interface.cc',
'model/ipv4-l3-protocol.cc',
'model/ipv4-end-point.cc',
'model/udp-l4-protocol.cc',
'model/tcp-l4-protocol.cc',
'model/arp-header.cc',
'model/arp-cache.cc',
'model/arp-l3-protocol.cc',
'model/udp-socket-impl.cc',
'model/ipv4-end-point-demux.cc',
'model/udp-socket-factory-impl.cc',
'model/tcp-socket-factory-impl.cc',
'model/pending-data.cc',
'model/rtt-estimator.cc',
'model/ipv4-raw-socket-factory-impl.cc',
'model/ipv4-raw-socket-impl.cc',
'model/icmpv4.cc',
'model/icmpv4-l4-protocol.cc',
'model/loopback-net-device.cc',
'model/ndisc-cache.cc',
'model/ipv6-interface.cc',
'model/icmpv6-header.cc',
'model/ipv6-l3-protocol.cc',
'model/ipv6-end-point.cc',
'model/ipv6-end-point-demux.cc',
'model/ipv6-raw-socket-factory-impl.cc',
'model/ipv6-raw-socket-impl.cc',
'model/ipv6-autoconfigured-prefix.cc',
'model/ipv6-extension.cc',
'model/ipv6-extension-header.cc',
'model/ipv6-extension-demux.cc',
'model/ipv6-option.cc',
'model/ipv6-option-header.cc',
'model/ipv6-option-demux.cc',
'model/icmpv6-l4-protocol.cc',
'model/tcp-socket-base.cc',
'model/tcp-rfc793.cc',
'model/tcp-tahoe.cc',
'model/tcp-newreno.cc',
'model/tcp-westwood.cc',
'model/tcp-rx-buffer.cc',
'model/tcp-tx-buffer.cc',
'model/tcp-option.cc',
'model/tcp-option-rfc793.cc',
'model/tcp-option-winscale.cc',
'model/tcp-option-ts.cc',
'model/ipv4-packet-info-tag.cc',
'model/ipv6-packet-info-tag.cc',
'model/ipv4-interface-address.cc',
'model/ipv4-address-generator.cc',
'model/ipv4-header.cc',
'model/ipv4-route.cc',
'model/ipv4-routing-protocol.cc',
'model/udp-socket.cc',
'model/udp-socket-factory.cc',
'model/tcp-socket.cc',
'model/tcp-socket-factory.cc',
'model/ipv4.cc',
'model/ipv4-raw-socket-factory.cc',
'model/ipv6-header.cc',
'model/ipv6-interface-address.cc',
'model/ipv6-route.cc',
'model/ipv6.cc',
'model/ipv6-raw-socket-factory.cc',
'model/ipv6-routing-protocol.cc',
'model/ipv4-list-routing.cc',
'model/ipv6-list-routing.cc',
'helper/ipv4-list-routing-helper.cc',
'helper/ipv6-list-routing-helper.cc',
'model/ipv4-static-routing.cc',
'model/ipv4-routing-table-entry.cc',
'model/ipv6-static-routing.cc',
'model/ipv6-routing-table-entry.cc',
'helper/ipv4-static-routing-helper.cc',
'helper/ipv6-static-routing-helper.cc',
'model/global-router-interface.cc',
'model/global-route-manager.cc',
'model/global-route-manager-impl.cc',
'model/candidate-queue.cc',
'model/codel-queue.cc',
'model/ipv4-global-routing.cc',
'helper/ipv4-global-routing-helper.cc',
'helper/internet-stack-helper.cc',
'helper/internet-trace-helper.cc',
'helper/ipv4-address-helper.cc',
'helper/ipv4-interface-container.cc',
'helper/ipv4-routing-helper.cc',
'helper/ipv6-address-helper.cc',
'helper/ipv6-interface-container.cc',
'helper/ipv6-routing-helper.cc',
'model/ipv6-address-generator.cc',
'model/ipv4-packet-probe.cc',
'model/ipv6-packet-probe.cc',
'model/ipv6-pmtu-cache.cc',
'model/ripng.cc',
'model/ripng-header.cc',
'helper/ripng-helper.cc',
]
internet_test = bld.create_ns3_module_test_library('internet')
internet_test.source = [
'test/global-route-manager-impl-test-suite.cc',
'test/ipv4-address-generator-test-suite.cc',
'test/ipv4-address-helper-test-suite.cc',
'test/ipv4-list-routing-test-suite.cc',
'test/ipv4-packet-info-tag-test-suite.cc',
'test/ipv4-raw-test.cc',
'test/ipv4-header-test.cc',
'test/ipv4-fragmentation-test.cc',
'test/ipv4-forwarding-test.cc',
'test/error-channel.cc',
'test/ipv4-test.cc',
'test/ipv4-static-routing-test-suite.cc',
'test/ipv4-global-routing-test-suite.cc',
'test/ipv6-extension-header-test-suite.cc',
'test/ipv6-list-routing-test-suite.cc',
'test/ipv6-packet-info-tag-test-suite.cc',
'test/ipv6-test.cc',
'test/ipv6-raw-test.cc',
'test/tcp-test.cc',
'test/tcp-timestamp-test.cc',
'test/tcp-wscaling-test.cc',
'test/tcp-option-test.cc',
'test/tcp-header-test.cc',
'test/udp-test.cc',
'test/ipv6-address-generator-test-suite.cc',
'test/ipv6-dual-stack-test-suite.cc',
'test/ipv6-fragmentation-test.cc',
'test/ipv6-forwarding-test.cc',
'test/ipv6-ripng-test.cc',
'test/ipv6-address-helper-test-suite.cc',
'test/rtt-test.cc',
'test/codel-queue-test-suite.cc',
]
privateheaders = bld(features='ns3privateheader')
privateheaders.module = 'internet'
privateheaders.source = [
'model/tcp-option-winscale.h',
'model/tcp-option-ts.h',
'model/tcp-option-rfc793.h',
]
headers = bld(features='ns3header')
headers.module = 'internet'
headers.source = [
'model/udp-header.h',
'model/tcp-header.h',
'model/tcp-option.h',
'model/icmpv4.h',
'model/icmpv6-header.h',
# used by routing
'model/ipv4-interface.h',
'model/ipv4-l3-protocol.h',
'model/ipv6-l3-protocol.h',
'model/ipv6-extension.h',
'model/ipv6-extension-demux.h',
'model/ipv6-extension-header.h',
'model/ipv6-option-header.h',
'model/arp-l3-protocol.h',
'model/udp-l4-protocol.h',
'model/tcp-l4-protocol.h',
'model/icmpv4-l4-protocol.h',
'model/ip-l4-protocol.h',
'model/arp-header.h',
'model/arp-cache.h',
'model/icmpv6-l4-protocol.h',
'model/ipv6-interface.h',
'model/ndisc-cache.h',
'model/loopback-net-device.h',
'model/ipv4-packet-info-tag.h',
'model/ipv6-packet-info-tag.h',
'model/ipv4-interface-address.h',
'model/ipv4-address-generator.h',
'model/ipv4-header.h',
'model/ipv4-route.h',
'model/ipv4-routing-protocol.h',
'model/udp-socket.h',
'model/udp-socket-factory.h',
'model/tcp-socket.h',
'model/tcp-socket-factory.h',
'model/ipv4.h',
'model/ipv4-raw-socket-factory.h',
'model/ipv4-raw-socket-impl.h',
'model/ipv6-header.h',
'model/ipv6-interface-address.h',
'model/ipv6-route.h',
'model/ipv6.h',
'model/ipv6-raw-socket-factory.h',
'model/ipv6-routing-protocol.h',
'model/ipv4-list-routing.h',
'model/ipv6-list-routing.h',
'helper/ipv4-list-routing-helper.h',
'helper/ipv6-list-routing-helper.h',
'model/ipv4-static-routing.h',
'model/ipv4-routing-table-entry.h',
'model/ipv6-static-routing.h',
'model/ipv6-routing-table-entry.h',
'helper/ipv4-static-routing-helper.h',
'helper/ipv6-static-routing-helper.h',
'model/global-router-interface.h',
'model/global-route-manager.h',
'model/global-route-manager-impl.h',
'model/candidate-queue.h',
'model/codel-queue.h',
'model/ipv4-global-routing.h',
'helper/ipv4-global-routing-helper.h',
'helper/internet-stack-helper.h',
'helper/internet-trace-helper.h',
'helper/ipv4-address-helper.h',
'helper/ipv4-interface-container.h',
'helper/ipv4-routing-helper.h',
'helper/ipv6-address-helper.h',
'helper/ipv6-interface-container.h',
'helper/ipv6-routing-helper.h',
'model/ipv6-address-generator.h',
'model/tcp-rfc793.h',
'model/tcp-tahoe.h',
'model/tcp-newreno.h',
'model/tcp-westwood.h',
'model/tcp-socket-base.h',
'model/tcp-tx-buffer.h',
'model/tcp-rx-buffer.h',
'model/rtt-estimator.h',
'model/ipv4-packet-probe.h',
'model/ipv6-packet-probe.h',
'model/ipv6-pmtu-cache.h',
'model/ripng.h',
'model/ripng-header.h',
'helper/ripng-helper.h',
]
if bld.env['NSC_ENABLED']:
obj.source.append ('model/nsc-tcp-socket-impl.cc')
obj.source.append ('model/nsc-tcp-l4-protocol.cc')
obj.source.append ('model/nsc-tcp-socket-factory-impl.cc')
obj.source.append ('model/nsc-sysctl.cc')
headers.source.append('model/nsc-tcp-l4-protocol.h')
obj.use.append('DL')
internet_test.use.append('DL')
if (bld.env['ENABLE_EXAMPLES']):
bld.recurse('examples')
bld.ns3_python_bindings()