branch merge
authorCraig Dowell <craigdo@ee.washington.edu>
Thu, 20 Nov 2008 19:44:19 -0800
changeset 3943 e2ada9e99280
parent 3942 eef10dbce686 (current diff)
parent 3877 5091e3a14b26 (diff)
child 3944 6a47ccdf2c5d
branch merge
--- a/bindings/python/wscript	Thu Nov 20 16:48:21 2008 -0800
+++ b/bindings/python/wscript	Thu Nov 20 19:44:19 2008 -0800
@@ -16,16 +16,25 @@
 LOCAL_PYBINDGEN_PATH = os.path.join(os.getcwd(), "bindings", "python", "pybindgen")
 #PYBINDGEN_BRANCH = 'lp:pybindgen'
 PYBINDGEN_BRANCH = 'https://launchpad.net/pybindgen'
-if os.environ.get('PYTHONPATH', ''):
-    os.environ['PYTHONPATH'] = LOCAL_PYBINDGEN_PATH + os.pathsep + os.environ.get('PYTHONPATH')
-else:
-    os.environ['PYTHONPATH'] = LOCAL_PYBINDGEN_PATH
 
 ## https://launchpad.net/pybindgen/
 REQUIRED_PYBINDGEN_VERSION = (0, 9, 0, 605)
 REQUIRED_PYGCCXML_VERSION = (0, 9, 5)
 
 
+def add_to_python_path(path):
+    if os.environ.get('PYTHONPATH', ''):
+        os.environ['PYTHONPATH'] = path + os.pathsep + os.environ.get('PYTHONPATH')
+    else:
+        os.environ['PYTHONPATH'] = path
+
+def set_pybindgen_pythonpath(env):
+    if env['WITH_PYBINDGEN']:
+        add_to_python_path(env['WITH_PYBINDGEN'])
+    else:
+        add_to_python_path(LOCAL_PYBINDGEN_PATH)
+
+
 def set_options(opt):
     opt.tool_options('python')
     opt.add_option('--disable-python',
@@ -41,6 +50,10 @@
                          "instead of using the system installed version."),
                    action="store_true", default=False,
                    dest='pybindgen_checkout')
+    opt.add_option('--with-pybindgen',
+                   help=('Path to an existing pybindgen source tree to use.'),
+                   default=None,
+                   dest='with_pybindgen', type="string")
 
 def fetch_pybindgen(conf):
     """
@@ -127,14 +140,22 @@
         conf.env.append_value('CXXFLAGS_PYEXT','-fno-strict-aliasing')
 
     ## Check for pybindgen
+
+    no_net = False
+    if Params.g_options.with_pybindgen:
+        conf.env['WITH_PYBINDGEN'] = os.path.abspath(Params.g_options.with_pybindgen)
+        no_net = True
+
     if Params.g_options.pybindgen_checkout:
         fetch_pybindgen(conf)
 
+    set_pybindgen_pythonpath(conf.env)
+
     try:
         conf.check_python_module('pybindgen')
     except Configure.ConfigurationError:
         warning("pybindgen missing")
-        if not fetch_pybindgen(conf):
+        if no_net or not fetch_pybindgen(conf):
             conf.report_optional_feature("python", "Python Bindings", False,
                                          "PyBindGen missing and could not be retrieved")
             return
@@ -152,7 +173,7 @@
             warning("pybindgen (found %s) is too old (need %s)" %
                     (pybindgen_version_str,
                      '.'.join([str(x) for x in REQUIRED_PYBINDGEN_VERSION])))
-            if not fetch_pybindgen(conf):
+            if no_net or not fetch_pybindgen(conf):
                 conf.report_optional_feature("python", "Python Bindings", False,
                                              "PyBindGen too old and newer version could not be retrieved")
                 return
@@ -391,6 +412,8 @@
     env = bld.env_of_name('default')
     curdir = bld.m_curdirnode.abspath()
 
+    set_pybindgen_pythonpath(env)
+
     #Object.register('all-ns3-headers', AllNs3Headers)
     Action.Action('gen-ns3-metaheader', func=gen_ns3_metaheader, color='BLUE')
 
--- a/regression.py	Thu Nov 20 16:48:21 2008 -0800
+++ b/regression.py	Thu Nov 20 19:44:19 2008 -0800
@@ -42,18 +42,17 @@
 
 ### Regression testing
 class Regression(object):
-    def __init__(self, testdir):
+    def __init__(self, testdir, reference_traces):
         self.testdir = testdir
+        self.reference_traces = reference_traces
         self.env = Params.g_build.env_of_name('default')
 
-    def run_test(self, verbose, generate, refDirName, testName, arguments=[], pyscript=None, refTestName=None):
+    def run_test(self, verbose, generate, testName, arguments=[], pyscript=None, refTestName=None):
         """
         @param verbose: enable verbose execution
 
         @param generate: generate new traces instead of comparing with the reference
 
-        @param refDirName: name of the base directory containing reference traces
-
         @param testName: name of the test
 
         @arguments: list of extra parameters to pass to the program to be tested
@@ -70,11 +69,11 @@
             raise TypeError
         
         if refTestName is None:
-            refTestDirName = os.path.join(refDirName, (testName + ".ref"))
+            refTestDirName = os.path.join(self.reference_traces, (testName + ".ref"))
         else:
-            refTestDirName = os.path.join(refDirName, refTestName)
+            refTestDirName = os.path.join(self.reference_traces, refTestName)
 
-        if not os.path.exists(refDirName):
+        if not os.path.exists(self.reference_traces):
             print"No reference trace repository"
             return 1
 
@@ -90,7 +89,7 @@
                     tmpl = tmpl + " " + arg
                 wutils.run_program(testName, tmpl)
             else:
-                argv = [self.env['PYTHON'], os.path.join('..', '..', '..', *os.path.split(pyscript))] + arguments
+                argv = [self.env['PYTHON'], os.path.join(Params.g_cwd_launch, *os.path.split(pyscript))] + arguments
                 before = os.getcwd()
                 os.chdir(refTestDirName)
                 try:
@@ -170,16 +169,27 @@
     tests.sort()
     return tests
 
-def run_regression():
-    """Execute regression tests."""
+def run_regression(reference_traces):
+    """Execute regression tests.  Called with cwd set to the 'regression' subdir of ns-3.
+
+    @param reference_traces: reference traces directory, or None for default.
+
+    """
 
     testdir = "tests"
     if not os.path.exists(testdir):
         print "Tests directory does not exist"
         sys.exit(3)
+
+    dir_name = (wutils.APPNAME + '-' + wutils.VERSION + REGRESSION_SUFFIX)
+    if reference_traces is None:
+        reference_traces = dir_name
+        no_net = False
+    else:
+        no_net = True
     
     sys.path.append(testdir)
-    sys.modules['tracediff'] = Regression(testdir)
+    sys.modules['tracediff'] = Regression(testdir, reference_traces)
 
     if Params.g_options.regression_tests:
         tests = Params.g_options.regression_tests.split(',')
@@ -187,36 +197,36 @@
         tests = _find_tests(testdir)
 
     print "========== Running Regression Tests =========="
-    dir_name = wutils.APPNAME + '-' + wutils.VERSION + REGRESSION_SUFFIX
     env = Params.g_build.env_of_name('default')
-    if env['MERCURIAL']:
-        print "Synchronizing reference traces using Mercurial."
-        if not os.path.exists(dir_name):
-            print "Cloning " + REGRESSION_TRACES_REPO + dir_name + " from repo."
-            argv = ["hg", "clone", REGRESSION_TRACES_REPO + dir_name, dir_name]
-            rv = subprocess.Popen(argv).wait()
+    if not no_net:
+        if env['MERCURIAL']:
+            print "Synchronizing reference traces using Mercurial."
+            if not os.path.exists(reference_traces):
+                print "Cloning " + REGRESSION_TRACES_REPO + dir_name + " from repo."
+                argv = ["hg", "clone", REGRESSION_TRACES_REPO + dir_name, reference_traces]
+                rv = subprocess.Popen(argv).wait()
+            else:
+                _dir = os.getcwd()
+                os.chdir(reference_traces)
+                try:
+                    print "Pulling " + REGRESSION_TRACES_REPO + dir_name + " from repo."
+                    result = subprocess.Popen(["hg", "-q", "pull", REGRESSION_TRACES_REPO + dir_name]).wait()
+                    if not result:
+                        result = subprocess.Popen(["hg", "-q", "update"]).wait()
+                finally:
+                    os.chdir("..")
+                if result:
+                    Params.fatal("Synchronizing reference traces using Mercurial failed.")
         else:
-            _dir = os.getcwd()
-            os.chdir(dir_name)
-            try:
-                print "Pulling " + REGRESSION_TRACES_REPO + dir_name + " from repo."
-                result = subprocess.Popen(["hg", "-q", "pull", REGRESSION_TRACES_REPO + dir_name]).wait()
-                if not result:
-                    result = subprocess.Popen(["hg", "-q", "update"]).wait()
-            finally:
-                os.chdir("..")
-            if result:
-                Params.fatal("Synchronizing reference traces using Mercurial failed.")
-    else:
-        if not os.path.exists(dir_name):
-            traceball = dir_name + wutils.TRACEBALL_SUFFIX
-            print "Retrieving " + traceball + " from web."
-            urllib.urlretrieve(REGRESSION_TRACES_URL + traceball, traceball)
-            os.system("tar -xjf %s -C .." % (traceball))
-            print "Done."
+            if not os.path.exists(reference_traces):
+                traceball = dir_name + wutils.TRACEBALL_SUFFIX
+                print "Retrieving " + traceball + " from web."
+                urllib.urlretrieve(REGRESSION_TRACES_URL + traceball, traceball)
+                os.system("tar -xjf %s -C .." % (traceball))
+                print "Done."
 
-    if not os.path.exists(dir_name):
-        print "Reference traces directory (%s) does not exist" % dir_name
+    if not os.path.exists(reference_traces):
+        print "Reference traces directory (%s) does not exist" % reference_traces
         return 3
     
     bad = []
@@ -254,9 +264,7 @@
     else:
         os.mkdir("traces")
     
-    dir_name = wutils.APPNAME + '-' + wutils.VERSION + REGRESSION_SUFFIX
-
     mod = __import__(test, globals(), locals(), [])
     return mod.run(verbose=(Params.g_options.verbose > 0),
-                   generate=Params.g_options.regression_generate,
-                   refDirName=dir_name)
+                   generate=Params.g_options.regression_generate)
+
--- a/regression/tests/test-csma-bridge.py	Thu Nov 20 16:48:21 2008 -0800
+++ b/regression/tests/test-csma-bridge.py	Thu Nov 20 19:44:19 2008 -0800
@@ -6,10 +6,10 @@
 import sys
 import tracediff
 
-def run(verbose, generate, refDirName):
+def run(verbose, generate):
     """Execute a test."""
     if tracediff.env['ENABLE_PYTHON_BINDINGS']:
-        return tracediff.run_test(verbose, generate, refDirName,
+        return tracediff.run_test(verbose, generate,
                                   "csma-bridge", pyscript=os.path.join('examples', 'csma-bridge.py'))
     else:
         print >> sys.stderr, "Skipping csma-bridge: Python bindings not available."
--- a/regression/tests/test-csma-broadcast.py	Thu Nov 20 16:48:21 2008 -0800
+++ b/regression/tests/test-csma-broadcast.py	Thu Nov 20 19:44:19 2008 -0800
@@ -6,7 +6,7 @@
 import shutil
 import tracediff
 
-def run(verbose, generate, refDirName):
+def run(verbose, generate):
     """Execute a test."""
 
-    return tracediff.run_test(verbose, generate, refDirName, "csma-broadcast")
+    return tracediff.run_test(verbose, generate, "csma-broadcast")
--- a/regression/tests/test-csma-multicast.py	Thu Nov 20 16:48:21 2008 -0800
+++ b/regression/tests/test-csma-multicast.py	Thu Nov 20 19:44:19 2008 -0800
@@ -6,7 +6,7 @@
 import shutil
 import tracediff
 
-def run(verbose, generate, refDirName):
+def run(verbose, generate):
     """Execute a test."""
 
-    return tracediff.run_test(verbose, generate, refDirName, "csma-multicast")
+    return tracediff.run_test(verbose, generate, "csma-multicast")
--- a/regression/tests/test-csma-one-subnet.py	Thu Nov 20 16:48:21 2008 -0800
+++ b/regression/tests/test-csma-one-subnet.py	Thu Nov 20 19:44:19 2008 -0800
@@ -6,7 +6,7 @@
 import shutil
 import tracediff
 
-def run(verbose, generate, refDirName):
+def run(verbose, generate):
     """Execute a test."""
 
-    return tracediff.run_test(verbose, generate, refDirName, "csma-one-subnet")
+    return tracediff.run_test(verbose, generate, "csma-one-subnet")
--- a/regression/tests/test-csma-packet-socket.py	Thu Nov 20 16:48:21 2008 -0800
+++ b/regression/tests/test-csma-packet-socket.py	Thu Nov 20 19:44:19 2008 -0800
@@ -6,8 +6,8 @@
 import shutil
 import tracediff
 
-def run(verbose, generate, refDirName):
+def run(verbose, generate):
     """Execute a test."""
 
-    return tracediff.run_test(verbose, generate, refDirName,
+    return tracediff.run_test(verbose, generate,
         "csma-packet-socket")
--- a/regression/tests/test-csma-ping.py	Thu Nov 20 16:48:21 2008 -0800
+++ b/regression/tests/test-csma-ping.py	Thu Nov 20 19:44:19 2008 -0800
@@ -6,7 +6,7 @@
 import shutil
 import tracediff
 
-def run(verbose, generate, refDirName):
+def run(verbose, generate):
     """Execute a test."""
 
-    return tracediff.run_test(verbose, generate, refDirName, "csma-ping")
+    return tracediff.run_test(verbose, generate, "csma-ping")
--- a/regression/tests/test-csma-raw-ip-socket.py	Thu Nov 20 16:48:21 2008 -0800
+++ b/regression/tests/test-csma-raw-ip-socket.py	Thu Nov 20 19:44:19 2008 -0800
@@ -6,7 +6,7 @@
 import shutil
 import tracediff
 
-def run(verbose, generate, refDirName):
+def run(verbose, generate):
     """Execute a test."""
 
-    return tracediff.run_test(verbose, generate, refDirName, "csma-raw-ip-socket")
+    return tracediff.run_test(verbose, generate, "csma-raw-ip-socket")
--- a/regression/tests/test-csma-star.py	Thu Nov 20 16:48:21 2008 -0800
+++ b/regression/tests/test-csma-star.py	Thu Nov 20 19:44:19 2008 -0800
@@ -6,7 +6,7 @@
 import shutil
 import tracediff
 
-def run(verbose, generate, refDirName):
+def run(verbose, generate):
     """Execute a test."""
 
-    return tracediff.run_test(verbose, generate, refDirName, "csma-star")
+    return tracediff.run_test(verbose, generate, "csma-star")
--- a/regression/tests/test-realtime-udp-echo.py	Thu Nov 20 16:48:21 2008 -0800
+++ b/regression/tests/test-realtime-udp-echo.py	Thu Nov 20 19:44:19 2008 -0800
@@ -6,7 +6,7 @@
 import shutil
 import tracediff
 
-def run(verbose, generate, refDirName):
+def run(verbose, generate):
     """Execute a test."""
 
-    return tracediff.run_test(verbose, generate, refDirName, "realtime-udp-echo")
+    return tracediff.run_test(verbose, generate, "realtime-udp-echo")
--- a/regression/tests/test-simple-error-model.py	Thu Nov 20 16:48:21 2008 -0800
+++ b/regression/tests/test-simple-error-model.py	Thu Nov 20 19:44:19 2008 -0800
@@ -6,8 +6,8 @@
 import shutil
 import tracediff
 
-def run(verbose, generate, refDirName):
+def run(verbose, generate):
     """Execute a test."""
 
-    return tracediff.run_test(verbose, generate, refDirName,
+    return tracediff.run_test(verbose, generate,
         "simple-error-model")
--- a/regression/tests/test-simple-global-routing.py	Thu Nov 20 16:48:21 2008 -0800
+++ b/regression/tests/test-simple-global-routing.py	Thu Nov 20 19:44:19 2008 -0800
@@ -6,8 +6,8 @@
 import shutil
 import tracediff
 
-def run(verbose, generate, refDirName):
+def run(verbose, generate):
     """Execute a test."""
 
-    return tracediff.run_test(verbose, generate, refDirName,
+    return tracediff.run_test(verbose, generate,
         "simple-global-routing")
--- a/regression/tests/test-simple-point-to-point-olsr.py	Thu Nov 20 16:48:21 2008 -0800
+++ b/regression/tests/test-simple-point-to-point-olsr.py	Thu Nov 20 19:44:19 2008 -0800
@@ -6,8 +6,8 @@
 import shutil
 import tracediff
 
-def run(verbose, generate, refDirName):
+def run(verbose, generate):
     """Execute a test."""
 
-    return tracediff.run_test(verbose, generate, refDirName,
+    return tracediff.run_test(verbose, generate,
         "simple-point-to-point-olsr")
--- a/regression/tests/test-tcp-large-transfer.py	Thu Nov 20 16:48:21 2008 -0800
+++ b/regression/tests/test-tcp-large-transfer.py	Thu Nov 20 19:44:19 2008 -0800
@@ -6,8 +6,8 @@
 import shutil
 import tracediff
 
-def run(verbose, generate, refDirName):
+def run(verbose, generate):
     """Execute a test."""
 
-    return tracediff.run_test(verbose, generate, refDirName,
+    return tracediff.run_test(verbose, generate,
         "tcp-large-transfer")
--- a/regression/tests/test-tcp-nsc-lfn.py	Thu Nov 20 16:48:21 2008 -0800
+++ b/regression/tests/test-tcp-nsc-lfn.py	Thu Nov 20 19:44:19 2008 -0800
@@ -9,7 +9,7 @@
 import platform
 
 
-def run(verbose, generate, refDirName):
+def run(verbose, generate):
     """Run a Network Simulation Cradle test involving two TCP streams."""
 
     if not tracediff.env['ENABLE_NSC']:
@@ -29,5 +29,5 @@
         # string might not be the best idea?
         raise "Unknown architecture, not 64 or 32 bit?"
 
-    return tracediff.run_test(verbose, generate, refDirName,
+    return tracediff.run_test(verbose, generate,
         testName, arguments=arguments, refTestName=traceDirName)
--- a/regression/tests/test-udp-echo.py	Thu Nov 20 16:48:21 2008 -0800
+++ b/regression/tests/test-udp-echo.py	Thu Nov 20 19:44:19 2008 -0800
@@ -6,7 +6,7 @@
 import shutil
 import tracediff
 
-def run(verbose, generate, refDirName):
+def run(verbose, generate):
     """Execute a test."""
     #print tracediff.env
-    return tracediff.run_test(verbose, generate, refDirName, "udp-echo")
+    return tracediff.run_test(verbose, generate, "udp-echo")
--- a/regression/tests/test-wifi-wired-bridging.py	Thu Nov 20 16:48:21 2008 -0800
+++ b/regression/tests/test-wifi-wired-bridging.py	Thu Nov 20 19:44:19 2008 -0800
@@ -6,7 +6,7 @@
 import shutil
 import tracediff
 
-def run(verbose, generate, refDirName):
+def run(verbose, generate):
     """Execute a test."""
 
-    return tracediff.run_test(verbose, generate, refDirName, "wifi-wired-bridging", ["--SendIp=0"])
+    return tracediff.run_test(verbose, generate, "wifi-wired-bridging", ["--SendIp=0"])
--- a/src/core/object.cc	Thu Nov 20 16:48:21 2008 -0800
+++ b/src/core/object.cc	Thu Nov 20 19:44:19 2008 -0800
@@ -111,10 +111,11 @@
 {
   NS_ASSERT (CheckLoose ());
   const Object *currentObject = this;
+  TypeId objectTid = Object::GetTypeId ();
   do {
     NS_ASSERT (currentObject != 0);
     TypeId cur = currentObject->GetInstanceTypeId ();
-    while (cur != tid && cur != Object::GetTypeId ())
+    while (cur != tid && cur != objectTid)
       {
         cur = cur.GetParent ();
       }
--- a/src/core/type-id.cc	Thu Nov 20 16:48:21 2008 -0800
+++ b/src/core/type-id.cc	Thu Nov 20 19:44:19 2008 -0800
@@ -365,10 +365,6 @@
  *         The TypeId class
  *********************************************************************/
 
-TypeId::TypeId ()
-  : m_tid (0)
-{}
-
 TypeId::TypeId (const char *name)
 {
   uint16_t uid = Singleton<IidManager>::Get ()->AllocateUid (name);
@@ -380,8 +376,6 @@
 TypeId::TypeId (uint16_t tid)
   : m_tid (tid)
 {}
-TypeId::~TypeId ()
-{}
 TypeId 
 TypeId::LookupByName (std::string name)
 {
@@ -692,16 +686,6 @@
 
 ATTRIBUTE_HELPER_CPP (TypeId);
 
-bool operator == (TypeId a, TypeId b)
-{
-  return a.m_tid == b.m_tid;
-}
-
-bool operator != (TypeId a, TypeId b)
-{
-  return a.m_tid != b.m_tid;
-}
-
 bool operator < (TypeId a, TypeId b)
 {
   return a.m_tid < b.m_tid;
--- a/src/core/type-id.h	Thu Nov 20 16:48:21 2008 -0800
+++ b/src/core/type-id.h	Thu Nov 20 19:44:19 2008 -0800
@@ -351,8 +351,10 @@
   void SetUid (uint16_t tid);
 
   // construct an invalid TypeId.
-  TypeId ();
-  ~TypeId ();
+  inline TypeId ();
+  inline TypeId (const TypeId &o);
+  inline TypeId &operator = (const TypeId &o);
+  inline ~TypeId ();
 
 private:
   friend class AttributeList;
@@ -377,8 +379,8 @@
 
 std::ostream & operator << (std::ostream &os, TypeId tid);
 std::istream & operator >> (std::istream &is, TypeId &tid);
-bool operator == (TypeId a, TypeId b);
-bool operator != (TypeId a, TypeId b);
+inline bool operator == (TypeId a, TypeId b);
+inline bool operator != (TypeId a, TypeId b);
 bool operator <  (TypeId a, TypeId b);
 
 /**
@@ -393,6 +395,28 @@
 
 namespace ns3 {
 
+TypeId::TypeId ()
+  : m_tid (0) {}
+TypeId::TypeId (const TypeId &o)
+  : m_tid (o.m_tid) {}
+TypeId &TypeId::operator = (const TypeId &o)
+{
+  m_tid = o.m_tid;
+  return *this;
+}
+TypeId::~TypeId ()
+{}
+inline bool operator == (TypeId a, TypeId b)
+{
+  return a.m_tid == b.m_tid;
+}
+
+inline bool operator != (TypeId a, TypeId b)
+{
+  return a.m_tid != b.m_tid;
+}
+
+
 /*************************************************************************
  *   The TypeId implementation which depends on templates
  *************************************************************************/
--- a/src/internet-stack/ipv4-l3-protocol.cc	Thu Nov 20 16:48:21 2008 -0800
+++ b/src/internet-stack/ipv4-l3-protocol.cc	Thu Nov 20 19:44:19 2008 -0800
@@ -669,8 +669,15 @@
           else
             {
               NS_ASSERT (packetCopy->GetSize () <= outInterface->GetMtu ());
-              m_txTrace (packetCopy, ifaceIndex);
-              outInterface->Send (packetCopy, destination);
+              if (outInterface->IsUp ())
+                {
+                  m_txTrace (packetCopy, ifaceIndex);
+                  outInterface->Send (packetCopy, destination);
+                }
+              else
+                {
+                  m_dropTrace (packetCopy);
+                }
             }
         }
     }
@@ -732,13 +739,31 @@
       m_txTrace (packet, route.GetInterface ());
       if (route.IsGateway ()) 
         {
-          NS_LOG_LOGIC ("Send to gateway " << route.GetGateway ());
-          outInterface->Send (packet, route.GetGateway ());
+          if (outInterface->IsUp ())
+            {
+              NS_LOG_LOGIC ("Send to gateway " << route.GetGateway ());
+              m_txTrace (packet, route.GetInterface ());
+              outInterface->Send (packet, route.GetGateway ());
+            }
+          else
+            {
+              NS_LOG_LOGIC ("Dropping-- outgoing interface is down: " << route.GetGateway ());
+              m_dropTrace (packet);
+            }
         } 
       else 
         {
-          NS_LOG_LOGIC ("Send to destination " << ipHeader.GetDestination ());
-          outInterface->Send (packet, ipHeader.GetDestination ());
+          if (outInterface->IsUp ())
+            {
+              NS_LOG_LOGIC ("Send to destination " << ipHeader.GetDestination ());
+              m_txTrace (packet, route.GetInterface ());
+              outInterface->Send (packet, ipHeader.GetDestination ());
+            }
+          else
+            {
+              NS_LOG_LOGIC ("Dropping-- outgoing interface is down: " << route.GetGateway ());
+              m_dropTrace (packet);
+            }
         }
     }
 }
--- a/src/internet-stack/wscript	Thu Nov 20 16:48:21 2008 -0800
+++ b/src/internet-stack/wscript	Thu Nov 20 19:44:19 2008 -0800
@@ -7,7 +7,7 @@
 # Mercurial repository of the network simulation cradle
 NSC_REPO = "https://secure.wand.net.nz/mercurial/nsc"
 NSC_RELEASE_URL = "http://research.wand.net.nz/software/nsc"
-NSC_RELEASE_NAME = "nsc-0.4.0"
+NSC_RELEASE_NAME = "nsc-0.5.0"
 
 # directory that contains network simulation cradle source
 # note, this path is relative to the project root
--- a/wscript	Thu Nov 20 16:48:21 2008 -0800
+++ b/wscript	Thu Nov 20 19:44:19 2008 -0800
@@ -143,6 +143,10 @@
                    help=('Use sudo to setup suid bits on ns3 executables.'),
                    dest='enable_sudo', action='store_true',
                    default=False)
+    opt.add_option('--with-regression-traces',
+                   help=('Path to the regression reference traces directory'),
+                   default=None,
+                   dest='regression_traces', type="string")
 
     # options provided in a script in a subdirectory named "src"
     opt.sub_options('src')
@@ -193,6 +197,11 @@
 
     variant_env['INCLUDEDIR'] = os.path.join(variant_env['PREFIX'], 'include')
 
+    if Params.g_options.regression_traces is not None:
+        variant_env['REGRESSION_TRACES'] = os.path.join("..", Params.g_options.regression_traces)
+    else:
+        variant_env['REGRESSION_TRACES'] = None
+
     if Params.g_options.enable_gcov:
         variant_name += '-gcov'
         variant_env.append_value('CCFLAGS', '-fprofile-arcs')
@@ -463,10 +472,14 @@
     if Params.g_options.regression or Params.g_options.regression_generate:
         if not env['DIFF']:
             Params.fatal("Cannot run regression tests: the 'diff' program is not installed.")
+
         _dir = os.getcwd()
         os.chdir("regression")
+        regression_traces = env['REGRESSION_TRACES']
+        if not regression_traces:
+            regression_traces = None
         try:
-            regression.run_regression()
+            regression.run_regression(regression_traces)
         finally:
             os.chdir(_dir)